Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO:...

23
Rob´ otica con ladrillos LEGO Jos´ e Mar´ ıa Ca˜ nas Plaza [email protected] Abril 2003

Transcript of Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO:...

Page 1: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Robotica con ladrillos LEGO

Jose Marıa Canas [email protected]

Abril 2003

Page 2: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Indice del curso 1

Indice del curso

Introduccion

Elementos del kit

Programacion con codigo RCX

Programacion con NQC

Programacion con C y BrickOS

Programacion con Java y LeJOS

Conclusiones

c©2003 GSyC-URJC Robotica con ladrillos LEGO

Page 3: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Indice del curso (cont.) 14

Programacion con NQC

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 4: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

NQC (Not Quite C) (cont.) 15

NQC (Not Quite C)

Sintaxis similar al lenguaje C

Multiples tareas, la principal es obligatoria (main)

Manejo de variables

Cuatro temporizadores: contadores de 100 ms.

Generacion de numeros aleatorios (Random())

Espera temporal (Wait) y por eventos (until)

Manejo de sonido (PlayTone())

Comunicacion IR (SendMessage())

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 5: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

NQC (Not Quite C) (cont.) 16

Arquitectura software usando NQC

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 6: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

NQC (Not Quite C) 17

Uso tıpico

Escribir el codigo fuente test.nqc

Compilador cruzado genera codigo ejecutable

Es codigo intermedio test.rcx, la maquina virtual RCX lo interpreta

Descarga del firmware

nqc -firmware firm0328.lgo

Generacion y descarga del ejecutable

nqc -d -S/dev/ttyS0 test.nqc

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 7: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Actuadores 18

Actuadores

Programacion de motores

OUT A, OUT B, OUT C

Los motores tienen 3 modos: on-off -floating

• On(OUT A+OUT B)

• Off(OUT A)

• Float(OUT A)

Sentido giro

• Toggle(OUT A),Fwd(OUT A), Rev(OUT A)

• No mueven al motor OJO

• Se recuerdan hasta la siguiente activacion

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 8: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Actuadores 19

Combinados

• OnFwd(OUT A)

• OnRev(OUT A)

• OnFor(OUT B,200); //centesimas de segundo

Control velocidad

• SetPower(OUTPUT B+OUTPUT C,3)

• de 0 a 7, se visualiza 1 a 8

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 9: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Actuadores 20

Programacion sonido

PlayTone(440,25)

Frecuencia (herzios), duracion (decimas)

PlaySound(numero)

Sonidos pregrabados

SOUND CLICK, SOUND DOUBLE BEEP,

SOUND DOWN, SOUND UP,

SOUND LOW BEEP, SOUND FAST UP

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 10: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Acceso a sensores 21

Acceso a sensores

SENSOR 1, SENSOR 2, SENSOR 3

SetSensor(Sensor, const Configuracion)

Configuracion Tipo Modo ClearSensor()

SENSOR TOUCH Contacto 1 (presionado) 0 (no) -

SENSOR LIGHT Luz 0 (oscuro) 100 (luz) -

SENSOR ROTATION Rotacion 16 por vuelta Sı

SENSOR CELSIUS Temperatura grados centıgrados -

SENSOR FARENHEIT Temperatura grados Farenheit -

SENSOR PULSE Contacto Contador de pulsaciones Sı

SENSOR EDGE Contacto Contador de transiciones Sı

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 11: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Acceso a sensores 22

ClearSensor(SENSOR 3) para sensores acumulativos

NO se pueden combinar con +

SetSensor(SENSOR 1+SENSOR 2,SENSOR TOUCH) genera error

Tipo y modo se pueden configurar por separado:

• SetSensorType(): caracterısticas electricas

• SetSensorMode(): como se interpretan los valores

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 12: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Variables y expresiones 23

Variables y expresiones

int mivariable;

task main()

{int velocidad=1;

}

bar = 10;

bar += 7;

bar = SENSOR 1 + 7;

bar = Timer(0);

bar = bar & 0x7;

bar = abs(bar);

bar = sign(bar); // (-1,+1)

var = 7 << 2

Variables enteras. Locales o globales

Asignar valor: otra variable, un sensor, una expresion

Operaciones aritmeticas: +,-,*,/, %, ++, - -

Precedencia de operadores. Usar parentesis.

Manejo de bits: AND, OR, complemento, desplazamiento

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 13: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Estructuras de control 24

Estructuras de control

