Programowanie robotów Unitree Python

Jak programować roboty Unitree w Python

Programowanie robota Unitree Python

Wstęp do programowania robotów Unitree w ROS z użyciem Pythona

Programowanie robotów Unitree (Go2 EDU, G1 EDU, H1/H2, Z1) w środowisku ROS2 przy użyciu Pythona to obecnie jeden z najszybszych sposobów na wprowadzenie ich w świat zaawansowanej robotyki, takiej jak autonomiczna nawigacja czy interakcja z otoczeniem Robot Operating System (ROS) to framework open-source do programowania robotów, który ułatwia zarządzanie komunikacją między komponentami, takimi jak sensory, aktuatory i algorytmy sterowania. Roboty Unitree (np. Go2 EDU, A1 EDU, Go2 EDU, G1 EDU) to popularne platformy, które wspierają integrację z ROS. Programowanie w Pythonie jest wygodne dzięki bibliotece rospy (dla ROS1) lub rclpy (dla ROS2), co pozwala na łatwe pisanie nodów, subskrybowanie tematów i publikowanie komunikatów.

Roboty Unitree Go2 EDU i G1 EDU to zaawansowane platformy: Go2 EDU to czworonożny robot z opcją onboard computing (np. Jetson Orin), a G1 EDU to humanoid z do 43 stopniami swobody. Oba wspierają integrację z ROS2 Humble poprzez CycloneDDS. Programowanie w Pythonie odbywa się za pomocą biblioteki rclpy, umożliwiając pisanie nodów, subskrybowanie tematów i publikowanie komunikatów.

Zakładane jest podstawowa wiedza o Linuxie i Pythonie. Skupiamy się na ROS2 – Humble.

Poradnik: Programowanie Unitree Go2 EDU / G1 EDU w środowisku ROS2 z bardzo prostymi przykładami w Python-ie

Programowanie ROS Unitree

Fundamenty: Dlaczego ROS2 i jak się do tego zabrać?

Zanim przejdziemy do szczegółów technicznych, musisz zrozumieć, po co w ogóle używać ROS2. ROS2 (Robot Operating System 2) to nie jest system operacyjny w sensie Windows czy Linux, ale framework do komunikacji międzyprocesowej. Wyobraź sobie, że Twój robot to ciało, a ROS2 to układ nerwowy: przesyła informacje między mózgiem (algorytmy) a kończynami (silniki) i zmysłami (czujniki).

Dlaczego ROS2 Humble?

Wersja Humble Hawksbill jest wersją LTS (Long Term Support) dla Ubuntu 22.04. (wersja na luty 2026) To oznacza stabilność i wsparcie do maja 2027 roku. W świecie robotyki stabilność jest ważniejsza niż „świeżość” – nie chcesz, aby aktualizacja systemu zepsuła działającego robota w laboratorium.

Architektura komunikacji: DDS – Klej spajający Unitree z ROS2

Kluczową rzeczą, którą musisz zrozumieć, jest to, że nowe roboty Unitree (Go2, G1, H1, H2) komunikują się wewnętrznie za pomocą protokołu DDS (Data Distribution Service) . ROS2 również używa DDS jako swojego domyślnego transportu.

Co to dla Ciebie oznacza?
Nie musisz pisać skomplikowanych mostów (bridges) czy adapterów. SDK Unitree (unitree_sdk2_python) w dużej mierze „podłącza się” bezpośrednio do tego samego szyny DDS, po której jeździ ROS2. Dzięki temu:

  1. Węzły ROS2 mogą bezpośrednio subskrybować tematy publikowane przez oprogramowanie pokładowe robota (np. stan czujników).
  2. Węzły ROS2 mogą publikować komendy, które robot odbiera tak, jakby pochodziły od jego własnego kontrolera.

Twoim zadaniem jako programisty nie jest więc „podłączanie się do robota”, ale raczej „dołączenie do jego sieci wymiany danych”.


1. Przygotowanie środowiska pracy

