运动方程中的力与力矩

本章定位:澄清物理仿真运动方程中 力矩 的来源与含义。


一、力与力矩的作用效果

施加力/力矩会得到的效果

力加在质心上,只会导致平移,不会导致旋转。
✂ 在物体边缘施加力,等价于在质心施加力,并施加一个导致旋转的力矩。
✂ 在质心上施加一个力矩,等价于施加一对大小相同方向相反的力。在质心处的合力为零,不会产生位移,只会产生旋转。
✂ 力矩只是数学上的概念。

怎么对角色产生效果

✂ 想让角色做指定动作,不能直接修改其状态,而是控制力影响状态。

✂ 为了驱动角色,可以单独对每个刚体施加力或力矩。
✂ 也可以在关节上施加力矩。

✂ 回顾前面公式,力和力矩都是施加在刚体上的,如何施加在关节上?


二、运动方程回顾

对于有 \(n\) 个刚体、\(m\) 个关节的角色系统,运动方程为:

$$ M\dot{v} + C(x,v) = f_{\text{ext}} + f_{\text{joint}} + J^T\lambda $$

$$ Jv = 0 $$

方程中有三个力/力矩项,它们的来源和含义完全不同:

名称来源是否主动
\(f_{\text{ext}}\)外力外部环境被动
\(f_{\text{joint}}\)关节力矩控制器主动
\(J^T\lambda\)约束力约束求解器被动

三、外力 (f_{\text{ext}})

定义

外力 是来自角色外部的力,包括:

外力类型说明计算公式
重力地球引力\(f_g = m \cdot g\)
风力环境气流经验模型
接触力地面/物体的支撑力由接触模型计算
摩擦力接触面的切向阻力\(f_t = -\mu f_n \frac{v_{\parallel}}{|v_{\parallel}|}\)

外力的效果

外力作用在刚体上,会同时产生两种效果:

     外力 f
       ↓
   ┌───────┐
   │ 刚体  │ ← 质心
   └───────┘
       ↑
      r (作用点距离质心)

平移效果(无论作用在哪里): $$ a = \frac{f_{\text{ext}}}{m} $$

旋转效果(仅当不经过质心时): $$ \tau_{\text{ext}} = r \times f_{\text{ext}} $$

关键:外力产生的力矩 \(\tau_{\text{ext}}\) 已经包含在 \(f_{\text{ext}}\) 中,不需要单独列一项。

重要性质

性质说明
被动性外力不由控制器决定,由物理环境决定
无控制器时仍存在Ragdoll 只受外力,也会运动
力矩在 \(f_{\text{ext}}\) 中外力不经过质心产生的力矩,算在 \(f_{\text{ext}}\) 里

四、关节力矩 (f_{\text{joint}})

定义

关节力矩 是控制器生成的主动控制输入,用于驱动角色运动:

$$ f_{\text{joint}} = \begin{bmatrix} 0 & \tau_1 & 0 & -\tau_1 & \cdots \end{bmatrix}^T $$

来源

来源说明
肌肉收缩生物角色的肌肉产生力矩
电机驱动机器人关节的电机产生力矩
控制器输出PD 控制、强化学习策略等

施加方式

关节力矩 \(\tau\) 作用在关节连接的两个刚体上:

        τ (子刚体)
    ┌────┐
    │前臂│  ← 子刚体
    └────┘
       ↖
      手肘关节
    ┌────┐
    │上臂│  ← 父刚体
    └────┘
       -τ (父刚体)

规则

  • 子刚体上加 \(\tau\)
  • 父刚体上加 \(-\tau\)
  • 合力为零:\(\tau + (-\tau) = 0\)(满足牛顿第三定律)

关节力矩的效果

关节力矩只产生纯旋转,不产生平移:

$$ \alpha = I^{-1}\tau $$

与外力的区别:外力同时产生平动和转动,关节力矩只产生转动。

重要性质

性质说明
主动性由控制器主动生成
无控制器时为零Ragdoll 的 \(f_{\text{joint}} = 0\)
不在 \(f_{\text{ext}}\) 中关节力矩是独立项
外力不产生关节力矩即使外力不经过质心,产生的力矩也在 \(f_{\text{ext}}\) 中,不在 \(f_{\text{joint}}\) 中

