解读 73 · 换舵机决策树:从需求到型号
解读对象:
bam/bam/params/(8 个已辨识型号目录)+bam/bam/actuators.py、model.py的load_model
需要的前置:解读 54(BAM 是什么)· 解读 58(为什么必须重训)
"换成其他舵机怎么改"的第一问不是"怎么改",而是"换成谁"。仓库里恰好有
现成的证据库:bam/bam/params/ 下 8 个型号目录,每个存着一条真实舵机上台架辨识出的参数。
1. 型号库里有什么
每个目录放 m1.json 到 m6.json 六档文件——编号越高摩擦模型越完整(m6 = 库仑 + Stribeck
+ 载荷相关 + 方向性 + 二次项,见 解读 56)。加载只有两条路(model.py::load_model):
- 用库里的:load_model(motor_name="xl330", model="m6"),按目录名 + 档位找 json;
- 用自己的:load_model(json_file="params/my_motor/m6.json")——自己辨识的型号走这条路。
有个容易踩的细节:目录名 feetech_sts3215_7_4V,json 里却写着 "actuator": "sts3215"——
json 的 actuator 字段必须是 actuators.py 注册表里的键名,目录名随意,键名不能错。
另外注册表有 10 个键(还有 xl330i、unitree_go1),params 下只有 8 个目录:注册了 ≠ 有已辨识参数。
2. 四道门的决策树
换舵机的判定顺序照 《换舵机重训全流程》(microduck-replica/docs/换舵机重训全流程.md) §1 的四层判定表:
像过海关,第一关没过,后面免谈——
| 门 | 判据(以官方 XL330 为基准) | 不过怎么办 |
|---|---|---|
| ① 电压 | 电池窗口落在新舵机额定内?官方 2S 母线 6.6–8.2 V | 改电池节数或加降压 |
| ② 力矩 | 堵转力矩 ≥ 0.5 N·m 量级(XL330 官方 0.52 N·m @5V) | 腿站不起来,淘汰 |
| ③ 尺寸/重量 | 外形接近 20×34×26 mm、M2 安装、单只 18 g 量级 | 打印件重画 + 质量预算重算 |
| ④ 协议 | Dynamixel V2?飞特?厂商私有? | 通信层"改常量"或"写新控制器" |
四道门全过才谈得上"少改";现实是全兼容的便宜货不存在(选型文档原话),正常路径是逐层适配 + 重训。
3. 八个型号一眼看清
params/ 里 8 个型号的 m6 辨识值(逐个 json 核对,保留三位):
| 目录 | 系 | kt (N·m/A) | R (Ω) | armature | friction_viscous |
|---|---|---|---|---|---|
xl330 |
Dynamixel | 0.346 | 2.50 | 0.0016 | 0.006 |
xl320 |
Dynamixel | 1.009 | 31.59 | 0.0012 | 0.007 |
feetech_sts3215_7_4V |
飞特 | 1.275 | 2.75 | 0.0216 | 0.028 |
waveshare_st3025 |
微雪 | 1.651 | 3.10 | 0.0048 | 0.022 |
mx64 |
Dynamixel MX | 1.602 | 2.32 | 0.0123 | 0.025 |
mx106 |
Dynamixel MX | 2.210 | 2.03 | 0.0260 | 0.051 |
erob80_50 |
eRob 工业级 | 4.897 | 1.07 | 0.362 | 1.403 |
erob80_100 |
eRob 工业级 | 9.396 | (json 无此字段) | 1.135 | 9.709 |
kt(力矩常数,1 A 电流出多少 N·m)从 0.35 跨到 9.4,差 27 倍;
armature(转子反射惯量)从 0.0012 跨到 1.14,差近千倍。
同一套训练代码,喂不同的 json,练出来的是完全不同的机器——"换舵机 = 换动力学"不是修辞。
4. 你的型号不在库里怎么办
这正是这个库的元方法论:官方那组 XL330 参数,也是某个人拿着一颗实物 XL330
在单摆台架上摆出来的。你的新舵机走同一条路——解读 63 的六课采数据,
再用 bam fit --logdir <台架日志> --actuator <键名> --model m6 拟合出 json
(默认 10 万次 trial),产出 params/你的型号/m6.json。"换舵机"从此变成流水线问题。
你带走的收获
- 选型的正确顺序是电压→力矩→尺寸→协议四道门,第一道不过,后面全免谈。
params/的 8 个目录是 8 条真实辨识记录;json 里actuator字段必须对上actuators.py的键名。- 注册表 10 个键、参数库只有 8 家:"注册 ≠ 可用",用前先
ls。 - 辨识参数离散度触目惊心(kt 跨 27 倍、armature 跨近千倍):官方 ONNX 换舵机必作废的数值证据。
- 型号不在库里不是死路:
fit拟合一份自己的 json,和官方同一条流水线。