ROS 2 en los robots Unitree funciona sin ingeniería inversa y sin nodos de traducción: el robot publica sus datos por DDS (CycloneDDS), y ROS 2 usa DDS como capa de comunicación. El paquete oficial unitree_ros2 aporta las definiciones de los mensajes y los scripts de entorno. Esta guía resume el procedimiento del README oficial y señala los puntos donde uno suele quedarse atascado.
Qué robots Unitree son compatibles con ROS 2
El desarrollo de software solo está previsto en las versiones para desarrolladores. Para el Go2, la ficha oficial indica el desarrollo secundario en la versión EDU, no en Air ni en Pro; para el G1 ocurre lo mismo con el G1 EDU.
| Robot | Mensajes en unitree_ros2 | Ejemplos ROS 2 en el repositorio |
|---|---|---|
| Go2 EDU | unitree_go | sport client, stand, estado del robot, bajo nivel |
| B2 / B2W | unitree_go | bajo nivel, lectura de estado |
| G1 EDU | unitree_hg | g1_low_level_example |
| H2 | carpeta de ejemplos h2 | presentes en el repositorio |
| H1 / H1-2 | unitree_go / unitree_hg | bajo nivel H1-2 |
Para R1 y A2, en octubre de 2026 unitree_sdk2 incluye ejemplos C++ propios, pero unitree_ros2 todavía no tiene ejemplos específicos. Antes de comprar uno de estos modelos para un proyecto solo con ROS 2, compruebe el estado del repositorio.
Requisitos: Ubuntu y versión de ROS 2
El README de unitree_ros2 recoge dos combinaciones probadas:
- Ubuntu 22.04 + ROS 2 Humble, indicada como recomendada;
- Ubuntu 20.04 + ROS 2 Foxy.
Según la tabla de versiones de ROS 2, Foxy llegó al final de su soporte el 20 de junio de 2023, mientras que Humble tiene soporte hasta mayo de 2027 y Jazzy hasta mayo de 2029. Para un proyecto que empieza hoy, la opción práctica es Humble; Jazzy no figura entre las combinaciones probadas por Unitree. ROS 2 Humble se instala desde paquetes Debian siguiendo la guía oficial.
Instalar unitree_ros2 paso a paso
1. Clone el repositorio e instale las dependencias (con Humble, sustituya foxy por humble):
git clone https://github.com/unitreerobotics/unitree_ros2
sudo apt install ros-humble-rmw-cyclonedds-cpp
sudo apt install ros-humble-rosidl-generator-dds-idl
sudo apt install libyaml-cpp-dev
2. Solo con Foxy: compile CycloneDDS 0.10.x en el workspace cyclonedds_ws, en un terminal donde ROS 2 no se haya cargado. El robot usa CycloneDDS 0.10.2; con Humble este paso no es necesario.
3. Compile los paquetes de mensajes (unitree_go, unitree_hg, unitree_api):
cd ~/unitree_ros2/cyclonedds_ws
source /opt/ros/humble/setup.bash
colcon build
Red y CycloneDDS
Conecte el PC al robot con un cable Ethernet. En la configuración de la interfaz, ponga IPv4 manual, dirección 192.168.123.99 y máscara 255.255.255.0, como indica el README. Con ifconfig o ip a localice el nombre de la interfaz (por ejemplo enp3s0) e introdúzcalo en ~/unitree_ros2/setup.sh:
#!/bin/bash
source /opt/ros/humble/setup.bash
source $HOME/unitree_ros2/cyclonedds_ws/install/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI='<CycloneDDS><Domain><General><Interfaces>
<NetworkInterface name="enp3s0" priority="default" multicast="default" />
</Interfaces></General></Domain></CycloneDDS>'
La línea clave es RMW_IMPLEMENTATION=rmw_cyclonedds_cpp: el middleware predeterminado de Humble es otro, y sin esta variable el PC no ve el robot. La documentación de ROS 2 explica cómo elegir el middleware DDS. Sin el robot conectado puede usar setup_local.sh, que trabaja sobre la interfaz de loopback.
Primer topic
source ~/unitree_ros2/setup.sh
ros2 topic list
ros2 topic echo /sportmodestate
En Go2 y B2, /sportmodestate publica posición, velocidad y modo de marcha; /lowstate publica motores, IMU y batería. Para compilar y ejecutar los ejemplos:
cd ~/unitree_ros2/example
colcon build
./install/unitree_ros2_example/bin/read_motion_state
El README también muestra cómo visualizar la nube de puntos del LiDAR del Go2 en RViz2, en el topic utlidar/cloud con el frame utlidar_lidar.
Control: alto nivel y bajo nivel
- Alto nivel (Go2, B2): peticiones en
/api/sport/requestcon mensajesunitree_api, generadas por la claseSportClientde los ejemplos. El robot usa su propio control de movimiento. - Bajo nivel: comandos de posición, velocidad, par y ganancias en
/lowcmd. Antes hay que desactivar el servicio de movimiento integrado; si no, los comandos se superponen. En los humanoides se entra en debug mode con L2+R2, con el robot suspendido: el procedimiento completo está en la guía programar el G1.
Simular antes de tocar el hardware
unitree_mujoco es el simulador oficial basado en MuJoCo: acepta programas escritos con unitree_sdk2, unitree_sdk2_python y unitree_ros2, con los mismos mensajes de bajo nivel que el robot real. El flujo recomendado es desarrollar en simulación sobre loopback y luego ejecutar el mismo código en el robot cambiando solo la interfaz de red. Para políticas de locomoción está unitree_rl_gym (Go2, G1, H1, H1-2).
Errores frecuentes
- No aparece ningún topic: RMW sin configurar, interfaz equivocada en
setup.sho PC fuera de la subred. El README también recomienda reiniciar el PC tras la primera configuración. - Falla la compilación de CycloneDDS en Foxy: el terminal ya había cargado
/opt/ros/foxy/setup.bash; comente esa línea en~/.bashrcy vuelva a abrir el terminal. - Varias instalaciones de ROS en el mismo PC: no ponga
setup.shen~/.bashrc; cárguelo a mano cuando lo necesite.
Para laboratorios universitarios, Abra Robotics suministra los modelos EDU de la gama Unitree en España, con soporte en inglés, y ofrece formación y desarrollo sobre el SDK como servicios aparte: consulte Universidad e Investigación y Software. Las fichas de las versiones para desarrolladores son Go2 EDU y G1 EDU.
Preguntas frecuentes
¿Qué versión de ROS 2 se usa con los robots Unitree?
Humble sobre Ubuntu 22.04: es la combinación que Unitree recomienda en el README de unitree_ros2. Foxy sobre Ubuntu 20.04 está probado, pero llegó al final de su soporte el 20 de junio de 2023. Humble tiene soporte hasta mayo de 2027.
¿Se puede usar el Go2 Air o Pro con ROS 2?
No. En la tabla oficial del Go2, el desarrollo secundario está previsto para la versión EDU; Air y Pro no lo incluyen. Para ROS 2 hace falta un Go2 EDU.
¿Hay que instalar un bridge entre el SDK y ROS 2?
No. El robot y ROS 2 usan DDS, así que con unitree_ros2 y el middleware CycloneDDS los mensajes del robot aparecen directamente como topics de ROS 2, sin nodos de traducción.
¿Por qué ros2 topic list no muestra los topics del robot?
Hay tres causas habituales: RMW_IMPLEMENTATION no está configurado como rmw_cyclonedds_cpp, el nombre de la interfaz de red en setup.sh es incorrecto o el PC no está configurado en 192.168.123.x. Revise setup.sh y haga un ping al robot.
¿Se puede usar ROS 2 sin el robot conectado?
Sí. unitree_ros2 incluye setup_local.sh, que usa la interfaz de loopback, y unitree_mujoco simula el robot con los mismos mensajes: puede desarrollar y probar en simulación antes de tocar el hardware.
Fuentes
- Unitree, unitree_ros2, README y ejemplos: github.com/unitreerobotics/unitree_ros2
- Unitree, unitree_sdk2: github.com/unitreerobotics/unitree_sdk2
- Unitree, unitree_mujoco: github.com/unitreerobotics/unitree_mujoco
- Unitree, unitree_rl_gym: github.com/unitreerobotics/unitree_rl_gym
- Unitree, fichas de producto Go2 y G1 (desarrollo secundario solo en EDU): unitree.com/go2 · unitree.com/g1
- Unitree Document Center, sección para desarrolladores: support.unitree.com/home/en/developer
- ROS 2 Documentation, distribuciones y fechas de fin de soporte: docs.ros.org/en/humble/Releases.html
- ROS 2 Documentation, instalación de Humble desde paquetes Debian: docs.ros.org
- ROS 2 Documentation, middleware DDS y RMW: docs.ros.org


