解读 58 · 换舵机为什么必须重训策略
解读对象:
microduck-replica/docs/换舵机重训全流程.md(全文逻辑),交叉引用microduck-replica/docs/执行器选型.md的失效/保留表与构建日志 2026-09-07
需要的前置:解读 57(新模型怎么进仿真) · 解读 54
最省事的希望是:舵机拧上去,官方 ONNX 继续跑。为什么这条路被堵死?训练参数调整指南 §11.6 一句话:"策略学到的是'给出一个关节偏移后,这台具体机器会怎样动'。速度、摩擦、延迟、回差和电压响应一变,同一动作会产生不同的落脚时间和姿态。"
策略和执行器是共生的
训练时,策略输出的每个动作都经过 BAM M6 执行器模型变成运动——那份 xl330/m6.json 来自实物 XL330-M288-T 的台架辨识,kp_fw=200、vin_range=(6.5, 8.2) 是官方超压工况。策略在千万步里学会的摆腿节奏、落脚力度、抗扰动作,全都默认了这套动力学。换成 HL-1910:堵转力矩 1.47 N·m @7.4V(约 2.5 倍)、摩擦曲线不同、指令延迟不同、回差 ≤0.5°(规格书值)vs ±1.0°(XL330 建模值)——旧策略面对的是一个没见过的新身体。
换舵机重训全流程 §7 把它列为坑清单第一条:"换执行器后官方 ONNX 一定作废——训练内嵌了执行器模型,'看起来差不多'不够"。
什么失效、什么保留
执行器选型.md 的失效/保留表是全套判断:
| 失效 ❌ | 保留 ✅ |
|---|---|
| 官方 9 个 ONNX 策略 | 61 维观测契约 + 14 维动作 |
| BAM M6 标定(XL330 辨识) | 训练框架(microduck_rl) |
5 组 chosen_actuator PD 参数 |
sim2real 方法论(BAM 辨识、域随机化、回差建模) |
| 回差模型(要重测) | |
| MJCF 质量惯量(外形变才重算) | |
| 通信协议(飞特非 Dynamixel V2) |
一句话:要改的是"机器人模型"和"执行器模型",不是算法本身。
重训怎么排期
9 个 ONNX = 9 个技能,各自独立训练一次(全流程 §4.1)。优先级:先 alpha_walking(核心技能,任务 ID Mjlab-Velocity-Flat-MicroDuck),再 alpha_stand / alpha_sitstand(站立是安全兜底),其余(ground_pick、ball_kick、roller、roulade)按需——"没有必要第一天重训全部策略"(§11.6)。旧策略也没浪费:expC 2199 迭代 checkpoint 转任 L2 退化基线,量化"换执行器掉了多少"(物料快照、构建日志 09-07)。
算力账:调试档本机 CPU 4 分钟/百迭代;正式档 4096 环境数小时~天/技能;官方配方上限 4096 环境 × 5 万迭代,走路通常数千迭代、10⁷–10⁸ 步量级出现(§4.2)。
你带走的收获
- 为什么执行器动力学变了策略就失效:策略不是"角度查表",它内嵌了对摩擦、延迟、回差、电压响应的全部经验——身体换了,经验作废。
- "作废"是分层的:策略/标定/回差/质量惯量失效,观测契约、训练框架、方法论全保留——重训是流水线重跑,不是从零再来。
- 重训有排期表:走路 → 站立兜底 → 按需技能;旧策略降级当退化基线,仍然有用。
- 判断"训够了"看指标(
fell_over稳定低位、error_vel平台化、mean_std收敛),不看迭代数本身。 - 省钱省出来的工作量要记账:¥1500 舵机省下 ¥1100,代价是 9 次 GPU 训练——这笔账在采购前就该算(物料快照原文就是这么算的)。