DEEP 79 · 第八辑 · 通用换舵机方法论 · LEARN NOTES

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

解读 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. 纪律与冒烟

你带走的收获

延伸

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