Polite bow
The Microduck bows from a two-foot stand, holds for half a second and comes back up. It stands still before the robot takes over again, so the stand network gets a calm duck.
Tested in simulation only. It has not run on a real duck yet. Try it on the floor, with room around it, and keep a hand near the duck.
Install
robotctl policy load ground_pick GinDuck/microduck-polite-bow
This is a phase-driven move, so it takes the ground pick slot and replaces the ground pick until you reset it. For walking mode only. To start it:
robotctl robot do ground_pick
To put the original ground pick back:
sudo robotctl policy reset ground_pick
Timing
The robot runs a ground-pick slot on the official set's timing: a 4.0 s period, handed back at phase 0.7, so after 2.8 s. This bow is built for that:
| Time | What happens |
|---|---|
| 0.15 to 0.95 s | Down |
| 0.95 to 1.45 s | Held |
| 1.45 to 2.35 s | Back up |
| from about 2.64 s | Still, legs pulled back to the stand |
| 2.8 s | Handed back to the stand network |
The timing was read from the source of pollen-robotics/microduck at b2b0d21 (2026-10-30). Another robot software version may behave differently.
How it was checked
Each duck bowed for 2.8 s, was handed to the official alpha_stand.onnx and was watched until 8 s, with the training's randomised physics.
| Ducks | Falls | Largest tilt after the hand-back | Foot slip after the hand-back (95 % of ducks up to) | |
|---|---|---|---|---|
| No pushes | 256 | 0 | 7.4° | 1.7 mm |
| With pushes | 96 | 2 | 9.1° (ducks that stayed up) | 35.0 mm |
With pushes the two falls came 1.2 s and 2.4 s after the hand-back. For comparison, the stand network alone fell once in 96 ducks in a similar test, so these numbers are too small to separate the two.
| Pose while held | Target | Measured |
|---|---|---|
| Trunk | 10.3° | 10.3° |
| Neck | -17.2° | -14.8° |
| Chin | 22.9° | 22.8° |
Training
Checkpoint 1750 of run bow-2, 3000 iterations with 4096 ducks, on the expressive-motions branch of pollen-robotics/microduck_rl with this motion added:
BOW_R2 = Motion("Bow", 4.0, (
Comp("pitch", 0.18, (0.15, 0.95, 1.45, 2.35)),
Comp("dz", -0.006, (0.15, 0.95, 1.45, 2.35)),
Comp("neck_pitch", -0.30, (0.20, 0.95, 1.45, 2.25)),
Comp("head_pitch", 0.40, (0.20, 0.95, 1.45, 2.25)),
), settle_from=0.62)
Licences
The network is released under Apache 2.0, like the training code. The preview video shows Pollen Robotics' 3D model of the Microduck, which is licensed under CC BY-NC-SA 4.0; the video is an adaptation under the same licence.
Trained by GinDuck with iMundo. Not an official Pollen Robotics policy.