Sunteți pe pagina 1din 8

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.

Palabras claves Java, Comportamiento, Control,
Accin, Sensor.

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.

El cdigo implementado para esto es:



import java.beans.beancontext.BeanContext;
import java.util.Random;
import josx.robotics.*;
import josx.platform.rcx.*;
import josx.robotics.TimingNavigator;

public class test {
public static void main(String[] args) {
Sensor.S1.setTypeAndMode

(SensorConstants.SENSOR_TYPE_TOUCH,SensorConstants.SENSO
R_MODE_BOOL);

Sensor.S3.setTypeAndMode(SensorConstants.SENSOR_TYPE_TOU
CH,

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() {

Sound.systemSound(false, 3);
Motor.A.stop();
Motor.C.stop();
}
}

class motor2 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.C.forward();
Motor.A.backward();
}

public void suppress() {
Sound.systemSound(false, 3);
Motor.A.stop();
Motor.C.stop();
}
}

class avoidObstacles implements Behavior {
boolean myS1State;
boolean myS3State;
boolean myTakeControl;
boolean whichSensor;

public boolean takeControl() {
myS1State = Sensor.S1.readBooleanValue();
myS3State = Sensor.S3.readBooleanValue();
if (myS1State)
{
myTakeControl = true;
whichSensor = true;
}
else
if (myS3State)
{
myTakeControl = true;
whichSensor = false;
}
else
myTakeControl = false;

return myTakeControl;
}

public void action() {
Sound.systemSound(false, 2);
if (whichSensor) {
Motor.A.backward();
Motor.C.backward();
try {
Thread.sleep(1000);
} catch (InterruptedException ie) { }
Motor.A.forward();
Motor.C.backward();
try {
Thread.sleep(500);


} catch (InterruptedException ie) {
}
} else {
Motor.A.backward();
Motor.C.backward();
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
}
Motor.A.backward();
Motor.C.forward();
try {
Thread.sleep(500);
} catch (InterruptedException ie) {
}
}
}

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.

El cdigo implementado para esto es:


import josx.robotics.*;
import josx.platform.rcx.*;

public class test {
public static void main(String[] args) {

Sensor.S1.setTypeAndMode(SensorConstants.SENSOR_TYPE_TOU
CH,SensorConstants.SENSOR_MODE_BOOL);

Sensor.S2.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGH
T, SensorConstants.SENSOR_MODE_RAW);

Sensor.S3.setTypeAndMode(SensorConstants.SENSOR_TYPE_TOU
CH, SensorConstants.SENSOR_MODE_BOOL);

Sensor.S1.activate();
Sensor.S2.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 seguirluza= new seguirluz();
Behavior luzdetecta=new luzdetect();

Behavior[] arrayBehaviors = { goForwardB0, motor1a, motor2a,
seguirluza, avoidObstaclesB1, luzdetecta};

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();

}


UNIVERSIDAD DEL QUINDIO, INGENIERA ELECTRNICA, LABORATORIO #3 DE ROBTICA MVIL,
PRESENTADO DURANTE EL SEGUNDO PERIODO DEL AO 2012
6

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();

}

public void suppress() {

Sound.systemSound(false, 3);
Motor.A.stop();
Motor.C.stop();
}
}

class motor2 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.C.forward();
Motor.A.backward();
}

public void suppress() {

Sound.systemSound(false, 3);
Motor.A.stop();
Motor.C.stop();
}
}

class seguirluz implements Behavior {
public boolean takeControl() {
boolean ver;
int myS2State;
myS2State = Sensor.S2.readRawValue();
LCD.showNumber(myS2State);

class seguirluz implements Behavior {
public boolean takeControl() {
boolean ver;
int myS2State;
myS2State = Sensor.S2.readRawValue();
if(myS2State<=700){
ver=true;

}else{
ver=false;
}
return ver;
}

public void action() {

Motor.C.forward();
Motor.A.forward();
}

public void suppress() {
Sound.systemSound(false, 3);
Motor.A.stop();
Motor.C.stop();
}
}

class luzdetect implements Behavior {
public boolean takeControl() {
boolean ver;
int myS2State;
myS2State = Sensor.S2.readRawValue();
LCD.showNumber(myS2State);

if(myS2State>=490 && myS2State<=545){
ver=true;

}else{
ver=false;
}
return ver;
}

public void action() {

Motor.C.stop();
Motor.A.stop();
}

public void suppress() {

Sound.systemSound(false, 3);
Motor.A.stop();
Motor.C.stop();
}
}

class avoidObstacles implements Behavior {
boolean myS1State;
boolean myS3State;
boolean myTakeControl;
boolean whichSensor;

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.

Jair Alejandro Aristizabal

else
if (myS3State)
{
myTakeControl = true;
whichSensor = false;
}
else
myTakeControl = false;

return myTakeControl;
}

public void action() {
Sound.systemSound(false, 2);
if (whichSensor) {
Motor.A.backward();
Motor.C.backward();
try {
Thread.sleep(1000);
} catch (InterruptedException ie) { }
Motor.A.forward();
Motor.C.backward();
try {
Thread.sleep(500);
} catch (InterruptedException ie) {
}
} else {
Motor.A.backward();
Motor.C.backward();
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
}
Motor.A.backward();
Motor.C.forward();
try {
Thread.sleep(500);
} catch (InterruptedException ie) {
}
}
}

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.

S-ar putea să vă placă și