Speed--
Step--
Capture point--
CoT (electrical)--
StateWalking
Loading 3D robot model...

Humanoid Push Recovery Lab: Capture Point Stepping, Ankle Strategy and Cost of Transport Blender 5.2

A generic humanoid on the 3-D linear inverted pendulum. Shove it (buttons, or tap the floor or the robot) and watch it step to the capture point. Educational model of a made-up robot, not a product.

Presets

Balance strategy

Gait and robot

Push

Press a Push button, or tap the robot or the floor in the 3-D view.

Live numbers

Sagittal axis (forward): COM, ZMP, capture point vs stance foot

COMZMPCapture pointFoot (support)
Positions relative to the stance foot centre. The capture point leaves the green foot band, then the swing foot lands on it and the plot jumps back.

Lateral axis (sideways, towards the swing side positive)

Joint torques (stance leg + swing hip)

AnkleKneeSwing hip

Self-checks (independent numerics)

Experiments run headless copies of the same simulator (ankle strategy off, push at 30 % of the step).

Experiment 1: how hard a shove can one step absorb?

Sweeps the step time and finds, by bisection, the largest forward impulse for which the swing foot can still land on the capture point inside the leg's reach, and the largest the robot survives with extra steps. The first number is compared with the closed form J* = m w (r_x - L/2) / cosh(w tau).
One-step bound (simulated)Closed form (dashed)Survives with extra steps
Press the button.

Experiment 2: cost of transport vs walking speed

Cadence rises with speed (T = 0.62 - 0.17 v). Mechanical cost counts joint work without energy recovery; electrical adds actuator Joule loss tau²/Km² (illustrative Km). Holding a bent knee costs even at zero speed, so slow walking is expensive per metre.
Electrical CoTMechanical CoT (no recovery)Ideal net work
Press the button.

Experiment 3: straighter legs vs reach

Raises the pelvis height z_c. Knees straighten (lower torque and energy) but the foot-reach radius sqrt(leg² - z_c²) and the capturable push shrink until the gait itself no longer fits.
Electrical CoTReach r (m)
Press the button.
The science
Educational model of a generic, made-up humanoid. Masses, link lengths and actuator constants are illustrative, not the specification of any real robot. No brand or product is represented.

Linear inverted pendulum (LIPM)

Keep the centre of mass (COM) at constant height z_c and treat the leg as massless. Then x'' = w² (x - p) with w = sqrt(g / z_c) and p the zero-moment point (ZMP). For constant p: x(t) = p + (x0 - p) cosh(wt) + (v0/w) sinh(wt). The same holds independently along the lateral axis, so the 3-D model is two coupled-only-by-footholds LIPMs.

Zero-moment point and the support polygon

The ZMP is the point on the floor where the ground reaction has no horizontal moment. It must stay inside the support polygon (the stance foot, 0.26 x 0.11 m here) or the foot rolls. Shifting it inside the foot (heel to toe) is the ankle strategy; its authority is only about ±0.12 m.

Capture point

xi = x + v / w is where the ZMP would have to be for the robot to come to rest. It obeys xi' = w (xi - p), i.e. it diverges as e^(wt) away from the ZMP while the stable part of the motion decays. Standing push absorbed by the ankle only if xi is inside the foot. Otherwise a step is needed: put the swing foot at the capture point (plus the offset of the nominal gait).

Foot placement rule used here

With step length L and time T the periodic gait has capture-point offset b = L / (e^(wT) - 1) at lift-off. The controller predicts the capture point at touchdown xi_T from the live state and places the foot at p' = xi_T - b (lateral: xi_T - s w_s / (e^(wT) + 1), s = stance side). Replanned every 2 ms during the swing, so a shove mid-step lengthens the step. This removes the unstable mode in one step; the stable mode decays over the following steps.

Limits that make it fall

The foot must land within the leg reach r = sqrt(l² - z_c²) of the COM (leg l = 0.86 m); the COM must also stay within r of the stance foot. The closed form for the largest one-step capturable shove is dv* = w (r_x - L/2) / cosh(w tau) with r_x = sqrt(r² - (w_s/2)²), tau the time left in the step. Shorter step time or lower COM raises the bound; a taller COM or longer step lowers it.

Joint torques, energy, cost of transport

Ground force F = m (w²(x - p), g, w²(y - p_y)) acts at the ZMP. Stance ankle torque is the moment of F about the ankle; knee torque is the moment about the knee hinge of a two-link leg (0.43 + 0.43 m, knee bends forward, IK). The hip torque of the stance leg is zero in the LIPM (F passes through the COM); the hip torque shown is the swing leg (7 kg, 0.55 kg m²). Power = torque x joint rate (filtered finite difference). Cost of transport CoT = E / (m g d). "Ideal net work" is the positive stance-leg power F·v plus swing work; "mechanical" sums |tau w| over joints (no energy recovery); "electrical" adds tau²/Km² with Km = 7 N m / sqrt(W). Humans walk at roughly 0.3 to 0.4; many legged robots are higher.

Independent numerical checks

  • Closed form vs an RK4 integrator (error ~1e-12).
  • Capture-point law and conserved orbital energy along the trajectory.
  • Capture region: a bisection with the ZMP chasing the capture point inside the foot gives the same largest recoverable velocity as x + v/w = toe edge.
  • Steady gait: 12 steps repeat exactly (length and speed).
  • One-step bound: a shove 10 % below J* is not clamped by reach, 10 % above is.

Simplifications

  • Point mass, massless legs, constant COM height, no angular momentum (no arm or torso swing used for balance), no double-support phase, instantaneous heel strike with no impact loss.
  • Swing foot follows a smooth path, no foot-ground collision or slipping; no actuator torque or speed limits except the reach.
  • Foot-placement is exactly dead-beat; real robots have sensing noise, delays and model error.
  • Energy figures are order-of-magnitude, not a prediction for any real machine.
Made with 🟠 Blender · Three.js