<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Biped Robot on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/biped-robot/</link>
        <description>Recent content in Biped Robot on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 25 Oct 2026 20:40:06 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/biped-robot/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>microduck</title>
        <link>https://producthunt.programnotes.cn/en/p/microduck/</link>
        <pubDate>Sun, 25 Oct 2026 20:40:06 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/microduck/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1710186346257-69308f1d5753?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3OTI5MzE4ODd8&amp;ixlib=rb-4.1.0" alt="Featured image of post microduck" /&gt;&lt;h1 id=&#34;pollen-roboticsmicroduck&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/pollen-robotics/microduck&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pollen-robotics/microduck&lt;/a&gt;
&lt;/h1&gt;&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://github.com/user-attachments/assets/c2f7c245-8217-46a1-8d1e-e0ba967cd969&#34; alt=&#34;microduck&#34; width=&#34;820&#34;&gt;
&lt;/p&gt;
&lt;h1 align=&#34;center&#34;&gt;Microduck&lt;/h1&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;em&gt;A tiny biped robot that moves using reinforcement learning policies.&lt;/em&gt;
&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;a href=&#34;https://pollen-robotics.com/microduck&#34;&gt;&lt;b&gt;Get yours here&lt;/b&gt;&lt;/a&gt; ·
  &lt;a href=&#34;docs/robot/cheatsheet.md&#34;&gt;Cheat sheet&lt;/a&gt; ·
  &lt;a href=&#34;https://github.com/pollen-robotics/microduck_rl&#34;&gt;Training the policies&lt;/a&gt; ·
  &lt;a href=&#34;docs/design/architecture.md&#34;&gt;How it works&lt;/a&gt; ·
  &lt;a href=&#34;CONTRIBUTING.md&#34;&gt;Contributing&lt;/a&gt;
&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;a href=&#34;https://github.com/pollen-robotics/microduck/actions/workflows/ci.yml&#34;&gt;&lt;img src=&#34;https://github.com/pollen-robotics/microduck/actions/workflows/ci.yml/badge.svg&#34; alt=&#34;CI&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;This repo is the duck&amp;rsquo;s brain.&lt;/strong&gt; About 25 cm and 800 g of robot, run by a handful of daemons on a
Rockchip RK3566: a 50 Hz control loop driving fifteen servos from neural policies, the radios and
the camera, and the update machinery that gets new software onto a robot without bricking it.&lt;/p&gt;
&lt;p&gt;Everything you need to run a Microduck is here. &lt;strong&gt;If you want one,
&lt;a class=&#34;link&#34; href=&#34;https://pollen-robotics.com/microduck&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;get yours here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The policies it runs are trained next door, in
&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/pollen-robotics/microduck_rl&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;microduck_rl&lt;/a&gt;&lt;/strong&gt; — MuJoCo and PPO, the sim2real
recipe, and the export to ONNX that this repo loads.&lt;/p&gt;
&lt;h2 id=&#34;it-does-things&#34;&gt;It does things
&lt;/h2&gt;&lt;table&gt;
&lt;tr&gt;
&lt;td width=&#34;50%&#34;&gt;
  &lt;video src=&#34;https://github.com/user-attachments/assets/356a6011-8e0d-4b28-bda9-da78646583a3&#34; controls width=&#34;100%&#34;&gt;&lt;/video&gt;
&lt;/td&gt;
&lt;td width=&#34;50%&#34;&gt;
  &lt;video src=&#34;https://github.com/user-attachments/assets/abfbf250-1b1c-42cb-8430-00267e2b148a&#34; controls width=&#34;100%&#34;&gt;&lt;/video&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;It walks.&lt;/b&gt; Pick up a gamepad and drive.&lt;/td&gt;
&lt;td&gt;&lt;b&gt;It rolls.&lt;/b&gt; Put wheels on, ask for roller mode, and it loads the other brain.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&#34;50%&#34;&gt;
  &lt;video src=&#34;https://github.com/user-attachments/assets/7e70c1da-e120-428f-ae0b-f4de62f25984&#34; controls width=&#34;100%&#34;&gt;&lt;/video&gt;
&lt;/td&gt;
&lt;td width=&#34;50%&#34;&gt;
  &lt;video src=&#34;https://github.com/user-attachments/assets/3eef63a5-6f84-47cf-90de-e717e6d7f8f0&#34; controls width=&#34;100%&#34;&gt;&lt;/video&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;It picks things up.&lt;/b&gt; Beak to the floor, one button.&lt;/td&gt;
