How to Set Up the Unitree G1 at Home: Step-by-Step Guide (2026, Firmware 1.5.1)

How to Set Up the Unitree G1 at Home: Step-by-Step Guide (2026, Firmware 1.5.1)

Complete home setup guide for the Unitree G1: from unboxing and network configuration to firmware 1.5.1, SDK/ROS2 installation, calibration, and security hardening.

15 min readUpdated Jul 2026
Alex Thornton
Alex Thornton

Setting up the Unitree G1 at home takes about 2 hours and four phases: unbox and inspect, install and charge the 9000 mAh battery, connect over Ethernet (set your PC to 192.168.123.99 on the 192.168.123.x subnet), then update to firmware 1.5.1 and run calibration. The G1 has 23–43 DOF and a 3 kg payload. You need at least a 3 m × 3 m clear space and an emergency‑stop within reach.

Unitree G1 humanoid robot standing in a living room during home setup — demonstrating the required 3 m × 3 m clearance

What You’ll Need: Tools, Space & Time

A first‑time setup of the Unitree G1 takes approximately 90–120 minutes and requires no specialised tools. However, you must have a well‑prepared space and a few essential items.

Tools & supplies - The G1’s included 54 V/5 A charger and power cable - A suspension rig (overhead hoist, sturdy camera stand, or purpose‑made robot stand) to support the robot during the first power‑on and calibration - An Ethernet cable (Cat 5e or better) for the initial wired connection - A laptop running Ubuntu 20.04 (or a virtual machine) for SDK steps - Smartphone with the Unitree app installed (iOS or Android) - A safety mirror and an anti‑fatigue mat are highly recommended for the home environment - Optional: a dedicated Wi‑Fi router for a controlled network segment

Minimum room size 5 m² (roughly 3 m × 3 m) of flat, non‑slip, indoor floor space. The robot measures 127–132 cm tall × 45 cm wide × 20 cm deep when upright but folds to 69×45×30 cm for storage. An additional 1 m of clearance around the perimeter lets you reach the emergency‑stop without obstruction.

Setup time by phase | Phase | Typical time | |--------------------------------------------|-----------------| | Unboxing & physical inspection | 15 min | | Battery installation & charging | 90 min (charge) | | First boot & suspension | 10 min | | Network configuration (wired) | 15 min | | App / remote binding | 5–10 min | | Firmware update & security hardening | 15–20 min | | Calibration & first walk | 15 min | | SDK / ROS2 installation (advanced, optional)| 30–45 min |

If you already have an Ubuntu 20.04 machine and a suspension rig ready, the hands‑on time drops below 2 hours. Charging the battery fully before the first power‑on avoids interruptions.

Before You Start: Safety & Space Requirements

[CRITICAL] The G1 is a 35 kg bipedal robot capable of 2 m/s movement. It can fall, cause injury, or damage property if not physically secured during its first calibration. Follow these rules without exception.

  • Exclusion zone: Mark a 3 m radius around the robot’s startup position. No person, pet, or object may enter while the robot is in Ready or Operate mode.
  • Suspension: During the very first boot and calibration, the robot must hang from a secure overhead rig or be firmly seated on a purpose‑built stand. The rig must hold at least 40 kg. Never let the robot stand unsupported until calibration passes successfully.
  • E‑stop: Keep the battery button and the remote control within arm’s reach. Pressing L2+B on the remote immediately activates damping (joint‑softening fall‑safe mode). On the robot chassis, press and hold the power button for 3 seconds to perform a hard shutdown.
  • Floor surface: Hard, level, and non‑slip (short‑pile carpet or hardwood with an anti‑fatigue mat). Sloped or slick surfaces can cause the robot to slip during calibration.
  • Power supply: Use only the included 54 V/5 A charger. Plug the charger into a grounded, surge‑protected outlet.
  • Firmware‑dependent controls:
  • Firmware 1.4.5 and later (including 1.5.1): damping = L2+B, ready = L2+UP, operate = R2+A.
  • Legacy firmware (<1.4.5): damping = L1+A, ready = L1+UP, operate is the same button but may be unreliable.

Always check your firmware version before relying on a button sequence.

Step 1 — Unboxing & Physical Inspection

  1. Open the shipping crate on a clean, level floor.
  2. Remove the top foam layer and the accessory box (charger, cables, remote control, quick‑start card).
  3. With a second person, carefully lift the robot out by gripping the torso frame — never the limbs. The robot weighs 35 kg.
  4. Place the robot on its back on a padded surface or directly onto your suspension rig.
  5. Inspect every joint for visible damage, loose fasteners, or misaligned covers. Check the Intel RealSense D435/D435i cameras behind the visor and the Livox MID‑360 LiDAR on the chest.
  6. Confirm that the 9000 mAh quick‑release battery is present in the accessory box; it ships separately.
Unitree G1 unboxing — robot lying on its back with all accessories beside it

