从转动惯量到惯性张量:刚体动力学核心概念推导与工程实践指南

📅 2026/8/15 14:59:11
从转动惯量到惯性张量:刚体动力学核心概念推导与工程实践指南
1. 项目概述从“转”说起刚入行做机器人动力学仿真或者刚体物理引擎开发的朋友肯定都绕不开这几个词转动惯量、惯性张量、转动动能。乍一看公式一堆符号抽象尤其是那个带双下标的矩阵惯性张量很容易让人望而却步。很多人可能就直接调用现成的物理引擎API比如GetInertiaTensor()参数一填结果就算出来了但对背后到底在算什么为什么这么算心里是没底的。这就好比开车只会用自动挡一旦车子有点异响或者需要手动调整就完全抓瞎了。我自己在早期做多足机器人步态规划时就踩过这个坑。当时为了优化一个机器狗的转身动作需要手动计算一条腿在摆动时对机身产生的转动效应。如果只用质点模型或者忽略转动惯量仿真出来的动作非常“飘”机器狗转身时像喝醉了酒一样打滑和实物测试结果完全对不上。直到我沉下心来把这三个概念的来龙去脉从最基本的定义到最终的矩阵形式自己亲手推导了一遍才真正打通了任督二脉。原来转动惯量描述的是刚体绕一根固定轴转动时的“惯性”大小而惯性张量则是它的全面升级版是一个3x3的矩阵完整描述了刚体绕空间任意方向轴转动时的惯性分布是三维空间中的“转动质量”转动动能的公式则是将平动动能中的“质量”和“速度”替换为“转动惯量/惯性张量”和“角速度”后的自然延伸。搞明白这些不仅仅是满足理论好奇心。在实操中它能帮你正确建模为你设计的机器人、无人机、机械臂选择合适的简化模型准确计算或测量其惯性参数。调试仿真当物理仿真出现诡异的旋转行为时你能快速定位是不是惯性参数设置错了比如单位弄混kg·m² 和 g·cm²、参考系选错。优化控制在设计控制器如PID时转动惯量直接影响到系统对扭矩的响应速度理解了它才能合理设置控制参数。看懂文献大量机器人学、航天动力学论文中的方程都建立在这些概念之上推导一遍是读懂它们的最佳方式。所以这篇文章我就把自己当年推导和理解的整个过程结合这些年工程实践中的体会重新梳理一遍。目标不是重复教科书而是像一个老工程师带新人一样把每个步骤的“为什么”讲透把容易卡壳的地方点明并最终给你一个可以直接在代码里实现的计算逻辑。我们从一个最简单的质点开始逐步构建出整个体系。2. 核心思路从质点到刚体从标量到矩阵推导这三个量的核心思路其实是一个从特殊到一般从标量到张量的思维过程。很多教材一上来就扔出一个二重或三重积分公式容易让人迷失。我们换个顺序用“搭积木”的方式把它建起来。2.1 思维导图我们的推导路径整个推导可以看作一棵树树根基础牛顿第二定律Fma和动能定理。这是我们所有推导的物理基石。第一层质点绕轴转动目标定义质点绕某一固定轴的转动惯量 (I)。方法类比 Fma写出转动版本的“牛顿第二定律”τ Iα扭矩 转动惯量 × 角加速度。通过对比推导出 I 的表达式。结果得到一个标量I m r²m是质量r是质点到转轴的垂直距离。第二层刚体绕轴转动目标定义刚体绕某一固定轴的转动惯量。方法把刚体看作无数个质点的集合。整个刚体的转动惯量就是所有质点转动惯量的总和积分。结果标量I ∫ r² dm。这是转动惯量最通用的积分定义式。第三层刚体绕点转动 - 平面运动目标描述刚体在平面内绕垂直于该平面的一个点轴转动时的动能。方法计算每个质点的动能½ m v²其中线速度 v ω × rω是角速度标量然后对所有质点求和积分。结果转动动能T_rot ½ I ω²完美类比平动动能T_trans ½ m v²。第四层刚体绕点转动 - 三维空间目标描述刚体在三维空间中绕通过某一点通常是质心的任意方向轴转动时的惯性分布和动能。核心矛盾在三维空间转轴方向 (单位向量 n) 是任意的。同一个刚体绕不同方向的轴转动其“转动难易程度”等效转动惯量是不同的。解决方法我们需要一个数学对象它能同时包含刚体对所有可能转轴的惯性信息。这个对象就是惯性张量 (I)一个3x3的对称矩阵。推导关键将每个质点的线速度用角速度矢量 ω 和位矢 r 的叉乘表示v ω × r。然后将动能表达式展开、整理就会自然引出惯性张量 I 的定义。结果转动动能T_rot ½ ωᵀ I ω矩阵形式。惯性张量 I 的每个分量I_ij ∫ (δ_ij r² - x_i x_j) dm其中 δ_ij 是克罗内克δ函数ij时为1否则为0r² x²y²z²x_i, x_j 是质点的坐标分量。2.2 为什么是张量一个直观类比你可以把刚体的质量分布想象成一块形状不规则的石头。平动时无论你朝哪个方向推它阻碍你的是同一个质量 m一个标量。但转动时情况就复杂了。绕石头最长的那根轴比如长轴转动比较容易I小绕最短的那根轴比如短轴转动就比较费劲I大。惯性张量 I就像是一份完整的“转动阻力说明书”它用一个矩阵记录了绕x, y, z轴自身转动的惯性对角线元素 I_xx, I_yy, I_zz以及由于质量分布不对称导致的轴与轴之间的惯性耦合非对角线元素如 I_xy, I_xz。当你想要知道绕某个特定方向 n 的等效转动惯量 I_n 时不需要重新积分只需用公式I_n nᵀ I n算一下即可。这就是张量的威力——它封装了所有方向的信息。注意这里说的“绕点转动”在刚体力学中严格来说是指“绕通过该点的瞬时轴转动”。我们通常选取质心或固定点作为这个“点”这样动能和动量的表达式最简洁。3. 逐步推导亲手搭建理论框架现在我们按照上面的思路一步步进行数学推导。我会尽量详细地展示每一步的变换并解释其物理意义。3.1 第一步质点绕固定轴的转动惯量假设一个质量为 m 的质点被一根轻质刚杆连接在垂直于杆的平面内绕固定点 O 做圆周运动。设质点到 O 点的距离即转动半径为 r。平动关系质点受到的切向力 F_t 产生切向加速度 a_t满足 F_t m a_t。转动关系力 F_t 对 O 点产生的扭矩为 τ r F_t。切向加速度与角加速度的关系为 a_t r αα 是角加速度。建立联系将 F_t m a_t 和 a_t r α 代入 τ r F_t得到 τ r * (m * r α) (m r²) α定义转动惯量我们观察这个公式 τ (m r²) α。它和牛顿第二定律 F m a 形式完全一致。扭矩 τ 对应力 F角加速度 α 对应加速度 a那么括号里的 (m r²) 就对应了质量 m。因此我们定义质点绕 O 点的转动惯量为I m r²于是转动定律写为τ I α这就是转动惯量最原始的诞生过程。它衡量的是质点抵抗角加速度的能力不仅取决于质量更取决于质量到转轴的分布距离r²所以“惯”性更大。3.2 第二步刚体绕固定轴的转动惯量刚体由无数个质量微元 dm 组成。每个 dm 到转轴的垂直距离为 r。根据上一步每个 dm 对整体转动惯量的贡献是 dI r² dm。那么整个刚体的转动惯量就是所有这些微元贡献的叠加积分I ∫_body r² dm这是一个标量积分。对于形状规则、密度均匀的刚体我们可以通过建立坐标系将 dm 表示为密度 ρ 和体积微元 dV 的乘积dm ρ dV然后将积分化为对体积的三重积分来计算。例如细杆绕一端 I (1/3) m L²细杆绕质心 I (1/12) m L²实心球体绕直径 I (2/5) m R²这些常见形状的转动惯量公式最好能记住在工程估算和模型简化时非常有用。3.3 第三步刚体绕固定轴转动的动能继续考虑刚体绕某一固定轴比如z轴以角速度 ω 旋转。对于任意一个质量微元 dm它位于距离转轴为 r 的位置其线速度大小为 v ω r。它的动能为 dT ½ (dm) v² ½ (dm) (ω r)²。整个刚体的总转动动能就是 T_rot ∫_body dT ∫_body ½ ω² r² dm ½ ω² ∫_body r² dm注意到积分项 ∫ r² dm 正是我们上一步定义的转动惯量 I。所以T_rot ½ I ω²这个公式和质点的平动动能 T_trans ½ m v² 形成了完美的类比质量 m 对应转动惯量 I线速度 v 对应角速度 ω。3.4 第四步迈向三维——角速度矢量与线速度矢量在三维空间中刚体的转动轴方向不再是固定的。我们需要用矢量来描述角速度。定义角速度矢量ω其方向沿瞬时转轴按右手螺旋定则确定大小就是角速度标量 ω。对于刚体上某一点其位置矢量为r从转动中心/质心指向该点则该点的线速度v由著名的叉乘公式给出v ω × r这个公式是三维刚体运动学的核心。它同时给出了速度的大小和方向。3.5 第五步推导三维转动动能与惯性张量现在计算刚体在三维空间中的总动能。动能是标量总动能是所有质量微元动能之和 T ∫_body ½ (dm) v²但这里 v² v · v点积即速度矢量的模平方。将 v ω × r 代入 v² (ω × r) · (ω × r)利用向量三重积公式a · (b × c) b · (c × a)我们可以进行变换这是一个关键技巧 (ω × r) · (ω × r) ω · [r × (ω × r)]将等式右边再次利用叉乘公式a × (b × c) b(a·c) - c(a·b)展开 r × (ω × r) r × (ω × r) ω (r·r) - r (r·ω) ω r² - r (r·ω)其中 r² r·r x² y² z²。于是 v² ω · [ω r² - r (r·ω)] ω² r² - (ω·r)²现在把 v² 的表达式代回动能积分 T ∫ ½ dm [ω² r² - (ω·r)²]为了清晰我们写成分量形式。设 ω (ω_x, ω_y, ω_z) r (x, y, z)。则 ω² ω_x² ω_y² ω_z² ω·r ω_x x ω_y y ω_z z (ω·r)² (ω_x x ω_y y ω_z z)² ω_x² x² ω_y² y² ω_z² z² 2ω_xω_y xy 2ω_xω_z xz 2ω_yω_z yz同时ω² r² (ω_x² ω_y² ω_z²)(x² y² z²) ω_x²(x²y²z²) ω_y²(x²y²z²) ω_z²(x²y²z²)将 ω² r² 和 (ω·r)² 代入 T 的表达式并仔细合并同类项按 ω_i ω_j 组合。这个过程有点繁琐但坚持下来结果是优美的 T ½ ∫ dm [ (y²z²)ω_x² (x²z²)ω_y² (x²y²)ω_z² - 2xy ω_xω_y - 2xz ω_xω_z - 2yz ω_yω_z ]我们可以把这个式子写成紧凑的二次型形式T ½ Σ_i Σ_j ω_i I_ij ω_j ½ ωᵀ I ω其中I是一个3x3的对称矩阵称为惯性张量其分量定义为对角线元素转动惯量: I_xx ∫ (y² z²) dm I_yy ∫ (x² z²) dm I_zz ∫ (x² y²) dm非对角线元素惯性积: I_xy I_yx -∫ xy dm I_xz I_zx -∫ xz dm I_yz I_zy -∫ yz dm推导完成我们得到了三维刚体转动动能的通用表达式T_rot ½ ωᵀ I ω以及惯性张量I的完整定义。这个 I 包含了刚体质量分布的全部转动惯性信息。4. 惯性张量的深度解析与物理意义得到了公式我们还要会解读和使用它。惯性张量 I 是一个对称矩阵这意味着它有6个独立分量3个对角元3个非对角元。理解这些分量的物理意义至关重要。4.1 分量解读转动惯量与惯性积I_xx, I_yy, I_zz (对角元)分别表示刚体绕x轴、y轴、z轴这些轴通过我们选定的计算点通常是质心旋转时的转动惯量。例如I_xx ∫ (y²z²) dm因为当绕x轴旋转时质点到x轴的垂直距离平方是 (y²z²)。I_xy, I_xz, I_yz (非对角元惯性积)它们体现了刚体质量分布相对于坐标平面的不对称性。如果刚体质量分布关于某个坐标平面对称那么垂直于该平面的坐标轴与平面内坐标轴的惯性积为零。例如如果一个刚体关于xy平面对称即对于每一个(x,y,z)处的dm在(x,y,-z)处都有一个相同的dm那么 I_xz 和 I_yz 的积分中z 的贡献会正负抵消结果为零。4.2 惯性张量的坐标变换惯性张量 I 是依赖于坐标系选择的。我们通常计算的是在连体坐标系即固定在刚体上的坐标系下的惯性张量因为在这个坐标系下I 是一个常数矩阵刚体形状不变。如果坐标系发生了旋转用旋转矩阵 R 表示那么在新坐标系下的惯性张量 I‘ 需要通过合同变换得到I‘ R I Rᵀ这个性质非常有用。比如我们常常先在一个容易计算的坐标系比如沿着刚体对称轴下算出 I然后通过旋转矩阵变换到我们需要的全局坐标系或关节坐标系下。4.3 主轴变换与主转动惯量对于一个给定的刚体在某个计算点如质心总存在一个特定的直角坐标系使得惯性张量 I 在该坐标系下是对角矩阵。即所有惯性积 I_xy, I_xz, I_yz 都为零。这个坐标系的方向称为惯性主轴方向对应的坐标轴称为主轴。在对角线上的三个值称为主转动惯量通常记为 I1, I2, I3。寻找主轴和主转动惯量在数学上就是求解惯性张量矩阵 I 的特征值和特征向量问题特征值就是主转动惯量 I1, I2, I3。对应的特征向量就是三个主轴的方向在连体坐标系中的方向。实操心得在物理引擎如Bullet, PhysX或机器人仿真软件如MuJoCo, Drake中你通常需要提供的就是刚体在质心坐标系下、沿其主轴方向的主转动惯量(Ixx, Iyy, Izz)。因为在这个坐标系下惯性积为零表示形式最简单计算效率最高。软件内部会根据物体的朝向自动进行合同变换得到世界坐标系下的惯性张量。4.4 平行轴定理从质心到任意点工程上我们通常先计算刚体绕通过其质心的轴的转动惯量或惯性张量因为这样动能和动量的表达式最简洁。但如果我们需要知道刚体绕另一个平行轴比如一个关节轴的转动惯量就需要用到平行轴定理。对于转动惯量标量定理是绕任意轴的转动惯量 I等于绕通过质心的平行轴的转动惯量 I_cm加上刚体总质量 m 乘以两轴间垂直距离 d 的平方。I I_cm m d²对于惯性张量有类似的推广。假设在质心坐标系下的惯性张量为I_cm现在要计算在另一个点 P 的坐标系下的惯性张量I_P两个坐标系平行。设从质心指向 P 点的矢量为d (dx, dy, dz)则I_P I_cm m [ (d·d) E - d ⊗ d ]其中 E 是3x3单位矩阵⊗ 表示张量积d ⊗ d 是一个矩阵其 (i,j) 元素为 d_i * d_j。展开写就是 (I_P)_xx (I_cm)_xx m (dy² dz²) (I_P)_yy (I_cm)_yy m (dx² dz²) (I_P)_zz (I_cm)_zz m (dx² dy²) (I_P)_xy (I_cm)_xy - m dx dy ... 其他惯性积类似。这个定理在计算复杂机构如机械臂的动力学时必不可少因为每个连杆的转动惯量都需要转换到关节轴上计算。5. 工程计算与软件实现指南理论推导之后最终要落地到代码和实际应用。这里分享一些工程计算中的具体方法和注意事项。5.1 如何获取惯性参数CAD软件导出这是最准确和主流的方法。在SolidWorks, CATIA, Fusion 360, Blender等CAD软件中可以为模型指定材料密度软件会自动计算其质心位置、质量、以及相对于质心坐标系的主轴和主转动惯量。导出时通常是一个质量加上三个转动惯量值 (Ixx, Iyy, Izz)并假设惯性积为零因为沿主轴计算。简化几何体近似对于概念设计或快速原型可以将复杂部件近似为基本几何体长方体、圆柱体、球体的组合。查手册或使用公式计算每个基本体的惯性张量在其自身质心坐标系下然后利用平行轴定理将它们转换到整体质心坐标系下最后将所有惯性张量相加。注意惯性张量的叠加必须在同一坐标系下进行。实验测量对于已有的实物可以通过摆动实验复摆、三线摆或专门的惯性参数测量仪来测量。这种方法成本较高但适用于对精度要求极高或形状/质量分布极其不规则的情况。5.2 计算实例一个L型角钢的惯性张量假设我们有一个均质、等厚度的L型角钢边长为a宽度为b厚度为t (t远小于a,b)密度为ρ。我们想计算它相对于质心的惯性张量。步骤1建模与分解。将角钢视为两个细长矩形板1和2在角上拼接而成。板1尺寸长a宽b厚t板2尺寸长b宽a厚t。注意重叠了一个b×b×t的小立方体如果精度要求高需要扣除但作为薄板近似通常忽略。步骤2计算各板在其自身质心系下的惯性张量。对于一个薄矩形板在xy平面内厚度方向为z其自身质心系下的惯性张量近似为 I_xx (1/12) m (width² thickness²) ≈ (1/12) m * width² 因厚度很小 I_yy (1/12) m (length² thickness²) ≈ (1/12) m * length² I_zz (1/12) m (length² width²) 薄板的平面内转动惯量 惯性积为零因为对称。步骤3确定整体质心位置。由于对称性L型角钢的质心位于两个矩形板质心连线的中点不对。需要根据两个板的质量和位置加权平均计算。设板1质心在(a/2, 0, 0)板2质心在(0, b/2, 0)。总质量 m_total m1 m2 ρ t (a b b a) 2ρ t a b (假设ab时)。质心坐标 (x_c, y_c) ((m1a/2 m20)/m_total, (m10 m2b/2)/m_total) (a/4, b/4)当ab时。步骤4坐标变换。将板1和板2的惯性张量从它们自身的质心坐标系通过平行轴定理转换到步骤3计算出的整体质心坐标系下。这个转换需要用到每个板自身质心到整体质心的矢量d。步骤5张量叠加。将转换后的两个惯性张量I1_P和I2_P相加得到整个L型角钢相对于其自身质心的惯性张量I_total。这个过程虽然手工计算繁琐但清晰地展示了从基本部件构建复杂部件惯性张量的完整流程。在实际工程中我们几乎总是依赖CAD软件来完成这些计算。5.3 在代码中的表示与使用在C、Python等语言中惯性张量通常用一个3x3矩阵或6维向量存储上三角元素表示。// C 示例 (简化) struct RigidBodyInertia { double mass; Eigen::Matrix3d inertia_tensor; // 在质心坐标系下通常沿主轴方向故为对角阵 Eigen::Vector3d com; // 质心位置相对于物体局部坐标系原点 }; // 在仿真循环中计算扭矩与角加速度的关系 // τ I * α ω × (I * ω) (欧拉方程考虑了角动量变化率) Eigen::Vector3d computeAngularAcceleration(const Eigen::Matrix3d I, const Eigen::Vector3d torque, const Eigen::Vector3d omega) { // I 是当前世界坐标系下的惯性张量需要通过物体朝向的旋转矩阵R从局部坐标系变换而来I_world R * I_local * R.transpose() // 欧拉方程: I * α τ - ω × (I * ω) Eigen::Vector3d angular_momentum I * omega; Eigen::Vector3d coriolis_torque omega.cross(angular_momentum); Eigen::Vector3d alpha I.ldlt().solve(torque - coriolis_torque); // 解线性方程 I*α ... return alpha; }重要提示在动力学计算中尤其是使用欧拉方程 τ I α ω × (I ω) 时里面的惯性张量I 必须是当前时刻在世界坐标系或惯性坐标系下的值。如果你的 I_local 是物体局部坐标系连体坐标系下的常值张量那么每一仿真步都需要根据物体的当前旋转矩阵 R 进行更新I_world R * I_local * Rᵀ。忘记这一步是导致旋转运动模拟出错的常见原因。6. 常见陷阱、问题排查与心得即使理解了理论在实际应用中依然会踩坑。下面是我总结的几个高频问题和解决思路。6.1 单位制混乱这是最隐蔽也最常见的错误。转动惯量的国际单位是kg·m²。问题场景你的CAD模型可能默认是毫米(mm)制导出的转动惯量单位可能是kg·mm²或g·cm²。如果你直接把这个数值用在以米(m)为单位的物理引擎中结果会相差10^6或10^7倍导致物体旋转行为极度异常要么转不动要么疯转。排查方法检查单位确认你的CAD软件导出设置和仿真环境的世界单位。统一为米(m)、千克(kg)、秒(s)。数量级估算对于一个尺寸约0.1米、质量约1kg的物体其转动惯量大概在 0.001 到 0.01 kg·m² 量级。如果你的数值是 1000 或 0.000001那肯定单位错了。简单验证用简化公式估算。比如一个质量为m、半径为R的实心圆柱绕其几何轴转动惯量是 (1/2)mR²。用你的数据和单位算一下看数量级是否匹配。6.2 参考系错误问题混淆了“相对于质心”和“相对于局部坐标系原点”的惯性张量。很多CAD软件允许你选择计算惯性张量的参考点。你必须使用相对于质心的惯性张量作为物体的固有属性。后果如果使用了相对于非质心点的惯性张量动力学方程将不成立物体会产生不应该有的平动-转动耦合运动完全错误。解决方法在导出或计算时明确指定参考点为物体的质心(Center of Mass)。如果只能得到相对于原点的张量并且原点不是质心你需要使用平行轴定理将其转换到质心。6.3 非对角元惯性积的处理问题当物体形状没有对称面时惯性积非零。如果你错误地假设它们为零或者提供的物理引擎只接受对角形式的惯性张量很多引擎为了简化只接受三个主转动惯量就会引入误差。影响在动力学仿真中非零的惯性积会导致转动动力学的耦合。例如对一个主轴施加扭矩可能会引起绕另一个主轴的旋转。忽略它们在某些高精度仿真中会影响结果。工程取舍对于明显不对称的物体如一个曲轴、一个偏置的夹具必须考虑惯性积。要么提供完整的6自由度惯性张量如果引擎支持要么在建模时将其分解为多个对称部件的组合。对于接近对称的物体或者对旋转精度要求不高的场景忽略惯性积设为零是常见的简化可以接受。6.4 复合体的惯性张量计算错误将多个简单部件组装成一个复合体时计算总惯性张量的常见错误是直接相加局部张量未将各部件惯性张量统一到同一个坐标系通常是复合体的总质心坐标系下就相加。质心计算错误总质心位置算错导致平行轴定理应用错误。忽略连接件质量在机器人学中连接两个连杆的关节、电机、减速器的转动惯量往往很大有时甚至超过连杆本身。必须将它们折算到相应的连杆上。正确的复合体惯性张量计算流程计算每个部件在其自身质心坐标系下的惯性张量I_i_cm。计算整个复合体的总质心位置r_com质量加权平均。对于每个部件计算其质心到复合体总质心的矢量d_i。对每个部件利用平行轴定理将其惯性张量从自身质心坐标系转换到复合体总质心坐标系I_i_com I_i_cm m_i [ (d_i·d_i)E - d_i ⊗ d_i ]。将所有转换后的惯性张量相加I_total_com Σ I_i_com。6.5 数值稳定性问题在仿真中如果物体的某个主转动惯量非常小比如一个非常薄的圆盘绕其法向轴的转动惯量很大但绕面内轴的转动惯量很小在解算欧拉方程I α ...时矩阵I可能接近奇异导致角加速度α计算出现巨大数值误差仿真爆炸。应对策略在代码中避免直接对 I 求逆。使用稳定的线性系统求解器如LDLT分解、QR分解等如Eigen库中的.ldlt().solve()或.householderQr().solve()。对于已知是对角阵的情况直接使用每个轴的倒数计算。推导和理解转动惯量、惯性张量和转动动能是进入刚体动力学和机器人学深水区的必经之路。这个过程锻炼的不仅是数学能力更是将物理概念转化为工程直觉的能力。当你再看到仿真中物体那不符合预期的旋转时你的第一反应不再是盲目调整参数而是会去检查惯性张量的设置、单位、参考系。这种从原理层面对系统的把握是区分普通应用者和资深开发者的关键。