← Interactive demo

Import a G1 motion

Import a trajectory already retargeted to the G1 robot's 29 joints. The existing policy tracks it on the selected terrain. Files are processed locally in your browser; importing does not train or replace the policy.

Use metres for positions and radians for joint angles. The root is the free-joint pelvis frame. Coordinates are right-handed, with +Z up. Root height is measured above the reference flat floor; it is not a height offset above the current terrain. Planar translation is recentered on import and aligned to the current reference when playback starts.

JSON

Download a valid one-second standing example. The built-in motion JSON files use the same arrays.

{
  "fps": 50,
  "quaternionOrder": "wxyz",
  "jointNames": [ ... 29 names ... ],
  "rootPos":  [ [x, y, z], ... ],
  "rootQuat": [ [w, x, y, z], ... ],
  "jointPos": [ [q0, q1, ... q28], ... ]
}

fps and all three frame arrays are required. Arrays must have the same number of frames. quaternionOrder defaults to wxyz; xyzw is also supported. Quaternions must be nonzero and are normalized on import. If jointNames is supplied, columns are reordered by name; otherwise the order listed below is required.

CSV

Each row is one frame with exactly 36 comma-separated numbers: root position (3), root quaternion (4), then joint positions (29). No timestamp column. Choose the sample rate and quaternion order in the import controls. The header is optional; if present, use these exact names and order for WXYZ:

root_x,root_y,root_z,root_qw,root_qx,root_qy,root_qz,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,waist_yaw_joint,waist_roll_joint,waist_pitch_joint,left_shoulder_pitch_joint,left_shoulder_roll_joint,left_shoulder_yaw_joint,left_elbow_joint,left_wrist_roll_joint,left_wrist_pitch_joint,left_wrist_yaw_joint,right_shoulder_pitch_joint,right_shoulder_roll_joint,right_shoulder_yaw_joint,right_elbow_joint,right_wrist_roll_joint,right_wrist_pitch_joint,right_wrist_yaw_joint

For XYZW, change the four quaternion header columns to root_qx,root_qy,root_qz,root_qw, and arrange the values accordingly. CSV joint columns always use the order below.

Joint order

 0  left_hip_pitch_joint
 1  left_hip_roll_joint
 2  left_hip_yaw_joint
 3  left_knee_joint
 4  left_ankle_pitch_joint
 5  left_ankle_roll_joint
 6  right_hip_pitch_joint
 7  right_hip_roll_joint
 8  right_hip_yaw_joint
 9  right_knee_joint
10  right_ankle_pitch_joint
11  right_ankle_roll_joint
12  waist_yaw_joint
13  waist_roll_joint
14  waist_pitch_joint
15  left_shoulder_pitch_joint
16  left_shoulder_roll_joint
17  left_shoulder_yaw_joint
18  left_elbow_joint
19  left_wrist_roll_joint
20  left_wrist_pitch_joint
21  left_wrist_yaw_joint
22  right_shoulder_pitch_joint
23  right_shoulder_roll_joint
24  right_shoulder_yaw_joint
25  right_elbow_joint
26  right_wrist_roll_joint
27  right_wrist_pitch_joint
28  right_wrist_yaw_joint

Timing and limits

Sample rates from 1 to 240 Hz are supported. Files must be no larger than 20 MB and contain at most 120 seconds (frame count divided by sample rate). Playback is resampled to 50 Hz using linear interpolation for positions and shortest-path spherical interpolation for rotations. The final interval can be shortened by less than one 50 Hz frame. No smoothing or retargeting is applied.

Click Import motion to validate and load, then Play imported motion. A new import replaces the previously imported clip. Invalid files leave the last valid clip available. The reference window shows the command pose on a flat floor; the main view shows the policy's physical execution. An accepted file is not a guarantee that the robot can execute every pose or transition.