Microduck:在RK3566上运行强化学习双足鸭机器人
给Microduck实体鸭机器人运行强化学习大脑的Rust系统,区别是同一套守护进程也能接MuJoCo仿真。
GitHub pollen-robotics/microduck 更新 2026-10-25 分支 main 星标 11.0K 分叉 1.4K
Rust 强化学习机器人 MuJoCo与PPO Rockchip RK3566 ONNX WebRTC

🧭 决策指南

适合,如果你

  • 你有Rockchip RK3566上的Microduck,想调试50Hz控制回路和15个舵机。
    README“ This repo is the duck's brain.”明确写出RK3566、50 Hz control loop和fifteen servos。
  • 你在MuJoCo与PPO中训练策略,并需要加载microduck_rl导出的ONNX。
    README正文说明策略在microduck_rl中用MuJoCo和PPO训练,并导出ONNX供本仓库加载。
  • 你希望用scripts/duck-sim在没有实体鸭子的情况下运行真实守护进程。
    README“ The simulated duck”章节说明scripts/duck-sim可让真实daemons连接MuJoCo中的鸭子。

不适合,如果你

  • 你只需要训练MuJoCo或PPO策略,不需要Microduck运行时和守护进程。
    README明确把MuJoCo、PPO、sim2real和ONNX export放在外部microduck_rl仓库。
  • 你的目标平台不是Rockchip RK3566,也不准备使用实体机器人或MuJoCo仿真。
    README将机器人硬件写为Rockchip RK3566,并仅说明实体鸭子或scripts/duck-sim仿真路径。
  • 你需要基于现成功能列表快速选型,但项目README未提供列表形式的功能点。
    提供材料明确注明README中未见列表形式的功能点。

前置条件

  • 需要Microduck实体机器人;README描述其为约25厘米、800克,并运行在Rockchip RK3566上。
  • 需要机器人运行Rust守护进程,包括robotd、updaterd、configd、btd、padd、mediad和tofd。
  • 策略运行链路依赖microduck_rl提供的MuJoCo、PPO与ONNX export。
  • 无实体机器人时可使用README中的scripts/duck-sim运行MuJoCo仿真。

第一步命令(README 原文)

scripts/duck-sim

要注意

  • 更新链路由updaterd执行签名校验、健康门控和回滚,分支构建后还要留意restart traps。
    README的“Updates”与“Dev cheat sheet”分别写出verified、health-gated、reversible和restart traps。
  • 所有客户端通过Unix sockets上的同一JSON-RPC contract通信,组件边界不能按独立API假设。
    README“Under the hood”说明app、console、gamepad和script发送完全相同的调用。
  • 笔记本控制路径是Bluetooth上的duckctl,不是网络或ssh连接。
    README的duckctl条目明确写出“over Bluetooth, with no network and no ssh”。

替代方案

  • microduck_rl:只关注MuJoCo、PPO、domain randomisation和策略导出ONNX时,直接查看该仓库更合适。
    README“ You are building on it”与正文中的microduck_rl说明。

材料未说明

  • README材料没有说明Rockchip RK3566所需的操作系统版本、镜像获取方式和完整安装命令。
  • README材料没有列出Microduck的硬件BOM、舵机型号、相机型号或深度传感器型号。
  • README材料没有说明ONNX运行时、Rust版本或编译工具链版本。
  • README材料没有给出50Hz控制回路的延迟、资源占用或可支持的并发仿真规模。
  • README材料没有说明支持哪些具体Bluetooth游戏手柄型号及操作系统。
  • README材料没有说明5个版本与最新daemon 0.17.8-dev.1433.e603c93之间的发布稳定性关系。

💡 深度解析

6
视情况 我想把这个 Rust workspace 移植到另一台机器人上;我的平台不是 Rockchip RK3566,舵机数量也不是 15 个,传感器配置不同,但我希望保留 ONNX 策略、JSON-RPC 和更新系统,这个项目是否适合作为直接基础?
适合读者: 希望把 Microduck 改造成其他机器人平台的 Rust 开发者,当前目标硬件不是 README 中的 Rockchip RK3566,且舵机数量和传感器配置不同

视情况:它可以提供架构参考和部分软件边界,但不适合作为另一种机器人“直接可运行”的通用平台。

  • README 的运行目标明确是约 25 厘米、800 克的 Microduck,硬件基础是 Rockchip RK3566。
  • robotd 直接拥有电机总线,并以 50 Hz 驱动 15 个舵机;这意味着执行器数量和总线抽象与目标硬件紧密相关。
  • mediad、tofd、configd 等服务分别绑定摄像头、深度传感器、Wi-Fi 和设备身份,传感器不同会涉及服务和接口适配。
  • 统一 JSON-RPC、Rust workspace、签名更新和 MuJoCo 守护进程模拟具有可复用价值,但 README 没有承诺多硬件支持,也没有描述移植层。

如果你愿意重写硬件服务、策略输入输出和部署配置,它可作为参考;若要求换板后保留全部功能而无需适配,则不适合。

  • README 开头:"About 25 cm and 800 g of robot",运行在 "Rockchip RK3566"
  • README「Under the hood」:`robotd` owns the control loop and motor bus
  • README 开头:"a 50 Hz control loop driving fifteen servos"
  • README「Under the hood」:`configd`、`mediad`、`tofd` 分别负责身份/Wi-Fi、摄像头和深度传感器
  • 项目洞察「usage_limitations」:核心运行时明显面向 Microduck 和 Rockchip RK3566
材料未说明:README 未说明是否存在独立的硬件抽象层或可替换的电机总线接口。;README 未说明移植到不同舵机数量和传感器时需要修改哪些 crate 或配置。;README 未说明 ONNX 策略是否支持不同观测维度、动作维度和执行器范围。
适合 我已经购买了 Microduck,希望在没有网络和 SSH 的情况下用游戏手柄驾驶它,还想使用捡取、起身和滚动模式;这个项目是否适合直接作为机器人的运行软件?
适合读者: 购买了约 25 厘米、800 克 Microduck、希望通过游戏手柄和 Bluetooth 在没有网络或 SSH 的情况下控制机器人的机器人爱好者

适合,因为 README 明确把仓库定义为 Microduck 的完整运行时,而不是单独的控制算法。

  • 机器人运行在 Rockchip RK3566 上,robotd 以 50 Hz 控制 15 个舵机,并加载神经网络策略。
  • README 列出了游戏手柄驾驶、捡取物体、自动起身、坐下、踢球和滚动模式。
  • duckctl 支持通过 Bluetooth 从笔记本控制机器人,明确写明无需网络和 SSH。
  • Cheat sheet 覆盖驱动、配置、语音、Wi-Fi、更新和日志;手柄需要按文档完成一次配对。

因此,已有 Microduck 硬件的用户可以把它当作设备软件栈使用,而不是重新拼装控制器。机器人状态、电池、舵机和策略在异常地面或跌倒后的行为,README 没有给出详细保证。

  • README 原句:"This repo is the duck's brain."
  • README 原句:"a 50 Hz control loop driving fifteen servos from neural policies"
  • README「Where to find things」:`duckctl`,"over Bluetooth, with no network and no ssh"
  • README「It does things」:walks、rolls、picks things up、gets back up
材料未说明:README 未说明支持哪些具体游戏手柄型号。;README 未说明机器人在低电量、舵机故障或复杂地面上的安全行为。;README 未给出各行为的电池续航和动作成功率。
适合 我维护 Rust 嵌入式软件,目标设备固定为 Rockchip RK3566;我需要在不把机器人变砖的前提下安装分支构建,并能在更新失败时回滚,这个项目是否符合要求?
适合读者: 使用 Rust 维护嵌入式设备软件、目标硬件是 Rockchip RK3566、需要让机器人接受分支构建并远程更新的工程师

