UNIVERSIDAD DEL QUINDIO, INGENIERA ELECTRNICA, LABORATORIO #3 DE ROBTICA MVIL,
PRESENTADO DURANTE EL SEGUNDO PERIODO DEL AO 2012
1
ResumenEn este laboratorio se desarroll dos experimentos, el primero que consiste en hacer deambular un carrito evitando obstculos, y el segundo consiste en que dicho carrito se dirija hacia la zona de mayor luminosidad.
AbstractThis laboratory developed two experiments, the first thing is to make a shopping stroll avoiding obstacles, and the second is that the basket is directed towards the area of greatest brightness.
Keywords Java, Behavior, Control, Motion, Sensor. I. INTRODUCCIN
os comportamientos pueden ser reactivos deliberativos, y cada comportamiento contiene acciones tan complejas como se quieran. Para el manejo de comportamientos Lejos cuenta con un paquete dedicado con funciones como Arbitrator, takeControl, action y supress usados en el desarrollo de la prctica.
En este laboratorio se define la estructura de comportamientos, los sensores usados y las salidas que arrojarn para los dos experimentos, el primero Wandering deambulador y el segundo un seguidor de luz que evita obstculos usando el kit Lego Mindstorms. II. OBJETIVOS
Comprender y poner en prctica la programacin orientada a comportamientos vista en clase.
Adquirir la experticia en la programacin del paquete josx.robotics.* que implementa la programacin orientada a comportamientos para la plataforma RCX.
Comprender que en el campo de la robtica un problema complejo puede ser dividido en metas de menor complejidad, que en suma proporciona una solucin al problema planteado inicialmente. III. MATERIALES
Con el fin de llevar a cabo la prctica es necesario tener lo siguiente:
Kit LEGO MINDSTORMS (plataforma) Modulo RCX (comando del robot) Sensor IR Sensor de contacto Torre IR Software Eclipse Cajas para formar un laberinto Proporcionadas en clase. Linterna Llevada por el grupo de estudiantes. Sensor de luz adicional Proporcionado en clase. IV. MARCO TERICO
La programacin orientada a comportamientos es una estrategia de desarrollo de aplicaciones para robtica que puede ser tan compleja como se desee. Su base es que hay un rbitro que decide qu comportamiento se va a ejecutar o si ya ha terminado la ejecucin de otro comportamiento. Estos comportamientos son jerarquizados de acuerdo a la prioridad dada por el programador.
El comportamiento de menor prioridad tendr el control hasta que un comportamiento de mayor prioridad lo pida, esto se hace con un mtodo pre-establecido que asigna un valor verdadero o falso indicando que el comportamiento se va a ejecutar o no. Si varios comportamientos estn activos en un momento dado, Control Usando La Programacin Orientada A Comportamientos Lejos Jorge Luis Enrquez Gonzlez, Jair Alejandro Aristizabal, Alejandra Bejarano Rincn L UNIVERSIDAD DEL QUINDIO, INGENIERA ELECTRNICA, LABORATORIO #3 DE ROBTICA MVIL, PRESENTADO DURANTE EL SEGUNDO PERIODO DEL AO 2012 2 estos entran en una lista de espera y se ejecutaran de acuerdo a su prioridad.
Para poder programar estos comportamientos se hace uso del paquete josx.robotics.*, en este encontramos dos clases:
o josx.robotics.Behavior se compone de tres mtodos. boolean takeControl() que permite activar la ejecucin del comportamiento, Void action() que permite determinar las acciones que se harn cuando el comportamiento este activo y Void suppress() para detener la ejecucin de dicho comportamiento.
o Josx.robotics.Arbitrator se compone del mtodo constructor Public Arbitrator(Behavior [] behaviors) para crear un arbitro que regula las ejecuciones de los comportamientos, y un mtodo Public void start() que inicia la ejecucin del arbitro.
V. ACTIVIDAD
Las actividades consisten en montar dos experimentos de uso comn en robtica:
El primero es conocido como Wandering o deambular, pero cuyo objetivo es explorar un ambiente evadiendo obstculos y desplazndose aleatoriamente. Por lo tanto se pide que el grupo de estudiantes:
Defina cual es la estructura de comportamientos Los sensores a los que pondrn atencin Y las salidas que arrojarn. Luego, implementar un programa que recoja estas premisas y las codifique en comportamientos para la plataforma RCX.
El segundo es conocido como Homing, cuyo objetivo es conducir al robot hacia una zona definida como el punto de llegada o casa. Sin embargo, conducir el robot hacia este punto no implica que har caso omiso de los obstculos, esto es, debe evadirlos; adems, el robot deber saber en qu momento alcanza su objetivo. Por lo tanto se pide que el grupo de estudiantes:
Defina la estructura de comportamientos. Los sensores a los que pondrn atencin Y las salidas que arrojarn. Luego, implementar un programa que recoja estas premisas y las codifique en comportamientos para la plataforma RCX.
VI. PROCEDIMIENTO
Para llevar a cabo el desarrollo de la prctica de programacin orientada por comportamientos, se utiliz el kit de LEGO MINDSTORMS mostrado en la Fig.1.
Fig.1 Robot con sensor de contacto.
Para la realizacin de la actividad del Robot que deambula, se busco una forma de modificar la trayectoria del Robot de manera aleatoria. Para lograr esto se declararon cuatro comportamientos donde se buscaba lo siguiente:
Evitar un obstculo. Ir hacia la derecha. Ir hacia la izquierda. Ir hacia adelante.
Para lograr que el movimiento de la plataforma fuera aleatorio, se hizo que los ltimos tres comportamientos nombrados anteriormente tomaran el control en tiempos distintos y de forma aleatoria uno de otro. Lo anterior se realizo con el uso de la funcin random(), la cual estaba presente en cada una de las tres clases que permite tomar el control, lo que indicaba que un comportamiento de estos tres podra tener el control si se satisface una condicin que involucrara la funcin random(). Con esto se logro que la plataforma se moviera hacia adelante, hacia la derecha y hacia la izquierda de forma aleatoria.
Para que el robot evitara los obstculos se us el cuarto comportamiento, evitar un obstculo, el cual tenia mayor grado de prioridad que los tres anteriores y que se UNIVERSIDAD DEL QUINDIO, INGENIERA ELECTRNICA, LABORATORIO #3 DE ROBTICA MVIL, PRESENTADO DURANTE EL SEGUNDO PERIODO DEL AO 2012 3 activaba por medio de dos sensores de contacto presentes en frente de la plataforma.
A continuacin se describen los comportamientos usados desde el comportamiento de menor prioridad hasta el de mayor prioridad:
goForward:
Entradas Ninguna Activacin El comportamiento se activa cuando un nmero aleatorio generado de 0 a 250 se encuentra en el rango de 100 a 150. Acciones: Siempre orienta el robot hacia delante y toca una pequea cancin cuando termina el comportamiento.
motor1:
Entradas Ninguna Activacin El comportamiento se activa cuando un nmero aleatorio generado de 0 a 250 se encuentra en el rango de 160 a 170. Acciones: Orienta el robot hacia el lado izquierdo y toca una pequea cancin cuando termina el comportamiento.
motor2:
Entradas Ninguna Activacin El comportamiento se activa cuando un nmero aleatorio generado de 0 a 250 se encuentra en el rango de 160 a 170. Acciones: Orienta el robot hacia el lado derecho y toca una pequea cancin cuando termina el comportamiento.
avoidObstacles:
Entradas Sensores de contacto izquierdo y derecho. Activacin Si algn sensor detecta un obstculo el comportamiento se activa. Acciones: Dependiendo de cual sensor ha detectado un obstculo se retrocede y gira hacia la derecha o hacia la izquierda segn el sensor activo.
SensorConstants.SENSOR_MODE_BOOL); Sensor.S1.activate(); Sensor.S3.activate(); Motor.A.setPower(7); Motor.C.setPower(7); Behavior goForwardB0 = new goForward(); Behavior avoidObstaclesB1 = new avoidObstacles(); Behavior motor1a= new motor1(); Behavior motor2a= new motor2(); Behavior[] arrayBehaviors = { goForwardB0, motor1a, motor2a, avoidObstaclesB1}; Arbitrator myBasicApp = new Arbitrator(arrayBehaviors); myBasicApp.start(); } } class goForward implements Behavior { public boolean takeControl(){ int ran=1+ (int)(Math.random()*250); boolean ver if(ran>=100 && ran<=150){ ver=true; }else{ ver=false; } return ver; } public void action() { Motor.A.forward(); Motor.C.forward(); } public void suppress() { Sound.systemSound(false, 3); Motor.A.stop(); Motor.C.stop(); } }
class motor1 implements Behavior { public boolean takeControl() { int ran=1+ (int)(Math.random()*250); boolean ver; if(ran>=160 && ran<=170){ ver=true; }else{ ver=false; } return ver; }
public void action() { Motor.A.forward(); Motor.C.backward(); }
} catch (InterruptedException ie) { } } }
UNIVERSIDAD DEL QUINDIO, INGENIERA ELECTRNICA, LABORATORIO #3 DE ROBTICA MVIL, PRESENTADO DURANTE EL SEGUNDO PERIODO DEL AO 2012 4
Para la realizacin de la segunda actividad que consiste en hacer que el Robot llegue a un punto determinado o llegue a casa, se establecieron los siguientes requerimientos:
El robot debe deambular. El robot debe evitar obstculos. El robot debe buscar una lmpara que esta encendida. El robot se detenga cuando llegue donde esta la lmpara.
Para lograr que el robot deambule se us lo hecho en la actividad anterior, luego se calibr un sensor de luz para saber que valor dara al llegar al punto donde estara la lmpara, teniendo este valor se crearon dos comportamientos ms a los anteriores. El primer comportamiento tena como fin seguir en lnea recta cuando detectara un valor cercano e inferior al obtenido cuando llegara a la lmpara, el otro comportamiento tenia como fin detener la plataforma cuando el sensor de luz leyera un valor igual o superior al valor registrado al momento de la calibracin.
Los comportamientos son descritos a continuacin desde el de menor prioridad hasta el de mayor prioridad:
goForward:
Entradas Ninguna Activacin El comportamiento se activa cuando un nmero aleatorio generado de 0 a 250 se encuentra en el rango de 100 a 150. Acciones: Siempre orienta el robot hacia delante y toca una pequea cancin cuando termina el comportamiento. public void suppress() {
public void suppress() { Motor.A.stop(); Motor.C.stop(); } } UNIVERSIDAD DEL QUINDIO, INGENIERA ELECTRNICA, LABORATORIO #3 DE ROBTICA MVIL, PRESENTADO DURANTE EL SEGUNDO PERIODO DEL AO 2012 5
motor1:
Entradas Ninguna Activacin El comportamiento se activa cuando un nmero aleatorio generado de 0 a 250 se encuentra en el rango de 160 a 170. Acciones: Orienta el robot hacia el lado izquierdo y toca una pequea cancin cuando termina el comportamiento.
motor2:
Entradas Ninguna Activacin El comportamiento se activa cuando un nmero aleatorio generado de 0 a 250 se encuentra en el rango de 160 a 170. Acciones: Orienta el robot hacia el lado derecho y toca una pequea cancin cuando termina el comportamiento.
avoidObstacles:
Entradas Sensores de contacto izquierdo y derecho. Activacin Si algn sensor detecta un obstculo el comportamiento se activa. Acciones: Dependiendo de cual sensor ha detectado un obstculo se retrocede y gira hacia la derecha o hacia la izquierda segn el sensor activo.
seguirluz:
Entradas Sensor de luz. Activacin Si el sensor de luz al detectar iluminacin da un valor menor a 700. Acciones: Dependiendo de cual sensor ha detectado un obstculo se retrocede y gira hacia la derecha o hacia la izquierda segn el sensor activo.
luzdetect:
Entradas Sensor de luz. Activacin Si el sensor de luz al detectar iluminacin da un valor entre 490 y 545 que es el valor caracterizado cuando se encuentra muy cerca a la linterna. Acciones: Dependiendo de cual sensor ha detectado un obstculo se retrocede y gira hacia la derecha o hacia la izquierda segn el sensor activo.
Behavior goForwardB0 = new goForward(); Behavior avoidObstaclesB1 = new avoidObstacles(); Behavior motor1a= new motor1(); Behavior motor2a= new motor2(); Behavior seguirluza= new seguirluz(); Behavior luzdetecta=new luzdetect();
public boolean takeControl() { myS1State = Sensor.S1.readBooleanValue(); myS3State = Sensor.S3.readBooleanValue(); if (myS1State) { myTakeControl = true; whichSensor = true; } else if (myS3State) { myTakeControl = true; whichSensor = false; UNIVERSIDAD DEL QUINDIO, INGENIERA ELECTRNICA, LABORATORIO #3 DE ROBTICA MVIL, PRESENTADO DURANTE EL SEGUNDO PERIODO DEL AO 2012 7
VII. CONCLUSIONES
El kit de LEGO MINDSTORMS cuenta con sensores de luz los cuales no son los mejores para realizar este tipo de prcticas donde el sensor est ubicado en la parte frontal del carro, pues la luz del ambiente influye en la luz de la lmpara, adems de que no se tiene un rango de valores que otorguen precisin a la medida.
El mtodo de programacin mediante comportamientos es un mtodo modular que permite aadir o quitar distintos comportamientos sin necesidad de cambiar la estructura del programa. (por eso despus de hacer el robot deambular y evitar obstculos, se pudo aadir un nuevo comportamiento que era seguir luz sin necesidad de generar otro proyecto.)
Gracias a la API proporcionada por lejos se pudo implementar estos comportamientos pero el concepto se puede llevar a un gran nmero de lenguajes de programacin.
El uso de retardos dentro de los comportamientos hace que se produzca una respuesta lenta de los comportamientos, porque se puede dar el caso de encontrarse en un retardo cuando se active un comportamiento y este no ser atendido sino cuando se termine dicho retardo. Esto tambin ocurre cuando dentro del comportamiento se desarrollan muchas actividades. VIII. REFERENCIAS
[1] Sitio WEB de LEJOS - http://lejos.sourceforge.net
[2] Sitio WEB de LEGO http://lego.mindstorms.com
IX. AUTORES
Jorge Luis Enrquez Gonzlez Naci en Pasto, Nario el 30 de abril de 1991, estudio la primaria en el colegio Nuestra seora de Beln, Culmino el bachillerato en el colegio CASD y actualmente cursa octavo semestre de ingeniera electrnica en la Universidad del Quindo y pertenece al grupo de investigacin GITUQ del rea de telecomunicaciones de la universidad del Quindo.
Alejandra Bejarano Rincn Naci en Calarc, Quindo el 8 de junio de 1991, estudio la primaria en el colegio Rafael Uribe Uribe de Calarc, Culmino el bachillerato en el colegio San Jos de Calarc y actualmente cursa sptimo semestre de ingeniera electrnica en la Universidad del Quindo y pertenece al grupo de investigacin GAMA del rea de control y automatizacin de la universidad del Quindo.
public void suppress() { Motor.A.stop(); Motor.C.stop(); } }
UNIVERSIDAD DEL QUINDIO, INGENIERA ELECTRNICA, LABORATORIO #3 DE ROBTICA MVIL, PRESENTADO DURANTE EL SEGUNDO PERIODO DEL AO 2012 8 Naci en Armenia, Quindo el 2 de mayo de 1988, estudio la primaria en el Len de Greiff de Calarc, Culmino el bachillerato en el colegio Jorge Isaacs de Armenia y actualmente cursa noveno semestre de ingeniera electrnica en la Universidad del Quindo.