Step 2 — Battery Installation & Charging

  1. Locate the battery bay on the back of the robot.
  2. Slide the 9000 mAh pack in at a 45° angle and press firmly until you hear a distinct click — the pack must be fully seated.
  3. Connect the charger to the same port. The LED on the charger glows red while charging and turns green when complete. A full charge takes roughly 1.5 hours.
  4. Keep the battery plugged in during the first boot and calibration so the robot never runs on partial charge.

> The G1 supports hot‑swapping — you can swap packs without powering down, but for home setup we recommend keeping it on the charger until you are ready to walk.

Step 3 — Powering On & First Boot

  1. Hang the robot from the suspension rig or seat it securely on a stand. The feet must not touch the floor.
  2. Press the power button on the back of the robot for about 3 seconds. The chest LEDs will cycle and the fan will spin up.
  3. Wait for the boot sequence to finish (about 60–90 seconds). The robot will initially be in Damped mode — joints are soft but the robot will not stand.
  4. Do not attempt to stand the robot yet. Proceed directly to network configuration.

Step 4 — Network Configuration (Wi‑Fi vs Ethernet)

The G1’s internal subnet is 192.168.123.0/24. Three critical IPs are reserved:

DeviceIP address
Control computer (RockChip)192.168.123.161
Development computer (NVIDIA Jetson Orin NX)192.168.123.164
LiDAR (Livox MID-360)192.168.123.120

Step‑by‑step (wired Ethernet — recommended) 1. Connect your PC directly to the G1’s Ethernet port with a patch cable. 2. On your PC, set a static IP of 192.168.123.99 (any unused address in the subnet except the three above), netmask 255.255.255.0, gateway left blank. 3. From a terminal, ping 192.168.123.164 — you should get a reply. 4. SSH into the Jetson: ssh unitree@192.168.123.164 (default password 123 — change it later).

Wi‑Fi (via the app — basic control only) After the app is bound (Step 5), you can connect the robot to your home Wi‑Fi through the app’s settings. For SDK development, always use Ethernet — latency and packet loss over Wi‑Fi can interrupt real‑time control loops.

InterfaceLatencyThroughputUse case
Ethernet< 1 ms1 GbpsSDK, ROS2, real‑time control
Wi‑Fi 62–10 ms~600 MbpsApp, telemetry, remote

Common pitfall: If your PC has multiple network interfaces, the SDK may bind to the wrong one. You must explicitly set the interface name (e.g., enp0s31f6) in the SDK channel‑factory configuration.

Step 5 — App / Remote Control Binding

  1. Download the Unitree Robotics app from the App Store or Google Play.
  2. Ensure your phone’s Bluetooth is on. Press L2+R2 on the remote to enter pairing mode.
  3. In the app, tap “Add Device” and select the G1 from the list.
  4. Once bound, the remote’s LCD will show the robot’s battery status and current mode.
  5. Keep the suspension rig in place — the robot is still not ready to stand.

Step 6 — Firmware Update & Security Hardening

[CRITICAL — UniPwn / CVE‑2025‑35027] All Unitree G1 units shipped with firmware prior to 1.5.1 are vulnerable to a wormable BLE command‑injection flaw (CVE‑2025‑35027) that can grant an attacker root access over the air. The disclosure (September 2025) identified a hardcoded AES key and trivial handshake, and the exploit works on firmware 1.30–1.4.4. Even on patched firmware, you must disable BLE provisioning when not in use and segment the robot’s network from your home LAN.

Update process 1. On the bound app, go to Settings → Firmware Update and follow the on‑screen prompts. The current latest is 1.5.1. 2. The update takes about 10 minutes; the robot will reboot automatically. 3. After updating, verify the version on the remote’s LCD or via SSH with cat /etc/unitree/version.

Hardening steps - Disable BLE provisioning: In the app’s advanced settings, toggle “BLE Provision” to OFF unless you are actively pairing a new device. - Change default credentials: SSH into the robot (unitree@192.168.123.164, password 123) and run passwd to set a strong password. - Network isolation: Place the robot on a separate VLAN or use a dedicated router that is not connected to the internet. Keep the robot offline by default. - Update the SDK and DDS to the latest versions listed in Step 7 — check the official changelogs for any additional security patches beyond CVE-2025-35027.

Step 7 — SDK / ROS2 Setup (Advanced)

The G1’s EDU and Ultimate variants ship with an NVIDIA Jetson Orin NX running Ubuntu 20.04.6 LTS and are fully open for development. The Base model does not support the SDK.

Prerequisites on your PC: - Ubuntu 20.04 (64‑bit) - ROS2 Foxy - CycloneDDS 0.10.2 built from the releases/0.10.x branch (do not use the default master — it may not include the unitree_hg IDL support)

Installation commands (copy‑to‑clipboard)

# 1. Install CycloneDDS
cd ~
git clone -b releases/0.10.x https://github.com/eclipse-cyclonedds/cyclonedds.git
cd cyclonedds && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/cyclonedds
sudo make install
echo 'export CYCLONEDDS_HOME=/opt/cyclonedds' >> ~/.bashrc
source ~/.bashrc

