解读 169 · xl330:m6.json 逐字段
解读对象:
bam/bam/params/xl330/(m1.json–m6.json 六档,本文精读 m6.json,18 个字段)
需要的前置:解读 80(八型号速览)· 解读 56(M1–M6 各代表什么)
解读 80 用 xl330 当引子带过八个型号;本辑第一篇把它单独摊开——
Microduck 训练配置 motor_name="xl330", model="m6" 加载的正是这份 json,170–176 拿它当基准。
1. 型号是谁
Robotis Dynamixel XL330-M288-T(执行器选型.md 口径):18 g、减速比 288:1、额定 3.7–6.0 V、
官方堵转 0.52 N·m @5 V——Microduck 里被 2S 电池 6.6–8.2 V 超压驱动(解读 85)。
BAM 侧是 XL330Actuator:台架电压 vin=7.5 V、固件 P 增益 kp=400、PWM 上限 885、编码器
4096 counts/rev(error_gain 由 4096/2π ÷ (256×885) 算出,注释:KP 分母 256 实测,手册写 128)。
协议 Dynamixel TTL 半双工。
2. 18 个字段逐个看
分三类。第一类电机模型(范围由 XL330Actuator.initialize() 定;初始值只是拟合起点,不是先验):
| 字段 | 辨识值(初始/范围) | 一句话含义 |
|---|---|---|
kt |
0.346(1.6 / 0.1–3.0) | 力矩常数 N·m/A:1 A 电流榨出多少 N·m,像杠杆力臂 |
R |
2.50 Ω(2.6 / 2.0–5.0) | 绕组电阻:水管阻力,定堵转电流 vin/R≈3 A |
armature |
0.00157(0.005 / 0.0001–0.05) | 转子惯量折到输出端 kg·m²:轮子转起来沉不沉 |
第二类台架杂项(不是舵机属性):q_offset=0.0150 rad(±0.1,零位贴偏 0.86°);
command_delay=0.0102 s(0–0.05,发指令到出力的滞后,回放时平移目标)。
第三类摩擦预算(model.py 的 Parameter,M6 全开):
| 字段 | 辨识值(范围) | 含义 |
|---|---|---|
friction_base |
0.0119(0–0.2) | 库仑静摩擦 N·m,只要转就有 |
friction_stribeck |
0.00085(0–0.2) | 近停转附加摩擦(静止全额,转快衰减) |
load_friction_motor |
0.228(0–0.5) | 电机出的力矩里变成齿轮摩擦的比例 |
load_friction_external |
0.107(0–0.5) | 外载(重力)压紧齿轮产生的摩擦比例 |
load_friction_motor_stribeck |
1.5e-08(0–1.0) | 电机侧低速附加,几乎为零 |
load_friction_external_stribeck |
0.142(0–1.0) | 外载侧低速附加 |
load_friction_motor_quad |
0.00527(0–0.01) | 二次项:内外扭矩异号时启用(电机侧) |
load_friction_external_quad |
0.00299(0–0.01) | 同上(外载侧) |
dtheta_stribeck |
0.261(0.10–1.0) | "多慢算慢":Stribeck 特征速度 rad/s |
alpha |
8.53(1.0–10.0) | Stribeck 衰减陡度 |
friction_viscous |
0.00579(0–1.0) | 黏性摩擦 N·m/(rad/s),像搅蜂蜜 |
另有 "model": "m6"、"actuator": "xl330" 标识字段,后者须对上 actuators.py 键名。
3. 数值的三个亮点
- alpha=8.53 顶到 10 的天花板:Stribeck 峰 exp(−(|dθ/0.261|^8.53)) 极窄,摩擦只在近停转
一小段陡增——走路落脚时关节都穿过这段"黏滞区"。 - kt=0.346 被拉到初始值 1.6 的 1/5:类里的初始值不代表先验知识,优化说了算。
- 量级自洽:堵转力矩 ≈ kt·vin/R = 0.346×7.5/2.50 ≈ 1.04 N·m(7.5 V 台架电压),与
MJCF 的 forcerange ±0.96 N·m 同量级——两条独立来源互相咬合。
4. 换型号时的"旧值清单"
它就是五落点方法论(解读 79)里被替换的那一侧,旧值存档:
① microduck_constants.py:motor_name="xl330"、kp_fw=200.0、vin_range=(6.5,8.2)、
delay 3–6 步;② friction_dr_bam.py:forcerange ±0.96 N·m 与摩擦值;③ backlash.py:
±1.0° 回差;④ 域随机化范围;⑤ assets 质量。170–176 每篇给对应新值。
你带走的收获
- m6.json = 电机 3 项 + 台架杂项 2 项 + 摩擦 11 项 + 标识 2 项:先数字段,再读数值。
q_offset/command_delay是台架误差不是舵机属性:换台架重测,换舵机也重测。- 初始值只是优化起点:kt 从 1.6 被拉到 0.346,别把类里的数当规格。
- kt·vin/R 粗估堵转力矩,拿去和 forcerange 互相对账。