What whole-body means in cuRobo
For Unitree G1, whole-body is not just planning both arms. The cuRobo documentation uses a G1 29-DOF humanoid retargeting example: add a floating base with extra_links, define many tool_frames such as pelvis, torso, shoulder, elbow, wrist, hip, knee, and ankle, then solve a sequence of pose targets through MotionRetargeter. The result contains 35 DOFs: 6 virtual base joints and 29 body joints.
1. Floating base with extra_links
A humanoid pelvis must move freely. cuRobo can inject six virtual joints between base_link and pelvis without editing the URDF:
extra_links:
base_link_x:
parent_link_name: base_link
child_link_name: null
joint_name: base_j_x
joint_type: X_PRISM
base_link_ztheta:
parent_link_name: base_link_ytheta
child_link_name: pelvis
joint_name: base_link_ztheta
joint_type: Z_ROT
Important: the virtual base is an optimization variable for retargeting or offline planning. It does not mean you directly send a 6-DOF base command to motors.
2. Build the G1 config
The documentation shows:
python -m curobo.examples.getting_started.build_robot_model \
--urdf curobo/content/assets/robot/g1/g1_29dof_rev_1_0.urdf \
--asset-path curobo/content/assets/robot/g1 \
--tool-frames \
pelvis torso_link \
left_shoulder_roll_link left_elbow_link left_wrist_yaw_link \
right_shoulder_roll_link right_elbow_link right_wrist_yaw_link \
left_hip_roll_link left_knee_link left_ankle_roll_link \
right_hip_roll_link right_knee_link right_ankle_roll_link \
--output curobo/content/configs/robot/unitree_g1_29dof_retarget.yml \
--visualize
A pre-built config is included, but for deployment you should rebuild it against the exact URDF, meshes, and end-effectors you use.
3. Three fidelity levels
| Level | Mode | Use when |
|---|---|---|
| 1 | IK without self-collision | Fast mapping debug |
| 2 | IK with self-collision | Default physically plausible motion |
| 3 | MPC | Smooth acceleration and jerk matter |
MPC is slower, so on Jetson use it only when the planner rate and horizon fit your runtime budget. For offline BVH-to-CSV retargeting, a workstation may be the better machine.
4. Tool frame weighting
Not every link should carry equal weight:
- pelvis/feet: high position weight for posture and balance proxy;
- wrists: high position and orientation weight for manipulation;
- shoulders: lower weight because elbow and wrist already constrain the arm;
- torso: useful to avoid excessive twisting.
Bad weights make the robot chase human motion that does not match G1 proportions.
5. Streaming versus offline
solve_sequence fits offline workflows: BVH, dataset generation, and motion preview. solve_frame fits online teleoperation, but only with warm start and strict velocity limits. Do not stream whole-body targets directly to hardware without a stabilizing controller underneath.
Conclusion
cuRobo makes practical G1 whole-body retargeting possible, especially when converting human motion into self-collision-aware joint trajectories. The whole-body output still needs to pass through a balance-capable controller. The final guide gathers deployment checks, current issues, and production rollout steps.

