Backlash-Compensated Walking
Velocity-tracking walking policy trained specifically to withstand ±1° gear play (2° total) in series with every XL330 servo gearbox.
About this behavior
Models mechanical gear lash explicitly via passive_<joint>_backlash hinges in the MJCF model (robot_*_backlash.xml). Because the physical Dynamixel encoder sits on the output side of the gear play, both the BAM firmware PD emulation and joint observations read directly through the backlash, resulting in extreme sim2real fidelity even on worn gearboxes.
Runtime contract
61-dimension input · 14 joint targets · 50 Hz
Show details
Runtime contract
61-dimension input · 14 joint targets · 50 Hz
Positions, velocities, previous actions, gravity, and gyro.
Forward, lateral, and yaw velocity intent.
Neck and head orientation targets.
Six-axis torso offset command.
hip yaw · hip roll · hip pitch · knee · ankle
neck pitch · head pitch · yaw · roll
hip yaw · hip roll · hip pitch · knee · ankle
Verification
- Status
- Simulation tested
- Evidence
- Trained and verified with explicit ±1° backlash hinge physics and domain randomized friction.
- Target hardware
- MicroDuck v1 (Dynamixel XL330 with gear train backlash)
- Simulation
- mjlab (MuJoCo Warp) at 50 Hz
- Note
- Observation and action dimensions are strictly identical to standard 61-D contract.
Compatibility
- Robot model
- microduck-standard
- MJCF model
- robot_walk_backlash.xml
- Terrain
- flat
- Required accessories
- None — standard duck setup
Run it on your duck
Use the canonical model and this policy slot to try the behavior locally.
Deployment stepsShow instructions
curl -L "https://raw.githubusercontent.com/pollen-robotics/microduck_rl/develop/docs/models/backlash_walking.onnx" -o "/opt/robot/policies/backlash_walking.onnx"[policy]
walk = "/opt/robot/policies/backlash_walking.onnx"sudo systemctl restart robotd
robotctl healthuv run play Mjlab-Velocity-Flat-Backlash-MicroDuck