Om de Unitree G1 te programmeren heb je drie dingen nodig: de EDU-versie, een Ubuntu-pc die op het interne netwerk van de robot is aangesloten en de officiële SDK unitree_sdk2. Is de robot net geleverd, begin dan met opstarten, afstandsbediening en de eerste keer rechtop zetten.
Welke G1 je kunt programmeren
In de officiële specificaties van de G1 is eigen softwareontwikkeling alleen voorzien op de G1 EDU; de G1 basis heeft 23 graden van vrijheid en geen rekenmodule voor ontwikkeling. De EDU-versies lopen van 23 tot 43 DoF, met optionele rekenmodule (Unitree noemt Orin-modules) en optionele Dex3-1-handen. In de prijslijst kost de G1 Air € 19.809 en de G1-U1 EDU (23 DoF, rekenmodule van 100 TOPS) € 38.005, excl. btw; verzending en verzekering worden apart in de offerte opgenomen. Om te kiezen tussen U1, U2 en de versies met handen is er de gids welke versie van de G1 kiezen.
Architectuur: waar je code draait
De G1 EDU heeft een computer voor de bewegingsaansturing, beheerd door Unitree, en een ontwikkelcomputer (PC2) voor je eigen code. De Unitree-repositories, bijvoorbeeld xr_teleoperate, geven PC2 op 192.168.123.164 met gebruiker unitree. Het initiële wachtwoord wordt door Unitree verstrekt; de ontwikkelaars-FAQ en de LeRobot-gids voor de G1 noemen 123. Wijzig het zodra de robot in een gedeeld netwerk komt.
Je hebt twee opties:
- Code op de laptop: de pc praat via DDS over de ethernetkabel met de robot. Dat is de handigste keuze om te ontwikkelen en te debuggen.
- Code op PC2: je start het programma via SSH op de robot. Nodig voor autonomie zonder kabel en om de latency te verlagen.
ssh unitree@192.168.123.164
Het netwerk van de pc configureren
- Sluit de pc met een ethernetkabel op de robot aan.
- Zet de interface op handmatige IPv4: adres
192.168.123.99(de waarde die Unitree voorstelt), masker255.255.255.0. Gebruik geen adressen die al op de robot staan, zoals.164. - Noteer met
ip aofifconfigde naam van de interface (enp3s0,eth0...): alle SDK-voorbeelden vragen die als argument. - Controleer met
ping 192.168.123.164. Reageert de robot niet, dan is het een netwerkprobleem: het heeft geen zin de IDE te openen.
Een aparte ethernetpoort (ook een USB-adapter) voorkomt conflicten met het netwerk van het lab.
unitree_sdk2 installeren (C++)
De README van unitree_sdk2 noemt als referentieomgeving Ubuntu 20.04, gcc 9.4.0, CPU x86_64 of aarch64 en CMake 3.10 of hoger. Windows staat niet bij de ondersteunde omgevingen.
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 compileert ook de voorbeelden, die in build/bin/ terechtkomen. Installatie in /opt/unitree_robotics wordt ook door de simulator unitree_mujoco aanbevolen.
Of Python: unitree_sdk2_python
De Python-wrapper vereist Python 3.8 of hoger en cyclonedds 0.10.2:
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip3 install -e .
Als de installatie stopt met "Could not locate cyclonedds", legt de README uit hoe je CycloneDDS vanuit de branch releases/0.10.x compileert en CYCLONEDDS_HOME instelt. De voorbeelden voor de G1 staan in example/g1/. Nuttige opmerking uit de README van de voorbeelden: G1 en H1-2 gebruiken de berichten unitree_hg, terwijl Go2, B2 en H1 unitree_go gebruiken.
Debugmodus: vóór elke low-level test
Bij het opstarten start de G1 zijn eigen bewegingsaansturing, die blijft commando's naar de motoren sturen. Als je tegelijk op rt/lowcmd publiceert, komen de twee commandostromen in conflict. De procedure die in de deploy-gids van unitree_rl_gym staat, is:
- zet de robot aan in het harnas en wacht op de zero-torque modus;
- druk op L2+R2 op de afstandsbediening: de robot gaat in debugmodus met de gewrichten in demping;
- start pas dan het low-level programma.
In debugmodus houdt de robot zich niet zelf in balans: hij moet in het harnas blijven tot je controller hem ondersteunt.
Eerste test: de enkels bewegen
Het voorbeeld g1_ankle_swing_example (bron in example/g1/low_level/) leest rt/lowstate, schrijft rt/lowcmd en laat de enkels oscilleren. Vanuit de map build:
./bin/g1_ankle_swing_example enp3s0
Vervang enp3s0 door je eigen interface. Als de terminal "CRC Error" toont, is het ontvangen bericht beschadigd of komt het niet overeen met het verwachte type: controleer kabel, interface en SDK-versie.
Voor high-level commando's (blijven staan, lopen met ingestelde snelheden) is er g1_loco_client, dat de ingebouwde bewegingsaansturing gebruikt en dus buiten de debugmodus moet worden gestart:
./bin/g1_loco_client --network_interface=enp3s0 --get_fsm_id
Belangrijkste topics
| DDS-topic | Inhoud | Bron |
|---|---|---|
rt/lowstate | Motortoestand, IMU, accu | voorbeeld ankle swing |
rt/lowcmd | Commando's voor positie, snelheid, koppel en kp/kd-versterkingen | voorbeeld ankle swing |
rt/secondary_imu | IMU van de torso | voorbeeld ankle swing, unitree_mujoco |
rt/dex3/left/cmd, rt/dex3/right/cmd | Commando's Dex3-1-hand | voorbeeld g1_dex3_example |
rt/lf/dex3/left/state, rt/lf/dex3/right/state | Toestand Dex3-1-hand | voorbeeld g1_dex3_example |
De Dex3-1-handen hebben aparte topics van de gewrichten van het lichaam.
Eerst simuleren: unitree_mujoco
unitree_mujoco is een simulator op basis van MuJoCo die dezelfde berichten aanbiedt (LowCmd, LowState, SportModeState, IMU van de torso voor de G1). Een programma geschreven met unitree_sdk2, unitree_sdk2_python of unitree_ros2 draait eerst in simulatie en daarna op de robot. De simulator ondersteunt alleen low-level ontwikkeling. Om naar de robot over te stappen wijzig je netwerkinterface en DDS domain id: de README raadt 1 aan in simulatie, terwijl op de robot de standaardwaarde 0 is. Voor reinforcement learning dekt unitree_rl_gym de cyclus train, play, sim2sim (MuJoCo) en sim2real voor G1, H1, H1-2 en Go2.
Wanneer ROS 2 toevoegen
De SDK direct is de kortste weg voor motoren en geïsoleerde tests. ROS 2 is nodig wanneer je Nav2, MoveIt, standaard vision-pipelines, opnames met rosbag of meerdere robots in hetzelfde lab wilt integreren. Het pakket unitree_ros2 bevat de berichten unitree_hg en een low-level voorbeeld voor de G1 (g1/lowlevel/g1_low_level_example); Unitree heeft het getest op Ubuntu 22.04 met Humble (aanbevolen) en op Ubuntu 20.04 met Foxy. Installatie, netwerk en eerste topic staan in de gids ROS 2 op Unitree-robots.
Veiligheidschecklist voor het lab
- Eerste tests altijd met de robot in het harnas en een vrije ruimte eromheen.
- Lage kp/kd-versterkingen en conservatieve koppelgrenzen in de eerste regelcyclus.
- Iemand bij de afstandsbediening, klaar om de robot in demping te zetten.
- Dezelfde SDK-versie op de pc en op de robot; controleer na een OTA-update opnieuw de voorbeelden.
Abra Robotics biedt training en eigen softwareontwikkeling (SDK) als diensten los van de hardware, met ondersteuning in het Engels: details op Software en Universiteiten en onderzoek.
Veelgestelde vragen
Kan de G1 basis (niet-EDU) geprogrammeerd worden?
Nee. De Unitree-specificaties voorzien eigen softwareontwikkeling alleen op de G1 EDU: de G1 basis heeft geen ontwikkelcomputer en geen toegang tot de SDK.
Welk besturingssysteem is nodig op de ontwikkel-pc?
Ubuntu. Voor de SDK is de referentieomgeving Ubuntu 20.04; voor ROS 2 raadt Unitree Ubuntu 22.04 met Humble aan.
Wat is het adres van de ontwikkelcomputer van de G1?
De PC2 van de G1 EDU reageert op 192.168.123.164, gebruiker unitree. Je eigen pc krijgt een vrij adres in dezelfde subnet.
Waarom is de debugmodus nodig vóór een low-level test?
Omdat de ingebouwde bewegingsaansturing blijft doorgaan met commando's naar de motoren. Met L2+R2 zet je die stop, met de robot in het harnas, en pas dan publiceer je op rt/lowcmd.
Beter beginnen met simulatie of met hardware?
Met simulatie. Met unitree_mujoco gaat hetzelfde programma naar de G1 door netwerkinterface en DDS domain id te wijzigen (1 in simulatie, 0 op de robot).
Bronnen
- Unitree, G1-productpagina (versies, DoF, ontwikkeling met SDK): unitree.com/g1
- Unitree, unitree_sdk2, README en G1-voorbeelden: 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, gids voor deploy op een echte robot (debugmodus L2+R2): deploy_real/README.md
- Unitree, xr_teleoperate (PC2 op 192.168.123.164): github.com/unitreerobotics/xr_teleoperate
- Unitree Document Center, sectie G1-ontwikkelaars: support.unitree.com/home/en/G1_developer
- Hugging Face, LeRobot-documentatie voor de Unitree G1: huggingface.co/docs/lerobot/en/unitree_g1
