Microduck XR
A real robot policy you can pick up with your hands
Microduck XR brings Microduck, Pollen Robotics' open-source bipedal duck robot, into your room. It is not an animation: the duck's trained reinforcement-learning policies run in the browser against a MuJoCo physics model of the robot, 50 times a second, exactly as they would drive the real hardware.
The experience is built on my VibeXR interaction framework, so hands, controllers and a mouse all share one interaction model: point, pinch, poke, grab. The question it explores is what it feels like to direct and handle an embodied AI agent in shared space, rather than watch it on a screen.
Play
- Grab the duck and lift it: it keeps fighting for balance in your hand, and when dropped the stand-up policy gets it back on its feet. Hold it with two hands to carry and turn it.
- Point and pinch the floor to send it walking, or drag the goal flag; Follow me and Look at me make it track you.
- Throw the ball, then Kick: the duck walks up, lines up and kicks. The kicks are blind one-shot policies, so the approach is planned around where they connect.
- Rollers swaps in the roller-skate Microduck and its own skating policy: push to glide across the room at up to ~0.9 m/s, steer as it rolls, and Crouch for a low glide.
- Roll, Peck, Sit and the rest sit on a panel beside the stage and in the hand menu (palm up), whose Settings page holds the framework's own options. The colour plate switches between the four official colourways: Cream, Graphite, Lavender and Sky.
- Move the whole stage by its bar, which turns the stage to face you; resize it with two hands, set it on a tabletop, or remove the boundary to let the duck roam your real floor.
- Every motion is voiced by synthesized robot sounds: servo whine, footsteps, a "wheee" on the roll and an "uh-oh" when it falls.
How it works
- Physics: MuJoCo compiled to WebAssembly steps the same MJCF the policies were trained on (5 ms timestep).
- Control: nine ONNX policies (walk, stand-up, sit-stand, roll, two kicks, ground peck, plus skating and crouch-glide for the roller variant) run in ONNX Runtime Web at 50 Hz on a 61-value observation: IMU, joint state, last action and a 13-value command.
- Making it controllable: the walking policy only starts from a still stance with the training-time sensor noise, and has distinct start and stop speeds, so every controller (goal, follow, joystick, kick approach) is shaped around those measured thresholds.
- Interaction: picking the duck up applies a MuJoCo-viewer-style spring to its body, so the robot reacts physically instead of being teleported.
- Rendering and XR: three.js and WebXR, single HTML file, passthrough by default.
Robot, model and trained policies: pollen-robotics/microduck and microduck_rl (Apache-2.0), loaded from the Microduck simulator on Hugging Face.