Useful links and Reading
https://support.unitree.com/home/en/G1_developer https://github.com/unitreerobotics/avp_teleoperate C++ SDK https://github.com/unitreerobotics/unitree_sdk2 Python SDK https://github.com/unitreerobotics/unitree_sdk2_pythonBasic Command
RunRun Robot
Installation on Mac
./ddsperf sanity
(located in $HOME/Documents/GitHub/cyclonedds/install/bin/
or whatever you chose) you should start to see data:
List CycloneDDS Topics on Mac
en0
) is the value you should provide to /config/unitree_g1_humanoid.json
.
Then add the optional Python CycloneDDS module to OM1:
Installation on Linux
You will need:- OM1
- uv
- ffmpeg (for audio, otherwise the audio out will not work due to missing
ffprobe
) - v4l-utils (for video)
- CycloneDDS (for DDS comms to the G1 motion client)
CYCLONEDDS_HOME
env var. This is where the actual CycloneDDS is installed on your computer:
CYCLONEDDS_HOME
actually points to the CycloneDDS install /lib. This can be confusing, since if you install indirectly via unitree_ros2
, then the location of the CycloneDDS libraries will be in slightly different location than if you install directly, via git clone https://github.com/eclipse-cyclonedds/cyclonedds
.
Then add the optional Python CycloneDDS module to OM1:
ORIN System Description
Your development computer will (should) be at192.168.123.99
The LIDAR is 192.168.123.120
The internal control computer (RockChip, aka the operation and control computing unit
) is at 192.168.123.161
The internal development computer (Orin 16GB, aka the development computing unit
) is at 192.168.123.164
Useful commands:
ORIN Set default input and output Audio devices
Control via Unitree Hand Controller
Hang G1 on gantryTurn on (short press, long press)
Wait for boot to complete
When the G1 boots, it is in
damp
stateUse the hand controller to command “L1+A” and “L1+UP”\ The system is then ready to move using the
ai_sport
client. The system will respond to manual controller and SDK commands.
- Press “L1+A” -> EMERGENCY DAMP / SINK TO FLOOR
- Press “L1+UP” -> Stand firmly (aka “lock stand”). The arms will move slightly. The system is now in the “ready” state.
- Lower the G1 to the ground (but do not unclip her yet). Stability not yet running - she will fall over if let go.
- Press “R2+X” -> Start motion control. The arms will jump outwards and she will actively control her stability.
- Press “Start” to switch back and forth between
stand
andstep in place
.
- “SELECT + Y” -> Wave Hand. Alternates sides.
- “SELECT + A” -> Handshake. Hold for movement to complete. Wait 3s and press again to relax arm to initial state.
- “SELECT + X” -> Turn around and wave hand.s
Boot from Chair
This is similar to boot from gantry, except, when you press “L1+UP”, you have to help the humanoid stand up, while it straightens itself. For the sit-down procedure, back up the chair behind the robot, select “L1+LEFT”, and help the humanoid settle back into the chair.Special DEBUG state
Avoid this mode since it disables all high level motion since it turns off theai_sport
client.
- Press L2+R2 -> Enter DEBUG STATE
- Press L2+A -> Diagnostic Posture (Arms bent)
- Press L2+B -> Relax arms, damping state
Using the Internal Orin
SSH to Orin via123
but you should obviously change this. Result:
foxy(1)
.
Fixing the broken CycloneDDS installation on the Nvidia Orin
The default installation of CycloneDDS on the G1 Orin is broken, since it does not support the newerunitree_hg
IDL data format for the G1. Solution: remove the default CycloneDDS installation and reinstall following the Unitree ROS2 installation instructions. The unitree_hg
bug was fixed in early Dec. 2024 in this commit: unitreerobotics/unitree_ros2@b34fdf7.
You will need to export suitable env variables and correct the setting in .bashrc
and in $HOME/unitree_ros2/setup.sh
. Add this to the .bashrc
:
$HOME/unitree_ros2/setup.sh
to
setup.sh
via source ~/unitree_ros2/setup.sh
. Finally, you should start to see data.
ros2 topic echo lowstate
ros2 topic echo lowcmd
ros2 topic echo odommodestate
ros2 topic list
.99
, for example, using ./bin/listtopics
: