Semana 14. Plantilla web (Gazebo y Teleoperador)
Continué con el desarrollo de la plantilla web de mi ejercicio Sigue Personas Simulado.
Los primeros subobjetivos que conseguí fueron los siguientes:
- Crear una entrada para el ejercicio en el menú de Robotics Academy
- Lanzar el mundo del hospial de gazabo mediante el Manager
- Desarrollar el teleoperador del modelo para la plantilla web
- Crear las primeras funciones del módulo HAL (setV y setW) y establecer su conexión con los tópics del robot.
Inicialización de la plantilla para Robotics Academy
Para lograr que mi ejercicio se pudiera acceder a través del menú de Robotics Academy, tuve que incluirlo a través de la página de administración del servidor Django en local, logueándome a través de la dirección: http://127.0.0.1:8000/admin/ con usuario: “user” y contraseña: “pass”. Una vez dentro, añadí una entrada al ejercicio y el resultado fue el siguiente:
Lanzamiento de Gazebo desde el Manager
Este subobjetivo fue el más difícil de la semana. En un principio usaba el contenedor del RADI 4.2.0, para probar mis desarrollos. En él me instalé todo lo necesario: Turtlebot2 y mundo del hospital. El problema era que todos los demás ejercicios lanzaban bien Gazebo menos mi entorno simulado y no tenía manera de comprobar cuál era el problema (GAZEBO_MODEL_PATH, launchers …) porque dentro del contenedor no se puede lanzar gzclient mediante el terminal. De modo que se me ocurrió instalarme nvidia-docker, usar el comando xhost y compartiendo la variable de entorno DISPLAY y el directorio /tmp/.X11-unix/ para que todas las aplicaciones gráficas que lanzará en el contenedor pudiera visualizarlas en mi entorno local. Al final, el mundo del hospital se lanzaba bien, el problema estaba en el comando “gz stats” que ejecutaba el manager.py y bloqueaba la ejecución de gazebo. Seguiré investigando como arreglarlo.
Teleoperador del modelo de la Persona para la plantilla web
Desarrollar la conexión interna del teleoperador fue más sencillo que el subobjetivo anterior:
- Añadí el botón de Teleoperación en el menú superior de botones del ejercicio.
- Definí en ws_code.js los eventos del Botón mediante Javascript (activación y desactivación de la teleoperación) y la transmisión de mensajes mediante el Websocket (#teleop).
- Definí los eventos de pulsación (AWSD) y su transmisión de mensajes mediante el Websocket (#key). Estos mensajes se mandarían solo sí la teleoperación estuviera activada.
- Creé en el exercise.py, el cliente UDP que se conectaría a través del Servidor del Plugin y definí la transmisión de mensajes
A continuación muestro el lanzamiento del mundo del Hospital a través del Manager, y el funcionamiento del Teleoperador:
Primeras funciones del módulo HAL
Implementé las primeras funciones del módulo HAL (Hardware Abstraction Layer): setV(vel) y setW(vel). Para ello, me guié del ejemplo de Vacuum Cleaner del RADI 3 para entender cómo funcionaba internamente el módulo y lo fui poco a poco adaptando para ROS 2 Foxy.