/Simulador Generico Butia
Contenido
Introducción
El propósito general de este proyecto es desarrollar un simulador genérico para utilizar con el robot butiá. Esto es un simulador que permita conectarse indiferentemente desde distintos entornos de desarrollo. Para evitar la extensión de los mismos mas allá del control directo del robot butiá se utilizará la misma interfaz de comunicación que la del Bobot-Server.
Investigación
Para desarrollar este software se estudiaron dos alternativas, ambas basadas en aplicaciones existentes.
- Etoys: se puede extender la aplicación, basada en etoys, que está siendo desarrollada en un proyecto de grado, ebutia. Este utiliza internamente una interfaz similar a la del bobot-server y parcialmente resuelto el problema de comunicación por sockets
- Physics: se puede extender la aplicación para desarrollar el simulador. Tiene resuelto el tema de física y está desarrollado en pyton lo que permite la comunicación por sockets.
Evaluación
Luego de investigar ambas alternativas se llegó a las siguientes conclusiones.
ventajas | desventajas | |
---|---|---|
etoys | Lenguaje y entorno conocidos | Reacciones físicas ante colisiones no implementadas. |
Detección de colisiones resuelta | Curva de aprendizaje del lenguaje alta, pero puede ser disminuida con un buen diseño, tutoriales y módulos previamente implementados. | |
Detección de colores debajo de objetos morph (escala de grises y o de luz ambiente) | ||
Implementación actuador con pitido ya resuelta | ||
Ya instalado en la ceibalita. | ||
physics | Detección de colisiones resuelta | Ambiente asume verticalidad, aunque se pueda quitar la gravedad no se encontró forma de hacer fricción contra al fondo (que oficiaría de suelo). Esto provoca que ante colisiones los objetos tomen una determinada velocidad sin detenerse luego. |
Reacciones físicas ante colisiones resuelta |
Resultado
Luego de evaluar los resultados se ha optado por realizar el simulador en etoys. debido a sus ventajas
Solución
Luego de estudiar distintas alternativas, apoyándose en el proyecto de grado “IDE de programación orientado al desarrollo de arquitecturas robóticas basadas en comportamientos”, se desarrollo una extensión a etoys. Se puede instalar desde dentro del entorno utilizando el gestor de versiones Monticello Browser, por lo que no es un requisito tener acceso a un usuario administrador para poder utilizarlo. En la solución implementada se han incluido cuatro módulos: butia, motores, grises y distancia. Si bien originariamente se habían implementado los últimos tres módulos, para poder ser invocado desde TurtleBots, se tuvo que incluir el módulo butia con la funcionalidad get_volt.
Diseño
A continuación se presenta un diagrama de clases simplificado de la extensión, con las principales clases, funciones de las mismas y atributos. Además se presenta una descripción de las clases mas importantes:
BSimulador: es el centro del sistema, el simulador. Es quien posee el player cuyo costume representa el robot. También contiene la lista de módulos que actúan sobre el mismo.
BSocket: se encarga de la comunicación. Recibe los pedidos a través de la red, se los envía al simulador para su procesamiento y devuelve el resultado de la ejecución de los mismos.
BThread: es quien marca el paso o tick dentro de la ejecución. En cada paso llama al simulador, quien llama a todos sus módulos, para ejecutar, en caso de ser necesario, las funciones de actuadores. Por ejemplo en cada paso se llama al módulo de motores, el cual si tiene las velocidades ingresadas se encarga de mover el robot.
BSimModulo: representa un módulo con todas sus funciones. Puede ejecutar funciones de retorno, provenientes del socket a través del simulador, así como también funciones de paso, originadas por el thread. Volviendo al ejemplo del módulo de motores, las funciones de movimiento del robot son funciones de paso y las de ingresar las velocidades son de retorno. Este sabe proporcionar una descripción de si mismo a través del método toString, así como también un nombre para el listado.
BSimFuncion: es utilizada únicamente para la descripción de una función del módulo a través del método toString. Esta se devuelve en el formato esperado por el bobot en la función DESCRIBE. Estos objetos son creados en el constructor del módulo correspondiente.
BSimLoader: esta clase es la encargada de cargar en la interfaz de etoys el botón el la barra principal para ejecutar el simulador, y el botón del halo que permite definir la altura de los objetos. Las clases en etoys son a su vez objetos únicos que se instancian al crear la clase (o al instalar la extensión en este caso) y se agregan a un diccionario global de clases. Al crearse todos los objetos, también los objetos clase, se llama a un método initialice. En este caso se utilizó para insertar el código deseado en la barra principal y en el halo. Se utilizaron dos métodos para la inserción de código. El primero consiste en agregar funciones que no existían y el segundo en agregar código a dos funciones existentes. Este último inserta código en la obtención de los botones de la barra y del halo. Para esto se obtienen los métodos correspondientes, se des-compilan, y se les agrega el código de nuestros botones y se vuelve a insertar la función sobre-escribiendo la anterior.
Módulos Implementados
Para poder realizar simulaciones se implementaron los siguientes módulos:
Sensores
- Distancia: se calcula la distancia mediante la intersección de un rectángulo "regla" como se muestra a continuación en el pseudocódigo:
se dibuja un rectángulo de ancho 1 y largo 200 en la parte delantera del butiá con la misma dirección que el butiá se setea la distancia mínima en 200 para cada objeto en la escena si el objeto tiene altura si el rectángulo intersecta al objeto se realiza 10 veces si el rectángulo intersecta al objeto se le quita la mitad de lo modificado la última vez (la primera vez a la mitad total) si no se le suma la mitad de lo modificado la última vez. fin si fin la distancia al objeto es el largo del rectángulo si la distancia al objeto es menor que la reservada la distancia mínima es la distancia al objeto fin si fin si fin si fin para devuelvo la distancia mínima.
- Escala de grises: se posiciona un objeto de tamaño 1 delante del butia y se consulta el color debajo de este.
Actuadores
- Motores: se ingresan las velocidades y luego cada un determinado tiempo el simulador recorre todos los módulos, en este se mueve el butiá considerando las velocidades seteadas para cada motor y las colisiones.
Trabajo a futuro
- Más Módulos: está previsto que se puedan agregar de forma sencilla nuevos módulos de sensores y actuadores.
- Construcción Gráfica: se puede extender la aplicación para que contemple el añadido gráfico de sensores y actuadores.
- Construcción con Coordenadas: otra posible extensión, similar al punto anterior, es añadir en la construcción de los módulos una ventana donde se consulten, por ejemplo las coordenadas de posición, o en el caso del sensor de distancia, la dirección en la que mide el mismo.
- Corrección del módulo motores: actualmente el módulo motores traza la trayectoria del robot, considerando dos motores posicionados en ambos laterales de la plataforma ubicados en la mitad de la misma.
- Ruido de Sensores: para realizar una simulación mas real, se puede añadir ruido a los valores devueltos por los sensores.
- Correctitud de valores de sensores: actualmente, por ejemplo en el módulo distancia, se considera el valor devuelto en base a lo que se traslada el butiá con el método de tortugarte fordward:X. Para generar una simulación mas precisa, se pueden considerar unidades y realizar pruebas con el simulador y el robot para ajustar más estas medidas.
Captura de pantalla
Tutoriales
Descarga e Instalación
Proximamente...
Ejemplo de simulación
Proximamente...
Integrantes
Alejandro Achkar