全网刷屏的机器鸭,我们把它"养"上了云——还能用一块 RDK X5 遛它

一只 25 cm、800 g 的黄色小鸭,不靠遥控玩具那套,靠的是强化学习长出来的"小脑"。

:clapper_board: 实际演示(真机板端运控 + BPU 视觉 + 云端仿真实录,全程无加速):

这只鸭子最近有多火

如果最近你刷到过一只摇摇摆摆、会踢球、被推倒了还能自己爬起来的黄色小鸭子,那你已经见过 MicroDuck 了。

它是 Pollen Robotics 做的开源双足机器人:15 个舵机、一个 RK3566 主控。走路、轮滑、用嘴捡东西、前滚翻、被推倒自己爬起来——全会。GitHub 开源后一路冲到几千 star,官方还放出了一个网页版"养鸭沙盒",点开就能在线遛。

但问题来了:沙盒里的鸭子是跑在网页里的"数字鸭",没有一块真实的板子在管它。 它的一切运动都是浏览器里算好的——好看,但离"真机"差着一层。

我们干的事,就是把这只鸭子真正"养"起来:云端跑一个完整的物理仿真,而它的运动控制和"眼睛",全部跑在一块地瓜机器人的 RDK X5 开发板上。 板子负责当大脑,云负责当"镜子"给你看效果。

我们到底搭了个什么

一句话:一套"云仿真 + 板端运控 + BPU 视觉"的完整闭环。

  • 你的浏览器 ←→ 云端 5090 服务器 ←→ RDK X5 开发板
  • 浏览器看画面/发指令;云端用 MuJoCo 跑 200Hz 物理仿真并渲染成视频;X5 跑 50Hz 运控策略 + BPU 视觉检测。

拆开看是三件事:

① 云端仿真(云端的鸭子)——服务器上用 MuJoCo 跑一个 1:1 的鸭子物理模型:200 Hz 物理步进、15 个关节、IMU、地面的球,全都按真机建模,渲染成视频流推到网页上。

② 板端运控(X5 当小脑)——鸭子怎么站、怎么走、怎么踢,不是云端算的,是 RDK X5 在跑:官方导出的 ONNX 强化学习策略,板端 CPU 上做 50 Hz 闭环推理。观测(陀螺仪+重力+关节)进,电机目标出。这套代码和真机上是同一份。

③ BPU 视觉(X5 当眼睛)——鸭子"头上"有个相机,画面传给 X5,用 BPU 跑 DOSOD 目标检测认球。认到球之后,板子自己决策转向、逼近——视觉追球全自动。


我们的云端驾驶舱:左边第三人称视角,右上鸭子第一视角(带 BPU 检测框),右下全量遥测。

这只"云上板端鸭"会干什么

不是摆拍,全是闭环实测:

技能 表现
:person_walking: 走路 / 跑步 速度可调,指哪走哪,松开即稳稳站住
:counterclockwise_arrows_button: 转向 原地左右转,方向干脆
:soccer_ball: 踢球 球传到脚边,一脚闷飞出去 2.9 米,自己还不倒
:chair: 蹲下 / 起立 一个按键坐到底、再一个按键站起来
:person_cartwheeling: 前滚翻 抱头滚一圈,落地站稳
:pinching_hand: 嘴捡东西 低头把地上的东西啄起来
:anger_symbol: 推倒自恢复 你把它推倒,它 2 秒自己爬起来
:bullseye: 视觉追球 开 Chase 模式,它用 BPU 盯着球自己追过去


行走 · 迈步


踢球 · 蓄力一瞬


被推倒


自己爬起来


Chase 模式:鸭子用头部相机盯着橙球,自己调整方向追过去

为啥要"板端 + 云"这么折腾

说实话,第一版我们图省事,让云端跑物理、X5 隔着公网做运控——结果 50ms 的网络往返直接把鸭子搞摔了:动态平衡的机器,控制环里塞 50ms 延迟,等于蒙眼走钢丝。

我们也试过给策略"补课"——在 5090 上用 mjlab 重新训练了一版抗延迟策略(把执行器延迟随机化到 60–120ms 去训),能走了,但肉、反应慢。

最后一拍板:把控制环整个搬到板子上,网络延迟直接归零。 物理、策略、行为、摔倒恢复全在 X5 本地跑,干脆、稳、50 Hz 实时。云端只剩一件事:把鸭子的状态回放出来渲染成视频。

这套架构最妙的地方在于——板子上跑的这套运控代码,将来接到真机上时,只要把"读仿真传感器"换成"读电机总线+IMU"就行。 今天在云里遛的,和明天在桌上跑的,是同一颗"鸭脑"。

一些工程上的较真

做这件事踩了不少坑,挑几个有意思的:

  • 观测向量必须和训练时一模一样,差一个索引鸭子就摔——这是真机 robotd 文档里自己用红字标出来的"最高危代码"。
  • BPU 检测喂 NV12 有个坑:直接喂 bytes 会静默跑空数据,输出和输入完全无关;得喂 numpy 数组。调通的标志是:真实图片上 person 置信度 0.86。
  • 黄色鸭子别配黄色地板:第一版我们把场景做成暖黄米色,结果鸭子直接隐身。后来换冷色地板,对比度拉满。
  • 指令要"心跳重发":只在变化时发指令,公网丢一个包鸭子就装死。改成 25 Hz 心跳后,指令 15~46ms 必达。

想自己遛一只?

MicroDuck 全套开源:

  • :brain: 大脑固件(Rust,七个守护进程):github.com/pollen-robotics/microduck
  • :graduation_cap: RL 训练环境(MuJoCo + PPO):github.com/pollen-robotics/microduck_rl

我们这套"云仿真 + X5 板端运控"的玩法,本质上就是给这类小机器人搭一条从仿真到真机的快速验证通道——策略在云里养大,板子上直接遛。

鸭子已经会自己追球、自己爬起来了。下一步,让它认路、认人、认家门。

:duck: 鸭子嘛,养着养着就熟了。


项目基于开源 MicroDuck(Pollen Robotics)构建,运控与视觉运行在地瓜机器人 RDK X5 上。

1 个赞