Fall Recovery Controller for Humanoid Robots
Hierarchical balance & recovery via capture-point FSMs in MuJoCo
Designed and implemented a progressive suite of four balance and fall-recovery controllers for the v0H humanoid robot in MuJoCo simulation. The controllers build on each other in a progression from minimal standing to full-body dynamic balance with fall recovery, inspired by human balance recovery strategies: ankle, hip, stepping, and protective reflexes.
Design Philosophy
The system is organized as a capability progression where each controller adds new modules on top of the previous one:
- Controller C → A → B → D, from minimal robust standing to full-body dynamic balance
- Each level adds disturbance coverage while preserving the stability guarantees of prior levels
- All controllers use the Capture Point (CP) as the primary lateral stability predictor:
Controller C: Minimal Robust Standing
Foundation layer with tight PD control and a 60% torque-rate clamp to suppress limit-cycle oscillations. A single static standing pose validates kinematics and joint sign conventions. On contact loss, all torques are zeroed to let gravity settle the robot.
- Conservative gains: \(K_p = 15{-}30\), \(K_d = 1.5{-}3.0\) per joint group
- Safety: torque limited to 60% of actuator max, rate-limited at 15% change per step
- Handles gentle perturbations only (<0.1 m push)
Controller A: Layered Reflex Cascade
Introduces a three-tier reflex hierarchy mirroring human balance recovery:
- Ankle strategy (\(|\delta| < 0.02\)): small roll corrections via ankle PD
- Hip strategy (\(|\delta| < 0.07\)): hip abduction on the support leg + contralateral squat + ankle correction
- Stepping strategy (\(|\delta| < 0.25\)): adaptive step with length \(l = K_{\text{step}} \cdot |\delta|\), clipped to the physical leg reach (0.55 m)
A 0.15 s dwell timer between FSM transitions prevents mode-flapping under oscillatory disturbances. If the stepping strategy fails to reduce error within 50 ms, the controller automatically falls back to the hip strategy.
Controller B: Full Fall-Recovery Pipeline
Extends the reflex cascade with trajectory-free fall handling and a complete stand-up sequence:
- FALLING: Detected when pelvis height drops below 0.33 m or vertical velocity exceeds 0.8 m/s. The robot bends knees and arms to lower COM and prepare for impact.
- IMPACT: On ground contact (3+ contact points), stiffness is reduced and damping increased to absorb energy.
- TRIPOD: Stable three-point stance with controlled hip/knee targets.
- STAND-UP: A 2-second scripted sequence through half-kneel to full standing, using staged joint waypoints at 0.4 s intervals.
A TelemetryBuffer logs state, capture-point error, and COM-BoS margin at each timestep for post-hoc analysis.
Controller D: Full-Body Dynamic Balance
The most capable controller, employing five coordinated strategies activated by capture-point error thresholds:
| Strategy | CP Error Threshold | Action |
|---|---|---|
| Ankle | < 5 cm | Ankle roll/pitch torques |
| Hip | < 12 cm | Hip abduction + weight shift |
| Arm swing | < 15 cm | Counter-momentum arm motion |
| Torso lean | < 20 cm | Torso pitch/roll compensation |
| Stepping | < 25 cm | Lateral/frontal recovery step |
| Emergency | > 40 cm or COM ↓ | Pre-impact pose → recovery sequence |
The FSM transitions between STANDING → BALANCING → STEPPING → EMERGENCY states, with automatic downshifting as CP error decreases. Gains are auto-scaled during BALANCING and STEPPING states (recovery gain factor of 2×).
Performance Summary
| Metric | C | A | B | D |
|---|---|---|---|---|
| FSM states | 1 | 4 | 11 | 6–7 |
| Capture-point logic | - | Lateral | Lateral + predictive | Lateral + stepping |
| Impact mitigation | - | - | Knees + arms | Pre-impact pose |
| Max push survived | 0.1 m | 0.25 m CP | 0.5 m fall + get-up | 0.35 m CP |
| Peak torque | <20 Nm | <60 Nm | <120 Nm | <200 Nm |
In a 40-second stress test with aggressive stochastic perturbations, Controller D maintained 62% standing, 38% active balancing, and 0% falls, with a mean capture-point error of 0.012 m.