Back to behaviors
Hardware verifiedroller skatev1.0.0Apache-2.0

Roller Blade Crouch Glide

Aerodynamic tuck crouch maneuver while coasting on roller skates, lowering center of gravity for high-speed stability.

By Pollen Robotics @pollen-robotics

About this behavior

A 3.5-second one-shot gesture on rollers. Driven by phase encoding [cos(2pi*t), sin(2pi*t), 0] in the command slots (matching ground-pick architecture). The duck folds its legs, lowers its center of mass near the wheel axles, and smoothly returns to an upright skating tuck.

Runtime contract

61-dimension input · 14 joint targets · 50 Hz

Show details
50 Hz / 4×slot: rollers
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: Dynamixel XL330 (BAM M6 voltage control law). The beak motor is separate from this fixed locomotion action space.

Verification

Status
Hardware verified
Evidence
Verified on physical MicroDuck on roller wheels performing controlled crouch-glide cycles.
Target hardware
MicroDuck v1 + Roller Skate Blades
Simulation
mjlab (MuJoCo Warp) at 50 Hz
Note
Cycle duration: 3.5 seconds (period 5.0s, end phase 0.7).

Compatibility

Robot model
microduck-rollers
MJCF model
robot_allcollisions_rollers.xml
Terrain
flat
Required accessories
roller skates

Run it on your duck

Use the canonical model and this policy slot to try the behavior locally.

slot: rollers
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 BEST_roller_crouch.onnx
curl -L "https://huggingface.co/spaces/pollen-robotics/microduck-simulator/resolve/main/app/public/policies/BEST_roller_crouch.onnx" -o "/opt/robot/policies/BEST_roller_crouch.onnx"
2 Add the policy to robotd
[policy]
roller_crouch = "/opt/robot/policies/BEST_roller_crouch.onnx"
3 Restart the control loop
sudo systemctl restart robotd
robotctl health
Try it in simulation
uv run scripts/infer_policy.py --walking BEST_roller.onnx --new-cmd-obs

Sources