jump to navigation

Descubriendo el laberinto: Resumen (Aporte final) Junio 16, 2008

Posted by harsoon in Descubriendo el Laberinto.
Tags: , , , , , , , ,
trackback

Este proyecto consiste en enviar a los robots NXT a un laberinto para encontrar una salida, luego si uno de los robots la encuentra, debe comunicar la ruta más corta a la misma al resto de los robots.

Para conseguir esto se emplea el principio de la Estigmergia, que consiste en crear cambios en el ambiente de un modo u otro para indicar a los otros elementos del sistema mensajes que les guíen hacia un fin común, en este caso la salida. Colaboración sin mensajes directos entre los individuos, como lo visto en las hormigas o en otros insectos.

Para dar solución al problema, lo primero fue planificar un modo en que los robots pudiesen caminar por algún tipo de laberinto al tiempo que trazaban un mapa virtual del mismo para solucionar luego la ruta más corta, se evaluaron algunas posibilidades como emplear paredes con el sensor ultrasónico para detectarlas, pero esto implicaba un número demasiado alto de probabilidades en cuanto a giros y movimientos para controlar y dibujar el mapa virtual.

Así, siendo la primera versión del proyecto, se optó por trazar el mapa en el suelo, siguiendo las líneas de este con el sensor de luz, el diseño del robot por tanto requeriría llevar ese sensor abajo, apoyando el modelo propuesto por otros grupos para evitar el cambio del diseño sobre la marcha.

diseño de robot

Luego de tomar esta decisión, se procedió a obtener un mecanismo de programación que fuese compatible con nuestras necesidades, se decidió usar Java, con la parte lógica residiendo en una computadora central que transmitiese y recibiese resultados via Bluetooth hacia los robots. De este modo, la estructura estigmérgica sería la memoria de la computadora donde se dejaría un rastro virtual, emulando las feromonas, que trazaría un mata a seguir para los robots.

Se instaló el software y se hicieron las pruebas correspondientes, en este blog se puede obtener una guía de cómo usar estas librerías, icommand con más detalle, también esta la alternativa, Lejos que permite embeber código java en el robot, para hacerlo inteligente sin necesidad del ordenador.

Con el software funcionando se inicio con pruebas de rangos de colores que fueran fácilmente detectados por el sensor de luz, las primeras pruebas con matrices se realizaron con rojo para las aristas, negro para los nodos y blanco para el fondo, más adelante se tomo la decisión de cambiar el rojo a verde pues demostró ser más diferenciable del fondo que el rojo con la refracción de la luz proyectada por el robot. El tercer color fue el plateado para las salidas del laberinto.

Para hacer estas pruebas se inicia el programa y se tiene un botón que registra la intensidad lumínica leída actualmente. Aquí se incurrió en un problema serio para la funcionalidad del robot, pues aprendimos que estas lecturas se ven afectadas por la iluminación externa, de tal modo que cambios leves como una nube podrían ocasionar que el robot obtuviese otros valores, haciendo necesaria la calibración de los rangos lumínicos para cada intento.

Con la capacidad de leer las aristas y nodos del laberinto se prosiguió diseñando un mecanismo que le permitiera al NXT recorrer todo el laberinto hasta encontrar la salida, para esto se emplearon procedimientos para hacerlo girar y políticas en cuanto al número de giros a realizar en cada nodo y las direcciones por las cuales continuar en caso de perderse afuera de una arista. Básicamente la política fue girar hacia la izquierda en cada nodo.

Luego se creó un registro de que recorría el robot, el mapa estigmérgico haciendo un conteo de cuantos giros daba el robot y de sus direcciones actuales, norte, sur, este u oeste, sumado a un sistema coordenado.

Con este conocimiento existente en la memoria, se creó otro procedimiento que determinase si una arista ya había sido recorrida, de este modo, si el robot ya la había visitado, volvía a girar dejándola de lado para continuar por otro sector. Y así sucesivamente hasta encontrar la salida.

Se realizaron varias pruebas con formas de laberintos para determinar la efectividad del sistema de registro de mapa y eliminar los errores que pudiesen ocasionar enciclamientos u otros problemas en el recorrido.

Contando con el mapa en memoria y con el robot siendo capaz de llegar hasta la salida se prosiguió haciendo que al llegar al final, se analizará el mapa con otro algoritmo encontrando la ruta optima a la salida, dado que en la mayoría de casos contábamos con un solo robot, se programo que el robot se detuviera un momento al llegar a la salida, luego lo regresábamos a la entrada y el mismo robot recibía el mapa optimizado para recorrerlo como se observa en el video de la resolución de la matriz completa.

Se diseño otro algoritmo para recorrer el camino óptimo de la manera más eficiente posible.

Finalmente se diseñó el código para que dos robots interactuaran un explorador y otro que recorriese la ruta más corta a la salida cuando el primero se la comunicará por medio de la computadora, básicamente el mismo experimento anterior con la salvedad de que se transmitía la solución a un dispositivo distinto.

