Development¶
Architecture¶
[Developer laptop] 192.168.123.200–250 (static — there is NO DHCP)
│ Ethernet via the RJ45 on the back panel — the recommended route
▼
┌────────────────────────┐ Ethernet ┌──────────────────────────┐
│ PC2 = Jetson Orin NX │◄──────────►│ PC1 = control board │
│ 192.168.123.164 │ (internal) │ 192.168.123.161 │
│ 100 TOPS, Ubuntu 20.04│ │ locomotion, balancing │
│ ← YOUR CODE RUNS HERE │ │ remote control, app │
│ ssh unitree / 123 │ │ DO NOT TOUCH │
└────────────────────────┘ └──────────────────────────┘
│ ▲
│ Livox MID-360 LiDAR │ direct radio link
│ 192.168.123.20 [remote control]
▼
subnet mask for all hosts: 255.255.255.0
The split is a safety feature: if you crash PC2, PC1 keeps running. Locomotion and stabilisation are unaffected, because you never work on PC1 directly.
Network setup¶
| Device | IP |
|---|---|
| PC1 — control computer (locomotion) | 192.168.123.161 |
| PC2 — Jetson Orin NX (yours) | 192.168.123.164 |
| Livox MID-360 LiDAR | 192.168.123.20 |
| Your laptop | 192.168.123.200–.250 |
| Subnet mask | 255.255.255.0 |
There is no DHCP server on the robot's network
Every address is assigned manually. Pick a free address in the 192.168.123.x subnet, in the range .200–.250.
Over Ethernet — recommended¶
- Run a cable between your laptop and the RJ45 on the robot's back panel.
- Network settings → Wired connection → Manual IPv4 → address
192.168.123.250, mask255.255.255.0. - Connect:
ssh unitree@192.168.123.164, password123. - Confirm the fingerprint on the first connection.
Over Wi-Fi¶
- On older batches, Wi-Fi on the Jetson is not activated. Enable it with
sudo rfkill unblock all. - A static IP on the Wi-Fi hotspot removes internet access on the Jetson. Use Ethernet for development.
Additional hardware — a second Jetson, a Raspberry Pi and similar — connects through the free RJ45 and joins the same local network as PC1 and PC2.
Never change the wired network settings inside the robot
Recovering from a change here means opening the back panel and reinstalling the operating system. The interfaces you will see and must leave alone are: Ethernet, the Docker bridge, the bridged LAN and Wi-Fi, and the peer-to-peer LAN.
SDK¶
Features land in C++ first, then Python, then ROS2. The ROS2 lag reaches a year.
| Option | When to choose it |
|---|---|
unitree_sdk2 (C++) |
Locomotion control and access to the newest features. The main repository, open source on GitHub, forkable. Pre-installed on the Jetson |
| Python | Starting point, integrations, speech. Installed with pip install |
| ROS2 (Cyclone DDS) | Navigation, SLAM, mapping, and attaching third-party modules |
Use a Python virtual environment. Working outside one causes dependency conflicts and breaks on OS upgrades.
Operating system: Ubuntu 20.04 (the Jetson factory image) or 22.04. The SDK has also been adapted to Fedora Workstation; request that procedure from your supplier.
Why ROS2 over ROS1 here: ROS2 shares memory between nodes on different machines. Visualisation runs on the laptop while computation runs on the Jetson, inside a single parameter space. Third-party arms attach as a "second robot" in the same ecosystem.
Develop mode¶
Once the G1 is powered on, the built-in motion control program starts automatically, even with no input from the remote control. It periodically sends instructions at speed 0. Using the SDK for low-level development in that state causes instruction conflicts, and the robot jitters.
This is also why the robot feels tense in Zero Torque: the built-in program is always running.
Enter Develop mode before any low-level development
Skipping this step produces command conflicts and makes the robot shake. Develop mode is available on the EDU version.
| Step | Action | Check |
|---|---|---|
| 1 | Suspend the robot on the gantry and put it into Damping | — |
| 2 | Press L2+R2 | Develop mode is entered; the built-in program stops |
| 3 | Press L2+A | The robot takes a specific diagnostic pose (position mode), confirming Develop mode is active |
| 4 | If the pose is wrong, press L2+R2 again until it is correct | — |
| 5 | Press L2+B | Back to Damping. You can now work with the SDK |
High level and low level¶
| Level | What it is | Risk |
|---|---|---|
| High level | Unitree's built-in functions — stand, squat, walk, gestures | Safe |
| Low level | Direct joint control across three domains: full body, legs, upper body | You can physically break the robot if a joint is not in a valid position. Follow the procedure exactly |
Locomotion client: squat, stand up, move(X, Y, Z) — X forward, Y sideways, Z rotation. Motion is two-dimensional; the robot does not walk upward.
One motor is three motors. What looks like a single motor from the outside contains three motors internally.
Where your code runs: on PC2 (the Jetson). Connecting directly to PC1 is technically possible and is not supported.
Microphone audio¶
The SDK does not expose a realtime microphone stream. Audio is synchronised over multicast from PC1 to PC2, one way only.
- Request the multicast group address and port from your supplier.
- Resample the stream to 16 kHz for most ASR and LLM APIs.
Simulators and motion learning¶
| Tool | Status |
|---|---|
| Isaac Lab | Recommended for reinforcement learning and imitation learning |
| Gazebo | Integration exists and is community-maintained, not official |
| MuJoCo | An alternative, weaker for these simulations |
Stairs do not work out of the box
Climbing stairs requires retraining locomotion from scratch. The stated maximum step height is about 15 cm. Teams that have achieved stair climbing rewrote the locomotion stack completely.
AI integration¶
Use a two-layer architecture:
[Planner agent] ──► breaks the task into steps
(reasoning model) and calls the robot's functions
│
▼
[VLA — Visual Language Action] ──► executes the actions
Do not give a conversational live model direct joint control
A live conversational model is not reliable enough to control a robot and it makes mistakes. Live APIs are for dialogue, not for control.
- Function calling: the model calls predefined robot functions. This requires correct context and prompting.
- Reference integration: Google Gemini connected by API key, running locally from a laptop with the robot on Wi-Fi. Fast response comes from pre-generation — the model starts generating before the speaker finishes.
- Unitree's world model for household tasks is under development and not yet available.
Hardware extension¶
- Third-party hands such as the Inspire Robotics hand install plug and play: mount them, route the wiring correctly, and connect them to PC2.
- Only the U2 configuration (7 DoF arms) supports external hands. The U1 configuration (5 DoF) has a restricted SDK and does not support these modifications. Our unit is U2.
- Over ROS2 an additional module appears as a "second robot" and is controlled in the same loop.
- The head can be modified: print a front panel on a 3D printer and turn the camera forward — it points downward as standard — or add a second camera.
Do not flash the Jetson Orin NX with third-party images