解读 79 · 参数适配:训练侧五个落点
解读对象:
microduck-replica/upstream/microduck_rl/src/mjlab_microduck/robot/microduck_constants.py(275 行)
需要的前置:解读 70(辨识→参数→重训)· 解读 22(配置文件结构)
机械、电气、协议都适配完,策略还是不能直接训——训练代码里还埋着五处"旧舵机的记忆"。
《换舵机重训全流程》(microduck-replica/docs/换舵机重训全流程.md) §3 和教程 §7.1 各给了一张表,
本篇把它们合并成五个落点,以 microduck_constants.py 为样本逐个看。
1. 样本:_BAM_ACTUATOR_KWARGS 逐行
这是全文件的心脏,训练用的执行器配置全在这 11 行里:
_BAM_ACTUATOR_KWARGS = dict(
motor_name="xl330", # ← 换舵机第一个改的:指向 params/ 下的型号目录
model="m6", # 摩擦模型档位,一般不动
target_names_expr=(r"^(?!passive_).*",), # 排除被动关节,动作空间保持 14 维
kp_fw=200.0, # 固件位置环刚度(microban 用 125,两家不同)
vin_range=(6.5, 8.2), # 每个环境启动时采样的电池电压——官方超压特例,勿照抄
vin_drop_gain_range=(0.0, 0.2), # 负载压降 V_drop = gain × sum(|tau|)
vin_min=6.0, # 压降后的硬下限
delay_min_lag=3, delay_max_lag=6, # 指令延迟(控制步)
)
文件里还有两行被注释掉的旧值(vin_range=(6.9, 7.9)、max_current=1.75)——
连官方自己也在调这些数;换舵机时你的台架实测才是唯一依据。同文件里的
backlash_actuators = BacklashEncoderBamActuatorCfg(**_BAM_ACTUATOR_KWARGS) 说明:
回差模型的执行器共用同一份 kwargs,改一处两边同步。
2. 五个落点合并表
| # | 落点文件 | 填什么 | 数据来源 |
|---|---|---|---|
| ① | robot/microduck_constants.py |
motor_name、kp_fw、vin 窗口、延迟 |
台架课 6 阶跃 + 新舵机额定电压 |
| ② | actuator/friction_dr_bam.py |
堵转力矩(forcerange)、摩擦辨识值 | 台架辨识(→ params/新型号/m6.json) |
| ③ | tasks/backlash.py |
新舵机实测回差角 | 正反双向趋近读数差 |
| ④ | tasks/microduck_velocity_env_cfg.py L28–53 |
域随机化范围 | 范围 = 你的台架实测离散度 |
| ⑤ | robot/microduck/assets/ 网格 |
质量、惯量(外形变了才动) | 新舵机重量 + CAD 重算 |
落点③有个实现细节:microduck_constants.py 的 BACKLASH_HOME_FRAME 把 .*_backlash$
关节钉在 0 且放在正则表第一位——因为模式匹配先到先得,不钉住的话 HOME 姿态的
-0.0873 rad 会溢出 ±1° 的回差铰链量程。换舵机重填回差角时,这类"初始化越界"是新坑高发区。
一律不动的:obs 61 维、action 14 维、reward 结构、课程表——关节还是那 14 个,
接口规格不变,动了它就要三处同步改(仿真/导出/运行时)。
3. 纪律与冒烟
- upstream 只读不改:实验改动一律打 patch,跑完还原(教程 §7.1 原话)。构建日志里
exp001 的 A/B 实验就是"补丁 + 还原"的实际示范。 - 改完先冒烟:CPU 上 64 环境 × 100 迭代约 4 分钟,确认 obs/action 维度不变、无 NaN、
reward 量级正常,再上 GPU——冒烟过不了,训练几小时也是白烧。 - vin_range 的教训:官方 (6.5, 8.2) 是 XL330 被超压运行的产物;你的新舵机按自己的
额定窗口填,照抄等于把别人的特例当成自己的规格。
你带走的收获
- 换舵机在训练侧只动五个文件;
_BAM_ACTUATOR_KWARGS是其中唯一一个"新型号的门牌"。 motor_name改名后,params 目录、json 的actuator键、这份 kwargs 三处必须一致。- 域随机化范围不是拍脑袋:官方范围对应官方舵机的离散度,你的范围只能来自你的台架。
- 回差铰链 ±1° 的量程约束会反向限制初始化姿态——参数之间有隐性耦合,改一个查三个。
- 冒烟(4 分钟)是五个落点改完的标准验收:维度、NaN、reward 量级,三样对才准进训练。