ROS 2 na robotach Unitree działa bez inżynierii wstecznej i bez węzłów tłumaczących: robot publikuje swoje dane przez DDS (CycloneDDS), a ROS 2 używa DDS jako warstwy komunikacji. Oficjalny pakiet unitree_ros2 zawiera definicje wiadomości i skrypty środowiska. Ten przewodnik streszcza procedurę z oficjalnego README i wskazuje miejsca, w których najczęściej pojawiają się problemy.
Które roboty Unitree obsługują ROS 2
Tworzenie własnego oprogramowania jest przewidziane tylko w wersjach dla deweloperów. W przypadku Go2 oficjalna karta produktu podaje rozwój własnego oprogramowania w wersji EDU, a nie w Air i Pro. To samo dotyczy G1: potrzebny jest G1 EDU.
| Robot | Wiadomości w unitree_ros2 | Przykłady ROS 2 w repozytorium |
|---|---|---|
| Go2 EDU | unitree_go | sport client, stand, stan robota, low-level |
| B2 / B2W | unitree_go | low-level, odczyt stanu |
| G1 EDU | unitree_hg | g1_low_level_example |
| H2 | folder z przykładami h2 | dostępne w repozytorium |
| H1 / H1-2 | unitree_go / unitree_hg | low-level H1-2 |
Dla R1 i A2 w październiku 2026 unitree_sdk2 zawiera dedykowane przykłady w C++, ale unitree_ros2 nie ma jeszcze przykładów dla tych modeli. Jeśli kupujesz robota do projektu opartego wyłącznie na ROS 2, najpierw sprawdź aktualny stan repozytorium.
Unitree G1 EDU U1
Rozwój własnego oprogramowania, 23 DoF, moduł obliczeniowy
Wymagania: Ubuntu i wersja ROS 2
README pakietu unitree_ros2 podaje dwie przetestowane kombinacje:
- Ubuntu 22.04 + ROS 2 Humble, oznaczona jako zalecana;
- Ubuntu 20.04 + ROS 2 Foxy.
Według tabeli wydań ROS 2 wsparcie dla Foxy zakończyło się 20 czerwca 2023, Humble jest wspierany do maja 2027, a Jazzy do maja 2029. Dla projektu, który startuje dziś, praktycznym wyborem jest Humble; Jazzy nie ma wśród kombinacji przetestowanych przez Unitree. ROS 2 Humble instaluje się z pakietów Debiana zgodnie z oficjalną instrukcją.
Instalacja unitree_ros2 krok po kroku
1. Sklonuj repozytorium i zainstaluj zależności (przy Humble zamień foxy na 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. Tylko przy Foxy: skompiluj CycloneDDS 0.10.x w przestrzeni roboczej cyclonedds_ws, w terminalu, w którym ROS 2 nie został załadowany. Robot używa CycloneDDS 0.10.2; przy Humble ten krok nie jest potrzebny.
3. Skompiluj pakiety wiadomości (unitree_go, unitree_hg, unitree_api):
cd ~/unitree_ros2/cyclonedds_ws
source /opt/ros/humble/setup.bash
colcon build
Sieć i CycloneDDS
Połącz komputer z robotem kablem Ethernet. W ustawieniach interfejsu wybierz ręczną konfigurację IPv4, adres 192.168.123.99, maskę 255.255.255.0, tak jak podaje README. Poleceniem ifconfig lub ip a sprawdź nazwę interfejsu (na przykład enp3s0) i wpisz ją w ~/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>'
Kluczowa jest linia RMW_IMPLEMENTATION=rmw_cyclonedds_cpp: domyślny middleware w Humble jest inny i bez tej zmiennej komputer nie widzi robota. Dokumentacja ROS 2 wyjaśnia, jak wybrać middleware DDS. Bez podłączonego robota możesz użyć setup_local.sh, który działa na interfejsie loopback.
Pierwszy topic
source ~/unitree_ros2/setup.sh
ros2 topic list
ros2 topic echo /sportmodestate
Na Go2 i B2 /sportmodestate podaje pozycję, prędkość i rodzaj chodu, a /lowstate stan silników, IMU i akumulatora. Aby skompilować i uruchomić przykłady:
cd ~/unitree_ros2/example
colcon build
./install/unitree_ros2_example/bin/read_motion_state
README pokazuje też, jak wyświetlić chmurę punktów z LiDAR-u Go2 w RViz2, na topicu utlidar/cloud z ramką utlidar_lidar.
Sterowanie: wysoki i niski poziom
- Wysoki poziom (Go2, B2): żądania na
/api/sport/requestz wiadomościamiunitree_api, generowane przez klasęSportClientz przykładów. Robot korzysta z własnego sterowania ruchem. - Niski poziom: polecenia pozycji, prędkości, momentu i wzmocnień na
/lowcmd. Najpierw trzeba wyłączyć wbudowaną usługę ruchu, inaczej polecenia będą się nakładać. Na robotach humanoidalnych tryb debug włącza się kombinacją L2+R2, gdy robot jest zawieszony: pełna procedura jest w przewodniku programowanie G1.
Symulacja przed sprzętem
unitree_mujoco to oficjalny symulator oparty na MuJoCo: przyjmuje programy napisane z unitree_sdk2, unitree_sdk2_python i unitree_ros2, z tymi samymi wiadomościami niskiego poziomu co prawdziwy robot. Zalecany sposób pracy: rozwój w symulacji na loopbacku, a potem ten sam kod na robocie, ze zmienionym interfejsem sieciowym. Do polityk lokomocji służy unitree_rl_gym (Go2, G1, H1, H1-2).
Najczęstsze błędy
- Brak topiców: nieustawione RMW, zły interfejs w
setup.shalbo komputer poza podsiecią. README zaleca też ponowne uruchomienie komputera po pierwszej konfiguracji. - Nieudana kompilacja CycloneDDS na Foxy: terminal miał już załadowany
/opt/ros/foxy/setup.bash. Zakomentuj tę linię w~/.bashrci otwórz terminal ponownie. - Kilka instalacji ROS na jednym komputerze: nie dodawaj
setup.shdo~/.bashrc, tylko ładuj go ręcznie, kiedy jest potrzebny.
Laboratoriom uczelnianym Abra Robotics dostarcza modele EDU z gamy Unitree w Polsce, ze wsparciem po angielsku, a szkolenia i rozwój oprogramowania z SDK oferuje jako osobne usługi: zobacz Uczelnie i badania oraz Oprogramowanie. Karty wersji dla deweloperów to Go2 EDU i G1 EDU.
Najczęściej zadawane pytania
Której wersji ROS 2 używać z robotami Unitree?
Humble na Ubuntu 22.04: tę kombinację Unitree zaleca w README pakietu unitree_ros2. Foxy na Ubuntu 20.04 jest przetestowany, ale jego wsparcie zakończyło się 20 czerwca 2023. Humble jest wspierany do maja 2027.
Czy Go2 Air lub Pro można używać z ROS 2?
Nie. W oficjalnej tabeli Go2 rozwój własnego oprogramowania jest przewidziany w wersji EDU; Air i Pro go nie obejmują. Do ROS 2 potrzebny jest Go2 EDU.
Czy trzeba instalować most między SDK a ROS 2?
Nie. Robot i ROS 2 używają DDS, więc z unitree_ros2 i middleware CycloneDDS wiadomości robota pojawiają się bezpośrednio jako topici ROS 2, bez węzłów tłumaczących.
Dlaczego ros2 topic list nie pokazuje topiców robota?
Najczęstsze przyczyny są trzy: RMW_IMPLEMENTATION nie jest ustawione na rmw_cyclonedds_cpp, w setup.sh jest zła nazwa interfejsu sieciowego albo komputer nie jest skonfigurowany w podsieci 192.168.123.x. Sprawdź ponownie setup.sh i wyślij ping do robota.
Czy można używać ROS 2 bez podłączonego robota?
Tak. unitree_ros2 zawiera setup_local.sh, który korzysta z interfejsu loopback, a unitree_mujoco symuluje robota z tymi samymi wiadomościami: możesz rozwijać i testować kod w symulacji, zanim dotkniesz sprzętu.
Źródła
- Unitree, unitree_ros2, README i przykłady: 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, karty produktów Go2 i G1 (rozwój własnego oprogramowania tylko w EDU): unitree.com/go2 · unitree.com/g1
- Unitree Document Center, sekcja dla deweloperów: support.unitree.com/home/en/developer
- ROS 2 Documentation, dystrybucje i daty końca wsparcia: docs.ros.org/en/humble/Releases.html
- ROS 2 Documentation, instalacja Humble z pakietów Debiana: docs.ros.org
- ROS 2 Documentation, middleware DDS i RMW: docs.ros.org