Pollen Robotics Microduck

Microduck simulator

Nobody wrote this walk. Below, the robot's own trained network is steering fifteen joints against real gravity and a real floor — in your browser, fifty times a second.

starting…

arrow keys or WASD to drive · R resets

1.0×
on screen
on screen
walking
flat
8
280 mm

A real flight — 280 mm treads, flush to the wall. Walking alone clears 2 mm; the best move we have stands on 10 mm.

Controller not connected

Defaults match the mapping the robot's own runtime uses, so a pad paired to this page behaves like a pad paired to the duck. Press set and then a button to remap.

Left stick drives. Everything below is remappable.
Servos

Take the servos off the policy and set them by hand. The duck will fall over unless you hold it up; that is what the policy was doing. Copy the pose when you have one worth keeping.

What is running

This is not an animation

MuJoCo — the physics engine the duck was trained in — is compiled to WebAssembly and steps this scene every 5 ms. Every fourth step, the robot's real alpha_walking.onnx reads 61 numbers describing what the body is doing and answers with 14 joint targets. That is the robot's own 50 Hz control loop, running on your machine.

The masses and inertia tensors are the ones measured off the real robot. So is the network, the observation layout, the action scaling and the joint travel limits — those come from DuckKit, where the forward pass is checked against onnxruntime to 1e-4.

What is ours

Where to distrust it

Pollen's published model is kinematics and mass only: it has no collision shapes and no motors. So the parts that decide exactly how this duck walks are ours, not the robot's:

The soles are boxes we drew around the model's own foot points. The joints are driven by position servos whose stiffness and damping we picked, because the real servo gains are not published. Friction is a guess.

What follows from that: it walks, and it does not fall over — but it drifts to one side, it will not walk slowly, and it covers about half the ground per second that you ask it to. Those are properties of our motors, not of the Microduck. Treat this as a faithful policy in an approximate body.

For the real thing, Pollen's own simulator uses the robot's actual collision model.

Why it needs the floor

Walking is a conversation with the ground

Three of those 61 numbers are the gyro and which way gravity points. They are how the network feels the moment a foot takes weight — its whole sense of timing. Freeze them, and there is nothing to walk against: run this same network with no physics and it does not produce a gait at all, just a twitch at 25 Hz. We found that out the hard way, which is why the physics is here.

Every intent

What each one looks like

Recorded from this simulator, each staged with the conditions it needs — a stair in front of the step-ups, a wall for the flip.

the duck walking
Walking · alpha_walking at 0.25
the duck on skates
Skating · the roller model, 3× faster
the duck kicking
Kick QE · 25 steps, then a 0.4 s lock
the duck picking something up
Pick up F · phase-driven, 4 s period
the duck sitting
Sit C · a mode: it stays down
the duck standing up
Stand up V · hands back to walking once up
the duck rolling forward
Forward roll X · Pollen's trained roulade
the duck rolling backwards
Back roll B · ours. 179°, lands upright
the duck stepping onto a step
Step up G · ours. Clears nothing on a real stair
the duck levering onto a step with its head
Lever up H · ours. Head as a pivot — clears nothing on a real stair
the duck pushing off a riser
Riser up Y · ours. Foot on the riser too — 10 mm
the duck shelving its head on a tread and walking its feet up the riser
Climb U · ours. Head on the tread, feet up the riser — clears nothing on a real stair
the duck flipping off a wall
Wall flip T · ours. Two feet on a wall — 179°, lands upright

Recorded against the simulation clock rather than the wall clock. Screenshotting blocks the animation frame that drives the physics, so capturing as fast as possible advances the duck almost not at all — an earlier set of these showed a duck standing still through moves it had actually completed.

Credit

Thanks to Pollen Robotics

Pollen Robotics built the Microduck, trained the policy, and gave permission for their model to be used here.

Theirs: the robot, alpha_walking.onnx, the MuJoCo model, the servo parameters, and all 70 meshes. Ours: the floor, the stairs, the camera.

Their simulator does more than this one.

Where next

The robot, and the code