解读 41 · 硬件方案逆向总览
解读对象:
microduck-replica/docs/硬件方案逆向.md(46KB,整机电控逆向总档)
需要的前置:无,本辑开篇。想补读图基本功,先看[什么鸭公开课第 08 课../course/08-看懂电路图.md的读图五步法。
一张图:整机电路长什么样
官方没发布过硬件图纸,这份文档的作者把 Rust 源码当规格书读——运行时要驱动真实硬件,就必须写死设备路径、I2C 地址、波特率。逆向画出的整机结构:
Radxa Zero 3W(RK3566 四核 A55,65×30mm,Armbian)
│ /dev/ttyS2 │ 40-pin i2c3 @400kHz
│ 1 Mbps TTL 半双工 │
│ Robot HAT(音频 codec 0x18 / ToF 0x29)
═════════════╧════ Dynamixel 总线 · Protocol V2 ═════════════
15 × XL330 舵机(ID 右腿10-14 / 左腿20-24 / 颈头嘴30-34)
+ imu_to_dxl 板(ID 200,内藏 LSM6DSV16X 姿态芯片)
三个关键数字:控制环 50 Hz;一次 sync_read 覆盖 16 台设备(15 舵机 + 1 IMU 板),读寄存器 124–136;电池是 NP-F550 二串锂电,带载 6.6–8.2 V(出处:逆向文档 §一、§五、§六)。
三块板,三种来路
| 板 | 在哪 | 怎么获得 |
|---|---|---|
| 主控 Radxa Zero 3W | 头里 | ✅ 市售模块直接买(约 $32.9,见电控采购清单) |
| Robot HAT(65×30mm) | 头里,叠在主控上 7.3 mm | 📥 官方已开源,下载 Gerber 打样 |
| imu_to_dxl | 躯干,不在头里 | 🔧 全网无公开工程,唯一要自己画的 |
最容易搞错的是位置:主控、HAT、摄像头都在 MJCF 的 jaw_soft 头部刚体里(robot_walk.xml:235/247),而 IMU 板刚性固连在躯干 trunk_base 上。穿过三自由度脖子的只有两束线:舵机总线和电池供电线。
核心思想:一条总线搞定一切
多数机器人给 IMU 单独留一条 I2C。Microduck 不:imu_to_dxl 板把姿态数据打包,伪装成 200 号"Dynamixel 舵机"挂在总线上,和 15 个真舵机在同一次 sync_read 事务里读回。连电池电压都省了电量计——直接读舵机自报的供电电压(逆向文档 §六:原文 "no fuel gauge and no ADC")。
代价也有:每个舵机出厂应答延迟 500 µs,16 台设备串行应答就是 8 ms,占掉 20 ms 控制周期的 40%(duck-control/src/model.rs:84-86)——所以固件必须把 return_delay_time 写 0。
你带走的收获
- 代码即规格书:设备路径、地址、波特率、寄存器布局都在源码里,没有图纸也能逆向出电控架构。
- 一条总线的容量要算账:设备数 × 每台应答时间 × 控制频率,和周期预算比一比,超了就得出厂默认值里抠时间。
- 板子的位置由物理约束决定:姿态传感器必须和被测刚体刚性固连,头里那颗 BMI088 软件标着 "dormant" 根本不用。
- "开源"分层看:同一家的产品,可能软件开源、一块板开源、另一块板闭源——要逐件确认。