适合,因为项目把 RK3566 上的分支部署与可恢复更新直接纳入运行时设计,而不是只提供 SSH 覆盖文件的脚本。

  • README 说明整个系统是 Rust、无大型框架的单一 workspace,适合查看和修改多个守护进程。
  • Set up a dev board 文档覆盖从空白开发板到接受 branch builds;Push your branch 说明可在本机编译后通过 SSH 安装。
  • updaterd 安装签名发布,并在机器人启动不健康时回滚;更新文档明确支持 install、roll back、pin。
  • README 还提醒更新后可能遇到服务重启陷阱,说明分支部署不仅是复制二进制,还涉及服务生命周期。

因此,它适合目标硬件和交付约束都与 README 一致的开发者。若设备不是 Microduck 的 RK3566、舵机总线或服务布局,仓库没有给出直接迁移保证。

  • README「Under the hood」:"Rust, no framework, one workspace"
  • README「Set up a dev board」:"From a blank board to a robot that takes branch builds"
  • README「Push your branch」:"Build on your machine, install over ssh"
  • README「Updates」:"Install, roll back, pin. Every update is verified, health-gated and reversible."
  • README「Under the hood」:`updaterd` installs signed releases and rolls them back
材料未说明:README 未给出开发板的具体刷写命令、系统镜像和工具链版本。;README 未说明签名密钥的生成、分发和轮换流程。;README 未列出更新失败时哪些服务和硬件状态会被健康检查覆盖。
视情况 我目前只有 MuJoCo 环境,没有实体 Microduck,但训练流程使用 PPO、域随机化并导出 ONNX;我能否用这个仓库复用真实机器人守护进程来测试策略部署?
适合读者: 正在研究 MuJoCo、PPO 和 sim2real 的强化学习研究人员,没有实体 Microduck,希望先运行真实守护进程和模拟机身

视情况:它适合验证运行时集成,但不能据此证明策略在真实 Microduck 上一定稳定。

  • README 把策略训练放在独立的 microduck_rl 项目,明确使用 MuJoCo、PPO、域随机化,并导出本仓库加载的 ONNX。
  • scripts/duck-sim 会让真实守护进程连接 MuJoCo 中的模拟机身,因此没有实体机器人时仍可运行较多系统逻辑。
  • 本仓库的 robotd 负责 50 Hz 控制循环、15 个舵机和策略加载,适合检查运行时接口与行为调用。
  • 但模拟机身不能自动覆盖真实舵机延迟、摩擦、负载、电池电压和机械误差;README 也没有宣称模拟等价于实机。

如果目标是验证 ONNX 接入、守护进程通信或控制流程,匹配度较高;如果目标是确认 sim2real 成功,仍缺少实体硬件验证。

  • README「The policies it runs are trained next door」:MuJoCo、PPO、sim2real、ONNX export
  • README「The simulated duck」:`scripts/duck-sim` runs the real daemons against a body in MuJoCo
  • README「Under the hood」:`robotd` owns the control loop and motor bus
  • 项目洞察「usage_limitations」:模拟器无法完全复现舵机延迟、机械磨损、电源波动和无线环境
scripts/duck-sim
材料未说明:README 未说明模拟器支持哪些传感器噪声、执行器延迟或故障注入。;README 未给出 ONNX 输入输出张量、归一化参数和动作范围的具体契约。;README 未说明模拟器与真实 RK3566 上推理性能的差异。
适合 我需要在一个 Rust workspace 中维护控制、更新、Wi-Fi、Bluetooth、手柄、摄像头和深度传感器服务,并让脚本、控制台和应用调用同一套 API;这个架构是否适合?
适合读者: 需要同时维护 robotd、updaterd、configd、btd、padd、mediad 和 tofd 的 Rust 系统工程师,希望让脚本、控制台和应用共用同一套接口

适合,因为 README 明确采用按职责拆分的守护进程,并为所有客户端规定统一的 JSON-RPC 合同。

  • robotd 负责控制循环和电机总线,updaterd 负责签名更新,configd 负责 Wi-Fi 与身份,其他服务分别处理 Bluetooth、手柄、摄像头和深度传感器。
  • 各守护进程通过 Unix socket 通信,避免把设备内部服务全部暴露为网络接口。
  • README 明确写出 app、console、gamepad 和 script 都发送完全相同的调用,因此脚本自动化与交互客户端可以共享边界。
  • 实时控制与更新、媒体、配置等服务分开,有利于避免后台任务直接占用控制循环;但修改接口仍可能影响多个客户端。

