"Whole-body control is where kinematics stops making promises it cannot keep under contact."
A Contact Dynamics Seminar
Whole-body and operational-space control is the technical heart of humanoid execution. The controller must coordinate the floating base, task-space goals, contact constraints, and actuator limits in one loop.
A floating-base humanoid is often modeled as $M(q)\ddot q + h(q, \dot q) = S^\top \tau + J_c(q)^\top \lambda$, with configuration $q$, mass matrix $M$, bias term $h$, selection matrix $S$, joint torques $\tau$, and contact wrench multipliers $\lambda$. This is the minimum equation needed to keep manipulation, balance, and contact in one mathematical object.
Operational-space control adds task variables $x = \phi(q)$ with Jacobian $J = \partial \phi / \partial q$. The task-space inertia $\Lambda = (J M^{-1} J^\top)^{-1}$ exposes how hard it is to accelerate a hand, torso, or center of mass in a given configuration. The insight is practical: reaching with the hand changes the effective control problem for the whole body.
A hand trajectory is only real if the feet, torso, joints, and contact forces can afford it.
Theory
Whole-body control usually combines equality constraints, such as rigid contacts or desired accelerations, with inequality constraints, such as torque limits, friction cones, and joint bounds. The most common implementation is a hierarchy or quadratic program that trades exact satisfaction of high-priority constraints against soft lower-priority objectives.
This is where model-based libraries remain crucial even in learned systems. A learned policy can propose targets, contact schedules, or residuals, but the execution stack still benefits from explicit multibody dynamics and force feasibility checks.
The strongest evaluation artifact is a synchronized trace with task errors, solver status, contact wrench estimates, torque saturation, and recovery actions.
- Estimate floating-base pose, joint state, contact state, and task references.
- Build contact constraints and friction-cone or center-of-pressure inequalities.
- Encode high-priority tasks such as support consistency and center-of-mass safety.
- Encode lower-priority tasks such as hand pose, torso orientation, or posture regularization.
- Solve for accelerations, torques, and contact forces, then verify saturation and slip margin before execution.
Worked Example
A small whole-body ledger is enough to show whether a reach task is balance-limited or simply poorly tuned.
trial = {
"hand_error_cm": 1.8,
"com_error_cm": 0.9,
"max_torque_ratio": 0.87,
"contact_slip_cm": 0.2,
"qp_status": "solved",
}
print(trial)
print({"feasible": trial["qp_status"] == "solved" and trial["max_torque_ratio"] < 1.0})
Expected output interpretation. The hand target is being tracked within a small error while torque and slip remain inside the envelope. This is the kind of evidence that distinguishes a successful whole-body trial from a lucky reach.
Use Pinocchio or Drake for model quantities, TSID or GR00T Whole-Body Control style frameworks for practical controller structure, and ROS 2 logging for execution traces.
Practical Recipe
- Write the exact task stack and task priority policy before tuning weights.
- Instrument contact consistency and torque saturation from the first day.
- Test reaching while perturbing support, payload, and friction.
- Compare one model-based baseline to one learned or residual-augmented variant on the same task panel.
- Archive the solver traces, not only the end-effector plots.
A controller that achieves tiny hand error by silently driving torques to saturation or eroding foot friction margins is not a stable whole-body solution.
Opening a heavy drawer while stepping sideways is a useful benchmark because the hands, torso, and feet all matter, and the controller must allocate force without losing balance.
Operational space is the wish. Whole-body control is the bill.
Current systems mix optimization-based WBC with learned target generation, residual policies, or whole-body motion priors. The main open problem is preserving interpretability and safety under increasingly expressive behavior models.
Can you explain what information a contact wrench trace adds that a hand trajectory alone does not?
This section is an ideal place to emphasize why multibody modeling has not disappeared in the age of foundation models. Whole-body control is still where feasibility becomes numerically explicit.
It is also where students can see the difference between 'the robot reached the target' and 'the robot reached the target with a feasible dynamic budget.' That distinction matters throughout humanoid research.
| Tool or Library | Role in the Topic | Builder Advice |
|---|---|---|
| Pinocchio | Fast dynamics, Jacobians, and centroidal quantities | Use it when you need explicit model terms in the control loop. |
| TSID or related QP frameworks | Task-space inverse dynamics execution | Make priorities and slack variables explicit in the logs. |
| GR00T Whole-Body Control | Current maintained humanoid whole-body stack | Useful for current workflows and sim2sim experiments. |
This section connects directly to robot kinematics, robot dynamics, control, and advanced humanoid dynamics.
Implement a simplified whole-body task panel with a reach, a squat, and a balance-maintenance task. Compare a posture-only controller against a contact-aware task-space controller.
If whole-body control fails, first isolate whether the task is dynamically infeasible, incorrectly prioritized, or simply under-instrumented. Those are three very different debugging paths.
Section References
Pinocchio official project. https://github.com/stack-of-tasks/pinocchio
Primary source for model terms used in whole-body control.
TSID project repository. https://github.com/stack-of-tasks/tsid
Practical task-space inverse dynamics reference for humanoids and other articulated robots.
GR00T Whole-Body Control documentation. https://nvlabs.github.io/GR00T-WholeBodyControl/
Current maintained whole-body stack reference.
Whole-body control is the layer that converts task-space ambition into dynamically feasible behavior.
Specify a whole-body QP for a two-hand carry task. Name the equality constraints, inequality constraints, task priorities, and the exact logs you would inspect after a slip.