Read "C:\Users\xubo.zhang\DoubaoWork\chats\2026-08-31\new-chat-1\Microduck_一比一复刻手册.html": 1 2 3
4 5 625 cm 双足开源机器人:硬件组成盘点 + 电气架构与内部通讯 + 软件算法与技术栈。「已确认」信息出自官方/开源仓库,「推断/待定」已单独标注。
99| 步骤 | 内容 | 关键动作 |
|---|---|---|
| 第1步 先软后硬 | 在仿真里把"会走路"跑通 | git clone microduck_rl → uv sync(需 CUDA 或 --hf-jobs)→ uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096 → 导出 ONNX → MuJoCo 验证 |
| 第2步 机载移植 | 把 runtime 跑到任意 RK3566 板 | Radxa Zero 3W 烧 Armbian → 修 overlay(/dev/ttyS2)→ 装 ONNX Runtime / librknnrt / GStreamer 插件 → provision(Wi-Fi/身份/键)→ 手柄接入 |
| 第3步 硬件逆向组装 | 按 BOM 采购 + 自研桥接板 | 15×XL330(按 id 段接线)→ imu_to_dxl 桥接板(IMU 上总线 id=200)→ ToF/音频 HAT(I²C)→ 相机(MIPI)→ NP-F550 → 壳体组装 → 总线校验 |
复刻成本快照:软件零成本(开源);硬件 DIY 单套件估算 $560~620(其中 15 舵机约 $360~420 占大头);官方整机 $399(量产摊薄)。预算敏感可先买整机做软件开发,再逐步逆向硬件。
"感知—决策—执行"三件套齐备:主控 RK3566(0.8TOPS NPU)+ 15× Dynamixel XL330 总线舵机 + 广角摄像头 / 8×8 ToF / 双 IMU / 麦克风 + 双 NFC 天线与 Wi-Fi/蓝牙。整机 $399;DIY 单件约 $560~620。
148 149基于 Pollen Robotics 官方宣传图(第一只浅蓝/橙色原型机放大),用彩色箭头直接指向每个硬件模块的实际位置,左右引线标注型号与总线 id。
199Microduck 官方模块化爆炸图,26 个部件逐层展开并编号标注,含规格参数、动作展示、尺寸图、颜色版本与内部结构。
209价格 2026-08 市场零售参考;量产整机 $399 依赖批量采购与定制。
216| 模块 | 型号 / 规格 | 数量 | 单价参考 | 小计参考 | 依据 |
|---|---|---|---|---|---|
| 主控 SoC | RK3566:4×Cortex-A55 @1.8GHz · Mali-G52 · 0.8TOPS NPU · 1GB RAM · 32GB eMMC | 1 | — | — | 已确认 |
| 开发板 | Radxa Zero 3W(RK3566 SBC,板载 Wi-Fi6+BLE5.x,1GB/2GB/4GB 档) | 1 | $18~45 | $30 | 已确认板型号推断 |
| 伺服电机 | Dynamixel XL330 系列(M288-T:5V/0.52Nm/TTL) | 15 | $23.9~27.5 | $360~420 | 已确认训练模型即 XL330 |
| 深度传感器 | ST VL53L5/8CX 8×8 ToF(~400cm,I²C) | 1 | $9~25 | $15 | 已确认 |
| IMU | BMI270(6轴,片上 SFLP 四元数)或同级 | 2 | $2~4 | $6 | 推断 |
| 摄像头 | 广角前置(MIPI-CSI)+ REC 灯;分辨率/FOV 未定稿 | 1 | $10~20 | $15 | 已确认型号推断 |
| 电池 | NP-F550 2600mAh / 7.4V(8.2V 满 / 6.6V 关机) | 1 | $10~25 | $18 | 已确认 |
| NFC | 13.56MHz 读卡(PN532 类)+ 头/嘴 2 天线 | 1+2 | $3~15 | $10 | 双天线型号推断 |
| 音频 | 麦克风 + 扬声器 + 音频 Codec(I²C,与 ToF 共享总线) | 1套 | $8~15 | $10 | 已确认 |
| 桥接板/HAT | imu_to_dxl v2(IMU 上总线 id=200)+ ToF/音频 HAT | 1+1 | $10~20 | $15 | 已确认自研 |
| 结构件/外壳 | 3D 打印壳体(4 色)+ 五金 | 1套 | $30~50 | $40 | 推断无官方 CAD |
| PCB/线束 | 定制电源/传感器 PCB、Dynamixel 总线线束 | 1套 | $20~35 | $25 | 推断 |
| 手柄 | 蓝牙/USB 手柄(开箱可遥控行走) | 1 | $10~20 | $15 | 随整机附赠 |
| DIY 单套件合计(估算) | ≈ $560~620 | 整机 $399(量产价) | |||
| RL 索引 | 部位 | 关节名称 | 总线 ID 段 | 说明 |
|---|---|---|---|---|
| 0–4 | 左腿(5) | hip_yaw · hip_roll · hip_pitch · knee · ankle | 20–24 | 5 个 XL330 |
| 5–8 | 颈/头(4) | neck_pitch · head_pitch · head_yaw · head_roll | 30–33 | 与嘴部同段 |
| 9–13 | 右腿(5) | hip_yaw · hip_roll · hip_pitch · knee · ankle | 10–14 | 5 个 XL330 |
| —(第15个) | 嘴/夹爪(1) | mouth(1-DOF 开合夹爪) | 34 | 不参与 RL(动作维度=14) |
RL 输出 actions[1,14] 映射回 15 个电机槽(嘴部置 0);观测 obs[1,61](48 本体感受 + 13 指令)。
一条 Dynamixel 总线承载 15 舵机 + 1 IMU 桥接板;I²C 承载 ToF 与音频 Codec;MIPI-CSI 进摄像头并由 VPU 硬编;进程间 JSON-RPC over Unix Socket;对外 BLE / WebRTC / WebSocket 三入口。设计原则:控制环绝不等待任何客户端。
254 255· 拓扑:15 舵机 + imu_to_dxl v2 板(IMU#1,id=200)共享 /dev/ttyS2 @1Mbps、Dynamixel 协议 v2 半双工单线;无第二总线。
· 每 tick 两次事务(50Hz):sync_read 寄存器 124–136(PWM/电流/速度/位置)+ IMU;sync_write 目标位置;每秒一次 144–146(电压 + 每关节温度)。IMU 与舵机同事务读取(共用一个寄存器块)。
· 舵机启动配置:return_delay_time=0(默认 250 时 16 设备每 tick 多 ~8ms)、baud_rate=3、pwm_slope=255、shutdown=52;位置 P 增益写入、I/D 置 0。
· 电池电压:由舵机供电电压折算(无电量计);满电 ~8.2V、关机 6.6V(10s EMA 平滑);空电自动坐下并关机。
325| 外设 | 接口 | 频率/特性 | 进程 |
|---|---|---|---|
| ToF(VL53L5/8CX 8×8) | I²C(HAT,与音频共享) | 15Hz 深度矩阵;上电传 ~90KB 固件 | tofd |
| IMU#1(躯干) | Dynamixel 总线(id=200) | 随 50Hz 控制环;SFLP 片上四元数 | robotd |
| IMU#2(头部) | 未公开 | 头部/视觉姿态参考 | — |
| 摄像头 | MIPI-CSI | VPU H.264 硬编(mpph264enc→webrtcsink)+ rkaiq 3A;帧流不跨 socket | mediad |
| 音频 | I²C(Codec) + I²S | pet-detect 40 频带 log-mel 声音 CNN;每机独立音色 | mediad / robotd |
| NFC(双天线) | 13.56MHz | NFC 标签触发行为(多鸭合唱/足球等) | mediad / robotd |
· 协议:JSON-RPC 2.0 + NDJSON + Unix Socket(每服务一个 /run/<svc>.sock,0660 + SO_PEERCRED 鉴权);tokio 异步 + 全程超时;订阅=连接上的通知流。
· 为什么不用 HTTP/WS/D-Bus/gRPC:Unix socket 自带文件系统权限、杜绝误绑 0.0.0.0;serde JSON 类型可跨 BLE/WebRTC 复用。
344· 数据面:"特征而非帧"——robotd 只消费 mediad 算好的特征;视频/音频帧只在 WebRTC 内(DTLS-SRTP 加密)。
345| 入口 | 通道 | 承载 | 说明 |
|---|---|---|---|
| BLE | GATT(btd) | 配网/状态/OTA 的 API 子集 | 物理在场+配对;不承载视频 |
| WebRTC | mediad 的 PeerConnection | 音视频轨 + control(可靠) / teleop(不可靠) 双 DataChannel | 遥操作/远程;<200ms 端到端目标 |
| WebSocket | mediad(agent 通道) | get_frame(JPEG) + 意图 JSON-RPC | LLM/Agent 接入,几十行即可 |
| 手柄 | USB/BLE HID(padd/gilrs) | vx/vy/vyaw、头姿态、技能触发 | 非特权客户端,只发意图 |
安全机制:意图 Deadman(指令停流→速度归零→原地站立);safety 层独占 RobotIo 写句柄(借用检查器强制);非有限值拒绝 + 行程钳位;跌倒检测(投影重力,200ms 去抖)只报告不拦截,恢复由专属策略序列接管;更新时移动中 safeToRestart=false 防摔。
软件栈完全开源(Apache-2.0):microduck(机载 Rust 运行时)+ microduck_rl(训练流水线)。所有出厂行为都是 MuJoCo 仿真中 PPO 训练、域随机化 sim-to-real、导出 ONNX 部署的神经策略,50Hz 实时推理。
| 进程 | 职责 | 关键点 |
|---|---|---|
robotd | 50Hz 控制环 + 总线 + 策略推理 + 安全层 + 健康上报 | 唯一能触达电机总线的进程 |
mediad | 摄像头/麦克风、H.264 编码、WebRTC 网关、远程前端 | 感知崩溃不拖垮运动控制 |
tofd | 8×8 ToF 深度矩阵(15Hz) | 只发布不读取 |
padd | 手柄→意图 | 非特权客户端 |
btd | BLE GATT 传输适配 | 不持有任何状态 |
configd | Wi-Fi/身份/PIN/手柄配对 | robotd 挂了也要能用(恢复路径) |
updaterd | OTA:验签→原子切换→健康门→回滚 | minisign + zstd+tar + 引导计数 |
可靠性:configd/updaterd/btd 与 robotd 无 systemd 依赖;发布目录整体原子切换(releases/<ver>/→current);更新后健康门,不健康自动回滚;控制环 tick 用 MissedTickBehavior::Skip 保持周期稳定。
| 项 | 值 / 说明 |
|---|---|
| 控制频率 | 50Hz(实测 50.0Hz / 15022 tick 丢 3) |
| 观测空间 | obs[1,61]:gyro(3)+projected_gravity(3)+joint_pos(14)+joint_vel(14)+last_action(14)+command(13) |
| 指令块(13) | twist vx,vy,vyaw(3) + 头 neck/head pitch,yaw,roll(4) + body x,y,z,roll,pitch,yaw(6) |
| 动作空间 | actions[1,14] → 映射 15 电机槽(嘴部排除) |
| 策略切换 | 共享 61 维观测契约 → 13 个任务策略运行中热切换 |
| 推理引擎 | ONNX Runtime(ort dlopen);加载时校验维度;启动预热 |
| 输出处理 | home pose + action_scale×action → 头/腿一阶低通 → safety 钳位 → sync_write |
| 安全 | 非有限值拒绝、行程钳位、意图 deadman、跌倒去抖 200ms、limp_fall 序列接管恢复 |
| 里程计 | 足底接触式前向运动学 + IMU yaw 积分;无磁力计(相对里程) |
--hf-jobs 免 GPU 训练)· 执行器模型:Rhoban BAM M6(XL330 电压控制律 + 反电动势 + Coulomb/Stribeck/负载摩擦),非理想 PD——保真度是 sim2real 差距主源。
418· 域随机化:电池电压、负载压降、指令延迟、摩擦;±1° 齿轮回差变体(14 关节各串 passive 回差铰,观测透过回差读)。
419· 命令:uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096 → uv run scripts/export.py → 部署。
· 出厂 7 行为 + 共 13 任务(速度跟踪/站立/坐起/地面捡拾/踢 70mm·15g 球/前滚翻/5 种轮滑),全部公开、可再训练、可热切换。
421| 算法 | 实现 | 算力位置 |
|---|---|---|
| 鸭/物体检测 | YOLO11n @320×320,INT8 .rknn(3.9MB),mAP50 0.976 | RK3566 NPU(0.8TOPS,RKNN dlopen);p50 25.7ms / p95 58.4ms |
| 声音事件检测 | ~20KB CNN 于 40 频带 log-mel(板载麦克风) | CPU 独立 worker(pet-detect) |
| 音频身份/语音 | 每机唯一音色(synthesis);合唱由 id 最低鸭指挥 | robotd sound.rs / aplay |
| 里程计 | 足底接触 FK + IMU yaw 积分 | robotd 每 tick |
| ToF 特雷门琴 | 深度→音符/嘴部张合(15Hz) | robotd theremin.rs |
| 层级 | 技术 / 库 |
|---|---|
| OS / 板级 | Armbian Linux(RK3566,overlay 修正)→ NetworkManager;systemd;ONNX Runtime / librknnrt / GStreamer 插件(mpph264enc、webrtcsink、rkaiq) |
| 机载语言 | Rust(无框架,单 workspace;serde + tokio + tracing + gilrs + bluer + rustypot + ort) |
| IPC | JSON-RPC 2.0 / NDJSON / Unix Socket;tokio_util LinesCodec;共享契约 duck-ipc-proto |
| 运动学/里程计 | kinematics(MJCF 前向运动学)、odometry crate |
| 训练框架 | Python:mjlab(MuJoCo Warp + rsl_rl)· PPO · BAM · 域随机化 · onshape-to-robot · HF Jobs/Space |
| 媒体 | libcamera + rkaiq 3A · GStreamer webrtcbin · VPU MPP H.264 · WebRTC(aiortc 可选) |
| 无线 | BlueZ(bluer)BLE GATT · Wi-Fi6 · NFC 13.56MHz |
| OTA/安全 | minisign 验签 · zstd+tar · 原子切换 · 健康门 + 引导计数回滚 |
| 许可 | 软件 Apache-2.0;3D 模型 CC BY-SA-NC;机械/电子设计未开源 |