Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
Capítulo 3
Implementación del Robot
3.1 Creación del robot Para el diseño del robot se utilizó el kit de Robotics Inventions System. Las razones más
importantes por las que se decidió utilizar este kit se resumen principalmente en que es
un utensilio muy fácil de usar debido a que nos proporciona las herramientas básicas para
la creación de prototipos.
El diseño del robot se basó partiendo de un modelo simple parecido a un carrito. En
donde en base a la complejidad de las tareas se fue modificando su construcción inicial
llegando a desarrollar una herramienta más poderosa de trabajo de acuerdo a nuestras
necesidades.
En esta figura se muestra el prototipo del robot:
Figura 3.1 Prototipo del Robot
Sensores de Tacto
Transmisor de Infrarrojos
Sensor de Luz
Motores
Los sensores de tacto juegan un papel muy importante en nuestro robot debido a que
mediante ellos podemos determinar las colisiones del robot con algún otro objeto. En este
robot se utilizaron dos sensores de tacto con los que se puede determinar si un objeto se
encuentra del lado izquierdo o derecho.
Figura 3.2: Sensores de Tacto
Sensor de luz infrarroja, se utiliza principalmente para determinar un objeto con el fin de
evitar un choque entre nuestro robot y el objeto. La ventaja de este sensor es que nos
podemos anticipar a un choque y la desventaja de este es que si la calibración del sensor
no es la correcta puede fallar debido a que varía dependiendo la intensidad de luz con la
que se cuente en el espacio en que estemos trabajando.
Figura 3.3: Sensor de Luz
3.2 Construir un área de Trabajo
Para evaluar el comportamiento del robot se construyó un área de pruebas que cuenta
con paredes en donde podemos comprobar el correcto funcionamiento de los sensores de
tacto, así como también se puede verificar que el sensor de luz trabaje de manera
correcta debido a que las paredes son de color negro lo cual facilita identificar un cambio
de luz.
Figura 3.4: Área de Pruebas
3.3 Diseñar los Comportamientos
Los programas se encuentran divididos por procedimientos que realizan diferentes tareas
dándole a nuestro robot la oportunidad de efectuar diversos movimientos. A continuación
se describen los procedimientos.
En el primer procedimiento crucero está basado en el comportamiento reactivo y se
realiza mediante movimientos simples que se ejecutan de manera aleatoria.
Lista de movimientos:
a) Alto total, aquí se paran los motores A y C.
b) Delante, para el movimiento hacia delante lo que se hace es mandar un impulso con la
instrucción fwd a los dos motores que están conectados en las entradas A y C del RCX.
c) Atrás, este movimiento es igual al de delante a diferencia de que la instrucción que se
manda es rwd.
A B C
A B C
A B C
d) Moverse a la derecha, aquí se obstruye la corriente al motor C dejando pasar la carga
solo por el motor A con la instrucción fwd.
e) Moverse a la derecha hacia atrás, se obstruye la corriente al motor C dejando pasar la
carga solo por el motor A con la instrucción rwd.
f) Girar a la derecha, se manda la instrucción fwd al motor A y rwd al motor C.
g) Moverse a la izquierda, aquí se obstruye la corriente al motor A dejando pasar la carga
solo por el motor C con la instrucción fwd.
h) Moverse a la derecha hacia atrás, se obstruye la corriente al motor A dejando pasar la
carga solo por el motor C con la instrucción rwd.
A B C
A B C
A B C
A B C
A B C
i) Girar a la izquierda, se manda la instrucción rwd al motor A y fwd al motor C.
Estos movimientos se pueden ejecutar en forma directa o combinándolos, de manera que
si los combinamos se pueden producir un gran número de movimientos.
Public Function Crucero()
Dim valorx, numeroveces, ini As Integer
numeroveces = Rnd * 10
For ini = 0 To Int(numeroveces)
If Int(valorx) = 0 Then
rcx.Off MOTOR_A + MOTOR_C
ElseIf Int(valorx) = 1 Then
rcx.Off MOTOR_A
rcx.SetFwd MOTOR_C
rcx.On MOTOR_C
ElseIf Int(valorx) = 2 Then
rcx.Off MOTOR_A
rcx.SetRwd MOTOR_C
rcx.On MOTOR_C
ElseIf Int(valorx) = 3 Then
rcx.SetFwd MOTOR_A
rcx.On MOTOR_A
rcx.Off MOTOR_C
ElseIf Int(valorx) = 4 Then
rcx.SetFwd MOTOR_A + MOTOR_C
rcx.On MOTOR_A + MOTOR_C
A B C
ElseIf Int(valorx) = 5 Then
rcx.SetFwd MOTOR_A
rcx.SetRwd MOTOR_C
rcx.On MOTOR_A + MOTOR_C
ElseIf Int(valorx) = 6 Then
rcx.SetRwd MOTOR_A
rcx.On MOTOR_A
rcx.Off MOTOR_C
ElseIf Int(valorx) = 7 Then
rcx.SetRwd MOTOR_A
rcx.SetFwd MOTOR_C
rcx.On MOTOR_A + MOTOR_C
ElseIf Int(valorx) = 8 Then
rcx.SetRwd MOTOR_A + MOTOR_C
rcx.On MOTOR_A + MOTOR_C
End If
valorx = Rnd * 8
Next
rcx.Off MOTOR_A + MOTOR_C
End Function
En el segundo procedimiento colisión lo que se hace es utilizar los sensores de tacto. El
robot camina hacia delante tratando de evitar obstáculos, los sensores detectan si un
objeto se encuentra delante del robot y al detectar el objeto se ejecuta una instrucción
para evadir el objeto.
Figura 3.5: Colisión utilizando los sensores de tacto
En el tercer procedimiento evasión, lo que se realiza es utilizar el sensor de luz infrarroja.
Aquí el robot se desplaza hacia delante pero cuando el sensor identifica un objeto que
está fuera del rango de valores permitidos de iluminación efectúa una instrucción de
evasión.
Figura 3.6: Evasión utilizando el sensor de luz
Diagrama del funcionamiento de colisión y evasión combinados:
Figura 3.7: Diagrama de colisión y evasión
Sensor Izquierdo
Tacto
Sensor Derecho
Tacto
Sensor de Luz
Evalúa Colisión
0 o 1
Movimiento Izquierda
Movimiento Derecha
Evalúa Evasión
Explorar Movimiento
Adelante
Efectuar Resultado
Movimiento
Para el procedimiento deliberativo. Se utilizó un Pathfinding que es un algoritmo que
normalmente se usa en juegos y sirve para encontrar un ruta.
En este comportamiento se empleó el Pathfinding realizado por Julien Lecomte en donde
solo se programo la parte para la comunicación con el kit Lego. Para que al momento de
resolver una ruta exista la opción de enviar al robot los resultados generados por el
algoritmo [www7].
Para el procedimiento híbrido en donde se encuentra el algoritmo. Se utilizaron los
procedimientos reactivos combinándolos con un algoritmo de evaluación con el fin de
que los movimientos del robot sean realizados de manera inteligente simulando el
comportamiento que hace una persona al evaluar un problema.
A continuación se explica el algoritmo que se utilizó. El algoritmo que se utilizó está
basado en el algoritmo de aprendizaje de Watkins llamado algoritmo Q. Este algoritmo se
caracteriza por no necesitar de una representación del mundo así como también tiene la
capacidad de adaptarse en tiempo real [Watkins89].
Algoritmo de Aprendizaje Q: Q se aproxima a Q* usando diferencias temporales.
En donde Q(s,a) se aproxima a Q(s’,a’) estimando el valor de la acción Q(s,a) en función
de la recompensa r y del valor estimado del estado futuro de la transición Q*(s’,a’).
El algoritmo funciona de la siguiente manera. En la interfaz seleccionamos el algoritmo y
realizamos un clic en el botón de aceptar:
Figura 3.8: Área de Trabajo El algoritmo corre en tiempo real evaluando el comportamiento del robot. Donde primero
se ejecuta la exploración de manera que los sensores de tacto y luz nos permiten conocer
las entradas preceptúales del entorno en el que nos encontramos.
Para esto se cuenta con un vector que está determinado a evaluar el estado actual del
robot en donde nuestro vector determina los cambios de luz, detección de obstáculos
mediante el uso del sensor derecho o izquierdo de tacto así como también la posibilidad
de que un movimiento sea repetitivo.
Una vez obtenida esta información se premia o se castiga el movimiento con el fin de
evitar los choques con objetos para después evaluarlos en la función de aprendizaje Q.
Como resultado y utilizando la lista de movimientos posibles del robot se efectúa un
movimiento.
El algoritmo va aprendiendo conforme al uso que se le dé entre más exploraciones se
realicen y evalúen los resultados mejorarán dándonos la posibilidad de que con el paso
del tiempo éstos se reflejen en un comportamiento inteligente de nuestro robot.
3.4 Información de las Pruebas
El programa principal brinda la oportunidad de seleccionar individualmente cada uno de
los comportamientos algunos de estos se descargan y posteriormente se corren en el robot
y los otros se pueden controlar en tiempo real, ya que al momento de presionar alguno de
los botones en nuestra interfaz el robot realiza un movimiento.
Las pruebas se realizaron por separado se evaluaron los diferentes comportamientos en
nuestra área de pruebas, que como se mencionó anteriormente, contiene varias paredes
que representan obstáculos, también se cuenta con un punto inicial de donde el robot
partirá tratando de llegar a la salida o meta.
Sé probó cada uno de los comportamientos mostrándonos diferentes resultados. Para
verificar que un programa esta funcionando correctamente la interfaz se conecta con
nuestro Lego en caso de que esto no se realice, el sistema enviará un mensaje de error, el
siguiente paso sería seleccionar el tipo de comportamiento que se desee probar. En el área
de mensajes se desplegará un mensaje y se escuchará un sonido en el robot con el cual
nos aseguramos que el programa haya sido descargado de manera correcta.
El comportamiento de crucero se caracterizó por ser el comportamiento más malo debido
a que la mayor de las veces no logró pasar ningún obstáculo, quedando atrapado o
bloqueado por alguna de las paredes.
Figura 3.9: Crucero
En el comportamiento de Colisión se realizaron varias pruebas en donde se encontraron
varios datos interesantes, uno de ellos fue que al detectar la colisión era mejor realizar
movimientos en pequeños intervalos de tiempo debido a que así se puede contornear
mejor los obstáculos y evitar el choque con otro obstáculo, por otro lado este tipo de
comportamiento es muy rápido y la mayor parte de las veces llega a su objetivo.
Figura 3.10: Colisión
El comportamiento de Evasión fue tal vez el más difícil de usar, ya que la mayor parte de
las veces el factor de iluminación afectó las pruebas debido a que el sensor infrarrojo es
muy sensible y la calibración debe de realizarse antes de hacer cualquier tipo de prueba,
este comportamiento no siempre es muy efectivo, pero a diferencia del de colisión éste
evita el contacto con los objetos, por lo que en un espacio reducido es una excelente
opción siempre y cuando esté bien calibrado.
Figura 3.11: Evasión
El algoritmo mostró datos muy interesantes ya que la primera vez que sé probó resultó
muy torpe en los movimientos del robot pero al volverlo a correr varias veces, más o
menos en promedio más de cien veces, logró aprender y descifrar la ruta exacta. Siendo
éste el comportamiento más preciso y efectivo pero él más lento en terminar las pruebas y
que al modificarse el espacio de trabajo tenía que volver a calcular sus movimientos.
Figura 3.12: Algoritmo