解读 163 · 齿轮与减速比
解读对象:概念课 · 以
bam/bam/model.py(执行器建模)+microduck-replica/docs/硬件方案逆向.md(HL-1910 章节的减速比数据)为教材
需要的前置:解读 54;知道舵机里面是一颗小电机。
减速比:小电机的杠杆
舵机输出轴的劲不是电机直接给的:电机转得快、劲小,齿轮箱把速度换成力矩。两只"鸭子舵机"的真实数字(《执行器选型》与《硬件方案逆向》HL-1910 章节,电压取各自最接近工作点的档):
| XL330-M288-T(官方) | HL-1910-C001(实购替代) | |
|---|---|---|
| 减速比 | 288.4 : 1 | 1/320 |
| 堵转力矩 | 0.52 N·m @5V | 1.47 N·m(15kg·cm)@7.4V |
| 空载转速 | ~103 RPM @5V | 113 RPM(0.088s/60°)@7.4V |
| 齿轮 | — | 金属齿,虚位 ≤0.5° |
物理账只有一条(通用物理):功率 ≈ 力矩 × 转速。减速比 1/320 把输出转速压到电机轴的 1/320,力矩(扣掉齿轮摩擦)约放大 320 倍——减速比越大,劲越大、越慢。顺带一个记忆窍门:XL330 尾号"M288"与 288.4:1 正好对上,记型号先记减速比。
BAM 视角:减速比"长"在参数里
bam/bam/model.py 的 Model 类自述:把电机模型(set_actuator 挂进来的 kt、R)和摩擦预算合在一起。真正被仿真的执行器分三层:
- 电机方程(
actuator.py):torque = kt·volts/R − kt²·dq/R。kt 是输出端的力矩常数,减速比已经折算在内——HL-1910 规格书直接给 Kt = 7.5 kg·cm/A;台架辨识出的 xl330m6.json里 kt = 0.346。 - 摩擦预算(
compute_frictions):m1–m6 六档由简到繁,项目用的 m6 = 库仑 + Stribeck + 负载相关 + 方向相关 + 二次项,算出的frictionloss/damping直接写进 MuJoCo 的dof_frictionloss/dof_damping。 - 反射惯量(
armature,m6.json = 0.00157):转子惯量经减速比平方折算后"反射"到输出端的等效值(通用物理)。
逆向文档把这层关系点得很明白:"减速比——XL330 是 288.4:1,BAM 执行器辨识模型里减速比是关键项"。所以换舵机不只是换硬件:kt、armature、摩擦全套参数都以输出端为口径,得重新辨识(第六辑全在讲这件事)。
减速比的另一半:虚位
齿轮啮合总有微小间隙,HL-1910 标 ≤0.5°——这就是回差(backlash)的来源。它不改变力矩和速度,却让"指令角度"与"真实角度"差出半个门槛:MJCF 有专门的 *_backlash 建模变体,训练配置里也有 backlash.py(解读 31)。大减速比不免费,齿轮一级级放大力矩,也一级级攒间隙。
你带走的收获
- 减速比是力矩与速度的汇率:1/320 的 HL-1910 堵转 1.47 N·m @7.4V,288.4:1 的 XL330 只有 0.52 N·m @5V。
- BAM 的 kt、armature 都是输出端口径,减速比已折算在内——换舵机等于这些数全部重测。
- 摩擦模型 m1–m6 是由简到繁的阶梯,m6 全开,但每个参数都能从台架数据里辨识出来。
- 虚位 ≤0.5° 是减速比送的账单:力矩放大与回差同源。
- 选舵机先把减速比、堵转、空载转速三行摆在一起看,力矩-速度折中一目了然。