Los resultados se pueden apreciar en este video, el realizado sobre la matriz completa:

Recomendaciones:

  • Al trabajar con el robot, tomar en cuenta el ahorro en cuanto a las baterias puesto que la intensidad de estas es fundamental para tener una idea real de como funcionará el mismo, la carga completa no es igual a la escasa.

    Para optimizar el asunto energético, se recomienda contar con baterías recargables mejor si son dos sets ya que de este modo en días de trabajo pesados y siendo escasos los robots se puede tener un set cargando mientras se gasta el otro. También se recomienda contar con una cámara de video durante los experimentos, así se puede registrar y estudiar bien lo sucedido sin necesidad de repetir los experimentos de inmediato o con demasiada constancia.

  • Se requiere trabajar en un cuarto con iluminación uniforme, mejor si es constante y proveniente de un punto o varios justo arriba del laberinto esto porque si la luz proviene de modo sesgado, la intensidad lumínica será una de un dado del laberinto y otra cuando el robot llegue a otro lado, causando fallos en la lectura de los rangos.

    Para tener una idea de lo delicado de esto, notamos que en un experimento los robots tomaban bien los rangos, hasta que se aglomero gente alrededor, el cambio lumínico hizo que los rangos cambiaran grandemente, evitando el correcto funcionamiento.

  • Dado que el tema de la iluminación es tan complejo, se recomienda determinar algún sistema de calibrado automatico o mejores soluciones para la auto iluminación del robot durante los experimentos.
  • Con respecto a la parte motriz, es notable que la superficie debe ser plana y limpia para evitar que esto influya en la lectura de las posiciones actuales, además hay que ser cuidadosos con la intensidad que se da a los giros ya que puede causar que el robot no encuentre correctamente las aristas, tomar en cuenta, la intensidad de las baterías ya que los motores se comportan distinto de acorde a esta. La velocidad y los giros, también tienen que ser calibrados.

Mejoras Recomendadas:

  • Enviar a los robots al mismo tiempo cada uno creando su propio mapa, al salir uno, que los otros se acoplen a la ruta optima en tiempo real sin tener que empezar hasta ese momento.
  • Enviar a los robots al mismo tiempo pero que entre todos creen un solo mapa para hacer la búsqueda aún más eficiente.
  • Buscar alternativa para el mapa, considerar la alternativa de las paredes en vez del mapa visual para el laberinto.
  • Usar programas adentro del robot con alternativas como Lejos, para que el procesamiento sea dentro del NXT aunque habría que considerar factores como la muy baja cantidad de memoria en el mismo.
  • Dibujar visualmente el mapa generado con rastreo de las posiciones actuales de los robots.

Opinión personal del proyecto:

Es una idea muy buena para proyectos de inteligencia artificial ya que motiva la innovación en este campo llevando más clara la idea de una aplicación directa de lo que se está aprendiendo, aplicación en los robots, haciendo que estos se comporten de maneras inteligentes.

Además se puede incursionar en temas que no son muy usuales en nuestro medio o en general que no han sido muy estudiados como en este caso fue la estigmergia.   El tema de interactuar con hardware a este nivel trasladando lo programado a un nivel más perceptible es refrescante adentro de la carrera, ya que es motivante ver resultados más tangibles que solo los vistos a través de la pantalla, se hace en otros cursos, pero en el caso de los robots podemos concentrarnos más en el desarrollo de soluciones que en la construcción del hardware.

Será muy interesante ver como crece esta iniciativa y se dan más y mejores proyectos con los NXT en el futuro.

Haroldo Rojas

Esta versión de Descubriendo el laberinto, fue desarrollada por:

Keny Perez               2001-12674

Josué Goge                 2002-12482

Haroldo Rojas               2002-30358

Comentarios»

1. Mauricio - Junio 18, 2008

Felicitaciones, sigan adelante.

2. David Rodríguez 08018 estudiante de la UVG - Agosto 27, 2008

felicitaciones me pareció muy interesante. yo tengo dudas sobre si se podria hacer un proyecto que imita las tecnicas utilizadas en campos de batalla militar como por ejemplo una técnica de flanqueo usando el principio de la Estigmergia.

3. Miguel - Diciembre 9, 2008

que algoritmo usaste para la ruta mas corta?

4. Leyna - Septiembre 28, 2009

Hola, le cuento que estoy programando mi lego, pero cuando utilizo lal clase pilot me genera error al momento de compilar .
Deseo saber porque es el problema.
Ademas tengo problemas al calibrar el sensor de luz, necesito una mano. Gracias

5. jorge - Octubre 12, 2009

necesito saber que codigo utilizaste para que encuentre la ruta mas corta, estoy trabajando en un proyecto con lejos nxt y quiero hacer un trabajo similar. Porfavor si puedes compartir el código.