Perception ◆ Nonlinear control ◆ University of Toronto, 2024 → re-tested 2026

BipedNav

Stairs and obstacles, seen once, then walked. A monocular network turns one photo into stair rise and run, or an obstacle's distance, depth and height; a five-link biped with knees turns that geometry into virtual-holonomic-constraint gaits that are hybrid limit cycles, pre-plans its steps and walks over the obstacle. Everything below was re-run from the archived code and data, and the parts that broke are reported as found.

Demonstration (1 min 20 s): the perception layer on a real staircase, the walker on flat ground, down a slope, up a 5° staircase and down a 10° staircase with treads and risers, and the geometric reason a knee-less biped cannot take steeper stairs.

1.7cm
stair rise error
mean over 5 scenes, RealSense cloud (2.1 cm monocular); poster: 2.9 cm
91%
tread run accuracy
2.5 cm mean error, both clouds; poster: 81 %
4e-5
reproduction
max difference to the report's six VHC coefficients
0.78
Floquet multiplier
five-link flat gait; measured return-map slope matches the analytic δ²/M⁻, in the analytic simulation and in MuJoCo
7/10
stair flights in physics
footed humanoid in MuJoCo, every stair different (5–12 cm drops); 4 of 6 crates crossed, the perceived crate-and-staircase course walked end to end
0.09s
per scene
stair geometry on a laptop CPU, no GPU after the depth network

In one strip

Side profile of a stair point cloud with fitted tread and riser planes
1 · Perceive

One image → rise and run

Metric depth from a fine-tuned Metric3D v2, surface normals, two predominant normal directions (treads, risers), plane offsets clustered into a lattice. This scene: rise 14.2 cm, run 28.1 cm (tape: 12.0 / 29.6).

Virtual holonomic constraint curve in the joint plane
2 · Design

A curve in joint space is the gait

Virtual holonomic constraints tie the actuated joints to the stance-leg angle; hybrid invariance through the impact map, transversality and a virtual mass/potential test decide whether a stable limit cycle exists. Shown: the two-link curve; the five-link walker uses four Bézier curves.

Five-link biped stepping over a box, strobe of configurations
3 · Walk

A five-link biped with knees walks it

Hybrid limit cycles for a RABBIT-style walker, verified against its return map. From one view of an obstacle the planner schedules the approach and two step-over gaits chained through the impact map, and the robot clears the box in collision-checked simulation.

Perception layer

Depth sensors on walking robots and exoskeletons are bulky; the 2024 study asked whether one RGB camera can recover the geometry that matters for a stair, its rise and run. Metric3D v2 was fine-tuned on a new dataset of 16,780 RGB-D images of indoor and outdoor stairs (Intel RealSense D415/D435, head-mounted), the metric depth was back-projected with the camera intrinsics, and planes were extracted from the point cloud.

The archived sample set has five scenes with the RGB image, the RealSense depth, the network's point cloud and normal map, and tape measurements of two steps per staircase. The re-implemented extractor works from surface normals instead of iterative RANSAC, which on these clouds fragments the grazing treads and fits planes across the nosing:

  • Normals from the organised depth grid (3-px baseline, jumps over 6 cm rejected), oriented toward the camera.
  • Predominant normals: a 4° spherical histogram; the most populated up-pointing mode is the tread normal, the walking direction is the optical axis on the tread plane, refined by a riser mode if one lies within 30° of it (side walls, whose normals are lateral, are rejected).
  • Offset clustering: tread points projected on the up axis and riser points on the forward axis form 1-D lattices whose spacings are rise and run; a least-squares lattice fit tolerates missing steps.

Deterministic, 0.09 s per scene from the RealSense cloud (0.32 s from the ASCII monocular cloud, dominated by parsing).

Poster figure: end-to-end pipeline for plane extraction
From the poster. Depth-estimated point cloud → planar features → predominant normal → plane extraction → rise and run.
Poster figure: experimental design for sensing 3D walking environments
Experimental design. A head-mounted camera looking down the staircase; the quantities to recover are the shortest distance to the next step, its height and its depth.
scenetape hD435 hmono htape bD435 bmono b
WE 17:5114.216.510.727.119.325.9
WE 18:2719.519.619.925.325.123.3
WI 17:4112.015.115.529.631.233.5
WI 17:4712.014.212.029.628.128.3
WI 18:1215.015.718.032.133.327.7
MAE [cm]1.72.12.52.5

All in cm. The tape values average the two measured steps. Largest misses: the WE 17:51 scene (camera pitched only 47°, risers nearly edge-on) and a worn concrete stair whose nosing strip reads 3 cm high on both clouds.

Bar chart of stair rise and run per scene: tape, RealSense cloud, monocular cloud
Pipeline vs tape. The monocular cloud is metrically consistent with the RealSense cloud on every scene, which is what the study set out to show.
Poster: Monocular Depth Estimation of Human-Robot Walking Environments using Deep Learning
Poster. A. Qiu, A. Narayanan, Q. Cheng, B. Laschowski — Neural Robotics Lab, KITE Toronto Rehabilitation Institute, University of Toronto, 2024. Click to open the PDF.

Dataset & data products

  • Training set: 16,780 RGB-D stair images, indoor and outdoor, varied lighting, RealSense D415 and D435.
  • Archived samples: 5 scenes × {RGB 640×480, RealSense depth (mm PNG), RealSense point cloud (binary PLY, 307,200 pts), monocular point cloud (ASCII PLY), monocular normal map (3×480×640 tensor)} + measurements.csv. The monocular depth tensors are empty files in the archive; the point clouds derived from them are intact.
  • Tools in the repo: rosbag → RGB-D subsequence extractor with a frame-range GUI (data_scripts/process.py), depth → PLY back-projection, rosbag point-cloud extractor with Open3D filtering, a RealSense ROS workspace and an RViz distance-measuring plugin used for the tape-measure protocol.
Exoskeleton legs with depth cameras Head-mounted camera, front Head-mounted camera, side

Recording rigs from the poster: a lower-limb exoskeleton with leg-mounted cameras and the head-mounted RealSense used for the stair scenes.

Five real staircases, one pass each. Left to right: the image, the metric depth, the surface normals (treads and risers are the two dominant directions), and the side profile with the fitted tread and riser planes against the tape measurement. Rise / run in cm: tape → estimate.

The same layer inside the simulator

On the walker the depth camera sits in the head and is read at 1 Hz. Each frame becomes an organised point cloud, normals (3 px, stride 2), an up-facing mask (15°), a walking corridor (±0.35 m), height clusters (8 mm bins), extents from the raw cloud, a ramp plane fit, and the semantics: ground, crate (a short raised level with the floor continuing behind), stairs (monotone levels), drop. The perceived levels are merged into a world model in absolute coordinates; below is the live log of one run.

