ROS 2 sui robot Unitree funziona senza reverse engineering e senza nodi di traduzione: il robot pubblica i suoi dati su DDS (CycloneDDS), e ROS 2 usa DDS come strato di comunicazione. Il pacchetto ufficiale unitree_ros2 fornisce le definizioni dei messaggi e gli script di configurazione. I passaggi qui sotto seguono il README ufficiale.
Quali robot Unitree supportano ROS 2
Lo sviluppo software è previsto solo sulle versioni per sviluppatori. Per il Go2, la scheda ufficiale indica l'accesso all'SDK per lo sviluppo software proprio sulla versione EDU, non su Air e Pro; per il G1 vale lo stesso con il G1 EDU.
| Robot | Messaggi in unitree_ros2 | Esempi ROS 2 nel repository |
|---|---|---|
| Go2 EDU | unitree_go | sport client, stand, stato robot, basso livello |
| B2 / B2W | unitree_go | sport client, stand |
| G1 EDU | unitree_hg | g1_low_level_example |
| H2 | unitree_hg | h2_loco_client (alto livello), h2_ankle_swing_example (basso livello) |
| H1 / H1-2 | unitree_go / unitree_hg | basso livello H1-2 |
Per R1 e A2, a ottobre 2026 unitree_sdk2 contiene esempi C++ dedicati, ma unitree_ros2 non ha ancora esempi specifici. Prima di comprare per un progetto solo ROS 2 su questi modelli, verifica lo stato del repository.
Requisiti: Ubuntu e versione di ROS 2
Il README di unitree_ros2 riporta due combinazioni testate:
- Ubuntu 22.04 + ROS 2 Humble, indicata come consigliata;
- Ubuntu 20.04 + ROS 2 Foxy.
Secondo la tabella delle release ROS 2, Foxy ha raggiunto la fine del supporto il 20 giugno 2023, mentre Humble è supportato fino a maggio 2027 e Jazzy fino a maggio 2029. Per un progetto che parte oggi la scelta pratica è Humble; Jazzy non compare tra le combinazioni testate da Unitree. ROS 2 Humble si installa da pacchetti Debian seguendo la guida ufficiale.
Installare unitree_ros2 passo per passo
1. Clona il repository e installa le dipendenze. I comandi sono per Humble; con Foxy sostituisci humble con foxy:
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: compila CycloneDDS 0.10.x nella workspace cyclonedds_ws, in un terminale dove ROS 2 non è stato caricato. Il robot usa CycloneDDS 0.10.2; con Humble questo passaggio non serve.
3. Compila i pacchetti dei messaggi (unitree_go, unitree_hg, unitree_api):
cd ~/unitree_ros2/cyclonedds_ws
source /opt/ros/humble/setup.bash
colcon build
Rete e CycloneDDS
Collega il PC al robot con un cavo Ethernet. Nelle impostazioni dell'interfaccia imposta IPv4 manuale, indirizzo 192.168.123.99, maschera 255.255.255.0, come indica il README. Con ifconfig o ip a trova il nome dell'interfaccia (per esempio enp3s0) e inseriscilo in ~/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 riga decisiva è RMW_IMPLEMENTATION=rmw_cyclonedds_cpp: il middleware predefinito di Humble è un altro, e senza questa variabile il PC non vede il robot. La documentazione ROS 2 spiega come scegliere il middleware DDS. Senza robot collegato puoi usare setup_local.sh, che lavora sull'interfaccia di loopback.
Primo topic
source ~/unitree_ros2/setup.sh
ros2 topic list
ros2 topic echo /sportmodestate
Su Go2 e B2 /sportmodestate riporta posizione, velocità e andatura; /lowstate riporta motori, IMU e batteria. Per compilare ed eseguire gli esempi:
cd ~/unitree_ros2/example
colcon build
./install/unitree_ros2_example/bin/read_motion_state
Il README mostra anche come visualizzare la nuvola di punti del LiDAR del Go2 in RViz2, sul topic utlidar/cloud con frame utlidar_lidar.
Controllo: alto livello e basso livello
- Alto livello (Go2, B2): richieste su
/api/sport/requestcon messaggiunitree_api, generate dalla classeSportClientdegli esempi. Il robot usa il proprio controllo di moto. - Basso livello: comandi di posizione, velocità, coppia e guadagni su
/lowcmd. Prima va disattivato il servizio di moto integrato, altrimenti i comandi si sovrappongono. Sugli umanoidi si entra in debug mode con L2+R2, robot appeso: la procedura completa è nella guida programmare il G1.
Simulare prima dell'hardware
unitree_mujoco è il simulatore ufficiale basato su MuJoCo: accetta programmi scritti con unitree_sdk2, unitree_sdk2_python e unitree_ros2, con gli stessi messaggi di basso livello del robot reale. Si sviluppa in simulazione sull'interfaccia di loopback, poi lo stesso codice gira sul robot cambiando solo l'interfaccia di rete. Per le policy di locomozione c'è unitree_rl_gym (Go2, G1, H1, H1-2).
Errori frequenti
- Nessun topic: RMW non impostato, interfaccia sbagliata in
setup.sho PC fuori subnet. Il README consiglia anche di riavviare il PC dopo la prima configurazione. - Compilazione CycloneDDS fallita su Foxy: il terminale aveva già caricato
/opt/ros/foxy/setup.bash; commenta la riga in~/.bashrce riapri il terminale. - Più installazioni ROS sullo stesso PC: evita di mettere
setup.shin~/.bashrce caricalo a mano quando serve.
Per i laboratori universitari Abra Robotics, parte della filiera di distribuzione di Unitree Italia, fornisce i modelli EDU e offre formazione e sviluppo su SDK come servizi separati: vedi Università e Ricerca e Software.
Domande frequenti
Quale versione di ROS 2 usare con i robot Unitree?
Humble su Ubuntu 22.04, la combinazione consigliata da Unitree e supportata fino a maggio 2027. Foxy è testato ma fuori supporto da giugno 2023.
Il Go2 Air o Pro si può usare con ROS 2?
No. L'SDK, e quindi ROS 2, è previsto solo sul Go2 EDU.
Serve installare un bridge tra SDK e ROS 2?
No. Robot e ROS 2 parlano entrambi DDS: con unitree_ros2 e CycloneDDS i messaggi del robot sono già topic ROS 2.
Perché ros2 topic list non mostra i topic del robot?
Di solito manca RMW_IMPLEMENTATION=rmw_cyclonedds_cpp, l'interfaccia in setup.sh è sbagliata o il PC non è sulla subnet 192.168.123.x. Un ping al robot chiarisce il terzo caso.
Si può usare ROS 2 senza il robot collegato?
Sì, con setup_local.sh sull'interfaccia di loopback e con il simulatore unitree_mujoco, che usa gli stessi messaggi del robot.
Fonti
- Unitree, unitree_ros2, README ed esempi: 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, schede prodotto Go2 e G1 (SDK solo sulle versioni EDU): unitree.com/go2 · unitree.com/g1
- Unitree Document Center, sezione sviluppatori: support.unitree.com/home/en/developer
- ROS 2 Documentation, distribuzioni e date di fine supporto: docs.ros.org/en/humble/Releases.html
- ROS 2 Documentation, installazione Humble da pacchetti Debian: docs.ros.org
- ROS 2 Documentation, middleware DDS e RMW: docs.ros.org


