För att programmera Unitree G1 behövs tre saker: EDU-versionen, en Ubuntu-dator ansluten till robotens interna nät och det officiella SDK:t unitree_sdk2. Den här guiden följer Unitrees offentliga dokumentation (GitHub-repositorier och Document Center) och anger för varje steg vilken fil eller sida det kommer från. Om roboten precis har kommit börjar du med start, fjärrkontroll och första gången den reser sig.
Vilken G1 går att programmera
I det officiella produktbladet för G1 anges sekundär utveckling bara för G1 EDU. Bas-G1 har 23 frihetsgrader och ingen beräkningsmodul för utveckling. EDU-versionerna har från 23 till 43 DoF, med beräkningsmodul som tillval (Unitree nämner Orin-kort) och Dex3-1-händer som tillval. I Abras prislista börjar G1 Air på 19 809 € och G1-U1 EDU (23 DoF, beräkningsdocka på 100 TOPS) på 38 005 €, exklusive moms. Alla versioner finns i G1-översikten; för att välja mellan U1, U2 och versionerna med händer finns guiden vilken G1-version ska man välja.
Arkitektur: var din kod körs
G1 EDU har en dator för rörelsestyrning, som Unitree sköter, och en utvecklingsdator (PC2) för användarens kod. Unitrees repositorier, till exempel xr_teleoperate, anger PC2 på adressen 192.168.123.164 med användaren unitree. Det initiala lösenordet kommer från Unitree; utvecklar-FAQ:n och LeRobot-guiden för G1 anger 123. Byt det så snart roboten kopplas in i ett delat nät.
Du har två alternativ:
- Koden på den bärbara datorn: datorn pratar med roboten via DDS över Ethernetkabeln. Det är det bekvämaste valet för utveckling och felsökning.
- Koden på PC2: du startar programmet på roboten via SSH. Det behövs för autonom drift utan kabel och för att minska latensen.
ssh unitree@192.168.123.164
Konfigurera datorns nätverk
- Anslut datorn till roboten med en Ethernetkabel.
- Ställ in gränssnittet på manuell IPv4: adress
192.168.123.99(den som Unitree föreslår), nätmask255.255.255.0. Använd inte adresser som redan finns på roboten, som.164. - Notera gränssnittets namn med
ip aellerifconfig(enp3s0,eth0...): alla SDK-exempel kräver det som argument. - Kontrollera med
ping 192.168.123.164. Svarar den inte är problemet nätverket: ingen idé att öppna IDE:n.
En egen Ethernetport (även en USB-adapter) undviker konflikter med labbets nätverk.
Installera unitree_sdk2 (C++)
README-filen för unitree_sdk2 anger Ubuntu 20.04, gcc 9.4.0, x86_64- eller aarch64-processor och CMake 3.10 eller senare som referensmiljö. På andra Ubuntu-versioner brukar det kompilera, men det är den miljön som är testad. Windows är ingen miljö som README-filen räknar med.
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 kompilerar även exemplen, som hamnar i build/bin/. Installationen i /opt/unitree_robotics är den som även simulatorn unitree_mujoco rekommenderar.
Eller Python: unitree_sdk2_python
Python-wrappern kräver Python 3.8 eller senare och cyclonedds 0.10.2:
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip3 install -e .
Om installationen stoppar med "Could not locate cyclonedds" förklarar README-filen hur man kompilerar CycloneDDS från grenen releases/0.10.x och sätter CYCLONEDDS_HOME. Exemplen för G1 finns i example/g1/. En nyttig upplysning i exemplens README: G1 och H1-2 använder meddelandena unitree_hg, medan Go2, B2 och H1 använder unitree_go.
Debug mode: före varje low-level-test
När G1 startar kör den sin egen rörelsestyrning, som hela tiden skickar kommandon till motorerna. Publicerar du samtidigt på rt/lowcmd krockar kommandona och roboten vibrerar. Proceduren som dokumenteras i driftsättningsguiden för unitree_rl_gym är:
- starta roboten upphängd i selen och vänta på läget med noll vridmoment;
- tryck L2+R2 på fjärrkontrollen: roboten går in i debug mode med lederna i dämpat läge;
- först nu startar du low-level-programmet.
I debug mode håller roboten inte balansen själv: den ska hänga kvar tills din regulator bär den.
Första testet: röra fotlederna
Exemplet g1_ankle_swing_example (källkod i example/g1/low_level/) läser rt/lowstate, skriver rt/lowcmd och får fotlederna att pendla. Från mappen build:
./bin/g1_ankle_swing_example enp3s0
Byt enp3s0 mot ditt gränssnitt. Skriver terminalen ut "CRC Error" är det mottagna meddelandet skadat eller av en annan typ än väntat: kontrollera kabel, gränssnitt och SDK-version.
För kommandon på hög nivå (stå upp, gå med inställda hastigheter) finns g1_loco_client, som använder den inbyggda rörelsestyrningen och därför ska startas utanför debug mode:
./bin/g1_loco_client --network_interface=enp3s0 --get_fsm_id
Viktigaste topics
| DDS-topic | Innehåll | Källa |
|---|---|---|
rt/lowstate | Status för motorer, IMU, batteri | exemplet ankle swing |
rt/lowcmd | Kommandon för position, hastighet, vridmoment och förstärkningar kp/kd | exemplet ankle swing |
rt/secondary_imu | Torsots IMU | exemplet ankle swing, unitree_mujoco |
rt/dex3/left/cmd, rt/dex3/right/cmd | Kommandon till Dex3-1-handen | exemplet g1_dex3_example |
rt/lf/dex3/left/state, rt/lf/dex3/right/state | Status för Dex3-1-handen | exemplet g1_dex3_example |
Händerna har egna topics, skilda från gången: det lönar sig att köra benens reglerloop i en process och greppet i en annan, med olika frekvenser.
Simulera först: unitree_mujoco
unitree_mujoco är en simulator baserad på MuJoCo som exponerar samma meddelanden (LowCmd, LowState, SportModeState, torsots IMU för G1). Ett program skrivet med unitree_sdk2, unitree_sdk2_python eller unitree_ros2 körs först i simulering och sedan på roboten. Simulatorn stöder bara utveckling på låg nivå. För reinforcement learning täcker unitree_rl_gym hela kedjan train, play, sim2sim (MuJoCo) och sim2real för G1, H1, H1-2 och Go2.
När ROS 2 ska läggas till
Att gå direkt via SDK:t är den kortaste vägen för motorer och isolerade tester. ROS 2 behövs när du ska integrera Nav2, MoveIt, standardiserade bildbehandlingskedjor, inspelning med rosbag eller flera robotar i samma labb. Paketet unitree_ros2 innehåller meddelandena unitree_hg och ett low-level-exempel för G1 (g1/lowlevel/g1_low_level_example); Unitree har testat det på Ubuntu 22.04 med Humble (rekommenderas) och på Ubuntu 20.04 med Foxy. Installation, nätverk och första topic finns i guiden ROS 2 på Unitree-robotar.
Säkerhetschecklista för labbet
- De första testerna alltid med roboten upphängd och fritt utrymme runt omkring.
- Låga förstärkningar kp/kd och försiktiga momentgränser i den första reglerloopen.
- En person vid fjärrkontrollen, redo att ställa roboten i dämpat läge.
- Samma SDK-version på datorn och på roboten; efter en OTA-uppdatering kontrollerar du exemplen igen.
Abra Robotics levererar Unitree-sortimentet i Sverige, med support på engelska, och erbjuder utbildning och mjukvaruutveckling ovanpå SDK:t som tjänster separata från hårdvaran: mer om detta under Mjukvara och Universitet och forskning.
Vanliga frågor
Går bas-G1 (inte EDU) att programmera?
Nej. I Unitrees officiella produktblad anges sekundär utveckling bara för G1 EDU. Bas-G1 har varken beräkningsmodul för utveckling eller SDK-åtkomst.
Vilket operativsystem behövs på utvecklingsdatorn?
README-filen för unitree_sdk2 anger Ubuntu 20.04 med gcc 9.4.0 som referensmiljö, på x86_64- eller aarch64-processor. För ROS 2 har Unitree testat Ubuntu 20.04 med Foxy och Ubuntu 22.04 med Humble, och rekommenderar Humble.
Vilken adress har G1:s utvecklingsdator?
Utvecklingsdatorn (PC2) i G1 EDU svarar på 192.168.123.164, användare unitree. Din dator ska ligga på samma subnät 192.168.123.x med en ledig adress; Unitree föreslår 192.168.123.99.
Varför vibrerar roboten när jag startar ett low-level-exempel?
Nästan alltid är den inbyggda rörelsestyrningen fortfarande aktiv och skickar kommandon parallellt med dina. Gå in i debug mode (L2+R2 med roboten upphängd och i dämpat läge) innan du skickar kommandon på rt/lowcmd.
Är det bättre att börja i simulering eller på hårdvaran?
I simulering. unitree_mujoco använder samma DDS-meddelanden som roboten, så samma program körs först i MuJoCo och sedan på G1 genom att bara byta nätverksgränssnitt.
Källor
- Unitree, produktblad G1 (versioner, DoF, sekundär utveckling): unitree.com/g1
- Unitree, unitree_sdk2, README och G1-exempel: 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, guide för driftsättning på riktig robot (debug mode L2+R2): deploy_real/README.md
- Unitree, xr_teleoperate (PC2 på 192.168.123.164): github.com/unitreerobotics/xr_teleoperate
- Unitree Document Center, utvecklaravsnittet för G1: support.unitree.com/home/en/G1_developer
- Hugging Face, LeRobot-dokumentation för Unitree G1: huggingface.co/docs/lerobot/en/unitree_g1