Reinforcement learning robot duck on a dual-processor Arduino board

Nov 05, 2026 Last reply: 1 day ago 3 Replies
Jump to replies (3)

The detail that surprised me most: the duck walks backward across the carpet while wearing larger rectangular pinkish pads instead of its usual small footplates, swaying its weight from side to side and tipping torso and head as it goes. It even appears in two different foot configurations.



Under the shell, the project runs on an Arduino UNO Q, a board that carries two processors at once. A Qualcomm Dragonwing QRB2210 handles Debian Linux, earmarked for policy inference, perception, logging and higher-level behavior. Alongside it, an STM32U585 runs Arduino sketches atop Zephyr and takes the time-sensitive work: sensor and actuator interfaces, command validation and watchdog logic. Training happens off-board in simulation, with the board reserved for deploying the trained policy. The planned flow sends observations up to Linux for inference, passes action targets down to the microcontroller, and from there out to the actuators.



There is a playful target too: the maker wants the duck to kick a small ball one day. A yellow accent band around the head and a neck joint linking head to torso give it plenty of character.



What stands out is the honesty about limits. The processor separation won't by itself crack sim-to-real transfer or ensure steady walking, and latency, observation timestamps, control rates and missed-command behavior all still matter. The split is an intended approach rather than a finished implementation, and whether a given policy runs fast enough on the board still needs benchmarking. The maker is also asking the community where the boundary between the policy runner and the controller should sit, and whether to send joint targets straight over or push more control logic onto the microcontroller.


Reserving the microcontroller for watchdog duties and command validation looks like a wise call to me. If fresh commands stop arriving, the hardware-facing side can still react on its own rather than freezing along with the policy. The trade-off is that the boundary between the two processors is still an open design question, and drawing it in the wrong place could split responsibilities awkwardly.

One thing I would love to know: will the actuators' own internal controllers handle the innermost motor loops, or is that option still open? It seems like that decision would shape how much control logic belongs on the STM32 side versus how much arrives from Linux as plain targets.

A concrete variation worth trying: have the Linux side emit joint position targets at roughly 10 to 50 Hz and let the microcontroller track them with a fast PD loop. That keeps the policy flexible while safety and timing stay on the microcontroller, which sounds like the most dependable first architecture for a biped like this.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required