Setup
Levantar el simulador
Cloná, compilá y ejecutá el simulador de Donatello.
Al terminar, vas a poder mover Donatello desde el teclado y comprobar sus interfaces principales.
En esta guía
06 seccionesAhora vamos a crear un workspace, compilar el repositorio y abrir Donatello en Gazebo y RViz. Hacé este recorrido desde una terminal nueva para trabajar con el entorno de ROS 2 ya cargado.
Qué vas a dejar funcionando
Donatello va a quedar compilado dentro de tu workspace, abierto en Gazebo y RViz, y listo para recibir comandos de velocidad desde el teclado.
Qué necesitás
- ROS 2 Humble, Gazebo y RViz funcionando.
git,rosdepycolconinstalados.- Aproximadamente 15 GB libres para dependencias, compilación y archivos del simulador.
Pasos
1. Crear el workspace
mkdir -p ~/rosmaster_ws/src
cd ~/rosmaster_ws/src
2. Clonar el repositorio
git clone --branch jar2026-v1 https://github.com/AIRclub-UdeSA/yahboom_rosmaster.git
3. Instalar dependencias
source /opt/ros/humble/setup.bash
cd ~/rosmaster_ws
rosdep update
rosdep install --from-paths src --ignore-src -r -y --rosdistro humble
rosdep revisa los paquetes del workspace e instala las dependencias externas que todavía no están en tu máquina.
4. Compilar
cd ~/rosmaster_ws
colcon build --symlink-install
source install/setup.bash
En cada terminal nueva necesitás cargar ROS 2 y el overlay del workspace:
source /opt/ros/humble/setup.bash
source ~/rosmaster_ws/install/setup.bash
Si agregaste el primer comando a .bashrc durante la instalación de ROS 2, solo tenés que ejecutar el segundo.
5. Lanzar la simulación
ros2 launch yahboom_rosmaster_bringup rosmaster_x3_sim.launch.py
El arranque es escalonado: primero abre Gazebo, después crea el robot y finalmente inicia sus interfaces y RViz. Esperá estos mensajes antes de intentar moverlo:
Configured and activated joint_state_broadcaster
Publishing wheel-state odometry from /joint_states to /odom
Donatello debería aparecer en Gazebo y RViz. Cuando la odometría empieza a publicarse, el robot está listo para recibir comandos.
6. Moverlo desde el teclado
Instalá el nodo de teleoperación:
sudo apt install -y ros-humble-teleop-twist-keyboard
En una segunda terminal con los dos entornos cargados, ejecutá:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
La propia herramienta imprime el mapa de teclas. Usá i, j, l y , para el movimiento convencional. Para desplazarte de costado o en diagonal sin girar, mantené Shift y usá las combinaciones holonómicas en mayúscula que aparecen bajo Holonomic mode.
Mantené enfocada esa terminal mientras manejás y dejá espacio libre alrededor del robot.
Qué deberías ver
- En Gazebo, el chasis se mueve y las ruedas mecanum responden al comando.
- En RViz, cambian la pose y la odometría mientras llegan nuevas mediciones.
- En la terminal de teleoperación, la velocidad actual se actualiza con cada tecla.
Podés inspeccionar el comando enviado desde una tercera terminal:
ros2 topic echo /cmd_vel
Interfaces principales
| Topic | Tipo de mensaje | Qué publica |
|---|---|---|
/cmd_vel |
geometry_msgs/msg/Twist |
Comandos de velocidad para mover el robot |
/joint_states |
sensor_msgs/msg/JointState |
Posición y velocidad de las ruedas |
/odom |
nav_msgs/msg/Odometry |
Odometría calculada desde las ruedas |
/scan |
sensor_msgs/msg/LaserScan |
Lecturas del LiDAR 2D — Best Effort |
/imu/data |
sensor_msgs/msg/Imu |
Orientación y aceleraciones del IMU |
/cam_1/color/image_raw |
sensor_msgs/msg/Image |
Imagen RGB de la cámara — Best Effort |
/cam_1/color/camera_info |
sensor_msgs/msg/CameraInfo |
Intrínsecos de la cámara — Best Effort |
/cam_1/depth/color/points |
sensor_msgs/msg/PointCloud2 |
Nube de puntos RGB-D — Best Effort |
/tf |
tf2_msgs/msg/TFMessage |
Transformaciones dinámicas del robot |
/tf_static |
tf2_msgs/msg/TFMessage |
Transformaciones fijas entre sus componentes |
/clock |
rosgraph_msgs/msg/Clock |
Reloj de la simulación |
Los cuatro
Best Effortde la tabla no son un detalle. El lidar y las tres salidas de la cámara publican con esa Reliability (“mandá el dato, y si se pierde uno, ya viene el próximo”), igual que el ROSMASTER X3 físico. Un subscriberReliable—que es lo que te da el default de rclpy,create_subscription(Tipo, 'topico', callback, 10)— no se conecta a un publisherBest Effort: DDS considera los perfiles incompatibles y no arma la conexión. No llega ningún mensaje, y no hay error ni excepción. Para esos cuatro tópicos suscribite conqos_profile_sensor_data(from rclpy.qos import qos_profile_sensor_data). Ojo que la regla no es “todo sensor va en Best Effort”:/imu/dataes un sensor y publicaReliable./cmd_veles el único que va en la otra dirección —lo publicás vos y el robot lo escucha enReliable—, así que ahí el default de rclpy es el que corresponde.
Para confirmar con qué QoS publica cualquier tópico:
ros2 topic info /scan --verbose
Listá las interfaces disponibles con:
ros2 topic list
Problemas frecuentes
- Si el launch no encuentra un paquete, volvé a ejecutar
source ~/rosmaster_ws/install/setup.bash. Si después de actualizar el simulador sigue sin encontrarlo, falta una dependencia nueva: corré de nuevo el paso 3 (rosdep install --from-paths src --ignore-src -r -y --rosdistro humbledesde~/rosmaster_ws). - Si actualizaste el simulador con
git pull, corré de nuevo el paso 3 (rosdep install ...) por si sumó dependencias, y después compilá otra vez concolcon build --symlink-install. Si solo modificaste el código, alcanza con compilar. - Si Gazebo abre pero el robot no responde, esperá los mensajes de activación y revisá que
/cmd_velaparezca enros2 topic list. - Para argumentos como
world,rviz,headlessomotion_profile, consultá el README del simulador.
Próximo paso
Con Donatello funcionando, andá directo a Sobre los workshops y empezá por 01 · Talkers y listeners para entender cómo se comunican los nodos que después van a controlarlo.
¿Preferís simular todo dentro de un container en vez de instalar ROS 2 Humble en tu sistema? Es un camino alternativo, no un paso extra: mirá la guía de Docker (opcional).