Um den Unitree G1 zu programmieren, brauchen Sie drei Dinge: die EDU-Version, einen Ubuntu-PC im internen Netzwerk des Roboters und das offizielle SDK unitree_sdk2. Ist der Roboter gerade erst angekommen, beginnen Sie mit Einschalten, Fernbedienung und erstem Aufstehen.
Welcher G1 sich programmieren lässt
Im offiziellen Datenblatt des G1 ist eigene Softwareentwicklung nur beim G1 EDU vorgesehen; der G1 in der Basisversion hat 23 Freiheitsgrade und kein Rechenmodul für die Entwicklung. Die EDU-Versionen reichen von 23 bis 43 DoF, mit optionalem Rechenmodul (Unitree nennt Orin-Module) und optionalen Dex3-1 Händen. Laut Preisliste kostet der G1 Air 19.809 € und der G1-U1 EDU (23 DoF, Rechenmodul mit 100 TOPS) 38.005 €, jeweils zzgl. MwSt.; Versand und Versicherung werden im Angebot ausgewiesen. Bei der Wahl zwischen U1, U2 und den Versionen mit Händen hilft der Leitfaden Welche G1 Version passt.
Architektur: wo Ihr Code läuft
Der G1 EDU hat einen Rechner für die Bewegungssteuerung, den Unitree verwaltet, und einen Entwicklungsrechner (PC2) für den Code der Anwender. Die Repositorys von Unitree, zum Beispiel xr_teleoperate, geben für PC2 die Adresse 192.168.123.164 mit dem Benutzer unitree an. Das Startpasswort stellt Unitree bereit; die Entwickler-FAQ und die LeRobot-Anleitung für den G1 nennen 123. Ändern Sie es, sobald der Roboter in ein gemeinsam genutztes Netzwerk kommt.
Sie haben zwei Möglichkeiten:
- Code auf dem Laptop: Der PC spricht über DDS auf dem Ethernet-Kabel mit dem Roboter. Das ist der bequemste Weg für Entwicklung und Debugging.
- Code auf PC2: Sie starten das Programm per SSH auf dem Roboter. Das brauchen Sie für autonomen Betrieb ohne Kabel und für geringere Latenz.
ssh unitree@192.168.123.164
Netzwerk am PC einrichten
- Verbinden Sie den PC mit einem Ethernet-Kabel mit dem Roboter.
- Stellen Sie die Schnittstelle auf manuelles IPv4: Adresse
192.168.123.99(von Unitree vorgeschlagen), Netzmaske255.255.255.0. Verwenden Sie keine Adressen, die der Roboter bereits belegt, etwa.164. - Notieren Sie mit
ip aoderifconfigden Namen der Schnittstelle (enp3s0,eth0...): Alle SDK-Beispiele erwarten ihn als Argument. - Prüfen Sie die Verbindung mit
ping 192.168.123.164. Kommt keine Antwort, liegt das Problem im Netzwerk, und die IDE zu öffnen bringt nichts.
Ein eigener Ethernet-Port (auch ein USB-Adapter) vermeidet Konflikte mit dem Netzwerk des Labors.
unitree_sdk2 installieren (C++)
Das README von unitree_sdk2 nennt als Referenzumgebung Ubuntu 20.04, gcc 9.4.0, CPU x86_64 oder aarch64 und CMake 3.10 oder neuer. Windows gehört nicht zu den genannten Umgebungen.
sudo apt-get update
sudo apt-get install -y cmake g++ build-essential libyaml-cpp-dev \
libeigen3-dev libboost-all-dev libfmt-dev
git clone https://github.com/unitreerobotics/unitree_sdk2.git
cd unitree_sdk2 && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/unitree_robotics
make
sudo make install
make kompiliert auch die Beispiele, die in build/bin/ landen. Die Installation in /opt/unitree_robotics empfiehlt auch der Simulator unitree_mujoco.
Oder Python: unitree_sdk2_python
Der Python-Wrapper setzt Python 3.8 oder neuer und cyclonedds 0.10.2 voraus:
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip3 install -e .
Bricht die Installation mit "Could not locate cyclonedds" ab, erklärt das README, wie Sie CycloneDDS aus dem Branch releases/0.10.x kompilieren und CYCLONEDDS_HOME setzen. Die Beispiele für den G1 liegen in example/g1/. Ein nützlicher Hinweis aus dem README der Beispiele: G1 und H1-2 verwenden die Nachrichten unitree_hg, Go2, B2 und H1 dagegen unitree_go.
Debug Mode: vor jedem Low-Level-Test
Nach dem Einschalten startet der G1 seine eigene Bewegungssteuerung, die laufend Befehle an die Motoren sendet. Veröffentlichen Sie gleichzeitig auf rt/lowcmd, geraten die beiden Befehlsströme in Konflikt. Das Vorgehen aus der Deploy-Anleitung von unitree_rl_gym:
- Schalten Sie den Roboter ein, während er im Gurtgeschirr hängt, und warten Sie auf den Nullmoment-Modus;
- drücken Sie L2+R2 auf der Fernbedienung: Der Roboter wechselt in den Debug Mode, die Gelenke sind gedämpft;
- erst jetzt starten Sie das Low-Level-Programm.
Im Debug Mode hält der Roboter das Gleichgewicht nicht selbst: Er bleibt hängen, bis Ihr Regler ihn trägt.
Erster Test: die Knöchel bewegen
Das Beispiel g1_ankle_swing_example (Quellcode in example/g1/low_level/) liest rt/lowstate, schreibt rt/lowcmd und lässt die Knöchel pendeln. Aus dem Ordner build:
./bin/g1_ankle_swing_example enp3s0
Ersetzen Sie enp3s0 durch Ihre Schnittstelle. Gibt das Terminal "CRC Error" aus, ist die empfangene Nachricht beschädigt oder entspricht nicht dem erwarteten Typ: Prüfen Sie Kabel, Schnittstelle und SDK-Version.
Für High-Level-Befehle (Stehen, Gehen mit vorgegebener Geschwindigkeit) gibt es g1_loco_client. Er nutzt die integrierte Bewegungssteuerung und wird deshalb außerhalb des Debug Mode gestartet:
./bin/g1_loco_client --network_interface=enp3s0 --get_fsm_id
Wichtige Topics
| DDS Topic | Inhalt | Quelle |
|---|---|---|
rt/lowstate | Motorstatus, IMU, Akku | Beispiel ankle swing |
rt/lowcmd | Befehle für Position, Geschwindigkeit, Drehmoment und Verstärkungen kp/kd | Beispiel ankle swing |
rt/secondary_imu | IMU im Torso | Beispiel ankle swing, unitree_mujoco |
rt/dex3/left/cmd, rt/dex3/right/cmd | Befehle Hand Dex3-1 | Beispiel g1_dex3_example |
rt/lf/dex3/left/state, rt/lf/dex3/right/state | Status Hand Dex3-1 | Beispiel g1_dex3_example |
Die Dex3-1 Hände haben eigene Topics, getrennt von denen der Körpergelenke.
Erst simulieren: unitree_mujoco
unitree_mujoco ist ein Simulator auf Basis von MuJoCo, der dieselben Nachrichten bereitstellt (LowCmd, LowState, SportModeState, beim G1 die IMU im Torso). Ein Programm, das mit unitree_sdk2, unitree_sdk2_python oder unitree_ros2 geschrieben ist, läuft zuerst in der Simulation und danach auf dem Roboter. Der Simulator unterstützt nur die Low-Level-Entwicklung. Für den Wechsel auf den Roboter ändern Sie Netzwerkschnittstelle und DDS Domain ID: Das README empfiehlt 1 in der Simulation, auf dem Roboter ist der Standardwert 0. Für Reinforcement Learning deckt unitree_rl_gym den Ablauf Train, Play, Sim2Sim (MuJoCo) und Sim2Real für G1, H1, H1-2 und Go2 ab.
Wann ROS 2 dazukommt
Das SDK direkt zu nutzen ist der kürzeste Weg für Motoren und isolierte Tests. ROS 2 brauchen Sie, wenn Sie Nav2, MoveIt, Standard-Pipelines für die Bildverarbeitung, Aufzeichnung mit rosbag oder mehrere Roboter im selben Labor integrieren. Das Paket unitree_ros2 enthält die Nachrichten unitree_hg und ein Low-Level-Beispiel für den G1 (g1/lowlevel/g1_low_level_example); Unitree hat es unter Ubuntu 22.04 mit Humble (empfohlen) und unter Ubuntu 20.04 mit Foxy getestet. Installation, Netzwerk und erstes Topic beschreibt die Anleitung ROS 2 auf Unitree Robotern.
Sicherheits-Checkliste für das Labor
- Erste Tests immer mit hängendem Roboter und freiem Bereich ringsum.
- Niedrige Verstärkungen kp/kd und vorsichtige Drehmomentgrenzen in der ersten Regelschleife.
- Eine Person an der Fernbedienung, bereit, den Roboter in die Dämpfung zu schalten.
- Dieselbe SDK-Version auf PC und Roboter; nach einem OTA-Update prüfen Sie die Beispiele erneut.
Abra Robotics bietet Schulung und Softwareentwicklung auf Basis des SDK als eigene Leistungen getrennt von der Hardware an: mehr dazu unter Software und Hochschulen und Forschung.
Häufige Fragen
Lässt sich der G1 in der Basisversion (nicht EDU) programmieren?
Nein. Laut Datenblatt von Unitree ist eigene Softwareentwicklung nur beim G1 EDU vorgesehen: Der Basis-G1 hat weder den Entwicklungsrechner noch Zugang zum SDK.
Welches Betriebssystem braucht der Entwicklungs-PC?
Ubuntu. Für das SDK ist Ubuntu 20.04 die Referenzumgebung; für ROS 2 empfiehlt Unitree Ubuntu 22.04 mit Humble.
Welche Adresse hat der Entwicklungsrechner des G1?
Der PC2 des G1 EDU ist unter 192.168.123.164 erreichbar, Benutzer unitree. Ihr PC bekommt eine freie Adresse im selben Subnetz.
Warum braucht es vor einem Low-Level-Test den Debug Mode?
Weil die integrierte Bewegungssteuerung weiter Befehle an die Motoren sendet. Mit L2+R2 stoppen Sie sie am hängenden Roboter, und erst dann veröffentlichen Sie auf rt/lowcmd.
Besser mit der Simulation oder mit der Hardware beginnen?
Mit der Simulation. Mit unitree_mujoco wechselt dasselbe Programm auf den G1, wenn Sie Netzwerkschnittstelle und DDS Domain ID ändern (1 in der Simulation, 0 auf dem Roboter).
Quellen
- Unitree, Produktseite G1 (Versionen, DoF, Entwicklung mit SDK): unitree.com/g1
- Unitree, unitree_sdk2, README und Beispiele G1: github.com/unitreerobotics/unitree_sdk2 · example/g1
- Unitree, unitree_sdk2_python: github.com/unitreerobotics/unitree_sdk2_python
- Unitree, unitree_ros2: github.com/unitreerobotics/unitree_ros2
- Unitree, unitree_mujoco: github.com/unitreerobotics/unitree_mujoco
- Unitree, unitree_rl_gym, Anleitung zum Deploy auf dem echten Roboter (Debug Mode L2+R2): deploy_real/README.md
- Unitree, xr_teleoperate (PC2 unter 192.168.123.164): github.com/unitreerobotics/xr_teleoperate
- Unitree Document Center, Bereich für G1 Entwickler: support.unitree.com/home/en/G1_developer
- Hugging Face, LeRobot-Dokumentation für Unitree G1: huggingface.co/docs/lerobot/en/unitree_g1
