Programação Lego NXT
NXT-G 2.0
Introdução à Eng. Elétrica
Prof. Fernando Passold
Versão	de	2016/1
Detalhes da Linguagem
A nova versão da linguagem gráfica NXT-G (2.0)
suporta cálculos em “ponto-flutuante” (com
casas decima...
Para documentar estrutura física realizada
Lego Digital Designer: http://ldd.lego.com/en-
us/ 

Começando
a trabalhar
1) Comandos em malha-
aberta (sem realimentação,
sem feedback)
NXT-G
Programação
nativa
Programa...
Def.: Seqüência lógica de
passos que permite coletar
dados de entrada, processar
esta informação de entrada e
...
Programando...
Exemplo Válido?

Programador: SPOT, ande
para frente e pare.
[SPOT: apenas fica parado]

Que aconteceu?

Se ...
Programando (2)...
Exemplo Válido:

Programador: SPOT, ande
para frente 5 segundos e
pare.
[SPOT: se move para frente
dura...
Programando (3)...
Conclusões:

O programa deve ser
bastante específico;

Infelizmente o NXT não
entende ainda comandos de
...
Programando (3)...
Conclusões:

O programa deve ser
bastante específico;

Infelizmente o NXT não
entende ainda comandos de
...
NXT-G
Linguagem
“nativa” (de fábrica)
do NXT.

Baseada no
LabView;

“G” significa gráfica;

Ambiente de
programação
instalad...
NXT-G
Linguagem
“nativa” (de fábrica)
do NXT.

Baseada no
LabView;

“G” significa gráfica;

Ambiente de
programação
instalad...
NXT-G
Linguagem
“nativa” (de fábrica)
do NXT.

Baseada no
LabView;

“G” significa gráfica;

Ambiente de
programação
instalad...
NXT-G
Linguagem
“nativa” (de fábrica)
do NXT.

Baseada no
LabView;

“G” significa gráfica;

Ambiente de
programação
instalad...
NXT-G
Linguagem
“nativa” (de fábrica)
do NXT.

Baseada no
LabView;

“G” significa gráfica;

Ambiente de
programação
instalad...
NXT-G
Linguagem
“nativa” (de fábrica)
do NXT.

Baseada no
LabView;

“G” significa gráfica;

Ambiente de
programação
instalad...
NXT-G
Linguagem
“nativa” (de fábrica)
do NXT.

Baseada no
LabView;

“G” significa gráfica;

Ambiente de
programação
instalad...
NXT-G: JANELA INICIAL
Área de Trabalho:Work Area
Paletas de Blocos de Programação
Paleta
Comum:
contêm os
blocos mais
usados.
Paleta
Completa:
contêm vários
blocos de
programação
Paletas de Blocos de Programação
Custom Palette:
contêm vários blocos
extras baixados e
ouotros feitos pelo
usuário
Paletas de Blocos de Programação
Painel de
Configuração /
Configuration
Panel: onde se
ajustam os blocos
de programação
“Controller”:
permite transferir
programa para o NXT.
Também permite
modificar ajustes
(setup) do NXT.
“NXT Window”:
Janela “pop-up” mostra
informações à respeito
do NXT e permite
ajustes de comunicação.
“NXT Window”:
Janela “pop-up” mostra
informações à respeito
do NXT e permite
ajustes de comunicação.
“Help & Navigation”:
permite obter ajuda e
navegar pelo programa.
Blocos
M
ove
Record/PlaySound
D
isplay
W
ait(for..)Loop
Sw
itch
(If..)
Blocos
M
otor
Sound
D
isplay
Send
M
essageC
olorLam
p
Blocos
Touch
SensorSound
Sensor
LightSensorU
ltrasonic
Sensor
N
X
T
Buttons
Rotation
Sensor
Tim
er
Receive
M
essage
C
olor...
Blocos
W
ait(for...)Loop
Sw
itch
(If..)
Stop
Blocos
Logic
M
ath
C
om
pare
Range
(faixa)Random
(aleatório)
Variable
(variáveis)
C
onstant(constantes)
Blocos
N
um
bertoText(display/m
essages)
Text
KeepAlive
C
alibrate
Variable
(variáveis)
C
onstant(constantes)
FileAccess
Criando um novo programa:
File >> New
Criando um novo programa:
File >> New
CRIANDO UM
PROGRAMA
1.Digitar na caixa de texto o nome
do programa e cliclar no botão
“Go”;
2.Arrastar blocos para a área ...
4.Transferindo o programa para o NXT >> Download:
Common Blocks:
Move: 1) Estas letras no topo do bloco mostram que portas no
NXT serão controladas.

2) Este ícone mostra e...
Common Blocks:
Move: 1) Estas letras no topo do bloco mostram que portas no
NXT serão controladas.

2) Este ícone mostra e...
Common Blocks:
Move: 1) Estas letras no topo do bloco mostram que portas no
NXT serão controladas.

2) Este ícone mostra e...
Common Blocks:
Move: 1) Estas letras no topo do bloco mostram que portas no
NXT serão controladas.

2) Este ícone mostra e...
MOVE BLOCK:
Tipos de Conexões de
Dados...
• “Data Hubs”

• “Data wires types”
Tipos de Conexões de
Dados...
• “Data Hubs”

• “Data wires types”
Keep Alive Block
This block will keep the NXT from
entering sleep mode.Add this block if
your program needs to wait for lo...
Problemas
1. Criar programa que simplesmente aciona
os 2 motores com a mesma potência
(75%) durante 10 segundos;

2. Idem,...
Usando sensores
para...
Descobrir distância percorrida;

Ângulo de giro da roda;

Velocidade do motor;

etc...
URL: HTTP:/...
Distância percorrida por
roda...
• Percorrendo uma distância
exata (independente da
velocidade):
R
P
P = 2 ⇥ ⇡ ⇥ R
d = n ⇥...
Problema 3) QuadradoDados:

