Azolla, simulador 2D de robots programable en LUA

La construcción de robots requiere no sólo de un diseño de hardware que incluya tanto las partes mecánicas como electrónicas, sino también del software que controla su comportamiento. Es precisamente en esta etapa de diseño del software que resulta particularmente útil un programa de simulación que nos permita trabajar en el algoritmo del robot sin la necesidad de cargar y probar una y otra vez distintas versiones para comprobar su funcionamiento. En este artículo les presento un simulador bastante sencillo y fácil de aprender.

Existen varios programas que nos permiten simular el funcionamiento de distintos tipos de robots programandolos en una variedad de lenguajes. Por ejemplo V-Rep y Gazebo son dos potentes simuladores en 3D que nos permiten crear escenarios en los que poner a prueba el funcionamiento de nuestros robots. Sin embargo, esta potencia trae aparejada una complejidad que requiere de tiempo y esfuerzo para aprender a aprovecharlos.

Para quienes recién se inician en el mundo de la robótica, les presento aquí un simulador mucho mas modesto llamado “Azolla” que es capaz de simular el comportamiento de varios robots sobre un plano en dos dimensiones. Los robots son del tipo “rover”, con dos ruedas de control diferencial (es decir, se puede controlar la velocidad de cada una por separado) y pueden tener hasta seis sensores para medir la distancia hasta un obstáculo. Se puede diseñar libremente el entorno en el que se mueve el robot usando figuras geométricas sencillas y su comportamiento se puede controlar escribiendo el código en el lenguaje LUA. Azolla es totalmente gratuito y funciona sobre Windows,

Fig. 1. Pantalla principal del simulador Azolla

LUA es un lenguaje desarrollado en Brasil que tiene una sintaxis sencilla, es simple de utilizar y con numerosas aplicaciones. Dentro de Azolla podemos escribir el programa en LUA que controla al robot que se está simulando, controlando sus movimientos y leyendo sus sensores. De esta manera podemos probar distintos algoritmos de navegación a través de problemas clásicos como evitar obstáculos, seguir paredes, resolver laberintos, etc.

Azolla incluye varias funciones que sirven para controlar los robots simulados. Todas ellas se invocan usando la sintaxis azolla:nombre_de_funcion. A continuación se listan todas con una breve explicación de su uso:

stepforward (): Realiza la simulación de todos los robots. Esta función debe ser invocada de manera continua dentro de un bucle.

setspeed (integer left, integer right) : Especifica la velocidad de los motores del robot (motor izquierdo, motor derecho)

readsensor (int sensor_nro) : Devuelve la distancia (en cm) medida por el sensor identificado como “sensor_nro”

getangle () : Devuelve la posición angula del robot actual en radianes

getnumofrobots () : Devuelve la cantidad de robots en la simulación.

getposition () : Devuelve la posición x,y del robot activo

gettarget (num) : Devuelve la posición x,y del objetivo identificado como “num”

textline (string mensaje) : Muestra “mensaje” en la pantalla

setactiverobot (int num) : Activa el robot identificado como “num”

El procedimiento para hacer una simulación es el siguiente: luego de abrir Azolla nos aparece un robot en pantalla que podemos ubicar en cualquier posición desplazándolo con el mouse. Si le hacemos doble click, aparecerá la venta de propiedades del robot, donde podemos cambiar diferentes parámetros del mismo.

Para escribir el código que define el comportamiento del robot, hacemos click en View – Editor o pulsamos Ctrl+E. Se abre el editor de código, donde debemos escribir el programa en LUA. A modo de ejemplo les muestro este programa mínimo, que simplemente pone a moverse al robot hacia adelante

Fig. 2. Código de ejemplo

En el código del ejemplo, azolla.main es la función que contiene el código y siempre debe estar presente. Lo que sigue es un bucle infinito (los programas de robots generalmente tienen esta forma) dentro del cual se llaman dos funciones: azolla:setspeed que fija la velocidad de los dos motores del robot a 20 (y por tanto hace que se mueva hacia adelante) y azolla:stepforward que es la función que realiza la simulación propiamente dicha (y que también debe estar siempre presente).

A continuación construimos el “mundo” con el que interacturá nuestro robot. Para dibujarlo contamos con elementos geométricos muy sencillos, como rectángulos, circulos y líneas.

Fig. 3. Herramientas para dibujar el mundo

Para este ejemplo, dibujamos un simple rectángulo que hará las veces de paredes dentro de las cuales se moverá el robot.

Fig. 4. El robot dentro de un recinto rectangular

Si el robot quedó fuera del rectángulo o una posición no deseada, podemos simplemente arrastrarlo con el mouse o volverlo a su posición inicial con la opción Robot – Reset position del menú principal.

Para iniciar la simulación, simplemente pulsamos F5 o Simulation – Run desde el menú.

En otros artículos les mostraré mas opciones de Azolla y otros ejemplos.

Más información

Página del proyecto en Code Project

Página oficial del lenguaje LUA


2 comentarios en «Azolla, simulador 2D de robots programable en LUA»

Responder a Orlando Cancelar la respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias