Skip to content
humanoidrobots.training

Starting viewport

Unitree Robotics · humanoid

Unitree G1

Compact 1.32 m humanoid with 23-43 DOF depending on configuration, widely used as a research platform.

Frames · Unitree G1

7 items · credit and license on each
  • Unitree G1 studio render, three-quarter front view
    Studio render of the published MJCF, keyframe pose from the model. Geometry only; colours are the model's own materials.Rendered by Hyperspawn from mujoco_menagerie/unitree_g1 (BSD-3-Clause) · Hyperspawn render · source
  • Unitree G1 studio render, side view
    Side view of the same MJCF render, keyframe pose from the model.Rendered by Hyperspawn from mujoco_menagerie/unitree_g1 (BSD-3-Clause) · Hyperspawn render · source
  • 4 s turntable of the MJCF studio render.Rendered by Hyperspawn from mujoco_menagerie/unitree_g1 (BSD-3-Clause) · Hyperspawn render · source
  • Unitree G1 humanoid walking at UAV Expo 2024
    Via Wikimedia Commons (CC0).Sayanesy, via Wikimedia Commons · CC0-1.0 · source
  • Unitree Introducing | Unitree G1 Humanoid Agent | AI Avatar | Price from $16KUnitree Robotics · official embed · source
  • Movement creates intelligence - Unitree's G1 humanoid robot nails the world's first kip-up!😘Unitree Robotics · official embed · source

+1 more on humanoidrobots.systems/unitree/g1

Policy in the viewport

Unitree G1 velocity walking

Velocity tracking on flat ground (forward, lateral, yaw rate)

Checkpoint
deploy/pre_train/g1/motion.ptlegged_gym (Isaac Gym) + rsl_rl PPO, ActorCriticRecurrent (LSTM 64, MLP 32, ELU)
Model
Unitree G1 12-DoF · unitreerobotics/unitree_rl_gym/resources/robots/g1_description/scene.xml
Export
ONNX opset 17 with the LSTM state as explicit inputs/outputs; weights copied unchanged. max |a_torch - a_onnx| < 5e-6 over 200 stateful random steps (onnxruntime 1.x CPU).
Timing
physics 2 ms · policy every 10 steps (50 Hz) · network runs after the step
Obs
47 floats: base_ang_vel[3] x0.25 · projected_gravity[3] · command[3] x[2, 2, 0.25] · joint_pos_rel[12] · joint_vel[12] x0.05 · last_action[12] · gait_phase[2] T=0.8sLSTM state [1, 1, 64] carried between steps, zeroed on reset
Action
12 joint targets = action x 0.25 + default · PD kp/kd 100/2, 150/4, 40/2 · torque to motor ctrl
Joints
left_hip_pitch_joint, left_hip_roll_joint, left_hip_yaw_joint, left_knee_joint, left_ankle_pitch_joint, left_ankle_roll_joint, right_hip_pitch_joint, right_hip_roll_joint, right_hip_yaw_joint, right_knee_joint, right_ankle_pitch_joint, right_ankle_roll_joint
Commands
trained vx [-1, 1] vy [-1, 1] yaw [-1, 1] · starts at [0.5, 0, 0]
Tested
60 s at [0.5, 0, 0] in MuJoCo 3.14.0 WASM + onnxruntime-web 1.30 (wasm, 1 thread), Chromium, real time: no fall, mean speed along heading 0.47 m/s, base height never below 0.76 m (2026-09-25)
Notes
  • The reference script runs PD on every 2 ms physics step: tau = kp*(target - q) - kd*qdot, written straight to the motor ctrl; MuJoCo clamps it to each joint's actuatorfrcrange.
  • The policy runs after every 10th step on the post-step state (50 Hz). gait phase = (steps*dt mod 0.8)/0.8, steps counted from reset.
  • Base angular velocity is qvel[3:6] of the free joint (body frame). Projected gravity uses the reference formula on qpos[3:7] (w,x,y,z).
  • Training used heading mode (yaw-rate command recomputed from heading error); the policy input is still (vx, vy, yaw rate).
  • Replay check: this runtime (MuJoCo WASM + onnxruntime-web in Node) and the reference script (MuJoCo 3.14 Python + TorchScript) give the same base trajectory to the centimetre over 30 s at [0.5, 0, 0] (x 13.69 m, y -3.03 m); the policy drifts slightly right there too.

Contract file: packages/sim/policies/unitree_g1_walk/contract.json · served at /policies/unitree_g1_walk/contract.json

Provenance

Model
Unitree G1 12-DoF
Entry
resources/robots/g1_description/scene.xml
Files
29 · 24 MB, fetched from raw.githubusercontent.com, cached in your browser
License
BSD-3-Clause
Engine
MuJoCo 3.14.0, official WebAssembly build · three.js renderer
Controller
Published policy (deploy/pre_train/g1/motion.pt), torque PD at 500 Hz; Hold and Limp are the generic PD controllers
Caveat
Opens walking on its published policy (set the command to 0 to stand). Hold and Limp are our generic PD controllers; this legs-only model does not stay up under Hold.
Note
unitree_rl_gym's legs-only G1: 12 torque-driven leg joints, arms and waist fixed. The model its published walking policy is replayed on.
Model
Unitree G1
Entry
unitree_g1/scene.xml
Files
37 · 19 MB, fetched from raw.githubusercontent.com, cached in your browser
License
BSD-3-Clause
Engine
MuJoCo 3.14.0, official WebAssembly build · three.js renderer
Controller
PD hold on the stand keyframe with an ankle-strategy tilt term; not a learned policy

Policies listed for Unitree G1

The build package lists no other policies. The one above is the only published checkpoint for Unitree G1 that we replay.

Train on GPUs

  • WalkMjlab-Velocity-Flat-Unitree-G1
  • Walk, rough terrainMjlab-Velocity-Rough-Unitree-G1
  • Push recoveryMjlab-Velocity-Flat-Unitree-G1
  • Motion imitation (dance)Mjlab-Tracking-Flat-Unitree-G1