解读 164 · 转动惯量入门
解读对象:概念课 · 以
microduck-replica/upstream/microduck_rl/.../robot_walk.xml(15 个刚体的inertial标签)+microduck-replica/README.md("质量/惯量:15 个刚体全有")为教材
需要的前置:解读 36讲过"惯量 ∝ m·r²";这篇把 15 个刚体的账本摊开。
15 个刚体,15 行账
MJCF 仿真模型里,每个能独立运动的部件(<body>)都随身带一行 <inertial>:质心位置、质量、六个数(三个主轴惯量 + 三个惯量积)。Microduck 的运动树正好 15 个这样的刚体——README 可行性表写明"质量/惯量:✅ 15 个刚体全有"。挑几行真账(robot_walk.xml):
| 刚体 | 质量 | 主轴惯量 ×10⁻⁴ kg·m² |
|---|---|---|
trunk_base 躯干 |
0.199kg | 1.24 / 1.46 / 1.15 |
jaw_soft 头(总成) |
0.189kg | 3.21 / 2.54 / 1.50 |
upper_leg_left 大腿 |
0.048kg | 0.17 / 0.10 / 0.20 |
leg 小腿 |
0.022kg | 0.05 / 0.02 / 0.04 |
ankle_left 踝+脚 |
0.030kg | 0.06 / 0.11 / 0.08 |
头和躯干一样重,惯量却大得多
最值得盯着的一对:躯干 199g、头 189g,质量几乎相同;但逐轴比较主轴惯量,头都比躯干大——同位置主轴之比约 1.3~2.6 倍。原因不在重量在分布:惯量是 Σm·r²,质量离轴越远贡献越大。头是一只大壳(单下壳包围盒就有 91.8×116.7mm),质量摊得开;躯干的质量更收拢。解读 38 说的"甩头产生角动量扰动",扰动的大小正比于这几个数。
腿是同一课的另一半:50Hz 控制环每 20ms 就要把摆动腿加减速一个来回,需要的力矩 ≈ 惯量 × 角加速度——惯量翻倍,同样步速下力矩翻倍,电流与发热跟着翻倍(通用物理)。所以 36/37 两篇反复强调:脚上省 1g 胜过躯干省 10g,因为足端质量的 r² 最大。
惯量在项目里出现的三处
- 域随机化:
MASS_INERTIA_RANDOMIZATION_RANGE = (0.95, 1.05)——质量与惯量用同一个缩放因子 ±5%;各自独立随机会造出物理上不成立的惯量张量,仿真直接不稳(解读 22/125)。 - 执行器模型:BAM
m6.json的armature = 0.00157,转子经减速比反射到输出端的等效惯量(解读 54)——换舵机改减速比,连"转子显得多沉"都会变。 - 台架公式:
bam/bam/testbench.py的单摆惯量是算出来的已知量:mass·length² + (arm_mass/3)·length²——点质量挂均质杆末端。辨识的逻辑前提是:方程里唯一不能当未知数的,就是摆自己的惯量(解读 55)。
你带走的收获
- 转动惯量 = 质量 × 距离平方的累加;轻而远比重而近更"费劲"。
- 15 个刚体的质量与惯量全写在 MJCF 里,读仿真是读机械设计的一条捷径。
- 头 189g vs 躯干 199g:质量相近、惯量 1.3~2.6 倍——分布比总量更要命。
- 质量与惯量必须同因子随机化:物理一致性优先于随机自由度。
- 减速比改变的不只是力矩,还有反射惯量 armature——这是换舵机要重训的又一原因。