En un artículo anterior les presenté Azolla, un programa muy simple que permite simular el comportamiento de varios robots que se mueven sobre un plano bidimensional mediante código escrito en LUA. En este artículo profundizaremos mas en el uso y funcionamiento de Azolla a través de un ejemplo.

Para estudiar más el funcionamiento de Azolla vamos a proponernos escribir el código para que nuestro robot sea capaz de evitar obstáculos y moverse de manera autónoma dentro de un recinto. Este tipo de movimiento se llama “navegación local” en róbotica y requiere que el robot sea capaz de reconocer su entorno y actuar en consecuencia. Un ejemplo podría ser un coche autónomo, que mientras se dirige desde su posición inicial hasta su destino (digamos, nuestro hogar) debe ir navegando por las calles mientras esquiva otros autos, peatones, o cualquier otro tipo de obstáculo que se atraviese en su camino.

Los robots simulados por Azolla cuentan con hasta treinta sensores de distancia para detectar obstáculos a su alrededor (numerados de 0 a 29). El primero (numero 0) se ubica en la parte delantera y la numeración sigue en el sentido horario.

Numeración de los sensores del robot

Los sensores simulados son del tipo sonar, como los conocidos sensores por ultrasonidos. Estos tienen una región de sensibilidad que se puede representar como un cono en su parte anterior, denominado “cono de radiación” (radiaton cone). Para ajustar la simulación a distintos tipos de sensores, Azolla nos permite especificar al ángulo de este cono en las propiedades del robot.

Otra característica importante de estos sensores es que tienen un rango en el que pueden hacer mediciones fiables. Frente al sensor hay una zona ciega, que determina la distancia mínima que puede medir (minimum distance) y sus características definirán también una distancia máxima, mas allá de la cual ya no pueden hacer mediciones (maximum distance). Azolla nos permite fijar ambos valores, también dentro de las propiedades del robot.

Finalmente, los sensores reales no son exactos. En el caso de los ultrasónicos, una fuente de error común son los llamados reflejos “multicamino” (multipath) que llegan al receptor luego de rebotar en mas de un obstáculo. Azolla permite simular este comportamiento introduciendo errores aleatorios en las mediciones realizadas (Sensor Gaussian Noise)

Propiedades del robot y los sensores


Para poner en práctica lo que hemos visto vamos a escribir un programa muy simple para esquivar obstáculos. Haremos que el robot se mueva hacia al frente hasta que encuentre un obstáculo, en cuyo caso girará a la izquierda buscando un espacio libre. Es similar al algortimo denominado “seguidor de pared” usado para buscar la salida de un laberinto haciendo que el robot se mueva manteniendo la pared a su derecha.

Dejaremos un solo sensor de distancias, con un rango máximo de 50 centímetros. También cambiemos el tamaño del robot a 5 cm de diámetro, para no hacer tan grande el mundo.

Configuración del robot para el ejemplo

Luego creamos un mundo con algunos obstáculos y paredes

El robot y su mundo

El código en LUA consiste en un bucle infinito dentro del cual se lee constantemente la distancia entre el robot y los obstáculos que tiene al frente. Si el camino “está liberado”, es decir no hay nada a una distancia menor o igual a 15 cm, el robot avanza en línea recta. Si en cambio hay algo adelante, el robot gira hacia la izquierda hasta que encuentra un camino despejado nuevamente.

Este algoritmo es muy simple y se muestra aquí sólo como un ejemplo. El robot en realidad no tiene un objetivo a donde ir y “vaga” evitando lo que tiene al frente. Puede quedar encerrado en determinadas zonas, repitiendo su trayectoria.

El código en Lua

Para terminar, un video del código del ejemplo (el software que empleo para las capturas acelera los movimientos del robot)