Back to behaviors
Simulation testedlocomotionv1.0.0Apache-2.0

Backlash-Compensated Walking

Velocity-tracking walking policy trained specifically to withstand ±1° gear play (2° total) in series with every XL330 servo gearbox.

By Pollen Robotics @pollen-robotics

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
50 Hz / 4×slot: walk
Observation vector61 dimensions · normalizer baked in
Proprioception48D

Positions, velocities, previous actions, gravity, and gyro.

Twist command3D

Forward, lateral, and yaw velocity intent.

Head pose4D

Neck and head orientation targets.

Body pose6D

Six-axis torso offset command.

Action targetsscale: 1×
Left leg5 joints

hip yaw · hip roll · hip pitch · knee · ankle

Neck & head4 joints

neck pitch · head pitch · yaw · roll

Right leg5 joints

hip yaw · hip roll · hip pitch · knee · ankle

Actuator model: BacklashEncoderBamActuator (±1° backlash + BAM M6). The beak motor is separate from this fixed locomotion action space.

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.

slot: walk
Try the simulation first. Hardware testing assumes a matching Microduck, clear space, and a safe surface. uDuck does not guarantee that a community policy is safe to run.
Deployment stepsShow instructions
1 Download the ONNX model backlash_walking.onnx
curl -L "https://raw.githubusercontent.com/pollen-robotics/microduck_rl/develop/docs/models/backlash_walking.onnx" -o "/opt/robot/policies/backlash_walking.onnx"
2 Add the policy to robotd
[policy]
walk = "/opt/robot/policies/backlash_walking.onnx"
3 Restart the control loop
sudo systemctl restart robotd
robotctl health
Try it in simulation
uv run play Mjlab-Velocity-Flat-Backlash-MicroDuck

Sources