Φferromotion · textbook · chapter 8 rust → wasm · on-device
Walking is a fall, caught over and over. A body topples forward and a foot is thrown out to stop it — and there is exactly one place on the ground to put that foot. This page finds it, and turns it into a walk, with the same Rust code the native tools use.
Stand a broomstick on your palm and it topples; a walking robot is the same, a tall mass balanced over a small foot. To move, it lets itself fall in the direction it wants to go — and then it must catch that fall by stepping, or it hits the ground. Standing still and stepping are not different modes; standing still is just the special case where the fall to catch is zero.
Model the body as a point mass on a springless leg — the linear inverted pendulum. Its balance is governed by one combination of position and speed, the capture point ξ = x + ẋ/ω, where ω = √(g/z) is set by the body's height. Plant the foot exactly on ξ and the body coasts to a perfect stop over it. Plant it short and the body keeps toppling past; plant it beyond and the body rocks back.
Below, push the body to set it moving, then click the ground to plant the foot. The gold marker is the capture point — try to hit it.
press Step to ξ to drop the foot exactly on the capture point and watch the fall coast to a balanced stop
The inverted pendulum looks unstable, and half of it is. Written in terms of the capture point the dynamics split cleanly into two first-order parts: ξ̇ = ω(ξ − foot), which runs away from the foot and is the unstable half, and ẋ = −ω(x − ξ), by which the centre of mass always chases the capture point and is stable for free.
A walk is this catch, chained. Lay down the footsteps you want, and plan the capture-point path backward from a final resting stance — because ξ is unstable forward in time, it is stable backward — threading it through each footstep. Then just play it forward: the capture point leads from foot to foot, and the centre of mass follows it into a walk.
the capture point (gold) hops ahead to each planned footstep; the centre of mass (green) chases it — that chase is the walk
On load, this page took a body moving forward at 0.6 m/s, dropped the foot on its capture point, and integrated the pendulum until it settled:
| capture point the foot was planted on | ... |
| did the body coast to a stop over it? | ... |
| verdict | ... |
A tall, toppling, many-jointed machine reduces to a single unstable number and a single lever — where the next foot lands. Get that placement right and the whole body follows into balance, or into a stride.
This is why capture-point and DCM control run on so many walking robots: they turn the frightening problem of balancing a tall mass into the tractable one of placing a foot. The planner picks footsteps; the capture point says how to time and place them so the fall is always caught; the body, which converges to the capture point on its own, needs no further persuading. It is the locomotion member of the same family as the rest of this series — find the one quantity that governs the system, and control that.
What you just drove: capture_point, dcm and plan_dcm from ferromotion-control, compiled to WebAssembly — the same code the native tools link against. The catch integrates the linear inverted pendulum ẍ = ω²(x − foot); the walk plans the DCM backward through the footsteps and lets the CoM converge to it. Nothing precomputed.
Verified in the library: the capture point equals x + ẋ/ω (and the DCM) · stepping onto it brings the body to rest over the foot · stepping short keeps it toppling · stepping past rocks it back · a backward-planned walk ends at rest over the final foot and leads the CoM forward. Each is a test in cargo test, not a claim in prose. See also ch.1 · ch.2 · ch.3 · ch.4 · ch.5 · ch.6 · ch.7.
Institute for Physical AI · the Rust library · crates.io