Die High-Level-Steuerung ist der schnellste Weg, den Go2 zu bewegen: Sie senden fertige Bewegungsbefehle (aufstehen, gehen, drehen …) an den bordeigenen Bewegungs-Controller, der Balance und Gangart selbst regelt. Dieser Walkthrough führt zu einer lauffähigen Minimal-Anwendung in C++ und Python.
Hinweis: Beispielcode ist illustrativ. Exakte Header-, Methoden- und Topic-Namen können je nach SDK-Version abweichen – maßgeblich ist das README des jeweiligen Repositorys.
Voraussetzungen
- Programmierbarer Go2 (X, Edu oder W)
- Installiertes Unitree SDK (C++
unitree_sdk2oder Pythonunitree_sdk2_python) - Bestehende Netzwerkverbindung (siehe Anleitung „Netzwerkverbindung einrichten“)
- Freie, ebene Fläche; Roboter startbereit
Schritt 1: DDS-Kanal initialisieren
Die Kommunikation läuft über DDS. Zu Beginn wird die Kanal-Factory mit dem Namen Ihrer Netzwerkschnittstelle initialisiert (mit ip a ermitteln, z. B. eth0).
Schritt 2: SportClient erstellen
Der SportClient kapselt die High-Level-Befehle. Nach Init() ist er einsatzbereit und Sie können Bewegungsmethoden aufrufen.
Schritt 3: Wichtige Bewegungsbefehle
- StandUp() / StandDown() – aufstehen / hinlegen
- BalanceStand() – ausbalanciertes Stehen
- Move(vx, vy, vyaw) – fahren:
vxvorwärts (m/s),vyseitlich (m/s),vyawdrehen (rad/s) - StopMove() – sofort anhalten
- Damp() – Motoren weichschalten (sicherer Ruhezustand)
- Sit(), Hello(), Stretch() – vordefinierte Aktionen
Vollständiges Beispiel (C++)
#include <unitree/robot/channel/channel_factory.hpp>
#include <unitree/robot/go2/sport/sport_client.hpp>
#include <unistd.h>
int main(int argc, char** argv) {
if (argc < 2) return -1; // Aufruf: ./demo eth0
unitree::robot::ChannelFactory::Instance()->Init(0, argv[1]);
unitree::robot::go2::SportClient sport;
sport.SetTimeout(10.0f);
sport.Init();
sport.StandUp(); // aufstehen
sleep(2);
sport.Move(0.3, 0.0, 0.0); // 0,3 m/s vorwaerts
sleep(3);
sport.StopMove(); // anhalten
sport.StandDown(); // hinlegen
sport.Damp(); // Motoren entspannen
return 0;
}
Kompiliert wird in einem CMake-Projekt, das unitree_sdk2 einbindet und verlinkt. Start: ./demo eth0.
Vollständiges Beispiel (Python)
import time, sys
from unitree_sdk2py.core.channel import ChannelFactoryInitialize
from unitree_sdk2py.go2.sport.sport_client import SportClient
ChannelFactoryInitialize(0, sys.argv[1]) # z. B. eth0
sport = SportClient()
sport.SetTimeout(10.0)
sport.Init()
sport.StandUp()
time.sleep(2)
sport.Move(0.3, 0.0, 0.0)
time.sleep(3)
sport.StopMove()
sport.StandDown()
sport.Damp()
Start: python3 demo.py eth0.
Häufige Stolpersteine
- Falsche Schnittstelle – der an die Factory übergebene Name muss zur Verbindung zum Roboter passen.
- Roboter liegt – vor
Move()zuerstStandUp()bzw.BalanceStand()aufrufen. - Kein Stopp – Programme immer mit
StopMove()/Damp()sauber beenden.
Sicherheit
- Erst auf freier Fläche testen, ausreichend Abstand halten.
- Geschwindigkeiten klein beginnen und langsam steigern.
- Damp() oder StopMove() als Not-Stopp griffbereit halten.
Weiterführend
Vollständige Befehlsreferenz und aktuelle Signaturen: offizielle Unitree-Doku und das unitree_sdk2-Repository.