Krok 1: Instalacja ROS2 Humble
Jest to proces czysto mechaniczny. Pamiętaj, aby zainstalować wersję ros-humble-desktop, która zawiera narzędzia wizualizacyjne (RViz2) i symulacyjne, a nie tylko wersję base.
Dlaczego? Desktopy wersja da Ci możliwość wizualizacji danych z Lidaru czy kamery od razu po instalacji.

Krok 2: Instalacja SDK Unitree
Tutaj zamiast podawać konkretną komendę git clone (która może być nieaktualna), podam Ci sposób myślenia:

  1. Wejdź na oficjalne konto GitHub firmy Unitree (unitreerobotics).
  2. Znajdź repozytorium unitree_sdk2_python.
  3. Sklonuj je i zainstaluj używając pip.
    Dlaczego? To SDK jest warstwą abstrakcji. Nawet jeśli w przyszłości zmienią się nazwy tematów w robocie, SDK prawdopodobnie dostanie aktualizację, która zachowa kompatybilność wsteczną, oszczędzając Ci modyfikacji kodu.

Krok 3: Przestrzeń robocza (Workspace)
Struktura folderów w ROS2 (~/ros2_ws/srcbuildinstalllog) nie jest kaprysem. To standard, który pozwala na kompilację wielu pakietów naraz i zarządzanie zależnościami. Zawsze trzymaj się tej struktury.


2. Pierwsze kroki: Diagnostyka i zrozumienie interfejsu

Zamiast pisać kod, który szybko się zestarzeje, nauczę Cię, jak odkrywać możliwości robota.

2.1. Połączenie z siecią robota

Roboty Unitree często tworzą własną sieć Wi-Fi lub wymagają połączenia kablem ethernetowym.

  • Opis: Musisz skonfigurować swój komputer tak, aby należał do tej samej podsieci co robot. Zazwyczaj robot ma adres 192.168.123.161, a Ty ustawiasz swój na np. 192.168.123.50.
  • Diagnostyka: Użyj polecenia ping 192.168.123.161. Jeśli nie ma odpowiedzi, problem leży po stronie sieci, a nie robota. To najczęstszy błąd początkujących.

2.2. Eksploracja tematów (Topics)

Po udanym połączeniu, nie piszemy jeszcze kodu. Uruchamiamy narzędzia ROS2, aby zobaczyć, co robot „mówi”.

bash

ros2 topic list

To polecenie zwróci listę wszystkich strumieni danych dostępnych w robocie. Zobaczysz nazwy takie jak /lowstate/imu/odom/cmd_vel.

  • Co to jest /lowstate? To temat, na którym robot publikuje szczegółowe informacje o swoich silnikach (pozycja, prąd, temperatura).
  • Co to jest /odom? To szacowana pozycja robota w przestrzeni (odometria).

Zadanie dla Ciebie: Aby sprawdzić, co dokładnie kryje się pod danym tematem, użyj:

bash

ros2 topic echo /imu --once

lub

bash

ros2 interface show $(ros2 topic list -t | grep /imu | cut -d' ' -f2)

Dzięki temu zobaczysz strukturę danych (pola, typy), którą musisz obsłużyć w swoim przyszłym programie.

2.3. Pierwsza komenda: Sterowanie prędkością

Zamiast pisać skrypt w Pythonie, który może być nieaktualny, naucz się wysyłać komendy z linii poleceń.

bash

ros2 topic pub /cmd_vel geometry_msgs/Twist "{linear: {x: 0.2, y: 0.0, z: 0.0}, angular: {z: 0.1}}" --once
  • Dlaczego to działa? Niezależnie od modelu robota, standardem w ROS dla mobilnych platform jeżdżących (nawet tych z nogami) jest używanie tematu /cmd_vel z typem wiadomości geometry_msgs/Twist do zadawania prędkości.
  • Koncepcja: Nawet jeśli Unitree zmieni swoje wewnętrzne API, mostek (SDK) prawdopodobnie nadal będzie tłumaczył wiadomości z /cmd_vel na komendy zrozumiałe dla robota. To jest gwarancja stabilności interfejsu.

