Semanas 5 y 6. Intentando controlar a NAO
Estas 2 semanas se dedicaron aintentar controlar el modelo del NAO por si solo, sin la aplicación demo de gazebo.
Para esto, lo que se intentó fue abrir el modelo de gazebo como tal, pero, me aparecía el siguiente mensaje:
Por lo que, toda la semana 5 se dedicó a intentar entender dónde estaban esos plugins y por qué me aparecí aese mensaje, sin éxito.
Sin embargo, al principio de la semana 6, descubri que el problema estaba en que no estaba lanzando el modelo correctamente, ya que usaba la interfaz gráfica de gazebo, daba open model y seleccionaba el modelo.
Pero, investigando unos días más, descubrí que se podían lanzar los modelos desde el terminal, usando el comando ‘gz sim nombre_modelo’, lo probé, y, efectivamente, el modelo de mi robot aparecía en la simulación:
Y, al probar diferentes comandos del propio gazebo en esta simulación, comprendí que lo de los plugins no me hacía falta, pues funcionaba correctamente
Pero, el objetivo que tenía no era ese, sino intentar controlar el NAO con Ros2.
Para hacerlo, primero intenté utilizar la herramienta de ros2 ros_gz_bridge, que promete hacer de puente entre topics de gazebo y topics de ros, sin embargo, no conseguí nada, sólo crear el puente:
Después de un rato de investigación, me di cuenta de que estab haciendo mal el puente, ya que éste debería ir a un topic ya existente, sin embargo, los topics que me ofrecía NAO tenían la siguiente forma:
Como se puede observar, contenían números en su nombre, cosa que ros2 no acepta a la hora de crear topics, por loque no podía crear el puente con estos topics. Me tocó cambiar el nombre a todos ellos desde el modelo sdf, añadiendo en el apartado plugin una línea con el nombre que qería para el topic.
Una vez hecho esto, los topics tenían el siguiente aspecto:
Sin embargo, al intentar hacer el puente y publicar desde ros, obtenía el mismo resultado que antes, nula comunicación.
Por lo que comencé a mirar tutoriales de cómo podría hacer esto, y encontré uno muy bueno que explicaba que hacía falta un fichero launcher para poder hacer el bridge a la vez que se lanzaba la simulación:
Y, siguiendo este tutorial, y mucha más investigación, conseguí controlar por fin el Nao con ros:
Por lo que, sólo faltaba conectar el resto de topics (sólo tenía conectado el yaw del cuello del robot) y hacer un programa para publicar mensajes en ellas, para ahorrarnos el tener que hacerlo todo desde el terminal.
Cabe destacar que el robot comienza en esa posición debido a las especificaciones de su sdf.
Después, lo que hice fue actualizar mi dockerfile para que mi docker tuviera “acceso directo” a ros-gz-sim y a ros-gz-brige, ya que, antes de hacer esto, tenía que instalarlos al abrir el docker por primera vez.
Por último, añadí a mi launcher los topics restantes y por fin pude hacer un controlador de python para mover el robot en lugar de hacerlo con el terminal.
Para ello, me cree un nuevo paquete para soportar aplicaciones python, y allí copié el launcher y cree un fichero nao_controller.py, que también moví a este nuevo paquete porque lo cree en el anterior sin darme cuenta de que allí no funcionaría.
Una vez preparado el nuevo paquete, hice que nao moviese la cabeza de lado a lado usando este fichero nao_controller.py: