Section 46.3: Whole-body and operational-space control

"Whole-body control is where kinematics stops making promises it cannot keep under contact."

A Contact Dynamics Seminar
Humanoid performing task-space control while maintaining contact constraints.
Figure 46.3A: The controller must satisfy end-effector goals, balance, and contact feasibility at the same time.
Big Picture

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.

Task Space Is Paid For By The Whole Body

A hand trajectory is only real if the feet, torso, joints, and contact forces can afford it.

Figure 46.3.1 turns whole-body control into an inspectable pipeline: estimate state and contact, formulate task and constraint sets, solve the inverse-dynamics problem, and verify tracking plus feasibility. Observe pose, twist, contacts, task errors Model floating-base dynamics and Jacobians Act solve WBC or OSC command Verify tracking, torque, slip, balance
Figure 46.3.1 turns whole-body control into an inspectable pipeline: estimate state and contact, formulate task and constraint sets, solve the inverse-dynamics problem, and verify tracking plus feasibility.

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.

Algorithm: Whole-Body QP Loop
  1. Estimate floating-base pose, joint state, contact state, and task references.
  2. Build contact constraints and friction-cone or center-of-pressure inequalities.
  3. Encode high-priority tasks such as support consistency and center-of-mass safety.
  4. Encode lower-priority tasks such as hand pose, torso orientation, or posture regularization.
  5. 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})
{'hand_error_cm': 1.8, 'com_error_cm': 0.9, 'max_torque_ratio': 0.87, 'contact_slip_cm': 0.2, 'qp_status': 'solved'} {'feasible': True}

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.

Code Fragment 46.3.1: A whole-body controller should report both task quality and constraint health. A solved QP is not enough if the torque or slip margins are already exhausted.
Library Shortcut

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

  1. Write the exact task stack and task priority policy before tuning weights.
  2. Instrument contact consistency and torque saturation from the first day.
  3. Test reaching while perturbing support, payload, and friction.
  4. Compare one model-based baseline to one learned or residual-augmented variant on the same task panel.
  5. Archive the solver traces, not only the end-effector plots.
Common Failure Mode

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.

Practical Example

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.

Memory Hook

Operational space is the wish. Whole-body control is the bill.

Research Frontier

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.

Self Check

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.

Whole-Body Control Stack
Tool or LibraryRole in the TopicBuilder Advice
PinocchioFast dynamics, Jacobians, and centroidal quantitiesUse it when you need explicit model terms in the control loop.
TSID or related QP frameworksTask-space inverse dynamics executionMake priorities and slack variables explicit in the logs.
GR00T Whole-Body ControlCurrent maintained humanoid whole-body stackUseful for current workflows and sim2sim experiments.
Cross-References

This section connects directly to robot kinematics, robot dynamics, control, and advanced humanoid dynamics.

Mini Lab

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.

Key Takeaway

Whole-body control is the layer that converts task-space ambition into dynamically feasible behavior.

Exercise 46.3.1

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.