3. Symulacja – poligon doświadczalny

Symulacja to nie tylko „zabawa”. To sposób na testowanie algorytmów bez ryzyka uszkodzenia drogiego sprzętu.

Jak działa symulator?

Dobre symulatory (jak MuJoCo czy Isaac Sim) nie tylko imitują wygląd robota, ale także jego fizykę i, co najważniejsze, interfejs komunikacyjny.

  • Mechanizm: Symulator uruchamia własne węzły ROS2, które publikują dokładnie te same tematy (/imu/odom/joint_states), co prawdziwy robot.
  • Zaleta: Twój kod sterujący (np. ten, który publikuje na /cmd_velnie wie, czy rozmawia z symulatorem, czy z prawdziwym robotem. Przełącznikiem jest po prostu to, czy uruchomisz symulator, czy połączysz się z fizycznym robotem.

Dlatego zamiast podawać konkretne komendy do symulatora G1, radzę:

  1. Poszukać w repozytoriach Unitree lub społeczności hasła „mujoco” lub „isaac sim”.
  2. Uruchomić symulator.
  3. W drugim terminalu uruchomić ros2 topic list i upewnić się, że widzisz te same tematy, co przy prawdziwym robocie.

4. Zaawansowane zastosowania: Praca z sensorami

W tej sekcji skupimy się na tym, jak myśleć o danych z sensorów, a nie na tym, jak je dokładnie skonfigurować.

4.1. Integracja z Lidarem 3D

Lidar to czujnik, który dostarcza chmurę punktów (sensor_msgs/PointCloud2).

  • Opis: Niezależnie od producenta (RoboSense, Ouster, Velodyne), sterowniki dla tych lidarów w ROS2 zostały zaprojektowane tak, aby publikować dane w tym samym, standardowym formacie.
  • Jak to wykorzystać?: Jeśli chcesz, aby robot omijał przeszkody, Twój algorytm nie musi wiedzieć, że to lidar od RoboSense. On po prostu subskrybuje temat /scan lub /points i analizuje odległości.
  • Fuzja danych: Możesz łączyć dane z lidaru z danymi z kamery, aby lepiej rozpoznawać przeszkody (np. lidar mówi „coś tam jest”, kamera mówi „to jest człowiek”).

4.2. Integracja z kamerą Intel RealSense

Kamery RGB-D, takie jak Intel RealSense, dostarczają dwóch strumieni: obrazu kolorowego (sensor_msgs/Image) i mapy głębi (sensor_msgs/Image).

  • Opis: Sterownik realsense2_camera jest oficjalny i doskonale zintegrowany z ROS2. Publikuje on obrazy na znanych tematach (/camera/color/image_raw).
  • Praktyczne wykorzystanie: Wyobraź sobie, że chcesz, aby robot podszedł do Ciebie.
    1. Węzeł AI (np. używający YOLO) subskrybuje temat /camera/color/image_raw i wykrywa na obrazie sylwetkę człowieka.
    2. Publikuje on pozycję człowieka w ramce obrazu.
    3. Drugi węzeł (kontroler) subskrybuje tę pozycję oraz temat /camera/depth/image_raw, aby sprawdzić, jak daleko jest człowiek.
    4. Na podstawie tych danych publikuje odpowiednią prędkość na /cmd_vel.

4.3. SLAM i Nawigacja autonomiczna (Nav2)

To szczytowe osiągnięcie w programowaniu robotów mobilnych.

  • SLAM (Simultaneous Localization and Mapping): To technika, w której robot, przemieszczając się, buduje mapę otoczenia i jednocześnie określa na niej swoją pozycję. W ROS2 robi się to za pomocą pakietów takich jak slam_toolbox lub rtabmap_ros. One przyjmują dane z lidaru (chmury punktów) i odometrii, a zwracają mapę i pozycję robota.
  • Nav2 (Navigation2): To stos oprogramowania, który odpowiada za planowanie trasy. Dostajesz mapę, cel i aktualną pozycję robota, a Nav2 wyznacza ścieżkę i wysyła odpowiednie komendy na /cmd_vel, aby robot dotarł do celu, omijając przeszkody.

Jak to ugryźć?
Nie pisz własnego SLAM-u od zera. To zajęłoby zbyt dużo czasu. Zamiast tego:

  1. Uruchom sterownik lidaru.
  2. Uruchom slam_toolbox i pozwól robotowi jeździć (ręcznie lub automatycznie), aby zbudować mapę.
  3. Zapisz mapę.
  4. Uruchom nav2_bringup z wczytaną mapą i wskaż cel w RViz2.

5. Podsumowanie i mapa drogowa

Oto jak powinna wyglądać Twoja ścieżka nauki, skoncentrowana na koncepcjach, a nie na detalach implementacji:

  1. Faza 0: Środowisko – Zainstaluj ROS2 Humble i Python. Naucz się poruszać po systemie plików i zarządzać pakietami.
  2. Faza 1: Eksploracja – Połącz się z robotem (lub symulatorem). Używaj ros2 topic listechointerface show do zrozumienia, jakie dane są dostępne.
  3. Faza 2: Sterowanie – Naucz się ręcznie publikować na /cmd_vel. Zobacz, jak robot reaguje.
  4. Faza 3: Prosty węzeł w Pythonie – Napisz węzeł, który np. zapisuje dane z IMU do pliku lub publikuje stałą prędkość. Skup się na strukturze węzła (rclpy), a nie na logice.
  5. Faza 4: Percepcja – Uruchom sterownik kamery/lidaru. Uruchom RViz2 i zobacz te dane na żywo. To wizualne potwierdzenie, że wszystko działa, jest bezcenne.
  6. Faza 5: Gotowe komponenty – Uruchom gotowe pakiety do SLAM i nawigacji. Modyfikuj ich parametry, aby dopasować je do swojego robota.
      Bezpieczeństwo przede wszystkim – przeczytaj, zanim uruchomisz robota

      Praca z robotami mobilnymi, zwłaszcza humanoidalnymi (Unitree G1 EDU) czy czworonożnymi (Unitree Go2 EDU), niesie ze sobą ryzyko – zarówno dla sprzętu, jak i dla osób w otoczeniu. Poniższe zasady pomogą Ci uniknąć najczęstszych błędów i pracować odpowiedzialnie.

      1. Symulacja to Twój poligon doświadczalny

      Zanim uruchomisz jakikolwiek kod na fizycznym robocie, przetestuj go w symulacji.
      W poradniku wspomnieliśmy o symulatorach takich jak MuJoCo i NVIDIA Isaac Sim. Dzięki nim możesz bezpiecznie sprawdzić, czy Twój skrypt w Pythonie poprawnie publikuje komendy na /cmd_vel (tak jak w przykładzie w sekcji 2.3), zanim robot wykona gwałtowny ruch w rzeczywistości. Pamiętaj, że Python jest językiem interpretowanym – błąd w logice może ujawnić się dopiero w trakcie działania. Symulacja pozwala go wychwycić bez ryzyka.

      2. Zawsze rozumiesz kod, który uruchamiasz

      Python zachęca do szybkiego prototypowania, ale nie kopiuj fragmentów kodu (w tym z tego poradnika) bez zrozumienia, co robią. Przeanalizuj każdą linijkę:

      • Do jakiego tematu ROS2 się odwołujesz? (np. /cmd_vel/joint_states/lowstate z sekcji 2.2)
      • Jakie wartości wysyłasz? Zbyt gwałtowna komenda prędkości (np. linear.x = 1.0) może przewrócić robota.
      • Czy Twój kod uwzględnia ograniczenia sprzętowe (maksymalne prędkości, zakresy ruchu)?

      3. Fizyczne środki bezpieczeństwa

      • Dla robota Go2 EDU (czworonożny): Upewnij się, że podłoże jest równe, a w zasięgu robota nie ma przeszkód ani osób. Zawsze miej robota w polu widzenia.
      • Dla robota G1 EDU (humanoidalny): Bezwzględnie stosuj uprząż lub podwieszenie podczas pierwszych testów. Upadek humanoida z wysokości może go trwale uszkodzić i stanowić zagrożenie dla otoczenia.
      • Awaryjne zatrzymanie: Zawsze miej pod ręką fizyczny przycisk STOP (emergency stop) i wiedz, jak go użyć. W przypadku robota Go2 możesz też użyć aplikacji mobilnej do natychmiastowego zatrzymania.

      4. Uwaga na połączenie sieciowe i WebRTC

      • W trybie bezprzewodowym (WebRTC) tylko jeden klient może być połączony z robotem w danej chwili. Przed uruchomieniem swojego programu upewnij się, że aplikacja mobilna i fizyczny kontroler są rozłączone.
      • Zawsze sprawdzaj połączenie komendą ping 192.168.123.161 (jak w sekcji 2.1) przed wysłaniem pierwszej komendy.

      5. Testuj w izolacji – warstwa po warstwie

      W Pythonie błędy mogą ujawnić się w trakcie działania, dlatego testuj stopniowo:

      1. Składnia – upewnij się, że kod uruchamia się bez błędów składniowych.
      2. Uruchomienie bez robota – obserwuj logi w konsoli, sprawdź czy węzeł poprawnie publikuje/subskrybuje (możesz użyć ros2 topic echo do weryfikacji).
      3. Symulacja – przetestuj logikę sterowania w MuJoCo lub Isaac Sim.
      4. Testy na fizycznym robocie – zacznij od małych, bezpiecznych wartości (np. prędkość liniowa 0,1 m/s jak w przykładzie ros2 topic pub), trzymając palec na przycisku STOP.

      6. Bądź na bieżąco z dokumentacją

      Środowisko ROS2 i SDK Unitree ewoluują. To, co działa dziś, może być niekompatybilne z jutrzejszą aktualizacją oprogramowania robota. Zawsze sprawdzaj oficjalne repozytoria GitHub Unitree (unitreerobotics) i daty publikacji przykładów. W przypadku Pythona kluczowe jest repozytorium unitree_sdk2_python (wspomniane w sekcji 1, krok 2).

      7. Szczególne wyzwania języka Python

      • Wydajność: Python jest wolniejszy od C++. Upewnij się, że Twoje pętle sterowania nie mają zbyt dużych opóźnień (sprawdź częstotliwość publikowania komend).
      • Zarządzanie zasobami: Python sam zarządza pamięcią, ale pamiętaj o zamykaniu wątków i węzłów po zakończeniu pracy.
      • Wyjątki: Nie pozwól, by nieobsłużony wyjątek zakończył węzeł w krytycznym momencie – stosuj bloki try-except.
      • Wątki: Węzły ROS2 w Pythonie domyślnie działają w jednym wątku – jeśli potrzebujesz współbieżności, korzystaj z MultiThreadedExecutor.

      Pamiętaj: W robotyce nie ma miejsca na pochopne eksperymenty. Każda komenda wysłana do robota ma fizyczne konsekwencje. Bezpieczeństwo zależy od Ciebie.

      FAQ – Programowanie robotów Unitree w Pythonie (ROS2 Humble)

      1. Podstawy i pierwsze kroki

      P: Czy muszę mieć fizycznego robota, aby rozpocząć naukę?
      O: Absolutnie nie! Zdecydowanie zalecamy rozpoczęcie od symulacji. Możesz użyć MuJoCo lub NVIDIA Isaac Sim, które doskonale odwzorowują interfejsy ROS2. Twój kod w Pythonie będzie działał tak samo z symulatorem, jak i z prawdziwym robotem. To najbezpieczniejsza i najtańsza metoda nauki.

      P: Jaka jest różnica między ROS2 Humble a innymi dystrybucjami (np. Galactic, Rolling)?
      O: ROS2 Humble jest wersją LTS (Long Term Support) dla Ubuntu 22.04, wspieraną do maja 2027 roku. Zapewnia stabilność i długoterminowe wsparcie, co jest kluczowe w projektach badawczych i przemysłowych. Inne dystrybucje mają krótszy cykl życia lub są wersjami rolling (ciągle aktualizowanymi), co może prowadzić do niekompatybilności w trakcie trwania projektu.

      P: Gdzie znajdę oficjalne SDK Unitree dla Pythona?
      O: Oficjalne repozytorium znajduje się na GitHubie pod adresem: https://github.com/unitreerobotics/unitree_sdk2_python. Zawsze korzystaj z tej lokalizacji, aby mieć pewność, że pobierasz aktualną i bezpieczną wersję. Unikaj forków i nieoficjalnych źródeł.

      2. Instalacja i konfiguracja

      P: Podczas instalacji unitree_sdk2_python pojawia się błąd. Co robić?
      O: Najczęstsze problemy to:

      • Brak zależności: Upewnij się, że masz zainstalowane python3-pip oraz python3-venv.
      • Konflikt wersji: Zainstaluj SDK w czystym środowisku wirtualnym Pythona.
      • Niewłaściwa wersja ROS2: Potwierdź, że używasz ROS2 Humble (sprawdź komendą printenv | grep ROS).
        Jeśli problem nie ustępuje, sprawdź „Issues” w oficjalnym repozytorium GitHub – społeczność często raportuje i rozwiązuje typowe problemy.

      P: Mój komputer nie widzi robota po podłączeniu kablem Ethernet.
      O: Wykonaj kolejno:

      1. Sprawdź połączenie: ping 192.168.123.161.
      2. Jeśli brak odpowiedzi, skonfiguruj statyczne IP w swoim komputerze na adres z tej samej podsieci, np. 192.168.123.50, maska 255.255.255.0.
      3. Wyłącz zapory sieciowe (firewall), które mogą blokować komunikację.
      4. Upewnij się, że kabel jest sprawny (test na innym urządzeniu).

      P: Jak połączyć się z robotem przez Wi-Fi/WebRTC?
      O: Roboty Unitree (zwłaszcza Go2) tworzą własną sieć Wi-Fi. Połącz się z nią jak z każdą inną siecią bezprzewodową. Pamiętaj jednak, że w trybie WebRTC może być podłączony tylko jeden klient naraz. Przed uruchomieniem swojego skryptu rozłącz aplikację mobilną i wyłącz fizyczny kontroler.

      3. Programowanie i debugowanie

      P: Mój węzeł publikuje na /cmd_vel, ale robot nie reaguje. Dlaczego?
      O: Sprawdź kolejno:

      1. Czy robot jest w trybie gotowości (często wymaga przytrzymania przycisku zasilania)?
      2. Czy temat istnieje? Użyj ros2 topic list | grep cmd_vel.
      3. Czy Twoje wiadomości są prawidłowe? Podejrzyj je komendą ros2 topic echo /cmd_vel w innym terminalu.
      4. Czy nie ma konfliktu DDS? Spróbuj export ROS_DOMAIN_ID=42 przed uruchomieniem węzła.

      P: Jak sprawdzić, jakie dane publikuje robot?
      O: Użyj potężnych narzędzi ROS2:

      • ros2 topic list – pokazuje wszystkie dostępne tematy.
      • ros2 topic echo /nazwa_tematu – wyświetla dane na żywo.
      • ros2 topic info /nazwa_tematu – pokazuje typ wiadomości i liczbę prenumeratorów/wydawców.
      • ros2 interface show typ/wiadomosci – pokazuje strukturę wiadomości (np. ros2 interface show geometry_msgs/msg/Twist).

      P: Dlaczego mój skrypt w Pythonie działa wolno i robot szarpie?
      O: Python nie jest językiem czasu rzeczywistego. Przyczyny:

      • Zbyt wolna pętla sterowania: Upewnij się, że Twój timer jest ustawiony na odpowiednią częstotliwość (np. 10-50 Hz, nie 1000 Hz).
      • Blokujące operacje: Unikaj wewnątrz callbacków czasochłonnych operacji (np. zapis do pliku, złożone obliczenia). Jeśli są niezbędne, rozważ użycie MultiThreadedExecutor do uruchomienia ich w osobnym wątku.
      • Problem z wydajnością komputera: Sprawdź obciążenie CPU – onboard computing (np. Jetson Orin) ma ograniczone zasoby.

      4. Sensory i zaawansowane funkcje

      P: Jak odebrać dane z lidaru w Pythonie?
      O: Po uruchomieniu sterownika lidaru (zgodnie z jego dokumentacją), dane są publikowane na standardowym temacie, najczęściej /scan (dla danych 2D) lub /points (dla chmury punktów 3D). W swoim węźle zasubskrybuj ten temat używając odpowiedniego typu wiadomości:

      • Dla skanów laserowych: sensor_msgs.msg.LaserScan.
      • Dla chmur punktów: sensor_msgs.msg.PointCloud2 (przetwarzanie wymaga biblioteki sensor_msgs_py.point_cloud2).

      P: Czy mogę użyć OpenCV do przetwarzania obrazu z kamery RealSense?
      O: Tak, to standardowe podejście. Zainstaluj cv_bridge (sudo apt install ros-humble-cv-bridge) i w callbacku obrazu:

      python

      from cv_bridge import CvBridge
      self.bridge = CvBridge()
      # w callbacku:
      cv_image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')
      # Teraz cv_image to obiekt numpy, który możesz przetwarzać OpenCV

      P: Gdzie znajdę gotowe przykłady SLAM i Nawigacji dla Go2 w Pythonie?
      O: Polecamy repozytoria społeczności, ale zawsze z ostrożnością. Szukaj haseł „unitree go2 slam nav2 python” na GitHubie. Zwracaj uwagę na datę ostatniego commita i sekcję „Issues” – to powie Ci, czy kod jest aktualny i działa. Przykładowo, repozytorium snt-arg/unitree_ros może zawierać przydatne pakiety startowe.

      5. Bezpieczeństwo i dobre praktyki

      P: Co zrobić, gdy robot zachowuje się nieprzewidywalnie?
      O: Przede wszystkim zachowaj spokój.

      1. Natychmiast naciśnij fizyczny przycisk STOP (emergency stop).
      2. Jeśli to niemożliwe, w aplikacji mobilnej (dla Go2) jest wirtualny przycisk awaryjnego zatrzymania.
      3. Przeanalizuj logi – uruchom ponownie swój węzeł z poziomem debugowania: ros2 run ... --ros-args --log-level debug.
      4. Sprawdź, czy nie doszło do konfliktu DDS (patrz punkt 3).

      P: Czy kod z tego poradnika jest bezpieczny do skopiowania i uruchomienia?
      O: Przedstawione fragmenty kodu mają charakter edukacyjny i poglądowy. Zawsze przed uruchomieniem:

      • Przeanalizuj każdą linijkę i zrozum jej działanie.
      • Dostosuj nazwy tematów i typy wiadomości do swojej wersji SDK.
      • Przetestuj najpierw w symulacji.
      • Zacznij od bardzo małych, bezpiecznych wartości (np. prędkość 0.1 m/s).
        Pamiętaj, że odpowiedzialność za działanie kodu na fizycznym robocie spoczywa na Tobie.

      P: Gdzie szukać pomocy, gdy utknę?
      O: Oto najlepsze źródła:

      1. Oficjalna dokumentacja Unitreehttps://support.unitree.com/ – zawsze punkt wyjścia.
      2. Repozytoria GitHub Unitreehttps://github.com/unitreerobotics – sprawdzaj README i Issues.
      3. Forum ROS2https://discourse.ros.org/ – społeczność ROS jest ogromna i pomocna.
      4. GitHub – szukanie po hasłach: „unitree ros2 python”, „go2 slam”, itp.