&lt;td&gt;&lt;b&gt;It gets back up.&lt;/b&gt; Knock it over and it stands itself up.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;It also sits, kicks a ball, rolls forward on command, and quacks in a voice that is its own.&lt;/p&gt;
&lt;h2 id=&#34;where-to-find-things&#34;&gt;Where to find things
&lt;/h2&gt;&lt;h3 id=&#34;you-have-a-duck&#34;&gt;You have a duck
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/robot/cheatsheet.md&#34; &gt;Cheat sheet&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Every &lt;code&gt;robotctl&lt;/code&gt; command: drive, configure, voice, chorale, theremin, wifi, updates, logs. Start here.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/robot/cheatsheet.md#gamepad-configd&#34; &gt;Gamepad&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;The full button mapping, and pairing a pad — &lt;a class=&#34;link&#34; href=&#34;docs/robot/pair-a-gamepad.md&#34; &gt;once per pad&lt;/a&gt;, plus what to do when it will not bond.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/robot/duckctl.md&#34; &gt;&lt;code&gt;duckctl&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;The robot from a laptop over Bluetooth, with no network and no ssh.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/robot/cheatsheet.md#updates-updaterd&#34; &gt;Updates&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Install, roll back, pin. Every update is verified, health-gated and reversible.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;you-are-building-on-it&#34;&gt;You are building on it
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/pollen-robotics/microduck_rl&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;microduck_rl&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Where the policies come from: MuJoCo, PPO, domain randomisation, and the ONNX export this repo loads.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/design/architecture.md&#34; &gt;How it works&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;The whole system on one page — the daemons, the bus, how an update reaches a robot — then a page per part.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/robot/install-dev.md&#34; &gt;Set up a dev board&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;From a blank board to a robot that takes branch builds.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/robot/cheatsheet-dev.md&#34; &gt;Dev cheat sheet&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Branch builds, release candidates, driving from a laptop, and the restart traps after an update.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/robot/dev-push.md&#34; &gt;Push your branch&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Build on your machine, install over ssh, about a minute.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/robot/simulation.md&#34; &gt;The simulated duck&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;No robot on the desk? &lt;code&gt;scripts/duck-sim&lt;/code&gt; runs the real daemons against a body in MuJoCo — one duck in a window, or four as machines you log into.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;CONTRIBUTING.md&#34; &gt;CONTRIBUTING.md&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Building, testing, layout, conventions, releasing.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;docs/README.md&#34; &gt;Docs index&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Everything, including the design pages and the open problems.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;under-the-hood&#34;&gt;Under the hood
&lt;/h2&gt;&lt;p&gt;Rust, no framework, one workspace. &lt;code&gt;robotd&lt;/code&gt; owns the control loop and the motor bus; &lt;code&gt;updaterd&lt;/code&gt;
installs signed releases and rolls them back when a robot comes up unhealthy; &lt;code&gt;configd&lt;/code&gt; owns wifi
and identity; &lt;code&gt;btd&lt;/code&gt; is the Bluetooth path a phone uses; &lt;code&gt;padd&lt;/code&gt; reads the gamepad; &lt;code&gt;mediad&lt;/code&gt; streams
the camera over WebRTC; &lt;code&gt;tofd&lt;/code&gt; serves the depth sensor. They talk over one JSON-RPC contract on
Unix sockets, and every client — the app, the console, the gamepad, your script — sends exactly the
same calls.&lt;/p&gt;
&lt;p&gt;The interesting decisions are written down: &lt;a class=&#34;link&#34; href=&#34;docs/design/&#34; &gt;&lt;code&gt;docs/design/&lt;/code&gt;&lt;/a&gt; is why things are the
way they are, and &lt;a class=&#34;link&#34; href=&#34;docs/project/&#34; &gt;&lt;code&gt;docs/project/&lt;/code&gt;&lt;/a&gt; is what has gone wrong and what would close it.&lt;/p&gt;
&lt;h2 id=&#34;a-note-on-ducks&#34;&gt;A note on ducks
&lt;/h2&gt;&lt;p&gt;No duck was harmed in the making of this robot. Several were consulted.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