2 metros cada aresta;
PROBLEMAS...
Malha Aberta!!!
Falta de Sensor!
SOLUÇÃO:
FECHAR MALHA!
Uso de Sensor!
+ Sensores
Usando sensor de cor como sensor de luz...

Lendo informações de cor e índice de reflexão
luminosa - η% (0 ~ 100...
Como fechar uma
malha?
Algoritmos de controle:

Idéias?
Seguidor de Linha:
Idéias
1.Siga em frete infinitamente com potência a 50%;

2.Até que o sensor de luz leia valor > 50%;

3...
ROBÔ SEGUIDOR DE LINHA
Seguidor de Linha #1
Seguidor de Linha #1
Seguidor de Linha #1
Seguidor de Linha #1
1.Siga em frete infinitamente com potência a 50%;

2.Até que o sensor de luz leia valor > 50%;

3.Entã...
Seguidor de Linha #1
1.Siga em frete infinitamente com potência a 50%;

2.Até que o sensor de luz leia valor > 50%;

3.Entã...
Seguidor de Linha #1
1.Siga em frete infinitamente com potência a 50%;

2.Até que o sensor de luz leia valor > 50%;

3.Entã...
Seguidor de Linha #1
“ERRATA”:
Mudar bloco “WAIT” para Sensor >> Color Sensor !
Seguidor de Linha #1
“ERRATA”: Mudar bloco “WAIT” para Sensor >> Color Sensor !
Seguidor de Linha #1
1.Siga em frete infinitamente com potência a 50%;

2.Até que o sensor de luz leia valor > 50%;

3.Entã...
Seguidor de Linha #1
1.Siga em frete infinitamente com potência a 50%;

2.Até que o sensor de luz leia valor > 50%;

3.Entã...
Seguidor de Linha #1
1.Siga em frete infinitamente com potência a 50%;

2.Até que o sensor de luz leia valor > 50%;

3.Entã...
Seguidor de Linha #2
Seguidor de Linha #2
Seguidor de Linha #2
Dentro de um laço perpétuo, repetidamente se
chaveia o Sensor de Cor como Sensor de Luz,
testando se ...
Seguidor de Linha #2
IDÉIA:
Dentro de um laço perpétuo, repetidamente se chaveia o
Sensor de Cor como Sensor de Luz, testa...
Seguidor de Linha #2
OBSERVAÇÕES:
Dentro de um laço perpétuo, repetidamente se chaveia o
Sensor de Cor como Sensor de Luz,...
Seguidor de Linha #2
DETALHES:
Seguidor de Linha #2
DETALHES:
Seguidor de Linha #2
DETALHES:
Seguidor de Linha #2
DETALHES:
Seguidor de Linha #2
DETALHES:
Seguidor de Linha #2
DETALHES:
Seguidor de Linha #2
DETALHES:
Seguidor de Linha #2
DETALHES:
“LIGHTMETER”
“LightMeter” (1/4)
“LightMeter” (2/4)
“LightMeter” (3/4)
“LightMeter” (4/4)
Seguir de Linha:
Idéias 2: Controlador P
Idéia do Controlador Proporcional:

Estabelecer um laço de realimentação fechado,...
Base Teórica Controlador Proporcional
Seja a fita isolante (Pista) x
Índice reflexão (sensor de luz)
x
0
+1
-1
x = mede o de...
Base Teórica Controlador Proporcional
Seja a fita isolante (Pista) x
Índice reflexão (sensor de luz)
x
0
+1
-1
x = mede o de...
Base Teórica Controlador Proporcional
- O que ocorre quando o AGV não anda sobre a faixa?
Largura da fita isolante (pista)....
Seguidor de Linha:
Controlador Proporcional
Ajusta as variáveis
Power e Gain
(podem ser alterados)
90 100
Seguidor de Linha:
Controlador Proporcional
Ajusta as variáveis
Power e Gain
(podem ser alterados)
90 100
A lâmpada parece...
Seguidor de Linha:
Controlador Proporcional
Ajusta as variáveis
Power e Gain
(podem ser alterados).
90 100
A lâmpada parec...
Seguidor de Linha:
Controlador Proporcional
Ajusta as variáveis
Power e Gain
(podem ser alterados).
90 100
A lâmpada parec...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
LAÇO DE CALIBRAÇÃO - IDÉIA:
1. Criar um laço de repetição que só para q...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Leia sensor de Cor no modo
“Light Sensor” (valor de 0 ~
100 na porta “D...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Leia sensor de Cor no modo
“Light Sensor” (valor de 0 ~
100 na porta “D...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Se o valor Light for maior que Max, então: Max ← Light.
Continua→
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Se o valor Light for maior que Max, então: Max ← Light.
Continua→
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Continua→
Depois da Calibração →Calcular faixa (Range) e valor médio (M...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Continua→
Depois da Calibração →Reposicionando o Robô no lado direito d...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Continua→
Depois da Calibração →Reposicionando o Robô no lado direito d...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Continua→
Depois da Calibração →Reposicionando o Robô no lado direito d...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Continua→
Seguindo Linha → Laço de Controle Proporcional - Parte 1/2
Ob...
B
CB
Continua→
Seguindo Linha → Laço de Controle Proporcional - Parte 1/2
Obtenha uma leitura do Sensor de Cor no
modo “Li...
Seguidor de Linha:
Controlador Proporcional
B
C
CB
Fim.
Seguindo Linha → Laço de Controle Proporcional - Parte 2/2
Use o v...
Outros controladores +
sofisticados...
Controle PI --> exige noção de integral;

Controle PD --> exige noção de derivada;

...
PID
PID
Error
PID
PID Analógico:
PID Digital:
ControlTask+
y=lectura_sensor();+
e=r5y;+
//+Ley+de+control+
p0=Kp*(1+Kd/Ts);+
p1=Kp*(1+2*Kd/Ts5Ki*Ts);+
p2=(...
RTOS	for	Lego	NXT:
NxtOSEK	

nxtOSEK	[	h6p://lejos-osek.sourceforge.net/	]

2007-2008	Takashi	Chikamasa

nxtOSEK/JSP

ANSI...
RTOS	for	Lego	NXT:
NxtOSEK	

nxtOSEK	[	h6p://lejos-osek.sourceforge.net/	]

2007-2008	Takashi	Chikamasa

nxtOSEK/JSP

ANSI...
OUTRAS IDÉIAS DE ESTRUTURAS...
OUTRAS IDÉIAS DE ESTRUTURAS...
OUTRAS IDÉIAS DE ESTRUTURAS...
OUTRAS IDÉIAS DE ESTRUTURAS...
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Próximos SlideShares
Carregando em…5
×

Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)

5.264 visualizações

Publicada em

Introdução à programação de kits Lego NXT usando linguagem gráfica nativa ou NXT-G. Noções de controle automático: malha aberta x malha fechada. Programando Seguidor de Linha usando Sensor de Cor, inicialmente por comparação (movimento bastante oscilatório), terminando com controlador Proporcional (movimento suave, inclui auto-calibração). Noção de controlador industrial PID (Proporcional - Integrativo - Derivativo). Outras sugestões de montagem.
Video (dos slides) em: http://youtu.be/FzGMM5R8ZPg

Publicada em: Educação
1 comentário
7 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
5.264
No SlideShare
0
A partir de incorporações
0
Número de incorporações
42
Ações
Compartilhamentos
0
Downloads
354
Comentários
1
Gostaram
7
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)

  1. 1. Programação Lego NXT NXT-G 2.0 Introdução à Eng. Elétrica Prof. Fernando Passold Versão de 2016/1
  2. 2. Detalhes da Linguagem A nova versão da linguagem gráfica NXT-G (2.0) suporta cálculos em “ponto-flutuante” (com casas decimais)(float). A versão anterior só permitia realizar cálculos com números inteiros (int). Existem outras linguagens...
  3. 3. Para documentar estrutura física realizada Lego Digital Designer: http://ldd.lego.com/en- us/ 

  4. 4. Começando a trabalhar 1) Comandos em malha- aberta (sem realimentação, sem feedback)
  5. 5. NXT-G Programação nativa
  6. 6. Programa... Def.: Seqüência lógica de passos que permite coletar dados de entrada, processar esta informação de entrada e gerar uma saída específica conforme desejado. Ex.: Programa para resolver equação do 2o-grau:
 Dados Entrada: a, b e c. Processamento:
 
 
 
 
 Saída: x1 e x2.
 ax2 + bx + c = 0 = b2 4ac x = b ± p 2a
  7. 7. Programando... Exemplo Válido? Programador: SPOT, ande para frente e pare. [SPOT: apenas fica parado] Que aconteceu?
 Se alguém pedisse que você “ande um pouco e pare”, quão longe você iria? Quando você iria parar? Máquinas: indicar com precisão o que deve ser
  8. 8. Programando (2)... Exemplo Válido: Programador: SPOT, ande para frente 5 segundos e pare. [SPOT: se move para frente durante 5 segundos e para.] Programador: SPOT, gire 180 graus e então ande até meus pés.
 
 [SPOT: ?]
 1o-caso: note são algumas instruções: andar para frente, esperar os 5 segundos, parar.
 (São diferentes, simples e pequenos programas intercalados). 2o-caso: Girar 180o no sentido horário ou anti- horário? Outro problema: “pés”?
  9. 9. Programando (3)... Conclusões: O programa deve ser bastante específico; Infelizmente o NXT não entende ainda comandos de voz! Necessidade de usar alguma linguagem de programação.
  10. 10. Programando (3)... Conclusões: O programa deve ser bastante específico; Infelizmente o NXT não entende ainda comandos de voz! Necessidade de usar alguma linguagem de programação. 1. NXT-G 2. C# with Microsoft Robotics Developer Studio 3. BricxCC, Next Byte Codes, Not eXactly C 4. Robolab (RCX) 5. RoboMind 6. Enchanting 7. ROBOTC (comercial) 8. NXTGCC 9. leJOS NXT (Java) 10.nxtOSEK (tempo-real, Matlab) 11.ICON 12.MATLAB and Simulink 13.Lua 14.Ada 15.URBI 16.FLL NXT Navigation 17.ruby-nxt 18.Robotics.NXT 19.LibNXT 20.PyNXC 21.NXT-Python 22.LEGO Mindstorms EV3 Software 23.Physical Etoys 24.?
  11. 11. NXT-G Linguagem “nativa” (de fábrica) do NXT. Baseada no LabView; “G” significa gráfica; Ambiente de programação instalado em Windows ou Mac;
  12. 12. NXT-G Linguagem “nativa” (de fábrica) do NXT. Baseada no LabView; “G” significa gráfica; Ambiente de programação instalado em Windows ou Mac;
  13. 13. NXT-G Linguagem “nativa” (de fábrica) do NXT. Baseada no LabView; “G” significa gráfica; Ambiente de programação instalado em Windows ou Mac;
  14. 14. NXT-G Linguagem “nativa” (de fábrica) do NXT. Baseada no LabView; “G” significa gráfica; Ambiente de programação instalado em Windows ou Mac;
  15. 15. NXT-G Linguagem “nativa” (de fábrica) do NXT. Baseada no LabView; “G” significa gráfica; Ambiente de programação instalado em Windows ou Mac;
  16. 16. NXT-G Linguagem “nativa” (de fábrica) do NXT. Baseada no LabView; “G” significa gráfica; Ambiente de programação instalado em Windows ou Mac;
  17. 17. NXT-G Linguagem “nativa” (de fábrica) do NXT. Baseada no LabView; “G” significa gráfica; Ambiente de programação instalado em Windows ou Mac;
  18. 18. NXT-G: JANELA INICIAL
  19. 19. Área de Trabalho:Work Area
  20. 20. Paletas de Blocos de Programação Paleta Comum: contêm os blocos mais usados.
  21. 21. Paleta Completa: contêm vários blocos de programação Paletas de Blocos de Programação
  22. 22. Custom Palette: contêm vários blocos extras baixados e ouotros feitos pelo usuário Paletas de Blocos de Programação
  23. 23. Painel de Configuração / Configuration Panel: onde se ajustam os blocos de programação
  24. 24. “Controller”: permite transferir programa para o NXT. Também permite modificar ajustes (setup) do NXT.
  25. 25. “NXT Window”: Janela “pop-up” mostra informações à respeito do NXT e permite ajustes de comunicação.
  26. 26. “NXT Window”: Janela “pop-up” mostra informações à respeito do NXT e permite ajustes de comunicação.
  27. 27. “Help & Navigation”: permite obter ajuda e navegar pelo programa.
  28. 28. Blocos M ove Record/PlaySound D isplay W ait(for..)Loop Sw itch (If..)
  29. 29. Blocos M otor Sound D isplay Send M essageC olorLam p
  30. 30. Blocos Touch SensorSound Sensor LightSensorU ltrasonic Sensor N X T Buttons Rotation Sensor Tim er Receive M essage C olorSensor
  31. 31. Blocos W ait(for...)Loop Sw itch (If..) Stop
  32. 32. Blocos Logic M ath C om pare Range (faixa)Random (aleatório) Variable (variáveis) C onstant(constantes)
  33. 33. Blocos N um bertoText(display/m essages) Text KeepAlive C alibrate Variable (variáveis) C onstant(constantes) FileAccess
  34. 34. Criando um novo programa: File >> New
  35. 35. Criando um novo programa: File >> New
  36. 36. CRIANDO UM PROGRAMA 1.Digitar na caixa de texto o nome do programa e cliclar no botão “Go”; 2.Arrastar blocos para a área de trabalho e ajustar blocos no Painel de Configuração. 3.Quando estiver pronto: 1. Ligar NXT; 2. Plugar cabo USB no NXT; 3. Plugar cabo USB no PC - Talvez apareça janela “Found New Hardware” (esperar para Windows terminar de instalar o driver).
  37. 37. 4.Transferindo o programa para o NXT >> Download:
  38. 38. Common Blocks: Move: 1) Estas letras no topo do bloco mostram que portas no NXT serão controladas. 2) Este ícone mostra em que direção o robô irá. 3) Este ícone mostra o nível de potência (PWM). 4) Mostra como foi ajustada a Propriedade “Duration”: se para ilimitada (unlimited), graus (degrees), rotations (rotações) ou segundos (seconds). Um ícone com imagem “-” significa a Propriedade de “Direction” foi ajustada para “stop”. 7) “Feedback boxes”: Conta quantos degraus ou rotações completas o motor realizou. O botão de Reset pode ser pressionado para zerar valores - útil para fazer o robô andar certa distância pré-especificada!
  39. 39. Common Blocks: Move: 1) Estas letras no topo do bloco mostram que portas no NXT serão controladas. 2) Este ícone mostra em que direção o robô irá. 3) Este ícone mostra o nível de potência (PWM). 4) Mostra como foi ajustada a Propriedade “Duration”: se para ilimitada (unlimited), graus (degrees), rotations (rotações) ou segundos (seconds). Um ícone com imagem “-” significa a Propriedade de “Direction” foi ajustada para “stop”. 7) “Feedback boxes”: Conta quantos degraus ou rotações completas o motor realizou. O botão de Reset pode ser pressionado para zerar valores - útil para fazer o robô andar certa distância pré-especificada! Obs: Brake x Coast Coast: para o motor gradualmente aproveitando-se da perda do momento. Quando setado desta forma, o motor requer maiores torques (e tempo) para começar a andar de novo. Brake: para o motor imediatamente! Resulta em maior precisão. Usa freio eletromagnético (bobinas do motor em curto) - gastando mais bateria.
  40. 40. Common Blocks: Move: 1) Estas letras no topo do bloco mostram que portas no NXT serão controladas. 2) Este ícone mostra em que direção o robô irá. 3) Este ícone mostra o nível de potência (PWM). 4) Mostra como foi ajustada a Propriedade “Duration”: se para ilimitada (unlimited), graus (degrees), rotations (rotações) ou segundos (seconds). Um ícone com imagem “-” significa a Propriedade de “Direction” foi ajustada para “stop”. 7) “Feedback boxes”: Conta quantos degraus ou rotações completas o motor realizou. O botão de Reset pode ser pressionado para zerar valores - útil para fazer o robô andar certa distância pré-especificada!
  41. 41. Common Blocks: Move: 1) Estas letras no topo do bloco mostram que portas no NXT serão controladas. 2) Este ícone mostra em que direção o robô irá. 3) Este ícone mostra o nível de potência (PWM). 4) Mostra como foi ajustada a Propriedade “Duration”: se para ilimitada (unlimited), graus (degrees), rotations (rotações) ou segundos (seconds). Um ícone com imagem “-” significa a Propriedade de “Direction” foi ajustada para “stop”. 7) “Feedback boxes”: Conta quantos degraus ou rotações completas o motor realizou. O botão de Reset pode ser pressionado para zerar valores - útil para fazer o robô andar certa distância pré-especificada! Obs: Duration Pode eliminar a necessidade de monitorar o número de graus (feedback boxes) que o motor realizou. Isto significa que ajustar esta caixa para qualquer coisa diferente de “Unlimited” fará o programa esperar até que o motor complete a duração especificada; somente então o programa continuará!
  42. 42. MOVE BLOCK:
  43. 43. Tipos de Conexões de Dados... • “Data Hubs” • “Data wires types”
  44. 44. Tipos de Conexões de Dados... • “Data Hubs” • “Data wires types”
  45. 45. Keep Alive Block This block will keep the NXT from entering sleep mode.Add this block if your program needs to wait for longer than the NXT’s set “sleep time” (that is configured using your NXT’s menus). Calibration Block Use this block to calibrate the minimum (0%) and maximum (100%) values detected by a sound or light sensor. Advanced Blocks: Referências Bibliográficas: 1. Kelly, James Floyd. Lego Mindstorms NXT-G Programming Guide, 2nd ed.,Apress/Springer Science +Business Media, p. 337, ISBN-13 (pbk): 978-1-4302-2976-6, 2010, URL: http://www.kirp.chtf.stuba.sk/ moodle/pluginfile.php/46109/mod_resource/content/1/Lego%20Mindstorms%20NXT-G %20programming%20guide.pdf (Março/2014). 2. Griffin,Terry. The Art of Lego Mindstorms NXT-G Programming, No Starch Press, p. 288, ISBN-13: 978-1-59327-218-0,August 26, 2010. URL: http://my.safaribooksonline.com/book/hobbies/ 9781593272180/4dot-motion/brake_comma_coast_comma_and_the_reset_mo (Março/2014). 3. Rosenberg, Neil. Workshop - NXT Programming For Beginners,Version 1.1, p. 102, Summer 2012, URL: Ref.: http://www.rocwnc.org/Beginning_NXT_Programming_Workshop.pdf (Março/2014).
  46. 46. Problemas 1. Criar programa que simplesmente aciona os 2 motores com a mesma potência (75%) durante 10 segundos; 2. Idem, mas agora os motores devem percorrer exatos 3 metros de distância independente da velocidade! 3. Fazer o robô percorrer um quadrado com 2 (ou 3) metros de arresta. Ele deve partir e conseguir voltar ao mesmo ponto de partida. Bloco “Move":
  47. 47. Usando sensores para... Descobrir distância percorrida; Ângulo de giro da roda; Velocidade do motor; etc... URL: HTTP://WWW.NXTPROGRAMS.COM/VOLUME_CALC/INDEX.HTML
  48. 48. Distância percorrida por roda... • Percorrendo uma distância exata (independente da velocidade): R P P = 2 ⇥ ⇡ ⇥ R d = n ⇥ 2 ⇥ ⇡ ⇥ R onde: R = raio da roda; P = perímetro da roda; n = número de voltas; ⇡ = 3.141592653589793 Detalhes: Roda do Lego NXT: 
 “@ LEGO Group 56x26” onde 56 = 56mm de diâmetro.
  49. 49. Problema 3) QuadradoDados: 2 metros cada aresta;
  50. 50. PROBLEMAS... Malha Aberta!!! Falta de Sensor!
  51. 51. SOLUÇÃO: FECHAR MALHA! Uso de Sensor!
  52. 52. + Sensores Usando sensor de cor como sensor de luz... Lendo informações de cor e índice de reflexão luminosa - η% (0 ~ 100%)
  53. 53. Como fechar uma malha? Algoritmos de controle: Idéias?
  54. 54. Seguidor de Linha: Idéias 1.Siga em frete infinitamente com potência a 50%; 2.Até que o sensor de luz leia valor > 50%; 3.Então pare a roda esquerda; 4.E mova a roda direita, 10 o para frente; 5.Repita. Este programa faz o robô andar para frente até que ele saia par fora da linha preta. Em seguida, ele move para a esquerda 10o. Ele assume que a linha é um círculo e que o robô está posicionado dentro do círculo, por isto irá percorrer o círculo em sentido anti-horário. Ver: https://www.youtube.com/watch?v=5-1N9x7obTM
  55. 55. ROBÔ SEGUIDOR DE LINHA
  56. 56. Seguidor de Linha #1
  57. 57. Seguidor de Linha #1
  58. 58. Seguidor de Linha #1
  59. 59. Seguidor de Linha #1 1.Siga em frete infinitamente com potência a 50%; 2.Até que o sensor de luz leia valor > 50%; 3.Então pare a roda esquerda; 4.E mova a roda direita, 10o para frente; 5.Repita.
  60. 60. Seguidor de Linha #1 1.Siga em frete infinitamente com potência a 50%; 2.Até que o sensor de luz leia valor > 50%; 3.Então pare a roda esquerda; 4.E mova a roda direita, 10o para frente; 5.Repita.
  61. 61. Seguidor de Linha #1 1.Siga em frete infinitamente com potência a 50%; 2.Até que o sensor de luz leia valor > 50%; 3.Então pare a roda esquerda; 4.E mova a roda direita, 10o para frente; 5.Repita.
  62. 62. Seguidor de Linha #1 “ERRATA”: Mudar bloco “WAIT” para Sensor >> Color Sensor !
  63. 63. Seguidor de Linha #1 “ERRATA”: Mudar bloco “WAIT” para Sensor >> Color Sensor !
  64. 64. Seguidor de Linha #1 1.Siga em frete infinitamente com potência a 50%; 2.Até que o sensor de luz leia valor > 50%; 3.Então pare a roda esquerda; 4.E mova a roda direita, 10o para frente; 5.Repita.
  65. 65. Seguidor de Linha #1 1.Siga em frete infinitamente com potência a 50%; 2.Até que o sensor de luz leia valor > 50%; 3.Então pare a roda esquerda; 4.E mova a roda direita, 10o para frente; 5.Repita.
  66. 66. Seguidor de Linha #1 1.Siga em frete infinitamente com potência a 50%; 2.Até que o sensor de luz leia valor > 50%; 3.Então pare a roda esquerda; 4.E mova a roda direita, 10o para frente; 5.Repita. Loop (Laço): Usa-se para repetir sequencias de código. Uma condição de parada deve ser ajustada: período de tempo transcorrido (elapsed time), número de repetições, sinal lógico ou de sensor. Ou o laço pode ser ajustado para ser perpétuo (forever).
  67. 67. Seguidor de Linha #2
  68. 68. Seguidor de Linha #2
  69. 69. Seguidor de Linha #2 Dentro de um laço perpétuo, repetidamente se chaveia o Sensor de Cor como Sensor de Luz, testando se o mesmo percebe um brilho maior que um certo limiar. O valor do limiar deve ser apropriadamente ajustado para ser o valor médio entre o mínimo valor que se espera ler no centro da linha e o máximo esperado no caso da leitura no chão usando as luzes coloridas. Se sugere o uso de um programa tipo “Medidor de Luz” (LightMeter) para descobrir estes valores. Usando o valor médio, o robô vai andar pelo lado direito da linha procurando manter uma leitura que fique entre o valor para metade da linha e metade para o chão. Se o valor lido é maior que o limiar então o robô está fora do lado direito da linha e assim gira para a esquerda para corrigir a rota (o motor C fica mais rápido que o B). Se o valor lido é menor que o limiar então o robô está mais próximo do centro da linha (e não próximo do lado direito da linha) e assim gira para a direita (motor B fica mais rápido que o B).
  70. 70. Seguidor de Linha #2 IDÉIA: Dentro de um laço perpétuo, repetidamente se chaveia o Sensor de Cor como Sensor de Luz, testando se o mesmo percebe um brilho maior que um certo limiar. O valor do limiar deve ser apropriadamente ajustado para ser o valor médio entre o mínimo valor que se espera ler no centro da linha e o máximo esperado no caso da leitura no chão usando as luzes coloridas. Se sugere o uso de um programa tipo “Medidor de Luz” (LightMeter) para descobrir estes valores. Usando o valor médio, o robô vai andar pelo lado direito da linha procurando manter uma leitura que fique entre o valor para metade da linha e metade para o chão. Se o valor lido é maior que o limiar então o robô está fora do lado direito da linha e assim gira para a esquerda para corrigir a rota (o motor C fica mais rápido que o B). Se o valor lido é menor que o limiar então o robô está mais próximo do centro da linha (e não próximo do lado direito da linha) e assim gira para a direita (motor B fica mais rápido que o B). O teste do sensor e correções da direção do robô são rapidamente repetidas pelo laço (várias vezes por segundo). Note que a propriedade “Unlimited” é usada para definir Duration para todos os blocos Motor. Isto faz com que o bloco Motor simplesmente ajuste seu nível de potência e o programa segue adiante sem esperar por nada. Isto permite ao Color Sensor testar repetidamente tão rápido quanto possível e assim o robô reaja tão rápido quanto possível frente a mudanças na leitura da linha.
  71. 71. Seguidor de Linha #2 OBSERVAÇÕES: Dentro de um laço perpétuo, repetidamente se chaveia o Sensor de Cor como Sensor de Luz, testando se o mesmo percebe um brilho maior que um certo limiar. O valor do limiar deve ser apropriadamente ajustado para ser o valor médio entre o mínimo valor que se espera ler no centro da linha e o máximo esperado no caso da leitura no chão usando as luzes coloridas. Se sugere o uso de um programa tipo “Medidor de Luz” (LightMeter) para descobrir estes valores. Usando o valor médio, o robô vai andar pelo lado direito da linha procurando manter uma leitura que fique entre o valor para metade da linha e metade para o chão. 1.O valor do limiar (threshold): Ajustar o bloco do Color Sensor para “Compare” o número lido com a média entre os valores máximos e mínimos esperados para as leituras de intensidade da luz faz também que o programa se ajuste as condições de iluminação atuais e superfície (solo) do ambiente sendo usado para testá-lo. 2.Velocidade máxima: nos 2 blocos Motor “rápidos”, o nível de potência especificado determina a máxima velocidade do motor. Se a velocidade máxima for muito alta, o robô vai acabar se perdendo em curvas mais fechadas. 3.Curvas fechadas: nos 2 blocos Motor “lentos”, o nível de potência especificado vai determinar que tão fechada uma curva o robô vai ser capaz de seguir. Baixos níveis de potência vão permitir que o robô realize curvas fechadas, entretanto valores maiores o deixariam mais rápido e com condução mais suave sobre as partes retas da linha (caminho à seguir).
  72. 72. Seguidor de Linha #2 DETALHES:
  73. 73. Seguidor de Linha #2 DETALHES:
  74. 74. Seguidor de Linha #2 DETALHES:
  75. 75. Seguidor de Linha #2 DETALHES:
  76. 76. Seguidor de Linha #2 DETALHES:
  77. 77. Seguidor de Linha #2 DETALHES:
  78. 78. Seguidor de Linha #2 DETALHES:
  79. 79. Seguidor de Linha #2 DETALHES:
  80. 80. “LIGHTMETER”
  81. 81. “LightMeter” (1/4)
  82. 82. “LightMeter” (2/4)
  83. 83. “LightMeter” (3/4)
  84. 84. “LightMeter” (4/4)
  85. 85. Seguir de Linha: Idéias 2: Controlador P Idéia do Controlador Proporcional: Estabelecer um laço de realimentação fechado, calculando o erro e proporcional ao erro definir uma ação de controle: Valor Médio (Ref.) ∑ Erro K Sinal de Controle Atuação (Pot. Motor) Motores Lego Sensor Cor Trajetória Intensidade Luminosa (Leitura atual) + -
  86. 86. Base Teórica Controlador Proporcional Seja a fita isolante (Pista) x Índice reflexão (sensor de luz) x 0 +1 -1 x = mede o desvio físico do AVG.
  87. 87. Base Teórica Controlador Proporcional Seja a fita isolante (Pista) x Índice reflexão (sensor de luz) x 0 +1 -1 x = mede o desvio físico do AVG. x x Largura da fita isolante (pista).
  88. 88. Base Teórica Controlador Proporcional - O que ocorre quando o AGV não anda sobre a faixa? Largura da fita isolante (pista). - 1 +10 O O O ⌘ = 35 ⌘ = 37 (“Mid”) ⌘ = 47 (“Max”) ⌘ = 27 (“Min”) O O ⌘ = 39 CB VB = VCruize + Kp ⇤ E VC = VCruize Kp ⇤ E Caso 1) Caso 2) ⌘Sensor Erro VB VC Stearing 35 +2 = 75 + 100*(2)/Range = 75+10 = 85 = 75-100*(2)/Range = 75-10 = 65 39 -2 = 75+100*(-2)/Range = 75-10 = 65 = 75 - 100*(-2)/Range = 75+10 = 85 37 0 = 75+100*0 = 75 = 75-100*0 = 75 Erro = Ref Lido Erro = “Mid” ⌘Sensor
  89. 89. Seguidor de Linha: Controlador Proporcional Ajusta as variáveis Power e Gain (podem ser alterados) 90 100
  90. 90. Seguidor de Linha: Controlador Proporcional Ajusta as variáveis Power e Gain (podem ser alterados) 90 100 A lâmpada parece acender depois de um pequeno atraso no modo “Light Sensor”, o que pode afetar a auto-calibração. Melhor acender e esperar um pouco
  91. 91. Seguidor de Linha: Controlador Proporcional Ajusta as variáveis Power e Gain (podem ser alterados). 90 100 A lâmpada parece acender depois de um pequeno atraso no modo “Light Sensor”, o que pode afetar a auto-calibração. Melhor acender e esperar um pouco. 50 0.2 9999 0 Iniciando as variáveis Min para um valor grande e Max para zero para garantir que a lógica de calibração irá alterá-los. Continua→
  92. 92. Seguidor de Linha: Controlador Proporcional Ajusta as variáveis Power e Gain (podem ser alterados). 90 100 A lâmpada parece acender depois de um pequeno atraso no modo “Light Sensor”, o que pode afetar a auto-calibração. Melhor acender e esperar um pouco. 50 0.2 9999 0 Iniciando as variáveis Min para um valor grande e Max para zero para garantir que a lógica de calibração irá alterá-los. Inicie um pequeno arco para a direita assim o sensor acabará lendo a linha e a área à direita da linha (incluindo o solo). B C CB
  93. 93. Seguidor de Linha: Controlador Proporcional B C CB LAÇO DE CALIBRAÇÃO - IDÉIA: 1. Criar um laço de repetição que só para quando o motor B girar 120o. 2. Dentro do laço se lê os valores do sensor de cor enquanto o robô está girando para a direita para descobrir os valores de Min e Max. 3. Ler informação do Sensor de Cor no modo Light Sensor (saída numérica na porta “Detected Color”) e guarde este valor na variável Light. 4. Se o valor Light é menor que o valor Min, então atualize Min <-- Light. 5. Se o valor Light é maior que o valor Max, então atualize Max <-- Light.
  94. 94. Seguidor de Linha: Controlador Proporcional B C CB Leia sensor de Cor no modo “Light Sensor” (valor de 0 ~ 100 na porta “Detected Color”) e guarde em “Light” Se o valor Light for menor que Min, então: Min ← Light. Continua→ Detected Color Value
  95. 95. Seguidor de Linha: Controlador Proporcional B C CB Leia sensor de Cor no modo “Light Sensor” (valor de 0 ~ 100 na porta “Detected Color”) e guarde em “Light” Se o valor Light for menor que Min, então: Min ← Light. Continua→ Result Value
  96. 96. Seguidor de Linha: Controlador Proporcional B C CB Se o valor Light for maior que Max, então: Max ← Light. Continua→
  97. 97. Seguidor de Linha: Controlador Proporcional B C CB Se o valor Light for maior que Max, então: Max ← Light. Continua→
  98. 98. Seguidor de Linha: Controlador Proporcional B C CB Continua→ Depois da Calibração →Calcular faixa (Range) e valor médio (Mid): Agora que sabe os valores máximos e mínimos esperados para a linha e o solo, calculamos a faixa de valores: Range = Max - Min. Calculamos agora o valor médio entre Min e Max e guardamos este valor na variável Mid: Mid = (Max + Min) / 2. O robô vai esperar encontrar o valor médio à direita da borda da linha - valor que procurará manter.
  99. 99. Seguidor de Linha: Controlador Proporcional B C CB Continua→ Depois da Calibração →Reposicionando o Robô no lado direito da linha: Uma vez que a auto-calibração moveu o robô para a direita, devemos movê-lo de volta para a esquerda antes de começar a seguir a linha. O robô gira à esquerda até que encontra um valor imediatamente mais escuro que Mid (o médio), o que deveria posicionar o robô no lado direito da linha que corresponde a maneira como pretende seguir a linha. Quando o sensor encontra o ponto desejado para começar a seguir a linha, soa um beep para indicar que a auto-calibração foi completada.
  100. 100. Seguidor de Linha: Controlador Proporcional B C CB Continua→ Depois da Calibração →Reposicionando o Robô no lado direito da linha: Uma vez que a auto-calibração moveu o robô para a direita, devemos movê-lo de volta para a esquerda antes de começar a seguir a linha. O robô gira à esquerda até que encontra um valor imediatamente mais escuro que Mid (o médio), o que deveria posicionar o robô no lado direito da linha que corresponde a maneira como pretende seguir a linha. Quando o sensor encontra o ponto desejado para começar a seguir a linha, soa um beep para indicar que a auto-calibração foi completada. Trigger Point
  101. 101. Seguidor de Linha: Controlador Proporcional B C CB Continua→ Depois da Calibração →Reposicionando o Robô no lado direito da linha: Uma vez que a auto-calibração moveu o robô para a direita, devemos movê-lo de volta para a esquerda antes de começar a seguir a linha. O robô gira à esquerda até que encontra um valor imediatamente mais escuro que Mid (o médio), o que deveria posicionar o robô no lado direito da linha que corresponde a maneira como pretende seguir a linha. Quando o sensor encontra o ponto desejado para começar a seguir a linha, soa um beep para indicar que a auto-calibração foi completada. Trigger Point
  102. 102. Seguidor de Linha: Controlador Proporcional B C CB Continua→ Seguindo Linha → Laço de Controle Proporcional - Parte 1/2 Obtenha uma leitura do Sensor de Cor no modo “Light Sensor” e subtraia este valor do valor médio (Mid) ➠ calculando o erro. Se este erro é positivo então robô está mais para a esquerda “vendo” a parte mais escura (central) da pista. Se o erro é negativo, então o robô está muito à direita com o sensor “vendo” mais o solo. A magnitude do erro corresponde à quão longe o robô está da sua “meta” (valor médio). Detected Color Multiplique o valor do erro pelo valor Gain para enfatizar a resposta ao erro de acordo com a magnitude de Gain. Então divida o resultado pelo valor Range (faixa) para normalizar o erro em relação à faixa total esperada. Guarde este valor na variável Correction.
  103. 103. B CB Continua→ Seguindo Linha → Laço de Controle Proporcional - Parte 1/2 Obtenha uma leitura do Sensor de Cor no modo “Light Sensor” e subtraia este valor do valor médio (Mid) ➠ calculando o erro. Se este erro é positivo então robô está mais para a esquerda “vendo” a parte mais escura (central) da pista. Se o erro é negativo, então o robô está muito à direita com o sensor “vendo” mais o solo. A magnitude do erro corresponde à quão longe o robô está da sua “meta” (valor médio). Detected Color Multiplique o valor do erro pelo valor Gain para enfatizar a resposta ao erro de acordo com a magnitude de Gain. Então divida o resultado pelo valor Range (faixa) para normalizar o erro em relação à faixa total esperada. Guarde este valor na variável Correction. Valor Médio (Ref.) ∑ Erro K Sinal de Controle Atuação (Pot. Motor) Motores Lego Sensor Cor Trajetória Intensidade Luminosa (Leitura atual) + -
  104. 104. Seguidor de Linha: Controlador Proporcional B C CB Fim. Seguindo Linha → Laço de Controle Proporcional - Parte 2/2 Use o valor de Correction para aplicar uma ação de controle (steering) sobre os motores. Partindo do valor base Power definido na inicialização use (Power + Correction) para o motor B e (Power − Correction) para o motor C. Isto fará com que o robô se posicione da direção correta para continuar seguindo a linha pelo seu lado direito. Note que a correção é proporcional ao tamanho do desvio. Se for grande, um giro mais forte será produzido, senão uma leve correção na sua orientação é realizada. Isto permite um deslocamento mais rápido e suave. Laço perpétuo (Forever) Power + Correction Power − Correction Power Power B C
  105. 105. Outros controladores + sofisticados... Controle PI --> exige noção de integral; Controle PD --> exige noção de derivada; Controle PID: adotado em 90% da indústria. Mais “trabalho”: sintonia (ajuste) do mesmo... -- > Controle Automático
  106. 106. PID
  107. 107. PID
  108. 108. Error PID
  109. 109. PID Analógico:
  110. 110. PID Digital: ControlTask+ y=lectura_sensor();+ e=r5y;+ //+Ley+de+control+ p0=Kp*(1+Kd/Ts);+ p1=Kp*(1+2*Kd/Ts5Ki*Ts);+ p2=(Kp*Kd)/Ts;+ u=ua1+p0*e+p1*ea1+p2*ea2;+ //+Salida+para+sistema+ Robot.motor1=u;+ //+Actualizando+variables+próximo+ciclo+ ua2=ua1;+ ua1=u;+ ea2=ea1;+ ea1=e;+ ya2=ya1;+ ya1=y;+ //+return+ !+samplingTimeControl+[ms]+ ( ) ( )! " # −+−−% & ' ++−−+−= ]2[]1[2][][]1[][]1[][ kekeke T T ke T T kekeKkuku s d i s c
  111. 111. RTOS for Lego NXT: NxtOSEK 
 nxtOSEK [ h6p://lejos-osek.sourceforge.net/ ]
 2007-2008 Takashi Chikamasa
 nxtOSEK/JSP
 ANSI C/C++ with OSEK/μITRON RTOS for LEGO® MINDSTORMS® NXT
 nxtOSEK is an open source firmware for LEGO MINDSTORMS NXT. nxtOSEK consists of device driver of leJOS NXJ C/Assembly source code, TOPPERS OSEK Real-Time Opera[ng System source code that includes ARM7 (ATMEL AT91SAM7S256) specific por[ng part, and glue code to make them work together. nxtOSEK can provide: ANSI C/C++ programming environment by using GCC tool chain C API for NXT Sensors, Motor, and other devices C++ API for NXT... nxtOSEK applica[on videos:
 [h6p://lejos-osek.sourceforge.net/videos.htm ]:
 NXT SCARA [h6p://lejos-osek.sourceforge.net/videos.htm#NXT_SCARA ] Real-Time Operation System
  112. 112. RTOS for Lego NXT: NxtOSEK 
 nxtOSEK [ h6p://lejos-osek.sourceforge.net/ ]
 2007-2008 Takashi Chikamasa
 nxtOSEK/JSP
 ANSI C/C++ with OSEK/μITRON RTOS for LEGO® MINDSTORMS® NXT
 nxtOSEK is an open source firmware for LEGO MINDSTORMS NXT. nxtOSEK consists of device driver of leJOS NXJ C/Assembly source code, TOPPERS OSEK Real-Time Opera[ng System source code that includes ARM7 (ATMEL AT91SAM7S256) specific por[ng part, and glue code to make them work together. nxtOSEK can provide: ANSI C/C++ programming environment by using GCC tool chain C API for NXT Sensors, Motor, and other devices C++ API for NXT... nxtOSEK applica[on videos:
 [h6p://lejos-osek.sourceforge.net/videos.htm ]:
 NXT SCARA [h6p://lejos-osek.sourceforge.net/videos.htm#NXT_SCARA ] Real-Time Operation System
  113. 113. OUTRAS IDÉIAS DE ESTRUTURAS...
  114. 114. OUTRAS IDÉIAS DE ESTRUTURAS...
  115. 115. OUTRAS IDÉIAS DE ESTRUTURAS...
  116. 116. OUTRAS IDÉIAS DE ESTRUTURAS...

×