DEEP 201 · 第十七辑 · 换舵机实战案例 · LEARN NOTES

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

解读 201 · 案例精读(上):把 XL330 换成 HD-1910,他们改了什么

解读对象:HD-1910 迁移训练审计报告(另一台机器 /home/july 工作区的适配总结,代码事实快照 2026-09-19;原文已归档 docs/research/hd1910迁移站立行走PPO训练.html,未公开传播)
需要的前置:解读 73(换舵机方法论)、解读 79(五落点);最好先读过解读 61–72 的 HL-2915 换装专辑

0. 这是什么案例,先说清边界

有人在另一台机器的工作区里,把 Microduck 的执行器从 XL330 整体换成 HD-1910,注册了独立任务 Mjlab-Velocity-Flat-HD1910-MicroDuck,跑通了 smoke、8 小时长训练、ONNX 导出和回放评测,并留下一份完整审计报告。注意边界:训练日志、checkpoint 在那台机器上,我们没有原始产物——本文所有数字都是报告陈述,不是我们复现的结果。报告自己也说得很清楚:"仿真链路已跑通,真机仍需台架验证"。

这与我们高度相关:HD-1910 与我们购入的 HL-1910 同族(飞特磁编码、规格书同源),与我们已到货 2 只的 HL-2915 同厂。它是一次比我们早出发的换舵机实战,方法论和教训都值得精读。

1. 系统观:换舵机只动"后两层"

把整个系统拆成三层,换舵机的工作量立刻清晰:

┌─────────────────────────────────────────────┐
│ PPO:学习方法(网络/超参/损失)   → 不动      │
├─────────────────────────────────────────────┤
│ 物理模型:质量/惯量/执行器/延迟  → 全部要改  │
├─────────────────────────────────────────────┤
│ 运行时:把动作准确发给真机        → 换协议栈 │
└─────────────────────────────────────────────┘

报告最有价值的立场是:PPO 不需要针对新舵机重新调参——整个 RL 配置就一行深拷贝:

MicroduckHd1910RlCfg = deepcopy(MicroduckRlCfg)
experiment_name = "velocity_hd1910"
run_name        = "velocity_hd1910_preliminary"

但要准确理解:这不是"旧策略直接能用",而是同一套学习方法,在新的动力学模型上重新学一套权重。算法不变,学出来的东西全变。

2. 适配五原则(报告的原话,值得抄)

  1. 最大复用:直接调用现有 make_microduck_velocity_env_cfg,不复制奖励、观测、课程或 PPO 主体;
  2. 策略契约不变:关节名、顺序、HOME 位、14 动作、61 维观测、ONNX 接口全部冻结;
  3. 差异下沉到物理层:重量、电气参数、固件控制律、延迟,全放在 robot/actuator 配置里;
  4. 未知量用随机化包络:辨识前扩大摩擦和 armature 的随机范围,而不是凭空改奖励;
  5. 默认平台不受影响:运行时总线默认仍是 dynamixel2,新协议由配置显式选择。

这五条与我们解读 79 的"五落点"完全同构——两个独立实践收敛到同一结构,这本身就是验证。

3. 物理层改动(一):质量与惯量

HD-1910 单只 21 g(XL330 18 g),15 只共增重 45 g。补丁遍历 MuJoCo spec,只统计 meshname == "xl330" 且 group == 2 的可视舵机网格——不按所有 mesh 计数,因为全碰撞模型还有 group 3 的重复碰撞网格,会一次舵机增重两次;计数不为 15 直接抛错。惯量按质量比整体缩放:new_inertia = old × new_mass / old_mass,质心不动。

这是"相似质量分布"的近似——保持张量正定,但没描述新舵机的质心偏移和外壳差异。报告明确说最终应由带 HD 装配的 CAD 导出,不应长期依赖缩放。这个诚实态度比技巧本身更值得学。

4. 物理层改动(二):执行器初版参数

HD 尚无摆锤辨识,先用手册值拼了初版 m1 模型(preliminary_m1.json),复用 BAM 的 STS3215 固件控制器:

字段 值 来源
kt 0.73575 N·m/A 堵转 1.47 N·m ÷ 2 A
R 3.7 Ω 7.4 V ÷ 2 A
armature 0.00224 估计值,未辨识
friction_base / viscous 0.015 / 0.005 估计
max_velocity 11.833 rad/s 113 RPM 换算
固件 P 映射 运行时 200 × 0.16 = STS P 32 控制律换算
命令延迟 2–6 ticks 初始包络,未实测
vin 6.6–8.2 V 下界比 XL330 略提高

对比 XL330 的 m6(含负载相关、方向相关、Stribeck 项),m1 只有基础电机 + 库仑/黏性摩擦。报告用加粗字体承认:扩大随机化只能覆盖不确定性,不能替代真实辨识——这正是我们解读 55–57 单摆台架流程要补的课。

5. 运行时改动:同一个 trait,另一个协议栈

真机侧新增 FeetechIo 实现既有 RobotIo trait,启动时按配置在 DynamixelIo/FeetechIo 之间二选一;选完后,策略、观测拼装、安全状态机、跌倒检测共用同一套代码,不产生 HD 专用分叉。配置层面三件事:protocol = "feetech-sts" 显式选择;feetech_p_scale = 0.16(运行时 Kp 200 映射 STS P 32,limp 50 → 8,最后 clamp 到 1–254);feetech_direction 恰好 15 项 ±1,顺序严格对齐关节名——代码不会猜方向。

你带走的收获

延伸

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