五、两种力矩的对比

外力产生的力矩 vs. 关节力矩

维度外力产生的力矩 \(\tau_{\text{ext}}\)关节力矩 \(\tau_{\text{joint}}\)
来源外力不经过质心控制器生成
在方程中的位置\(f_{\text{ext}}\) 中(通过 \(r \times f\) 计算)\(f_{\text{joint}}\) 中
是否需要控制器否(Ragdoll 也有)是(无控制器则为 0)
物理本质被动力矩主动控制输入
例子重力让手臂自然下垂主动抬手

直观类比

场景力矩来源在方程中的位置
风吹门风力不经过质心\(f_{\text{ext}}\)
你推门手施加的力矩\(f_{\text{joint}}\)

六、无控制器时的情况(Ragdoll)

运动方程

当没有控制器时:

$$ f_{\text{joint}} = 0 $$

方程简化为:

$$ M\dot{v} + C(x,v) = f_{\text{ext}} + J^T\lambda $$


为什么 Ragdoll 的关节会旋转?

即使 \(f_{\text{joint}} = 0\),Ragdoll 仍然会运动,原因是:

  1. 外力(重力)作用在每个刚体上
  2. 外力不经过质心时产生力矩(在 \(f_{\text{ext}}\) 中)
  3. 关节约束限制刚体不分离,但允许绕关节旋转
  4. 结果:刚体绕关节被动旋转

被动旋转 vs. 主动旋转

旋转类型来源方程中的项例子
被动旋转外力产生的力矩\(f_{\text{ext}}\)Ragdoll 倒下、手臂自然摆动
主动旋转关节力矩\(f_{\text{joint}}\)主动抬手、走路摆臂

七、总结

关键要点

  1. \(f_{\text{ext}}\)(外力)

    • 来自外部环境(重力、风力、接触力)
    • 包含外力产生的力矩(\(r \times f\))
    • 无控制器时仍然存在
  2. \(f_{\text{joint}}\)(关节力矩)

    • 来自控制器(肌肉、电机)
    • 只包含控制器主动生成的力矩
    • 不包含外力产生的力矩
    • 无控制器时为零
  3. 外力产生的力矩永远在 \(f_{\text{ext}}\) 中,与 \(f_{\text{joint}}\) 无关。

一张表理解

$$ \begin{array}{c|c|c} \text{项} & \text{包含什么} & \text{无控制器时} \ \hline f_{\text{ext}} & \text{外力 + 外力产生的力矩} & \text{仍然存在} \ f_{\text{joint}} & \text{仅控制器生成的关节力矩} & 0 \ J^T\lambda & \text{约束力求解结果} & \text{仍存在(维持约束)} \ \end{array} $$


本文出自 CaterpillarStudyGroup,转载请注明出处。 https://caterpillarstudygroup.github.io/GAMES105_mdbook/


八、前向动力学与后向动力学

Forward Dynamics vs. Inverse Dynamics

✂ 运动方程,本质上是建立力与加速度之间的联系。 ✂ 前向与后向,是一个运动方程的两种用法。 ✂ 仿真器为前向部分,控制器为逆向部分。


前向动力学(Forward Dynamics)

已知:力/力矩 \(f, \tau\)

求解:加速度 \(\dot{v}\)

$$ \dot{v} = M^{-1}(f_{\text{ext}} + f_{\text{joint}} + J^T\lambda - C(x,v)) $$

用途

  • 物理仿真器
  • 给定控制输入,预测角色会如何运动

后向动力学(Inverse Dynamics)

已知:加速度 \(\dot{v}\)(期望的运动)

求解:力/力矩 \(f, \tau\)

$$ f_{\text{joint}} = M\dot{v} + C(x,v) - f_{\text{ext}} - J^T\lambda $$

用途

  • 控制器设计
  • 给定目标运动,计算需要的关节力矩

对比

前向动力学后向动力学
已知力/力矩加速度(期望运动)
求解加速度力/力矩
用途仿真器控制器
问题类型正向问题逆向问题

关键:前向和后向是同一个运动方程的两种用法,只是已知量和求解量不同。