Pollen Robotics Microduck

Microduck simulator

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

starting…

arrow keys or WASD to drive · R resets · scroll to zoom

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.

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