DEEP 59 · 第六辑 · 舵机与执行器 · LEARN NOTES

收进学习手册 · 2026-09-11 · duck.whatled.com

解读 59 · 舵机 ID 分配与控制模式

解读对象:microduck-replica/docs/硬件规格速查.md §「舵机 ID 分配」,交叉引用 docs/macOS舵机调试与图纸查看指南.md §4 与 duck-control/src/model.rs
需要的前置:解读 53(ID 在协议里的位置)

15 个舵机共享一根线,靠 ID(门牌号)分清"这句话是喊谁的"。ID 表是硬件与代码之间的契约——部署代码按 ID 找关节,"表混了 = 左腿当成右腿 = 一上电就劈叉"(macOS 指南原文)。

官方 ID 表:按身体部位分段

左腿   20 21 22 23 24    hip_yaw / hip_roll / hip_pitch / knee / ankle
颈头嘴 30 31 32 33 34    neck_pitch / head_pitch / head_yaw / head_roll / mouth
右腿   10 11 12 13 14    (左腿镜像)
IMU 板 200

(出处:硬件规格速查.md,与 bus.rs 的 ids = [200, 20..24, 30..34, 10..14] 一致。)分段留了空隙:腿 10/20 起、头颈 30 起——以后加设备不用重排。第 15 个舵机是嘴(ID 34,索引 9),不进策略的 14 维动作,由上层逻辑控制。这套分配与 Open Duck Mini v2 完全一致(20-24 / 30-33 / 10-14),只是多了 34(硬件方案逆向:血统印证)。对照:平价教程路线用 ID 1–15,两套表绝不能混用。

设 ID 的两条铁律

XL330 和飞特舵机出厂都是 ID=1。两只出厂舵机一起挂总线,双双应答,总线瘫痪。所以 macOS 指南 §4 的铁律:总线上同时只允许一只未设 ID 的舵机;每设好一只,断电、贴标签,再接下一只。 15 只大约一个傍晚设完。ID 写在 EEPROM 里,改完要回读确认。

XL330 每只要改的寄存器(macOS 指南 §4.2):ID(寄存器 3)改成目标值;Baud Rate(4)出厂 57600 → 1000000;Return Delay Time(5)出厂 250 → 0(16 台设备各 500 µs = 8 ms/tick,40% 预算);Shutdown(18)去掉电压错误触发,防电池带载波动误停机。飞特侧轻松些:出厂即 1 Mbps、Return Delay 已是 0,主要就是改 ID(macOS 指南 §4.4)。

控制模式:位置环是共同语言

官方运行时用位置控制模式——台架脚本 testbench_sim2real.py 的 rollout_real() 里写得明白:ctrl.write_operating_mode(motor_id, 3) 注释 # position control,随后写 position_p_gain 并回读确认(固件会静默钳位越界值)。HD-1910 的模式表更丰富:0 角度伺服 / 1 恒速 / 2 恒流 / 3 PWM 开环 / 4 纯位置 PD(Sim2Real,出厂默认)——"正是强化学习落地要用的那个,XL330 无对应模式"(硬件方案逆向)。

模式差异也是重训输入的一部分:换舵机后 kp_fw 要按新舵机真实运行增益重定(训练参数调整指南 §11.5)。

你带走的收获

延伸

什么鸭 WHATDUCK · 复刻学习笔记 ← 全部手册 · 首页