# 2. Clone and build unitree_sdk2 (C++)
git clone https://github.com/unitreerobotics/unitree_sdk2.git
cd unitree_sdk2 && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/unitree_robotics
sudo make install

# 3. Install Python bindings
cd ~/unitree_sdk2_python
pip3 install -e .

# 4. Clone unitree_ros2 package for ROS2 control
git clone https://github.com/unitreerobotics/unitree_ros2.git

[IMPORTANT] In every SDK example, set the network interface name and ensure the channel factory uses the G1’s unitree_hg IDL (not the older unitree_go). For high‑level RPC commands, the robot’s AI sport client must be ON (not in Debug mode). Debug mode is only for low‑level SDK control; entering it via L2+R2 then L2+A disables the sport client. To exit debug mode, reboot the robot.

Step 8 — Calibration & First Movement

  1. Keep the robot securely suspended.
  2. On the remote, press L2+B to engage damping (soft joints).
  3. Press L2+UP to enter Ready mode. The robot will stiffen slightly but still be supported by the rig.
  4. Run the calibration routine from the app or via the SDK:

python3 examples/calibration.py (if using the Python SDK). The routine moves every joint through its range of motion. 5. Once calibration passes without errors, lower the robot slowly until its feet touch the floor while still partially supported. 6. Press R2+A to enter Operate mode. The robot will begin balancing. 7. Use the left joystick to command very slow walking (0.2 m/s). Keep one hand on the rig’s safety line. 8. After a successful short walk, you can remove the suspension rig. Never rush this step.

> If you see a fall: immediately press L2+B. The robot will go limp and drop, minimising joint damage. Then debug the calibration log before retrying.

Defining Success: Minimum / Full / Advanced

TierWhat it looks like
Minimum viableG1 powers on, connects to app, responds to L2+B/L2+UP/R2+A, and takes a single step while supported.
Full operationalNetworked to PC, firmware 1.5.1, calibration passes, robot walks stably in your space without assistance.
AdvancedSDK/ROS2 installed, custom control code runs (e.g., teleoperation via joystick or autonomous path following).

Common Setup Mistakes & Fixes

SymptomRoot causeFix
Cannot ping 192.168.123.164PC not on 192.168.123.x subnetSet static IP to 192.168.123.99, netmask 255.255.255.0
“channel factory init error” in SDKWrong network interface nameSet the host’s Ethernet adapter name (e.g., enp0s31f6) in the channel config
CycloneDDS reports “could not locate CycloneDDS”Wrong version or install prefixRe‑build CycloneDDS from releases/0.10.x and set CYCLONEDDS_HOME
High‑level RPC commands ignoredAI sport client OFF / robot in Debug modeReboot to exit Debug mode; confirm sport client is active (app status)
Button combo L1+A does nothingUsing legacy combo on firmware ≥ 1.4.5Use L2+B for damping, L2+UP for ready, R2+A for operate
Robot does not power onBattery not fully seatedRemove and re‑insert battery until click; verify charger LED
Robot falls at first stand attemptSuspension rig not used or calibration skippedHang robot, run full calibration, lower slowly
Remote does not pairBLE provisioning not enabledEnable BLE Provision in app temporarily, pair, then disable again
SDK examples reference unitree_go IDLUsing wrong IDL for G1Change all IDL references to unitree_hg; the G1 uses the unitree_hg library
Unauthorized SSH access / UniPwn exploit possibleDefault password and BLE provisioning left ONChange password via passwd, disable BLE provisioning, update firmware to 1.5.1

Frequently Asked Questions

About 2 hours for a first‑time setup: ~15 min unboxing, ~1.5 h charging, 20 min networking, and 20 min firmware/calibration.
At least 3 m × 3 m of clear flat floor, plus a suspension point or stand for the first boot. The robot is 127–132 cm tall and 35 kg.
The development computer (Jetson Orin) is at 192.168.123.164 on the 192.168.123.x subnet. Set your PC to a free static IP, e.g., 192.168.123.99.
As of July 2026, the latest is firmware 1.5.1. Update before first use; firmware 1.4.5+ uses L2+B damping, while older versions use L1+A.
It can be, if you follow the exclusion zone (3 m radius), always use a suspension rig for calibration, keep the e‑stop (L2+B) within reach, and apply the UniPwn hardening steps (disable BLE provisioning, change default password, segment the network). The G1 is not ISO collaborative; treat it as an industrial robot in a home setting.
The robot runs Ubuntu 20.04 on‑board. Development uses the `unitree_sdk2` (C++/Python) and ROS2 Foxy on a PC running Ubuntu 20.04. The middleware is CycloneDDS 0.10.2 with the `unitree_hg` IDL.
About 2 hours of normal locomotion on a single 9000 mAh quick‑release pack. A full charge takes roughly 1.5 hours with the included 54 V/5 A charger.
For app‑based control and telemetry, Wi‑Fi is fine. For SDK/ROS2 development, Ethernet is required to maintain the < 1 ms latency that the real‑time control loop needs.

Comments

🍪 Cookie preferences

We use cookies to measure performance. Privacy Policy