until(SENSOR 1 == 1)

until(SENSOR 1 != 30)

until(Timer(0) < 100)

until(SENSOR 1 > 10

&& SENSOR 1 < 20);

while(SENSOR 1 == 1)

{PlayTone(440,20);

}

do

{PlayTone(440,20);

} while(SENSOR 1 == 1)

Condiciones

Combinaciones logicas: &&, ||, <=, >, . . .

until(condicion);

while(condicion){ sentencia }

do { sentencia} while (condicion)

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 14: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Estructuras de control 25

repeat(10)

{until(SENSOR 1 == 1)

PlayTone(440,10);

}

if (SENSOR 2 == 1)

On(OUT A);

else

On(OUT B);

if (SENSOR 2 == 1)

On(OUT A);

On(OUT B);

repeat(n){ sentencia };

if (condicion) sentencia1 ;

if (condicion) sentencia1; else sentencia2;

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 15: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Temporizadores 26

Temporizadores

Se incrementan cada 100 ms.

Wait(centesimas segundo)

Temporizadores

• Se tienen 4

• Aparecen en las condiciones

• Timer(2) para consultar

• ClearTimer(3), de 0 a 3

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 16: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Tareas 27

Tareas

task main()

{SetSensor(SENSOR 1,

SENSOR TOUCH);

SetSensor(SENSOR 3,

SENSOR TOUCH);

start agudo;

start rota;

Wait(1000);

StopAllTasks;

}

task agudo()

{while(true)

{ until(SENSOR 3 == 1);

PlayTone(440,10);

}}

task rota()

{while(true)

{ Off(OUT C);

until(SENSOR 1 == 1);

OnFor(OUT C,100);

}}

start, stop

StopAllTasks();

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 17: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Tareas 28

Funciones

void pulso(int count, int duracion)

{

repeat(count)

{

OnFor(OUT\_A,duracion);

Wait(duracion);

}

}

Trozos de codigo que se van a invocar muchas veces

No devuelven nada

Admiten parametros (paso valor y paso referencia)

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 18: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Preprocesador 29

Preprocesador

comentarios

• // ignora el resto de la lınea

• /* */

#define RUEDA IZQ OUT A

Permite poner nombres mas significativos

Funciones como macros

#define espera(outs,secs) OnFor(outs,(secs)*100)

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 19: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Varios 30

Varios

Random(n) entrega un numero entero aleatorio entre 0 y n.

Comunicaciones

• Message();

• ClearMessage();

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 20: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Ejemplos 31

Ejemplos

Primer programa

task main()

{

SetSensor(SENSOR_1, SENSOR_TOUCH);

On(OUT_A);

while(true)

{

until(SENSOR_1 == 1);

Toggle(OUT_A);

until(SENSOR_1 == 0 );

}}

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 21: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Ejemplos 32

Ejemplo choca-gira con NQC

int tiempo, giro; task evitar(){

while(true){

task main() { if (SENSOR_1 == 1) {

SetSensor(SENSOR_1,SENSOR_TOUCH); stop avanzar;

SetSensor(SENSOR_2,SENSOR_TOUCH); onRev(OUT_C); Wait(50);

start avanzar; start avanzar;

start evitar; }

} if (SENSOR_2 == 1) {

stop avanzar;

task avanzar(){ onRev(OUT_A); Wait(50);

while(true){ start avanzar;

OnFwd(OUT_A+OUT_C); }

} }

} }

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 22: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Pros y contras de NQC 33

Pros y contras de NQC

Usa el firmware de LEGO

Solo se pueden usar 32 variables

Es interpretado

Las subrutinas no pueden devolver valores

No existen estructuras de datos, solo enteros

Mas agil que codigo RCX

Basado en texto

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC

Page 23: Rob´otica con ladrillos LEGO - gsyc.urjc.es · c 2003 GSyC-URJC Robotica con ladrillos LEGO: Programaci´on con NQC. Pros y contras de NQC 33 Pros y contras de NQC Usa el firmware

Pros y contras de NQC (cont.) 34

Bibliografıa NQC

The Unofficial Guide to LEGO MINDSTORMS Robots, Jonathan B.

Knudsen, O’Reilly, 1999

Dave Baum’s definitive guide to LEGO MINDSTORMS, Dave Baum,

Apress, 2000

En la web existen muchos manuales

c©2003 GSyC-URJC Robotica con ladrillos LEGO: Programacion con NQC