Upload
vunhi
View
228
Download
0
Embed Size (px)
Citation preview
Sumário
• Robô (kit) Lego NXT
• Linguagem NXC– Estrutura geral de um programa
– Estruturas de controle de fluxo
Programando Robôs Lego NXT usando NXC
– Estruturas de controle de fluxo
– Motores
– Sensores
– Exemplos de robôs executando programas escritos em NXC
• Bibliografia
Robô (kit) Lego NXT
• No dia 4 de janeiro de 2006, na feira ConsumerElectronics Show em Las Vegas, a LEGOapresentou ao público a nova geraçãodo Mindstorms. Lançada comercialmente emagosto desse ano.
Programando Robôs Lego NXT usando NXC
agosto desse ano.
• O Mindstorms NXT trata-se de um kit de robóticadirecionado para o público pré-adolescente,composto por sensores e atuadores, que visafomentar o estudo/interesse por ciências eengenharia.
Robô (kit) Lego NXT
• Sensores e atuadores presentes no kit LegoMindStorms NTX em sua primeira versão.
Programando Robôs Lego NXT usando NXC
Robô (kit) Lego NXT
• Sensores e atuadores presentes no kit LegoMindStorms NTX em sua segunda versão.
Programando Robôs Lego NXT usando NXC
12
2
3
4
5
Robô (kit) Lego NXT• O kit permite a construção de inúmeros robôs
com configurações diferentes.
• Exemplos:
Programando Robôs Lego NXT usando NXC
Robô (kit) Lego NXTComo pode ser indicado para crianças?
• Apresentando tutoriais de como montarconfigurações de robôs.
Programando Robôs Lego NXT usando NXC
• Utilizando o NXT-G que é uma linguagem gráficasimilar ao National Instruments LabVIEW, quevem junto com o conjunto vendido.
Vamos explorar o aplicativo/ambiente...
Linguagem NXC
• Visando ampliar a capacidade de explorar aarquitetura disponibilizada pelo MindstormsNXT foi proposta uma linguagem maisrobusta/flexível que a NXT-G.
Programando Robôs Lego NXT usando NXC
robusta/flexível que a NXT-G.
• Esta linguagem foi denominada NXC.
• NXC é uma linguagem de programaçãoinventada por John Hansen que foiespecialmente designada para os robôs Lego.
Linguagem NXC
• Visando facilitar a programação em NXC, foicriado o Bricx Command Center (BricxCC –Centro de Comando Bricx).
• BricxCC dá suporte a:
Programando Robôs Lego NXT usando NXC
• BricxCC dá suporte a:
– escrita de programas;
– download de programas para o robô;
– navegar na memória flash do NXT;
– e muito mais.
Linguagem NXC
• O BricxCC pode ser visualizado como umambiente de desenvolvimento integrado (IDE -Integrated Development Environment).
Programando Robôs Lego NXT usando NXC
• É possível fazer o download gratuito doBricxCC no link:
http://bricxcc.sourceforge.net/
Linguagem NXC
• BricxCC roda em PCs com Windows (95, 98,ME, NT, 2000, XP, Vista).
• A linguagem NXC também pode ser utilizadaem outras plataformas.
Programando Robôs Lego NXT usando NXC
em outras plataformas.
• Sendo possível fazer o download docompilador no link:
http://bricxcc.sourceforge.net/nxc/
Linguagem NXC
• A estrutura básica de um programa em NXC é:
task main()
{
Programando Robôs Lego NXT usando NXC
{
…
}
Linguagem NXC
• Seu tipos são:– bool– byte– char– int– short– long
• Exemplos de declarações de variáveis
task main(){
int x;bool y, z;long a=1,b;
Programando Robôs Lego NXT usando NXC
– long– unsigned– float– mutex– string– Structures– Arrays
long a=1,b;float f=1.15, g;int data[10];bool flags[] = {true, true, false, false};string msg = "hello world";…
}
Linguagem NXC
• Estruturas de controle de fluxo:
– if else• Sintaxe exatamente igual a da linguagem C
– while
Programando Robôs Lego NXT usando NXC
– while• Sintaxe exatamente igual a da linguagem C
– do while• Sintaxe exatamente igual a da linguagem C
– for• Sintaxe exatamente igual a da linguagem C
Linguagem NXC
• Acionamento dos motores (atuadores)
Os motores são conectados às saídas do console NXT.
Estas saídas estão associadas aos identificadores OUT_A,OUT_B e OUT_C.
Programando Robôs Lego NXT usando NXC
OUT_B e OUT_C.
Três funções básicas (existem outras) estão associadas àmanipulação dos motores:
– OnFwd (saída(s), velocidade);
– OnRev (saída(s), velocidade);
– Off (saída(s)).
Linguagem NXC
• Acionamento dos motores (atuadores)
Exemplo:task main(){
OnFwd(OUT_A, 75); //75% da velocidade máxima
Programando Robôs Lego NXT usando NXC
OnFwd(OUT_A, 75); //75% da velocidade máximaOnFwd(OUT_C, 75);Wait(4000); //valor em milissegundosOnRev(OUT_AC, 75);Wait(4000);Off(OUT_AC);
}
Linguagem NXC
• Sensores
Podem ser associados aos periféricos de entrada.
Os sensores do NXT permitem que o robô reaja aestímulos externos.
Programando Robôs Lego NXT usando NXC
estímulos externos.
Começaremos nossos estudos pelo sensor de sensorde toque.
Para uma melhor compreensão vamos observar umexemplo de utilização do sensor de toque (considerandoque este está conectado à entrada 1 do NXT.
Linguagem NXC
//Exemplo: movimentação dos motores para
// quando o sensor de toque é pressionado
task main()
{
SetSensor(IN_1, SENSOR_TOUCH);
Programando Robôs Lego NXT usando NXC
SetSensor(IN_1, SENSOR_TOUCH);
OnFwd(OUT_AC, 75);
until (SENSOR_1 == 1);
Off(OUT_AC);
}
Linguagem NXC
//Exemplo: sensor de toque utilizado como um para-choquetask main(){
SetSensorTouch(IN_1);OnFwd(OUT_AC, 75);while (true){
Programando Robôs Lego NXT usando NXC
{if (SENSOR_1 == 1){
OnRev(OUT_AC, 75); Wait(300);OnFwd(OUT_A, 75); Wait(300);OnFwd(OUT_AC, 75);
}}
}
Linguagem NXC
Além do sensor de toque, você também recebe um sensorde luz, um sensor de som e um sensor digital ultrassônico como sistema Mindstorms NXT (em sua primeira versão).
Os sensores que acompanham o kit NXT 2.0 são: o de toque(duas unidades), o de ultrassom e o de cor/luz .
Programando Robôs Lego NXT usando NXC
Sensor de luzO sensor de luz pode ser acionado para emitir luz ou não,
então você pode mensurar a quantidade de luz refletida ou deluz ambiente em uma direção particular.
Medir a luz refletida é particularmente útil quando, porexemplo, se deseja fazer o robô seguir uma linha no chão.
Linguagem NXC
Isso é o que vamos fazer no próximoexemplo, onde conectaremos o sensor de luz àentrada 3.
Para usar o sensor de cor (presente no kit NXT2.0) no lugar do sensor de luz, use a opção:
Programando Robôs Lego NXT usando NXC
2.0) no lugar do sensor de luz, use a opção:
SetSensor(IN_3, SENSOR_COLORRED);
Mais informações em:
http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/group___sensor_type_modes.html
Linguagem NXC#define THRESHOLD 40task main(){
SetSensorLight(IN_3); //ou SetSensor(IN_3, SENSOR_COLORRED);OnFwd(OUT_AC, 75);while (true){
if (Sensor(IN_3) > THRESHOLD)
Programando Robôs Lego NXT usando NXC
if (Sensor(IN_3) > THRESHOLD){
OnRev(OUT_C, 75);Wait(100);until(Sensor(IN_3) <= THRESHOLD);OnFwd(OUT_AC, 75);
}}
}
Linguagem NXC
O exemplo anterior representa uma implementaçãobem simples de um robô seguidor de linha.
Para um robô com a configuração abaixo:
Programando Robôs Lego NXT usando NXC
Onde consideraremos que o motor ligado na saída Cmove a esteira mais abaixo na imagem.
Neste caso, o programa apresentado serve apenaspara seguir trilhas no sentido horário.
Linguagem NXCNo exemplo anterior utilizamos o sensor para emitir
luz e verificar a intensidade da luz refletida.
Para ler a intensidade da luz ambiente com o LEDdesligado, configure o sensor da seguinte forma:
Para o sensor de cor (kit NXT 2.0)
SetSensorType(IN_3, IN_TYPE_COLORNONE);
Programando Robôs Lego NXT usando NXC
SetSensorType(IN_3, IN_TYPE_COLORNONE);
SetSensorMode(IN_3, IN_MODE_PCTFULLSCALE);
ResetSensor(IN_3);
Para o sensor de luz (kit NXT 1.0)
SetSensorType(IN_3, IN_TYPE_LIGHT_INACTIVE);
SetSensorMode(IN_3, IN_MODE_PCTFULLSCALE);
ResetSensor(IN_3);
Linguagem NXCSensor de som (não disponível na versão 2.0 do NXT)
Usando o sensor de som você pode transformar seuconjunto NXT em um dispositivo ativado por som.
Exemplo:#define THRESHOLD 40#define MIC SENSOR_2task main() {
OBS.1: Note que o SENSOR_2 não é apenas um nome, mas um macro que retorna o valor do som
Programando Robôs Lego NXT usando NXC
task main() {SetSensorSound(IN_2);while(true){
until(MIC > THRESHOLD);OnFwd(OUT_AC, 75);Wait(300);until(MIC > THRESHOLD);Off(OUT_AC);Wait(300);
}}
que retorna o valor do som lido pelo sensor.
OBS.2: Os sensores de luz e de som retornam uma leitura de 0 a 100.
Linguagem NXC
Sensor Ultrassônico
O sensor ultrassônico funciona como um sonar:falando grosseiramente, ele envia uma rajada de ondasultrassônicas e mede o tempo necessário para que asondas sejam refletidas de volta pelo objeto em vista.
Programando Robôs Lego NXT usando NXC
ondas sejam refletidas de volta pelo objeto em vista.
Com esse novo sensor você pode fazer um robôenxergar e evitar um obstáculo antes denecessariamente atingi-lo (como no caso de um sensorde toque).
Linguagem NXC//Exemplo da utilização do sonar#define NEAR 15 //cmtask main(){
SetSensorLowspeed(IN_4);while(true){
OnFwd(OUT_AC,50);
Programando Robôs Lego NXT usando NXC
OnFwd(OUT_AC,50);while(SensorUS(IN_4)>NEAR); //ou untilOff(OUT_AC);OnRev(OUT_C,100);Wait(800);
}}
Linguagem NXC
Mais sobre motores
Existe um número de comandos adicionais paramotor que podem ser usados para controlar osmotores mais precisamente.
Programando Robôs Lego NXT usando NXC
motores mais precisamente.
Linguagem NXC
• Parando suavemente
Quando você usa o comando Off(), o servo-motorpara imediatamente, freando o eixo e mantendo aposição.
Programando Robôs Lego NXT usando NXC
Também é possível parar os motores de um modomais suave, não usando os freios.
Para isso usa-se o comando Float() ou Coast() (não hádistinção), que simplesmente corta a força do motor.
Linguagem NXC
task main() //exemplo
{
OnFwd(OUT_AC, 75);
Wait(500);
Off(OUT_AC);
Programando Robôs Lego NXT usando NXC
Off(OUT_AC);
Wait(1000);
OnFwd(OUT_AC, 75);
Wait(500);
Float(OUT_AC);
}
Linguagem NXC
• Comandos avançados
Os comandos OnFwd() e OnRev()são as mais simplesrotinas para se mover motores.
Os servo-motores do NXT possuem um codificador
Programando Robôs Lego NXT usando NXC
Os servo-motores do NXT possuem um codificadorinterno (encoder) que permite que você controleprecisamente a posição do eixo e sua velocidade.
O Firmware do NXT implementa um controlador PIDem malha fechada para controlar a posição dosmotores e suas velocidades usando a informação dosencoders como realimentação (feedback).
Linguagem NXC
• Comandos avançados
Por exemplo, se você quer que seu robô se movaperfeitamente em linha reta, você pode usar umrecurso de sincronização que faz com que doismotores selecionados rodem juntos e esperem um pelo
Programando Robôs Lego NXT usando NXC
motores selecionados rodem juntos e esperem um pelooutro caso um deles fique lento ou bloqueado
Existem muitos comandos para liberar todo opotencial dos servo-motores, mas isto será assunto deum outro encontro...
Bibliografiahttp://pt.wikipedia.org/wiki/LEGO_Mindstorms_NXT, link visitado em 08 denovembro de 2014.
http://bricxcc.sourceforge.net/, link visitado em 08 de novembro de 2014.
Apostila Programming LEGO NXT Robots using NXC (beta 30 or higher)Autor: Danielle BenedettelliRevisão: John Hansen
Programando Robôs Lego NXT usando NXC
Revisão: John HansenVersão 2.2, 7 de junho de 2007.
Tradução: Rafael BermudesRevisão: Felipe Nascimento MartinsNER@ – Núcleo de Estudos em Robótica e Automação –http://nera.sr.ifes.edu.brIFES – Instituto Federal de Educação, Ciência e Tecnologia do Espírito SantoEdição: Janeiro de 2012.