README“ This repo is the duck's brain.”明确写出RK3566、50 Hz control loop和fifteen servos。
Microduck:在RK3566上运行强化学习双足鸭机器人
给Microduck实体鸭机器人运行强化学习大脑的Rust系统,区别是同一套守护进程也能接MuJoCo仿真。
🧭 决策指南
为什么现在热: 无法从材料判断
适合,如果你
-
你有Rockchip RK3566上的Microduck,想调试50Hz控制回路和15个舵机。
-
你在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
适合
我已经购买了 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
适合
我维护 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
视情况
我目前只有 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
适合
我需要在一个 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」:实时控制环路与更新、配置等非实时服务分离
适合
我正在 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」:实时控制环路与媒体等非实时服务分离
✨ 核心亮点
-
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调试链路的开发者