Bipedal Locomotion: Specimen Sizing and the Initial Sweep

September 8, 2026

Part 1 of mapping failure boundaries for a bipedal robot. Following up on the Go1 quadruped study, moving to a 14-degree-of-freedom bipedal specimen (Microduck, Pollen Robotics’ open-source biped) trained via rsl_rl PPO on the upstream mjlab recipe.


Sep 8: Specimen and Checkpoint Freezing

Bipedal locomotion has zero passive lateral stability. Unlike a quadruped with a four-point contact polygon, a duck robot walking has alternating single-support swing phases where balance is completely active.

Trained baseline walking policy (Mjlab-Velocity-Flat-MicroDuck) on Google Colab Pro+ with an NVIDIA L4 across 6,000 PPO iterations, saving a checkpoint every 250 iterations. Pulled model checkpoints locally, among them:

  • model_1000.pt (early exploration)
  • model_1500.pt (early stable gait)
  • model_2250.pt (intermediate high-reward policy)
  • model_3000.pt (mid-training transition)
  • model_5999.pt (converged terminal policy)

All checkpoints frozen.

Sep 8: The Initial Perturbation Grid

Built the evaluation harness around Proofload. Proofload never sees MuJoCo: it hands one condition and one seed to a rollout function of mine, and everything about the robot, the physics and the push lives in that function. Rollouts ran locally on an Apple Silicon laptop; the stored manifests record the platform as macOS on arm64 and do not record the chip.

Tested lateral velocity kicks: Δvy∈{0.45,0.525,0.60,0.675} m/s\Delta v_y \in \{0.45, 0.525, 0.60, 0.675\} \text{ m/s} across two foot friction levels (μ∈{0.6,1.0}\mu \in \{0.6, 1.0\}). Eight cells, 100 seeds per cell, paired across the two checkpoints.

First pass results threw an anomaly. Checkpoint 1500 fell in 0 of its 800 rollouts. Converged checkpoint 5999 fell in 400 of 800.

On the surface, it looked like an intermediate training checkpoint was substantially more robust than the converged policy, suggesting catastrophic over-optimization. But before claiming an early training win, the result needs to be audited. The paired report is what made it impossible to take at face value: every one of the 8 cells came out at exactly 0.0 or exactly 100.0. A hundred seeds per cell and no within-cell variance anywhere.