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
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 
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 
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)
Plays in tabReal-robot deploy documented
- Checkpoint
- deploy/pre_train/g1/motion.ptlegged_gym (Isaac Gym) + rsl_rl PPO, ActorCriticRecurrent (LSTM 64, MLP 32, ELU)
- License
- BSD-3-Clause
- 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
- Commit
- 276801e46c5d
- 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
- Commit
- c96a32d28fb5
- 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
- Walk
Mjlab-Velocity-Flat-Unitree-G1 - Walk, rough terrain
Mjlab-Velocity-Rough-Unitree-G1 - Push recovery
Mjlab-Velocity-Flat-Unitree-G1 - Motion imitation (dance)
Mjlab-Tracking-Flat-Unitree-G1