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

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

解读 57 · 辨识结果如何进入仿真

解读对象:microduck-replica/docs/换舵机重训全流程.md §3,交叉引用 upstream/microduck_rl/src/mjlab_microduck/robot/microduck_constants.py 的 _BAM_ACTUATOR_KWARGS
需要的前置:解读 56(m6.json 从哪来)

台架辨识的产出是一份 JSON。它怎么变成仿真里"那颗舵机"?这篇讲从文件到训练环境的完整路径,以及哪些数字不该照抄。

第一站:执行器配置字典

训练侧加载点在 microduck_constants.py(真实代码):

_BAM_ACTUATOR_KWARGS = dict(
    motor_name="xl330",
    model="m6",
    target_names_expr=(r"^(?!passive_).*",),  # 排除被动关节
    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,  # 指令延迟(控制步)
)

motor_name="xl330", model="m6" 就是去加载 bam/params/xl330/m6.json。换 HL-1910 时,训练参数调整指南 §11.5 给出概念上的改法:json_path="/绝对路径/params/hl1910/m6.json",与 motor_name + model 二选一,不能同填。其余几项全部按新舵机实测重定:kp_fw 是新舵机真实运行增益;vin_range 按新舵机额定改——官方 6.5–8.2 是超压特例,勿照抄(§3 原文警告);delay_min/max_lag 用实测端到端延迟。

第二站:回差与域随机化范围

改什么 文件 依据
回差建模 tasks/backlash.py(框架现成) 填实测回差角;模型侧每个舵机串一个 passive_<joint>_backlash 被动铰链(±1.0°,XL330 建模值)
域随机化范围 tasks/microduck_velocity_env_cfg.py L28–53 范围 = 你的台架实测离散度:出厂差异大就放大,个体一致可收窄
几何 robot/microduck/assets/ 网格 仅外形变了才动,质量惯量随新网格重算
不动的 obs 61 维 / action 14 维 / reward / 课程表 接口规格不变,运行时省大改

改完的验收(§3 末):跑 5 迭代冒烟,确认 obs/action 维度不变、无 NaN、reward 量级正常——再进训练。

备用路线:MuJoCo 原生 PD

不想用 BAM,可以直接抄 joints_properties.xml 里 5 组实测标定过的 PD 参数。当前默认 chosen_actuator(注释标 "marc"):damping=0.053、frictionloss=0.0048、armature=0.0018、kp=0.55、forcerange=±0.96。注意 perfect_actuator(damping 0.15 / kp 10.0 / ±20.0)是理想电机,只用于对照,不要拿它训练要上真机的策略(执行器选型.md)。

一条铁律

辨识值进仿真后,仿真才配叫"这台机器的仿真"。随机化范围若沿用官方数,"白随机"(§7 坑 2)——它描述的是 XL330 的出厂离散,不是你手里那批 HL-1910 的。

你带走的收获

延伸

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