这对需要清晰服务边界的 Rust 设备软件很合适,但不应把它理解为通用机器人框架;硬件和服务命名仍围绕 Microduck。

  • README「Under the hood」:列出 `robotd`、`updaterd`、`configd`、`btd`、`padd`、`mediad`、`tofd` 的职责
  • README「Under the hood」:"They talk over one JSON-RPC contract on Unix sockets"
  • README「Under the hood」:"every client — the app, the console, the gamepad, your script — sends exactly the same calls"
  • 项目洞察「architectural_strengths」:实时控制环路与更新、配置等非实时服务分离
材料未说明:README 未给出完整 JSON-RPC 方法、参数和兼容性版本策略。;README 未说明 Unix socket 的权限模型和跨进程认证方式。;README 未说明多个客户端同时发起运动控制请求时的仲裁规则。
适合 我正在 Microduck 上开发摄像头和深度传感器功能,希望通过 WebRTC 获取视频、通过独立服务读取深度数据,同时不直接改动 50 Hz 的运动控制循环;这个项目是否适合?
适合读者: 为 25 厘米、800 克双足机器人开发摄像头和深度感知功能的工程师,需要通过 WebRTC 和 tofd 接入传感器数据

适合,因为项目已经把媒体、深度传感器和运动控制拆成不同守护进程,符合你要隔离感知与实时控制的约束。

  • robotd 独占控制循环和电机总线,负责 50 Hz、15 个舵机的运动控制。
  • mediad 通过 WebRTC 流式传输摄像头,tofd 专门提供深度传感器服务。
  • 所有守护进程通过 Unix socket 上的统一 JSON-RPC 合同通信,因此上层应用、控制台或脚本不必为每个设备维护完全不同的调用协议。
  • 项目洞察指出实时控制与媒体、更新等非实时任务分离,有助于避免后台操作直接阻塞运动控制。

因此,功能边界与架构是匹配的。不过 README 没有说明视频分辨率、帧率、深度数据格式、带宽需求或传感器故障时的控制行为,不能仅凭文档判断具体性能。

  • README「Under the hood」:`mediad` streams the camera over WebRTC;`tofd` serves the depth sensor
  • README「Under the hood」:`robotd` owns the control loop and motor bus
  • README「Under the hood」:所有服务通过 Unix sockets 上的 JSON-RPC 合同通信
  • 项目洞察「architectural_strengths」:实时控制环路与媒体等非实时服务分离
材料未说明:README 未说明摄像头支持的分辨率、帧率和编码格式。;README 未说明 WebRTC 的网络拓扑、延迟和带宽要求。;README 未说明深度传感器数据格式、采样率及传感器失效时 robotd 的降级策略。

✨ 核心亮点

  • RK3566以50Hz控制回路驱动15个舵机
  • Rust工作区拆分robotd、updaterd等守护进程
  • MuJoCo与PPO策略导出ONNX后由本仓库加载
  • updaterd支持签名更新、健康门控与回滚

🔧 工程化

  • robotd驱动行走、起身、踢球与15个舵机控制
  • roller模式装轮后加载另一套强化学习大脑
  • duckctl可让笔记本经Bluetooth控制机器人
  • scripts/duck-sim让真实守护进程连接MuJoCo鸭子

⚠️ 风险

  • 核心运行对象是约25厘米、800克的实体机器人
  • 策略训练在外部microduck_rl仓库而非本仓库完成
  • Dev cheat sheet明确提到更新后的restart traps

👥 适合谁?

  • 拥有Rockchip RK3566鸭机器人并使用Rust开发者
  • 研究MuJoCo、PPO与sim2real策略的机器人团队
  • 需要Bluetooth、WebRTC和Unix socket调试链路的开发者