A tri-star (planetary) wheel cluster carries three equal wheels bolted 120° apart around a rotating hub. To climb a stair whose rise h and run d are known, the hub-to-wheel leg length is engineered so the chord between successive step-edge contacts equals the side of the equilateral triangle traced by the wheels:
chord = √(d² + h²)
L = chord / √3 (chord = L·√3 for a 120° arc)
With L set this way, the assembly can spin about a fixed contact point on the current step's leading edge Pk = (k·d, k·h). While spoke j is the pivot, its world angle is φj(Φ) = Φ − j·120° + ψ, and every wheel position follows the same rigid rotation:
hub = P_k + L·(cos φ_pivot, sin φ_pivot)
wheel_j = hub − L·(cos φ_j, sin φ_j)
Fix from the 3D source (verified numerically): the original engine hardcodes the phase constant ψ = −90° (spoke pointing straight down at Φ=0), which only lands the next spoke exactly on the next step edge when the stair incline happens to be 60°. For an ordinary staircase (this simulator's default 16 cm rise / 28 cm run ≈ 30°), that hardcoded phase makes the hub teleport by roughly 12 cm at every single pivot hand-off — confirmed by stepping the source's own formula through a standalone script and comparing the hub position on either side of each transition. The real requirement, re-derived from the rigid-rotation geometry, ties the phase to the stair's own pitch angle θ = atan2(h, d):
ψ = θ − 150° (θ = atan2(h, d), the stair incline)
// when θ = 60° this reduces to ψ = −90°, the 3D source's constant —
// so the source isn't wrong in general, only for stairs it was never
// tuned for. This 2D sibling recomputes ψ from the live h, d sliders, so
// the "Landing error" stat below converges to ~0 at every hand-off for
// any stair geometry, instead of only for a 60° incline.
- Step height / depth — sets the stair rise and run; the required leg length L and phase ψ update live.
- Climb speed — angular rate of the tri-star spin, Φ̇.
- Self-Leveling Seat — real assistive wheelchairs (e.g. the iBOT) add a parallelogram linkage that counter-rotates the seat frame so it stays level while the wheel cluster spins underneath. Turn it off to see why that linkage is essential: without it, the seat is bolted rigidly to the hub and tumbles through the same Φ as the wheels.
- Landing error — the live distance between the incoming spoke's current position and the true next step edge; it sweeps down and converges to ~0 mm exactly at the moment of hand-off, because ψ tracks the stair angle. With the 3D source's fixed −90° phase this same quantity would instead settle on roughly 12 cm of permanent offset at every hand-off (for the default stair proportions), which is what shows up there as a visible teleport.
Drag inside the scene to pan, scroll to zoom — useful for lining up a close view of a pivot hand-off as it happens.
This is the real mechanism behind stair-climbing power wheelchairs and some rescue/inspection robots — a purely mechanical solution to a terrain problem, with no path planning or sensors required once the geometry (and phase) is matched to the stairs.