Φferromotion · textbook · chapter 8 rust → wasm · on-device

Where to put your foot

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.

01 — the problemA body that has to fall to move

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.

02 — the one pointThe capture point

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.

body
capture point ξ (m)
forward speed (m/s)

press Step to ξ to drop the foot exactly on the capture point and watch the fall coast to a balanced stop

03 — why it worksSplit the fall in two

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.

So all of balance lives in one scalar. The centre of mass takes care of itself — it converges to the capture point no matter what. The only thing you actually steer is ξ, and the only handle you have on it is where you put the foot. Put the foot on ξ and ξ stops moving; then the body glides to rest beneath it. Balance is not a whole-body problem, it is a one-number problem, and the number tells you exactly where to step.

04 — the walkCatch, and catch again

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...

05 — the pointBalance is a scalar

Steer one point on the ground.

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