Unitree Go2: High-Level-Steuerung (Bewegungsmodus)

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_sdk2 oder Python unitree_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: vx vorwärts (m/s), vy seitlich (m/s), vyaw drehen (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() zuerst StandUp() 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.