Microduck FootstepNet

A footstep planner for Microduck: FootstepNet (rhoban/footstepnet_envs, the planner Rhoban used on Sigmaban) retrained with CrossQ (upstream hyperparameters) on Microduck's feet and step limits. It plans one step at a time toward a goal foot pose, avoiding a disc obstacle; the robot follows it with a footstep-tracking policy (task Mjlab-Footsteps-Flat-Backlash-MicroDuck, branch footsteps of microduck_rl).

  • footstepnet.onnx — deterministic actor, obs (N, 8) float32 → step (N, 3). The CrossQ BatchRenorm layers are folded into the dense layers. Metadata: options (JSON: limits, tolerances, foot geometry), obs, step.
  • crossq_best_model.zip — the sbx CrossQ checkpoint it was exported from.

Contract

Poses are planar (x, y, yaw) of the sole centre (7 mm ahead of the *_foot site), x forward.

  • Steps (limits): dx +5 / −5 cm, dy ±2 cm, dθ ±30°, relative to the neutral landing pose (feet parallel, 95 mm apart), then clipped to that ellipsoid. Sole 54 × 41 mm.
  • Observation (right-support convention; for a LEFT support negate the entries marked *): [goal.x, goal.y*, cos(goal.yaw), sin(goal.yaw)*, support_is_goal_foot, obstacle.x, obstacle.y*, obstacle.radius], goal and obstacle expressed in the support sole frame. No obstacle → radius 0.
  • Action: step = (dx, dy, dθ) from the neutral pose; for a LEFT support negate dy and dθ; then box- and ellipsoid-clip. Landing pose = support ∘ (0, ±0.095, 0) ∘ step (+ for a right support, − for a left).
  • Goal reached: the goal foot within 2 cm and 5° of the goal pose.

Reference implementation: src/mjlab_microduck/footstep_planner.py (numpy + onnxruntime, checked step-for-step against the gym env). Training: 1M steps, 99–100 % of random goals within ±1 m reached (≈22 steps on average). Limits are provisional (set to the tracking policy's training range); they will be refit to the trained policy's measured envelope.

Downloads last month
17
Video Preview
loading