Semana 8. Turtlebot 2 Simulado
Hubo un parón durante una semana pero a la vuelta volví con las energías recargadas y logré conseguir el primer gran paso en mi TFG: la implementación completa simulada del Robot Turtlebot 2 para ROS Foxy.
Como comenté durante las primeras semanas, no hay soporte de Turtlebot 2 para esta distribución de ROS. Solamente hay soporte para la base kobuki en real. De modo que continué por donde lo dejé, ya tenía la base kobuki simulada, sólo faltaba implementar la estructura superior del robot incluyendo el laser RPLidar y una cámara (simulando una Astra o Xtion).
El robot Turtlebot 2 lo necesitábamos completamente en simulado para integrarlo en el futuro ejercicio de la plataforma de robótica Unibotics. De modo que creé un paquete denominado “turtlebot2” y diseñe los modelos URDF y XACRO necesarios para su correcta simulación.
XACRO es un lenguaje xml que nos permite generar estructuras macros para ficheros URDF de manera que conseguimos descripciones mucho más fléxibles, sencillas y depurables. La descripción de mi implementación de Turtlebot 2 reside en el siguiente fichero principal xacro que a su vez depende de otros ficheros secundarios.
<?xml version="1.0" ?>
<robot name="turtlebot2" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:include filename="$(find kobuki_description)/urdf/kobuki.urdf"/>
<xacro:include filename="$(find turtlebot2)/urdf/sensors/camera.urdf.xacro"/>
<xacro:include filename="$(find turtlebot2)/urdf/sensors/lidar.urdf.xacro"/>
<xacro:include filename="$(find turtlebot2)/urdf/structures.urdf.xacro"/>
<xacro:include filename="$(find turtlebot2)/urdf/colors.urdf.xacro"/>
<xacro:cylinder_structure name="tick1" x="0.08" y="0.14" z="0.2" length="0.33" radius="0.005" parent="base_link"/>
<xacro:cylinder_structure name="tick2" x="-0.09" y="0.12" z="0.2" length="0.33" radius="0.005" parent="base_link"/>
<xacro:cylinder_structure name="tick3" x="-0.09" y="-0.12" z="0.2" length="0.33" radius="0.005" parent="base_link"/>
<xacro:cylinder_structure name="tick4" x="0.08" y="-0.14" z="0.2" length="0.33" radius="0.005" parent="base_link"/>
<xacro:cylinder_structure name="tick5" x="-0.15" y="0.0" z="0.2" length="0.33" radius="0.005" parent="base_link"/>
<xacro:cylinder_structure name="laser_base" x="0.0" y="0.0" z="0.35" length="0.01" radius="0.18" parent="base_link"/>
<xacro:cylinder_structure name="middle_base" x="0.0" y="0.0" z="0.25" length="0.01" radius="0.18" parent="base_link"/>
<xacro:set_camera name="camera" xyz="0.13 0 0.32" rpy="0 0 0" parent_frame="base_link"/>
<xacro:set_lidar name="lidar" xyz="0 0 0.0275" parent_frame="laser_base_link"/>
</robot>
El resultado del Turtlebot 2 completo en simulado es el siguiente:
Posteriormente decidí ejecutar la implementación de Follow Person que hice en la semana 5 para comprobar que podía ejecutar toda la aplicación en ROS 2 sin necesidad de ROS Bridge. Deshacerme de ROS Bridge era clave para que no me diera problemas en un futuro con el desarrollo de las imágenes Docker.