# online_box03: crate 10 cm high, 12 cm deep, 3.0 m ahead -> walking after 28 steps, 22.0 s simulated
[  0.00 s  step  0] perceive (42 ms): levels z-0cm x0.26-2.92, z-0cm x3.43-4.54
[  0.80 s  step  0] touchdown: phase velocity 2.77 (gait's fixed point 2.94), theta 1.001
[  0.80 s  step  1] decide: regular 0.40 m (chained)  [0.03 s]
[  1.00 s  step  1] perceive (46 ms): levels z+0cm x0.67-2.94, z+0cm x3.37-4.04
[  1.60 s  step  1] touchdown: phase velocity 2.77 (gait's fixed point 2.78), theta 1.002
[  1.60 s  step  2] decide: regular 0.40 m (chained)  [0.00 s]
[  2.00 s  step  2] perceive (29 ms): levels z+0cm x1.08-2.96, z+0cm x3.33-4.40
[  2.40 s  step  2] touchdown: phase velocity 2.80 (gait's fixed point 2.78), theta 1.002
[  2.40 s  step  3] decide: regular 0.40 m (chained)  [0.00 s]
[  3.00 s  step  3] perceive (50 ms): levels z+0cm x1.49-2.99, z+0cm x3.27-5.02
[  3.19 s  step  3] touchdown: phase velocity 2.80 (gait's fixed point 2.80), theta 1.003
[  3.19 s  step  4] decide: regular 0.40 m (chained)  [0.00 s]
[  3.98 s  step  4] touchdown: phase velocity 2.80 (gait's fixed point 2.80), theta 1.002
[  3.98 s  step  5] decide: regular 0.40 m (chained)  [0.00 s]
[  4.00 s  step  5] perceive (74 ms): levels z+0cm x2.29-3.00, z+0cm x3.23-6.29
[  4.77 s  step  5] touchdown: phase velocity 2.77 (gait's fixed point 2.80), theta 1.001
[  4.77 s  step  6] decide: regular 0.40 m (chained)  [0.00 s]
[  5.00 s  step  6] perceive (45 ms): levels z+0cm x2.70-3.00, z+10cm x3.00-3.11, z+0cm x3.18-5.95 | stairs: up first riser 0.55 m, rise +10 cm, run nan cm, 1 treads
[  5.55 s  step  6] touchdown: phase velocity 2.78 (gait's fixed point 2.77), theta 1.002
[  5.55 s  step  7] step-over plan: mode LT, leading step 0.57 m, library check failed -> transition re-designed, energy margins [0.13, 7.12]
[  5.55 s  step  7] decide: leading leg over the box: 0.57 m step (transition redesigned)  [47.45 s]
[  6.00 s  step  7] perceive (48 ms): levels z+0cm x3.15-8.87
[  6.45 s  step  7] touchdown: phase velocity 3.47, theta 1.011
[  6.45 s  step  8] decide: trailing leg over the box (ends in the regular gait)  (queued)
[  7.00 s  step  8] perceive (39 ms): levels z+0cm x3.70-6.90
[  7.09 s  step  8] touchdown: phase velocity 2.73 (gait's fixed point 1.85), theta 1.003
[  7.09 s  step  9] decide: regular 0.40 m (chained)  [0.00 s]
[  7.82 s  step  9] touchdown: phase velocity 2.84 (gait's fixed point 2.71), theta 1.001
[  7.82 s  step 10] decide: regular 0.40 m (chained)  [0.00 s]
[  8.00 s  step 10] perceive (71 ms): levels z+0cm x4.51-7.75
[  8.57 s  step 10] touchdown: phase velocity 2.85 (gait's fixed point 2.78), theta 1.002
[  8.57 s  step 11] decide: regular 0.40 m (chained)  [0.00 s]
[  9.00 s  step 11] perceive (28 ms): levels z+0cm x4.92-8.14
[  9.32 s  step 11] touchdown: phase velocity 2.83 (gait's fixed point 2.79), theta 1.001
[  9.32 s  step 12] decide: regular 0.40 m (chained)  [0.00 s]
[ 10.00 s  step 12] perceive (65 ms): levels z+0cm x5.33-9.01
[ 10.08 s  step 12] touchdown: phase velocity 2.83 (gait's fixed point 2.79), theta 1.002
[ 10.08 s  step 13] decide: regular 0.40 m (chained)  [0.00 s]
[ 10.84 s  step 13] touchdown: phase velocity 2.82 (gait's fixed point 2.79), theta 1.001
[ 10.84 s  step 14] decide: regular 0.40 m (chained)  [0.00 s]
[ 11.00 s  step 14] perceive (23 ms): levels z+0cm x6.14-9.42
[ 11.61 s  step 14] touchdown: phase velocity 2.82 (gait's fixed point 2.79), theta 1.001
[ 11.61 s  step 15] decide: regular 0.40 m (chained)  [0.00 s]
[ 12.00 s  step 15] perceive (38 ms): levels z+0cm x6.55-9.74
[ 12.38 s  step 15] touchdown: phase velocity 2.82 (gait's fixed point 2.79), theta 1.002
[ 12.38 s  step 16] decide: regular 0.40 m (chained)  [0.00 s]
[ 13.00 s  step 16] perceive (31 ms): levels z+0cm x6.96-10.40
[ 13.15 s  step 16] touchdown: phase velocity 2.82 (gait's fixed point 2.80), theta 1.002
[ 13.15 s  step 17] decide: regular 0.40 m (chained)  [0.02 s]
[ 13.92 s  step 17] touchdown: phase velocity 2.81 (gait's fixed point 2.79), theta 1.001
[ 13.92 s  step 18] decide: regular 0.40 m (chained)  [0.00 s]
[ 14.00 s  step 18] perceive (61 ms): levels z+0cm x7.77-11.26
[ 14.69 s  step 18] touchdown: phase velocity 2.81 (gait's fixed point 2.79), theta 1.001
[ 14.69 s  step 19] decide: regular 0.40 m (chained)  [0.00 s]
[ 15.00 s  step 19] perceive (60 ms): levels z+0cm x8.18-11.36
[ 15.47 s  step 19] touchdown: phase velocity 2.82 (gait's fixed point 2.79), theta 1.002
[ 15.47 s  step 20] decide: regular 0.40 m (chained)  [0.00 s]
[ 16.00 s  step 20] perceive (25 ms): levels z+0cm x8.59-11.89
[ 16.25 s  step 20] touchdown: phase velocity 2.79 (gait's fixed point 2.80), theta 1.001
[ 16.25 s  step 21] decide: regular 0.40 m (chained)  [0.00 s]
[ 17.00 s  step 21] perceive (48 ms): levels z+0cm x9.00-13.04
[ 17.02 s  step 21] touchdown: phase velocity 2.79 (gait's fixed point 2.77), theta 1.002
[ 17.02 s  step 22] decide: regular 0.40 m (chained)  [0.00 s]
[ 17.80 s  step 22] touchdown: phase velocity 2.79 (gait's fixed point 2.78), theta 1.002
[ 17.80 s  step 23] decide: regular 0.40 m (chained)  [0.00 s]
[ 18.00 s  step 23] perceive (53 ms): levels z+0cm x9.82-13.04
[ 18.58 s  step 23] touchdown: phase velocity 2.79 (gait's fixed point 2.78), theta 1.001
[ 18.58 s  step 24] decide: regular 0.40 m (chained)  [0.00 s]
[ 19.00 s  step 24] perceive (42 ms): levels z+0cm x10.22-13.42
[ 19.35 s  step 24] touchdown: phase velocity 2.79 (gait's fixed point 2.78), theta 1.001
[ 19.35 s  step 25] decide: regular 0.40 m (chained)  [0.00 s]
[ 20.00 s  step 25] perceive (35 ms): levels z+0cm x10.63-14.11
[ 20.13 s  step 25] touchdown: phase velocity 2.80 (gait's fixed point 2.77), theta 1.002
[ 20.13 s  step 26] decide: regular 0.40 m (chained)  [0.00 s]
[ 20.91 s  step 26] touchdown: phase velocity 2.78 (gait's fixed point 2.78), theta 1.000
[ 20.91 s  step 27] decide: regular 0.40 m (chained)  [0.00 s]
[ 21.00 s  step 27] perceive (48 ms): levels z+0cm x11.44-14.88
[ 21.69 s  step 27] touchdown: phase velocity 2.79 (gait's fixed point 2.77), theta 1.001
[ 21.69 s  step 28] decide: regular 0.40 m (chained)  [0.00 s]
[ 22.00 s  step 28] perceive (25 ms): levels z+0cm x11.85-15.03
One perception tick, step by step: depth → cloud → normals → up-facing mask → corridor → height clusters → extents → semantics.
One perception tick, step by step: depth → cloud → normals → up-facing mask → corridor → height clusters → extents → semantics.

Try it: one photo → stair or obstacle geometry

Runs entirely in your browser: a 27 MB Depth Anything V2 network estimates depth, the BipedNav pipeline finds the treads and risers (or the floor and the first obstacle), and prints rise/run or distance/depth/height. Nothing is uploaded.

Drop a staircase or obstacle photo here
or click to choose one · phone photos work best when taken from standing height, looking down at the steps

Stock scenes from the archived dataset (tape measurements known; camera height set automatically):

stock scene WE 17:51 stock scene WE 18:27 stock scene WI 17:41 stock scene WI 17:47 stock scene WI 18:12
loading…
photo
monocular depth (metric)
treads · risers / floor · obstacle
side profile + fitted lattice

How the scale is recovered: the network's output is inverse depth up to an affine map, so the pipeline searches the shift that makes the dominant up-facing surface planar and sets the scale so that surface lies at the camera height you enter. The stock scenes use the camera height measured by the depth camera; for your own photo, enter roughly the height of your phone above the floor (1.4–1.7 m when standing). The metric fine-tuned Metric3D v2 of the original study is more accurate than this browser-sized model; the geometry pipeline is the same.

Flat ground

Three walkers, one method: a hybrid limit cycle designed as virtual holonomic constraints, verified against its return map, then walked in a collision-checked simulation and in MuJoCo.

Five-link biped, 0.40 m stride

Point feet, four actuators. Period 0.78 s, Floquet multiplier 0.78, 53 N·m; the walker settles onto the cycle from 1.25× its speed.

Seven-link biped with feet, natural gait

The flat gait redesigned as a fully actuated periodic step minimising squared torque under natural-posture constraints: 0.50 m stride, period 0.78 s, mean torque 12 N·m, cost of transport 0.30, torso lean under 7°.

Humanoid in MuJoCo, natural gait

The gait the robot walks everywhere on the flat: fully actuated, energy-minimising, torso within 7° of vertical, knee flexing to 80° in swing, centre of pressure inside the inner 70 % of the foot. 0.50 m strides at 0.78 s, 0.2 mm of slip per step, arms swinging with the opposite leg, head held level so the camera keeps its view of the floor.

Why the footed walker no longer stoops. The first footed flat gait was a hybrid gait with a passive stance ankle and a 12° forward lean baked into its design, which read as a shuffle. With the ankle actuated the flat gait is designed like every other footed step: a periodic, fully actuated trajectory that minimises squared torque subject to a torso within 7° of vertical, a hip above 0.9 leg lengths, 4 cm of foot clearance, knees that never straighten fully, and a landing that sticks. Its centre of pressure stays inside the inner 70 % of the foot for the whole step (a version that rode the heel limit tipped in physics), its cost of transport is 0.27, and the same step then runs in MuJoCo from the measured state. Three things had to be true before the terrain steps could start and end in this gait. The humanoid’s arms and head carry 1 % of the upper-body mass and its trunk mass sits exactly where the model’s torso point mass is, so the impact map is the model’s. The reference of a new step is attached to the measured state 8 ms after touchdown, not at the touchdown instant, because MuJoCo’s compliant contact takes a few milliseconds to resolve and the velocities at first contact are still the pre-impact ones. And every terrain step is re-designed in those 8 ms from the state actually measured, which is what makes the hand-over back into the walking gait survive.

Energy levels of the constrained dynamics with sixteen simulated steps of the five-link gait.
Energy levels of the constrained dynamics with sixteen simulated steps of the five-link gait.
Return map measured over 16 steps from three initial speeds: the slope matches the analytic δ²/M⁻.
Return map measured over 16 steps from three initial speeds: the slope matches the analytic δ²/M⁻.

Slopes up and down

A slope is a rotated floor: the five-link library holds periodic gaits at ±3°, ±6° and ±10°; the footed walker has fully actuated periodic steps on ±6° ramps, entries onto a ramp whose foot is 18 cm ahead and exits onto the level.

Five-link, 6° up

Library gait on the slope, walked in the collision-checked simulation.

Five-link, 6° down

Descending gaits are faster and land with a straighter knee.

Five-link, 10° up

The steepest library gait.

Five-link, 10° down

Ten degrees down.

Footed biped, 6° up

Fully actuated periodic step with the foot parallel to the slope, centre of pressure inside the foot.

Footed biped, 6° down

Same on the way down.

Humanoid in MuJoCo, ramp up 6°

Regular gait → entry onto the ramp → slope steps → exit onto the level → regular gait.

Humanoid in MuJoCo, ramp down 6°

The same sequence downhill.

Obstacles: perceive, plan, step over

From one view of the floor the perception layer returns the first crate in the corridor (distance, depth, height to about 1 cm). The point-foot walker crosses it with two chained step-over gaits; the footed walker lands its leading foot 5 cm past the crate and its trailing step returns to the regular gait.

casetrue box (dist / depth / height)perceivedplanresultpeak torque
01.20 m / 15 cm / 8 cm1.20 m / 14 cm / 9 cm2 × 0.46 m, then 0.63 m over, resume 0.40 m8/8 steps, no collision432 N·m
11.60 m / 20 cm / 15 cm1.59 m / 18 cm / 16 cm3 × 0.44 m, then 0.71 m over, resume 0.40 m5/9 steps, then trip800 N·m
22.00 m / 25 cm / 22 cm1.99 m / 23 cm / 23 cm4 × 0.43 m, then 0.76 m over, resume 0.40 m10/10 steps, no collision419 N·m
31.00 m / 30 cm / 12 cm1.00 m / 28 cm / 13 cm2 × 0.37 m, then 0.78 m over, resume 0.40 m2/8 steps, then trip426 N·m
41.40 m / 10 cm / 5 cm1.40 m / 9 cm / 6 cm3 × 0.38 m, then 0.54 m over, resume 0.40 m9/9 steps, no collision415 N·m

Case 0: 8 cm box, 1.2 m ahead

2 approach steps of 0.46 m, 0.63 m over with the leading leg, trailing leg over, regular gait resumed — 8/8 steps, no collision.

Case 1: 15 cm box, 1.6 m ahead

3 approach steps of 0.44 m, 0.71 m over with the leading leg, trailing leg over, regular gait resumed — 5/9 steps, then trip.

Case 2: 22 cm box, 2.0 m ahead

4 approach steps of 0.43 m, 0.76 m over with the leading leg, trailing leg over, regular gait resumed — 10/10 steps, no collision.

Case 3: 12 cm box, 1.0 m ahead

2 approach steps of 0.37 m, 0.78 m over with the leading leg, trailing leg over, regular gait resumed — 2/8 steps, then trip.

Case 4: 5 cm box, 1.4 m ahead

3 approach steps of 0.38 m, 0.54 m over with the leading leg, trailing leg over, regular gait resumed — 9/9 steps, no collision.

Footed biped, 10 × 20 cm crate

Leading step 0.50 m over the crate, trailing step 0.40 m back into the regular gait; both fully actuated, centre of pressure inside the foot.

Humanoid in MuJoCo, 10 × 20 cm crate

The plan executed in physics: leading foot 5 cm past the crate, then the regular gait.

Humanoid in MuJoCo, 15 × 20 cm crate

The tallest crate crossed.

crateheight cmdepth cmresultτmax N·mslip cmlanding err mm
crate00520walked 9/91490.30.2
crate01815walked 9/92270.20.2
crate021020walked 9/91160.20.1
crate031030fell after 4 steps00.2–
crate041225design infeasible00.0–
crate051520walked 9/91510.30.3
Footed biped over six crates in MuJoCo: hip path (colour = time) and footholds; the 12 × 25 cm crate has no leading step with the centre of pressure inside the foot.
Footed biped over six crates in MuJoCo: hip path (colour = time) and footholds; the 12 × 25 cm crate has no leading step with the centre of pressure inside the foot.

Stairs up and down

The five-link library holds a periodic gait for every (run, rise) cell and interpolates between them; the footed walker takes each stair as one fully actuated step into the landing state of that stair's cell.

Up: rise 8 cm, run 28 cm

Landing knee 49°, torso lean +29°, foot lift 39 cm, period 0.70 s, Floquet 0.41, peak torque 380 N·m; 8/8 steps.

Up: rise 14 cm, run 28 cm

Landing knee 56°, torso lean +29°, foot lift 35 cm, period 0.90 s, Floquet 0.32, peak torque 380 N·m; 8/8 steps.

Up: rise 11 cm, run 24 cm

Landing knee 50°, torso lean +29°, foot lift 44 cm, period 0.55 s, Floquet 0.40, peak torque 380 N·m; 8/8 steps.

Up: rise 20 cm, run 32 cm

Landing knee 67°, torso lean +29°, foot lift 36 cm, period 0.96 s, Floquet 0.21, peak torque 380 N·m; 8/8 steps.

Down: rise 8 cm, run 28 cm

Landing knee 26°, torso lean -6°, foot lift 45 cm, period 0.42 s, Floquet 0.08, peak torque 381 N·m; 8/8 steps.

Down: rise 14 cm, run 32 cm

Landing knee 27°, torso lean -6°, foot lift 45 cm, period 0.42 s, Floquet 0.05, peak torque 381 N·m; 8/8 steps.

Footed biped climbing, 10 cm rises

Entry from the regular gait, three climbing steps, exit onto the landing; the centre-of-pressure panel shows the ankle at work.

Footed biped descending, 6–9 cm drops

Four different stairs, one step each, exit back into the regular gait.

Humanoid in MuJoCo, climbing

Three 10 cm stairs with the arms held still: the climbing steps land within a millimetre; the step off the top falls, kept in.

Humanoid in MuJoCo, descending

Four different stairs down, every landing within 5 mm of the design.

Five-link library, up: landing knee, torso lean, foot lift and period over the (run, rise) grid.
Five-link library, up: landing knee, torso lean, foot lift and period over the (run, rise) grid.
Five-link library, down.
Five-link library, down.

Variable heights: every stair different

Flights whose rise and run change from one stair to the next. The five-link walker re-plans its virtual constraint per stair from the perceived geometry (analytic simulation); the footed humanoid does the same in MuJoCo.

runstairsrise rangerun rangegaitsresultpeak torque
up gentle86–8 cm32–34 cm7 chained / 0 re-designed / 1 infeasibleall 14 steps624 N·m
up perceived810–14 cm27–29 cm7 chained / 0 re-designed / 1 infeasibleall 14 steps614 N·m
up steep814–19 cm24–31 cm0 chained / 0 re-designed / 1 infeasible3/4 steps, then trip429 N·m
up growing105–19 cm27–33 cm7 chained / 1 re-designed / 2 infeasibleall 16 steps800 N·m
up irregular109–16 cm24–34 cm6 chained / 1 re-designed / 3 infeasibleall 16 steps627 N·m
down gentle86–8 cm33–35 cm2 chained / 0 re-designed / 1 infeasible5/6 steps, then scuff401 N·m
down perceived89–13 cm32–34 cm3 chained / 0 re-designed / 3 infeasible8/9 steps, then scuff800 N·m
down steep812–17 cm30–37 cm3 chained / 0 re-designed / 4 infeasible9/10 steps, then fell800 N·m
down growing105–16 cm31–37 cm4 chained / 0 re-designed6/7 steps, then scuff539 N·m
down irregular108–14 cm30–36 cm3 chained / 0 re-designed / 4 infeasible9/10 steps, then singular800 N·m

Up gentle: 8 stairs, rises 6–8 cm

Runs 32–34 cm, every stair different. Landing knee 40–47°, gaits 7 chained / 0 re-designed / 1 infeasible; all 14 steps, peak torque 624 N·m.

Up perceived: 8 stairs, rises 10–14 cm

Runs 27–29 cm, every stair different. Landing knee 41–57°, gaits 7 chained / 0 re-designed / 1 infeasible; all 14 steps, peak torque 614 N·m.

Up steep: 8 stairs, rises 14–19 cm

Runs 24–31 cm, every stair different. Landing knee 66–66°, gaits 0 chained / 0 re-designed / 1 infeasible; 3/4 steps, then trip, peak torque 429 N·m.

Up growing: 10 stairs, rises 5–19 cm

Runs 27–33 cm, every stair different. Landing knee 44–64°, gaits 7 chained / 1 re-designed / 2 infeasible; all 16 steps, peak torque 800 N·m.

Up irregular: 10 stairs, rises 9–16 cm

Runs 24–34 cm, every stair different. Landing knee 42–60°, gaits 6 chained / 1 re-designed / 3 infeasible; all 16 steps, peak torque 627 N·m.

Down gentle: 8 stairs, rises 6–8 cm

Runs 33–35 cm, every stair different. Landing knee 22–23°, gaits 2 chained / 0 re-designed / 1 infeasible; 5/6 steps, then scuff, peak torque 401 N·m.

Down perceived: 8 stairs, rises 9–13 cm

Runs 32–34 cm, every stair different. Landing knee 15–26°, gaits 3 chained / 0 re-designed / 3 infeasible; 8/9 steps, then scuff, peak torque 800 N·m.

Down steep: 8 stairs, rises 12–17 cm

Runs 30–37 cm, every stair different. Landing knee 22–27°, gaits 3 chained / 0 re-designed / 4 infeasible; 9/10 steps, then fell, peak torque 800 N·m.

Down growing: 10 stairs, rises 5–16 cm

Runs 31–37 cm, every stair different. Landing knee 19–25°, gaits 4 chained / 0 re-designed; 6/7 steps, then scuff, peak torque 539 N·m.

Down irregular: 10 stairs, rises 8–14 cm

Runs 30–36 cm, every stair different. Landing knee 22–26°, gaits 3 chained / 0 re-designed / 4 infeasible; 9/10 steps, then singular, peak torque 800 N·m.

Footed humanoid in physics. Ten flights of 3–5 descending stairs with random rise (5–15 cm) and run (29–38 cm): 7 of 10 walked end to end, landing errors under 5 mm, foot slip 2 mm. The failures are the 13–14 cm drops, where no step satisfies the torque, friction and centre-of-pressure constraints at 400 N·m. These ten flights and the crate runs were measured with the earlier hybrid walking gait; the long course below is the end-to-end run with the natural gait, and re-measuring the batches with it is in progress.

Humanoid, five stairs down (5–10 cm)

Every stair different; entry, five stair steps, exit, regular gait.

Humanoid, four stairs down (10–11 cm)

Runs 33–35 cm.

Humanoid, three stairs down (10–11 cm)

Runs 31–34 cm.

The ten flights in MuJoCo: hip path (colour = time) and footholds.
The ten flights in MuJoCo: hip path (colour = time) and footholds.
flightstairsrise cmrun cmresultτmax on stairs N·mslip cmlanding err mm
down0039–933–35walked 11/111330.25
down01310–1131–34walked 11/111380.24
down0249–1229–32fell after 8 steps1569.096
down03411–1330–33design infeasible00.0–
down0446–929–31walked 12/122370.24
down05511–1429–34design infeasible00.0–
down0638–1030–32walked 11/111730.24
down0755–1029–33walked 13/131530.25
down0847–929–36walked 12/122040.21
down09410–1133–35walked 12/121600.23

From five links to seven: the footed humanoid

Point feet cannot do stair transitions in physics: the pinned-foot model never forbade negative ground forces or a foot that will not lift. Feet with actuated ankles make the robot fully actuated in single support, so every stair, crate or slope step becomes a time-parametrised trajectory designed against the real geometry, with the centre of pressure kept inside the foot.

The humanoid in MuJoCo: feet on ankle hinges, six leg motors, trunk, neck and head with the depth camera as its eyes, two three-link arms (upper arm, forearm, hand) that swing with the opposite leg. 51 kg, 400 N·m motors.
The humanoid in MuJoCo: feet on ankle hinges, six leg motors, trunk, neck and head with the depth camera as its eyes, two three-link arms (upper arm, forearm, hand) that swing with the opposite leg. 51 kg, 400 N·m motors.

What a step must satisfy

  • Motor torques within 400 N·m; the stance foot loaded and inside the friction cone; the centre of pressure between heel and toe (−6 to +14 cm).
  • Heel, ankle and toe clear of every tread, riser edge and crate top (a crossing test at each edge); the swing toe short of the next riser when climbing.
  • At the landing: impulse inside the cone and inside the foot, foot speed under 1.1 m/s, the trailing foot lifting off.
  • Start: the previous step's nominal post-impact state, the measured difference blended out over 30 % of the step (velocity part clipped: the simulator's velocities 8 ms after contact carry impact transients).

What broke in physics, and what fixed it

  • An 80 % centre-of-pressure margin made steps slow and torque-hungry, and they fell; the physical foot as the bound with 0.85 s steps walked.
  • A 3.8 rad/s impact transient blended into the reference whipped the swing leg; clipping it to 1 rad/s fixed the flight.
  • A handover to the hybrid gait needs ≥ 90 % of its speed (measured basin: 0.90 walks, 0.85 falls).
  • Landing 22 cm past a crate left the centre of mass half a metre behind the foot; 5 cm past it works.
  • The upper body is split into trunk, head and arms whose composite mass and centre stay at the design's torso point mass; a heavier head or arms shifted the period each step.
  • Knees cannot bend backwards: MuJoCo joint limits of 0–150° on both knees, and every step design keeps at least 3° of flexion inside the step. The neck servo cancels the torso pitch so the head stays level and the camera keeps looking 38° down at the floor.
  • Open: the climbing steps execute in physics only with the arms held still (the arm swing perturbs the 1.3 s climbing steps), and the step off the top of a flight and the ramp entries execute in the model but not yet in physics.

Analysis view: centre of pressure

For a fully actuated step the top-right panel replaces the phase portrait: the centre of pressure must stay between heel and toe for the whole step.

The same flight in MuJoCo

Twelve of twelve steps, landings within 5 mm.

One long course: up, over, down, down

Thirteen metres of everything in a single MuJoCo run with the footed humanoid: flat walking in the natural gait, three stairs up, the step off the top, a crate, a 6° ramp down, three stairs down and the step back onto the flat. Every terrain step is a fully actuated trajectory designed against that feature's geometry and re-designed 8 ms after each touchdown from the state actually measured.

28 of 28 steps in 28.1 s of simulation: 18 of 18 terrain steps designed feasible, foot slip under 5 cm, peak torque 800 N·m, and the stairs landed within 10 mm of their designed rise.

The long course: terrain profile, hip height (colour = time) and the footholds, from the flat approach through the staircase, the crate, the ramp and the descent.
The long course: terrain profile, hip height (colour = time) and the footholds, from the flat approach through the staircase, the crate, the ramp and the descent.
stepwhatperiod sstride mrise mslip cmτmax N·m
Rregular gait, 0.50 m0.78+0.500-0.0000.0220
Rregular gait, 0.50 m0.78+0.500-0.0000.0207
Rregular gait, 0.50 m0.78+0.500-0.0000.0207
Rregular gait, 0.50 m0.78+0.500-0.0000.0207
U1stair up0.93+0.320+0.1000.0154
U2stair up1.20+0.300+0.1000.090
U3stair up1.18+0.300+0.0990.0136
X1step off the top of the flight1.70+0.397-0.0000.0321
Fshort-stride gait, 0.40 m1.33+0.400-0.0000.086
Fshort-stride gait, 0.40 m1.33+0.400-0.0000.048
Lcrate: leading step1.17+0.399-0.0000.0227
Tcrate: trailing step1.14+0.401-0.0000.048
Fshort-stride gait, 0.40 m1.33+0.400-0.0000.185
Eonto the ramp1.11+0.422-0.1022.9231
S1ramp step, 6° down0.68+0.456-0.0905.4800
S2ramp step, 6° down0.91+0.398-0.0420.1199
S3ramp step, 6° down0.94+0.398-0.0420.0121
S4ramp step, 6° down0.82+0.389-0.0350.085
X2off the ramp1.20+0.417-0.0090.3150
Aapproach: stride set from the drop edge1.13+0.300-0.0000.0141
D1stair down1.01+0.320-0.1000.1224
D2stair down0.81+0.320-0.0900.2198
D3stair down0.89+0.320-0.1030.0136
X3off the flight onto the flat0.79+0.500+0.0000.079
RJrejoin the regular gait0.84+0.500-0.0000.0198
Rregular gait, 0.50 m0.78+0.500-0.0000.0186
Rregular gait, 0.50 m0.78+0.500-0.0000.0198
Rregular gait, 0.50 m0.78+0.500-0.0000.0198

End to end in MuJoCo: camera in, torques out

The whole loop in physics with the humanoid: the head camera is read at 1 Hz, floor levels, crates, drop edges and ramps go into a world model, and at every touchdown the next step is chosen and designed from that model. The design time is real and shown; the simulation waits for it.

28 of 28 steps in 28.1 s of simulation: 18 of 18 terrain steps designed feasible, foot slip under 5 cm, peak torque 800 N·m, and the stairs landed within 10 mm of their designed rise.

Perceived staircase

Drops of 10, 9 and 11 cm perceived from 1.5 m, approached with 0.35 m steps, taken in one go; a flight with a 12 cm drop fell on that stair.

Perceived crate, then staircase

The combined course with the picture-in-picture camera and the HUD.

The long descending course

Two crates and two flights of different stairs, all perceived, in one run.

Live trace of the long perceived course

# online_b7on_long2: seven-link (feet, actuated ankles) -> done after 34 steps, 31.3 s simulated, 530 s of step design
[  0.00 s  step  0] perceive (50 ms): levels z+0cm x0.34-2.29, z+0cm x2.76-5.48
[  0.82 s  step  1] touchdown: step of 0.82 s, stride (+0.399, +0.000) m, slip 0.1 cm, peak torque 332 N·m, tracking 0.009 rad
[  0.82 s  step  1] decide: regular 0.40 m (flat ahead)  [0.00 s]
[  1.00 s  step  1] perceive (30 ms): levels z+0cm x0.66-2.34, z+10cm x2.35-2.53, z+0cm x2.69-3.37 | obstacle: box 1.95 m ahead, 18 cm deep, 10 cm high
[  1.63 s  step  2] touchdown: step of 0.81 s, stride (+0.399, -0.000) m, slip 0.2 cm, peak torque 405 N·m, tracking 0.028 rad
[  1.63 s  step  2] decide: crate in 1.55 m: approach flat 0.34 m (designed, 3 s)  [2.94 s]
[  2.00 s  step  2] perceive (33 ms): levels z+0cm x1.06-2.33, z+10cm x2.35-2.53, z+0cm x2.66-4.27 | obstacle: box 1.55 m ahead, 18 cm deep, 10 cm high
[  2.54 s  step  3] touchdown: step of 0.91 s, stride (+0.340, -0.001) m, slip 0.0 cm, peak torque 200 N·m, tracking 0.078 rad
[  2.54 s  step  3] decide: crate in 1.21 m: approach flat 0.34 m (designed, 3 s)  [2.87 s]
[  3.00 s  step  3] perceive (35 ms): levels z+0cm x1.40-2.33, z+10cm x2.35-2.54, z+0cm x2.64-5.53 | obstacle: box 1.21 m ahead, 19 cm deep, 10 cm high
[  3.45 s  step  4] touchdown: step of 0.91 s, stride (+0.340, -0.001) m, slip 0.0 cm, peak torque 93 N·m, tracking 0.027 rad
[  3.45 s  step  4] decide: crate in 0.87 m: approach flat 0.34 m (designed, 3 s)  [2.92 s]
[  4.00 s  step  4] perceive (29 ms): levels z+0cm x1.79-2.35, z+10cm x2.35-2.54, z+0cm x2.62-5.49 | obstacle: box 0.87 m ahead, 19 cm deep, 10 cm high
[  4.36 s  step  5] touchdown: step of 0.91 s, stride (+0.340, -0.001) m, slip 0.0 cm, peak torque 230 N·m, tracking 0.047 rad
[  4.36 s  step  5] decide: crate in 0.53 m: approach flat 0.34 m (designed, 3 s)  [2.82 s]
[  5.00 s  step  5] perceive (25 ms): levels z+0cm x2.30-2.35, z+10cm x2.35-2.54, z+0cm x2.60-5.44 | obstacle: box 0.53 m ahead, 19 cm deep, 10 cm high
[  5.27 s  step  6] touchdown: step of 0.91 s, stride (+0.340, -0.001) m, slip 0.0 cm, peak torque 93 N·m, tracking 0.047 rad
[  5.27 s  step  6] decide: crate 10 cm high, 19 cm deep, 19 cm ahead: leading stride 0.49 m (ok), trailing (ok), 45 s  [45.01 s]
[  6.00 s  step  6] perceive (94 ms): levels z+10cm x2.41-2.55, z+0cm x2.57-5.49
[  6.44 s  step  7] touchdown: step of 1.17 s, stride (+0.493, -0.000) m, slip -0.0 cm, peak torque 75 N·m, tracking 0.082 rad
[  6.44 s  step  7] decide: crate: trailing step (queued)  (queued)
[  7.00 s  step  7] perceive (29 ms): levels z+0cm x2.92-5.54
[  7.61 s  step  8] touchdown: step of 1.17 s, stride (+0.400, -0.000) m, slip 0.1 cm, peak torque 118 N·m, tracking 0.050 rad
[  7.61 s  step  8] decide: regular 0.40 m (flat ahead)  [0.00 s]
[  8.00 s  step  8] perceive (36 ms): levels z+0cm x3.32-5.29
[  8.49 s  step  9] touchdown: step of 0.88 s, stride (+0.399, +0.000) m, slip 0.1 cm, peak torque 323 N·m, tracking 0.028 rad
[  8.49 s  step  9] decide: regular 0.40 m (flat ahead)  [0.00 s]
[  9.00 s  step  9] perceive (43 ms): levels z+0cm x3.72-5.56, z-29cm x6.40-6.86 | stairs: down first riser 2.10 m, rise -29 cm, run nan cm, 1 treads
[  9.34 s  step 10] touchdown: step of 0.85 s, stride (+0.399, -0.000) m, slip 0.1 cm, peak torque 347 N·m, tracking 0.025 rad
[  9.34 s  step 10] decide: stairs down in 1.70 m: approach flat 0.38 m (designed, 4 s)  [4.01 s]
[ 10.00 s  step 10] perceive (39 ms): levels z+0cm x4.37-5.57, z-10cm x5.72-5.91, z-29cm x6.38-7.97, z-29cm x8.39-9.45
[ 10.25 s  step 11] touchdown: step of 0.91 s, stride (+0.381, -0.000) m, slip 0.0 cm, peak torque 77 N·m, tracking 0.089 rad
[ 10.25 s  step 11] decide: stairs down in 1.34 m: approach regular 0.40 m  [0.00 s]
[ 11.00 s  step 11] perceive (33 ms): levels z+0cm x5.03-5.59, z-10cm x5.68-5.91, z-19cm x6.01-6.21, z-29cm x6.34-7.97, z-29cm x8.32-9.39
[ 11.03 s  step 12] touchdown: step of 0.79 s, stride (+0.399, -0.001) m, slip 0.2 cm, peak torque 370 N·m, tracking 0.128 rad
[ 11.03 s  step 12] decide: stairs down in 0.95 m: approach flat 0.38 m (designed, 4 s)  [3.99 s]
[ 11.94 s  step 13] touchdown: step of 0.91 s, stride (+0.385, -0.001) m, slip 0.1 cm, peak torque 108 N·m, tracking 0.020 rad
[ 11.94 s  step 13] decide: stairs down in 0.56 m: approach flat 0.38 m (designed, 4 s)  [4.40 s]
[ 12.00 s  step 13] perceive (50 ms): levels z+0cm x5.28-5.59, z-10cm x5.64-5.91, z-19cm x5.98-6.21, z-29cm x6.30-8.00, z-29cm x8.31-9.40
[ 12.85 s  step 14] touchdown: step of 0.91 s, stride (+0.384, -0.000) m, slip 0.1 cm, peak torque 111 N·m, tracking 0.018 rad
[ 12.85 s  step 14] decide: stair down: edge in 18 cm, rise -10.0 cm, stride 0.32 m (ok, tau 122 N·m, 149 s)  [148.87 s]
[ 13.00 s  step 14] perceive (49 ms): levels z-10cm x5.66-5.91, z-19cm x5.94-6.23, z-29cm x6.28-7.97, z-29cm x8.30-9.45
[ 13.80 s  step 15] touchdown: step of 0.94 s, stride (+0.320, -0.100) m, slip 0.0 cm, peak torque 86 N·m, tracking 0.071 rad
[ 13.80 s  step 15] decide: stair down: edge in 19 cm, rise -9.0 cm, stride 0.33 m (ok, tau 132 N·m, 12 s)  [12.09 s]
[ 14.00 s  step 15] perceive (32 ms): levels z-9cm x6.13-6.22, z-19cm x6.26-7.99, z-19cm x8.29-9.46
[ 14.62 s  step 16] touchdown: step of 0.83 s, stride (+0.330, -0.090) m, slip 0.1 cm, peak torque 107 N·m, tracking 0.063 rad
[ 14.62 s  step 16] decide: stair down: edge in 17 cm, rise -10.0 cm, stride 0.31 m (ok, tau 120 N·m, 82 s)  [82.20 s]
[ 15.00 s  step 16] perceive (39 ms): levels z-10cm x6.52-7.98, z-10cm x8.26-9.43
[ 15.49 s  step 17] touchdown: step of 0.86 s, stride (+0.310, -0.100) m, slip 0.0 cm, peak torque 90 N·m, tracking 0.054 rad
[ 15.49 s  step 17] decide: exit step (bad clear_obs=-0.002, tau 79 N·m, 66 s)  [66.42 s]
[ 16.00 s  step 17] perceive (42 ms): levels z-0cm x7.05-7.99, z-0cm x8.27-9.45
[ 16.37 s  step 18] touchdown: step of 0.89 s, stride (+0.400, -0.001) m, slip 0.0 cm, peak torque 136 N·m, tracking 0.076 rad
[ 16.37 s  step 18] decide: regular 0.40 m (flat ahead)  [0.00 s]
[ 17.00 s  step 18] perceive (39 ms): levels z+0cm x7.18-7.99, z+8cm x8.00-8.14, z+0cm x8.22-9.44 | obstacle: box 1.23 m ahead, 14 cm deep, 8 cm high
[ 17.20 s  step 19] touchdown: step of 0.82 s, stride (+0.399, -0.001) m, slip 0.2 cm, peak torque 348 N·m, tracking 0.023 rad
[ 17.20 s  step 19] decide: crate in 0.83 m: approach flat 0.34 m (designed, 4 s)  [3.72 s]
[ 18.00 s  step 19] perceive (31 ms): levels z+0cm x7.89-8.00, z+8cm x8.00-8.15, z+0cm x8.21-9.46 | obstacle: box 0.83 m ahead, 15 cm deep, 8 cm high
[ 18.10 s  step 20] touchdown: step of 0.91 s, stride (+0.340, -0.001) m, slip 0.0 cm, peak torque 102 N·m, tracking 0.021 rad
[ 18.10 s  step 20] decide: crate in 0.49 m: approach flat 0.34 m (designed, 3 s)  [3.37 s]
[ 19.00 s  step 20] perceive (27 ms): levels z-0cm x8.25-9.42, z-8cm x9.56-9.78, z-37cm x10.62-14.52 | stairs: down first riser 1.91 m, rise -18 cm, run 36 cm, 2 treads
[ 19.01 s  step 21] touchdown: step of 0.91 s, stride (+0.340, -0.001) m, slip 0.0 cm, peak torque 93 N·m, tracking 0.027 rad
[ 19.01 s  step 21] decide: crate 8 cm high, 15 cm deep, 15 cm ahead: leading stride 0.41 m (ok), trailing (ok), 58 s  [57.60 s]
[ 20.00 s  step 21] perceive (37 ms): levels z-0cm x8.39-9.44, z-8cm x9.54-9.78, z-18cm x9.90-10.10, z-37cm x10.59-15.30 | stairs: down first riser 1.59 m, rise -10 cm, run 33 cm, 3 treads
[ 20.20 s  step 22] touchdown: step of 1.19 s, stride (+0.409, -0.001) m, slip -0.0 cm, peak torque 93 N·m, tracking 0.048 rad
[ 20.20 s  step 22] decide: crate: trailing step (queued)  (queued)
[ 21.00 s  step 22] perceive (28 ms): levels z+0cm x8.62-9.45, z-8cm x9.53-9.80, z-18cm x9.90-10.11, z-37cm x10.56-15.67 | stairs: down first riser 1.19 m, rise -10 cm, run 33 cm, 3 treads
[ 21.39 s  step 23] touchdown: step of 1.19 s, stride (+0.400, -0.001) m, slip 0.0 cm, peak torque 231 N·m, tracking 0.039 rad
[ 21.39 s  step 23] decide: stairs down in 0.80 m: approach flat 0.34 m (designed, 3 s)  [3.11 s]
[ 22.00 s  step 23] perceive (38 ms): levels z+0cm x9.05-9.45, z-8cm x9.50-9.79, z-18cm x9.87-10.11, z-27cm x10.20-10.44, z-37cm x10.56-15.93 | stairs: down first riser 0.79 m, rise -9 cm, run 33 cm, 4 treads
[ 22.30 s  step 24] touchdown: step of 0.91 s, stride (+0.340, -0.000) m, slip 0.0 cm, peak torque 110 N·m, tracking 0.025 rad
[ 22.30 s  step 24] decide: stairs down in 0.46 m: approach flat 0.34 m (designed, 3 s)  [2.88 s]
[ 23.00 s  step 24] perceive (23 ms): levels z-8cm x9.61-9.80, z-18cm x9.85-10.11, z-27cm x10.17-10.44, z-37cm x10.53-15.65 | stairs: down first riser 0.80 m, rise -10 cm, run 32 cm, 3 treads
[ 23.21 s  step 25] touchdown: step of 0.91 s, stride (+0.340, -0.001) m, slip 0.0 cm, peak torque 114 N·m, tracking 0.042 rad
[ 23.21 s  step 25] decide: stair down: edge in 12 cm, rise -8.0 cm, stride 0.26 m (ok, tau 155 N·m, 16 s)  [15.80 s]
[ 24.00 s  step 25] perceive (39 ms): levels z-18cm x10.04-10.12, z-27cm x10.16-10.44, z-37cm x10.51-15.81 | stairs: down first riser 0.78 m, rise -9 cm, run 32 cm, 2 treads
[ 24.06 s  step 26] touchdown: step of 0.85 s, stride (+0.260, -0.080) m, slip 0.0 cm, peak torque 131 N·m, tracking 0.047 rad
[ 24.06 s  step 26] decide: stair down: edge in 20 cm, rise -10.0 cm, stride 0.34 m (ok, tau 147 N·m, 5 s)  [4.90 s]
[ 24.90 s  step 27] touchdown: step of 0.84 s, stride (+0.340, -0.100) m, slip 0.0 cm, peak torque 162 N·m, tracking 0.030 rad
[ 24.90 s  step 27] decide: stair down: edge in 18 cm, rise -9.0 cm, stride 0.32 m (ok, tau 122 N·m, 9 s)  [9.26 s]
[ 25.00 s  step 27] perceive (33 ms): levels z-9cm x10.40-10.45, z-19cm x10.49-16.29 | stairs: down first riser 0.51 m, rise -10 cm, run nan cm, 1 treads
[ 25.74 s  step 28] touchdown: step of 0.84 s, stride (+0.320, -0.091) m, slip 0.1 cm, peak torque 95 N·m, tracking 0.069 rad
[ 25.74 s  step 28] decide: stair down: edge in 19 cm, rise -10.0 cm, stride 0.33 m (ok, tau 108 N·m, 48 s)  [47.54 s]
[ 26.00 s  step 28] perceive (41 ms): levels z-10cm x10.69-16.54
[ 26.59 s  step 29] touchdown: step of 0.85 s, stride (+0.330, -0.100) m, slip 0.0 cm, peak torque 118 N·m, tracking 0.040 rad
[ 26.59 s  step 29] decide: exit step (ok, tau 74 N·m, 3 s)  [3.38 s]
[ 27.00 s  step 29] perceive (38 ms): levels z+0cm x11.18-16.30
[ 27.48 s  step 30] touchdown: step of 0.89 s, stride (+0.400, -0.001) m, slip 0.0 cm, peak torque 73 N·m, tracking 0.022 rad
[ 27.48 s  step 30] decide: regular 0.40 m (flat ahead)  [0.00 s]
[ 28.00 s  step 30] perceive (86 ms): levels z+0cm x11.25-14.36
[ 28.29 s  step 31] touchdown: step of 0.81 s, stride (+0.399, +0.000) m, slip 0.2 cm, peak torque 351 N·m, tracking 0.016 rad
[ 28.29 s  step 31] decide: regular 0.40 m (flat ahead)  [0.00 s]
[ 29.00 s  step 31] perceive (29 ms): levels z+0cm x12.15-17.24
[ 29.10 s  step 32] touchdown: step of 0.81 s, stride (+0.399, -0.001) m, slip 0.2 cm, peak torque 388 N·m, tracking 0.028 rad
[ 29.10 s  step 32] decide: regular 0.40 m (flat ahead)  [0.00 s]
[ 29.90 s  step 33] touchdown: step of 0.81 s, stride (+0.399, -0.000) m, slip 0.1 cm, peak torque 401 N·m, tracking 0.027 rad
[ 29.90 s  step 33] decide: regular 0.40 m (flat ahead)  [0.00 s]
[ 30.00 s  step 33] perceive (30 ms): levels z+0cm x12.45-17.03
[ 30.70 s  step 34] touchdown: step of 0.80 s, stride (+0.399, -0.001) m, slip 0.2 cm, peak torque 373 N·m, tracking 0.024 rad
[ 30.70 s  step 34] decide: regular 0.40 m (flat ahead)  [0.00 s]
[ 31.00 s  step 34] perceive (43 ms): levels z+0cm x12.86-14.82
Hip trajectory and footholds on the combined course (colour = time).
Hip trajectory and footholds on the combined course (colour = time).

Earlier, the point-foot five-link walker ran the same loop: flat walking was exact and one crate was crossed, but every staircase fell at the first transition. The technical report keeps those runs and the diagnosis (negative ground forces, fast touchdowns, a trailing foot that did not lift) that led to the footed robot.

The two-link reduction, re-tested

The course project designed the gait on the acrobot (two links, one hip motor). Re-running it against physics instead of against itself gave three findings.

Return map of the two-link gait
Reproduced

Exact to 4·10⁻⁵

The report's six VHC coefficients, δ = 0.336, M⁻ = 0.121, V⁻ = −0.254, Vmax = 3.42; the measured return-map slope 0.9329 matches δ²/M⁻ = 0.9326. The basin is one-sided: the gait cannot start slower than its limit cycle.

Velocity retention through the impact for both conventions
Impact map

The template's relabelling is not the leg swap

q̇⁺ = −q̇ is not the Jacobian of q₁⁺ = q₁ + q₂ − π, q₂⁺ = 2π − q₂. Under the exact swap the report gait keeps δ = 0.115 instead of 0.336 and has no stable orbit; retraction gaits recover it. Both conventions are implemented; the five-link walker uses the exact one.

Slope-model swing-foot path against a real staircase
Collisions

Slopes are not stairs

The slope model lets the swing foot pass through the tread behind the stance foot; on the report's staircase the dip is 5 cm. Checking gaits against treads and risers is what produced the foot-placement rule above.

Two-link flat gait: energy levels and 25 simulated steps
Two-link flat gait: 25 steps from 1.2× the limit-cycle speed.
Two-link slope gaits
Two-link slope gaits found by constrained optimisation (−10°, −5°, +5°; none at +10°).

Reproduce

Everything on this page is regenerated by a Python harness in BipedNav/experiments (numpy, scipy, sympy, matplotlib, OpenCV; ffmpeg for the video; no ROS, no MATLAB). The MATLAB originals remain in control/MATLAB. The technical report is the lab notebook: methods, every number, and the limitations.

cd BipedNav/experiments python3 stair_perception.py out/perception_results.json # 10 clouds, ~2 s python3 fig_perception.py # perception figures python3 design_all.py # gait batch → out/gaits.json python3 sweep_stairs.py # 80-cell stair sweep python3 run_experiments.py # controller figures + metrics.json python3 make_video.py # the demo video cd ../docs && make # bipednav.pdf

Credits

Perception. Andrew Qiu, Aravind Narayanan, Qilong Cheng, Brokoslaw Laschowski — Neural Robotics Lab, KITE Toronto Rehabilitation Institute and the Robotics Institute, University of Toronto, 2024. Metric3D v2 (Hu et al., 2024).

Control. Qilong Cheng, ECE1658 Geometric Nonlinear Control of Robotic Systems (Prof. Manfredi Maggiore), University of Toronto, 2024; virtual holonomic constraints after Maggiore & Consolini (2013), impact model after Westervelt, Grizzle et al. (2007).

2026 re-test. Python re-implementation, verification, terrain and collision model, gait optimiser, video and this page. Limitations, including the open question of the impact-map convention in the course material, are listed in the report.