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

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

解读 54 · BAM 是什么:执行器摩擦建模

解读对象:bam/ 仓库(本地副本,上游 [Rhoban/bam],Apache-2.0)bam/bam/README.md、bam/bam/model.py、bam/bam/params/xl330/m6.json
需要的前置:解读 56(六个模型怎么拟合出来)

BAM = Better Actuator Models(Rhoban 实验室开源,作者 Marc Duclusaud 与 Grégoire Passault)。README 第一句话就说清了动机:仿真器(MuJoCo、IsaacGym)普遍只实现库仑-黏性摩擦模型,太简单,表达不了 Stribeck 效应、载荷相关摩擦、二次项这些真实现象——而模型精度直接影响强化学习策略能不能迁移到真机。

它建的不是"一个摩擦系数",是一整条链

执行器选型.md 对 BAM M6 的概括:BAM 是电压级模型——不是简单 PD,而是模拟固件 PD → PWM → 电压 → 电流 → 力矩的完整链路,再叠加负载相关的摩擦(库仑 + Stribeck + 载荷项)。

M6 的摩擦部分在 model.py 的 compute_frictions() 里:由 friction_base(基础静摩擦)、friction_stribeck(近零速时额外摩擦,按 exp(-(|dq|/dtheta_stribeck)^alpha) 的系数衰减)、load_friction_motor / load_friction_external(电机侧/外力侧的载荷相关项)、friction_viscous(黏性)合成一个摩擦预算 τ_fm,仿真器把"停止力矩"裁剪在 ±τ_fm 内——这就是它落进 MuJoCo dof_frictionloss / dof_damping 的方式。

真实参数长什么样

bam/bam/params/xl330/m6.json 是 XL330-M288-T 的实测辨识结果,几个关键值:电机常数 kt=0.346、电阻 R=2.50、反射惯量 armature=0.00157、friction_base=0.0119 N·m、friction_viscous=0.0058 N·m/(rad/s)、指令延迟 command_delay=0.0102 s。 Microduck 训练配置(microduck_constants.py 的 _BAM_ACTUATOR_KWARGS)里的 motor_name="xl330", model="m6" 加载的正是这份 JSON——训练策略所依据的执行器模型,是从一颗实物 XL330-M288-T 台架辨识出来的(执行器选型.md 的型号证据链)。

为什么换舵机必须重新拟合

BAM 自带的已辨识模型库只有:Dynamixel MX-64 / MX-106 / XL-320 / XL330-M288-T、eRob80:50 / :100、Feetech STS3215(README 列表)。没有 HL-1910。 训练参数调整指南 §11.4 的原话:"正确路径是实测拟合一个自定义 JSON","不要拿另一款舵机的 JSON 改个文件名"。辨识流程见 解读 55 与 解读 56。

你带走的收获

延伸

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