关节力矩(Joint Torques)
🛈 前置知识:关于关节约束的数学形式,见 JointConstraint.md
:::info 核心要点
- 关节力矩是主动控制输入,用于驱动角色运动
- 施加方式:在一个刚体上加 $\tau$,另一个加 $-\tau$
- 与外力不同:关节力矩只产生旋转,不产生平移
:::
什么是关节力矩
关节力矩(Joint Torques) 是角色控制中的核心概念。它是在关节上施加的主动控制力矩,用于驱动角色运动。
物理意义

✔ 关节力矩可以看作是一个刚体对另一个刚体在关节处施加的成对的力。
关键性质:
-
合力为零(牛顿第三定律): $$ \sum_{i} f_i = 0 $$
-
合力矩不为零:每个力作用点不同,会对质心产生力矩
-
力矩与关节位置无关:只与力的分布有关
为什么不能只用外力,而需要关节力矩?
💡 常见问题:既然外力 $f$ 也能产生力矩($\tau = r \times f$),为什么还需要专门的关节力矩 $\tau$?直接在外力 $f$ 中施加力,然后求解方程组不就可以了吗?
这是一个非常深刻的问题。答案是:外力 $f$ 和关节力矩 $\tau$ 作用在不同的方向上,效果完全不同。
1. 外力的效果:平动 + 转动
在刚体上某点施加外力 $f$(作用点距离质心为 $r$):
$$ \text{线加速度:} \quad a = \frac{f}{m} $$
$$ \text{角加速度:} \quad \tau = r \times f $$
外力同时产生:
- ✅ 线加速度(质心平动)
- ✅ 角加速度(绕质心旋转)
2. 关节力矩的效果:纯转动
关节力矩 $\tau$ 直接作用在关节自由度上:
$$ \text{角加速度:} \quad \alpha = I^{-1}\tau $$
关节力矩只产生:
- ❌ 无线加速度
- ✅ 只有角加速度(绕关节旋转)
3. 问题 1:外力无法产生"纯旋转"
场景:想让前臂绕手肘旋转(比如弯曲手臂)
用外力 $f$
施加力 f
↓
┌────┐
│前臂│
└────┘
↖
手肘
- 力 $f$ 作用在前臂上 → 前臂既旋转又平移
- 但手肘关节有约束力 $J^T\lambda$ → 防止平移
- 结果:约束力会抵消大部分外力
问题:大部分外力被约束力"浪费"了,效率极低。
用关节力矩 $\tau$
τ
┌────┐
│前臂│
└────┘
↖
手肘
- 力矩 $\tau$ 直接作用在手肘关节
- 只产生旋转,不产生平移
- 约束力不需要抵消任何东西
优势:能量直接用于旋转,效率高。
4. 问题 2:生物力学的真实性
肌肉如何工作
肌肉附着在骨骼上,收缩时:
肌肉收缩
↙ ↘
━━━┻━━━━━━━━┻━━━
骨骼 1 骨骼 2
↖ ↗
关节
- 肌肉拉力是内力(成对出现,合力为零)
- 但产生力矩(因为作用点不同)
- 效果:关节旋转,但身体质心不受直接影响
用外力模拟肌肉的缺陷
如果用力 $f$ 模拟肌肉:
- 需要在两个刚体上分别施加 $f$ 和 $-f$
- 必须保证作用点精确,否则会产生不期望的平移
- 计算复杂,且不符合生物力学
用关节力矩的优势
关节力矩直接抽象了肌肉的作用:
- 自动满足合力为零($\tau$ 和 $-\tau$)
- 直接驱动关节旋转
- 符合生物力学直觉
5. 问题 3:约束力与关节力矩作用方向正交
约束力只在约束方向上有力
$$ Jv = 0 \quad \Rightarrow \quad f_c = J^T\lambda $$
约束力 $J^T\lambda$ 只在被约束的方向上有分量。
关节力矩在允许的自由度上作用
| 关节类型 | 约束的自由度 | 允许的自由度 | 关节力矩作用在 |
|---|---|---|---|
| 球铰 | 3 平移 | 3 旋转 | 3 个旋转方向 |
| 铰链 | 3 平移 + 2 旋转 | 1 旋转 | 1 个旋转轴 |
关键:关节力矩作用在允许运动的方向上,约束力作用在被约束的方向上。两者正交,互不干涉。
6. 问题 4:数学上可行,但物理上低效
如果只用力,能解出方程吗?
数学上:可以
$$ M\dot{v} + C = f + J^T\lambda $$
给定 $f$,求解 $\lambda$ 和 $\dot{v}$,数学上完全可行。
物理上:效率低且不自然
| 问题 | 原因 |
|---|---|
| 能量浪费 | 大部分外力被约束力抵消 |
| 控制复杂 | 需要精确设计力的作用点和方向 |
| 不真实 | 不符合肌肉驱动的生物力学 |
| 数值不稳定 | 约束力可能变得非常大 |
7. 直观类比:推门 vs. 扭门把手
| 方式 | 效果 |
|---|---|
| 推门板(外力 $f$) | 门会平移 + 旋转,铰链承受很大力 |
| 扭门把手(力矩 $\tau$) | 门纯旋转,铰链受力小 |
关节力矩就像"门把手",直接作用在旋转自由度上。
8. 总结:外力 vs. 关节力矩
| 外力 $f$ | 关节力矩 $\tau$ | |
|---|---|---|
| 效果 | 平动 + 转动 | 纯转动 |
| 效率 | 低(被约束力抵消) | 高(直接驱动) |
| 真实性 | 不符合肌肉机制 | 符合生物力学 |
| 控制难度 | 复杂 | 简单直接 |
| 用途 | 重力、风力、接触力 | 肌肉驱动、电机控制 |
✔ 结论:外力 $f$ 和关节力矩 $\tau$ 不等价。外力会产生不期望的平移,需要约束力抵消;关节力矩直接驱动旋转,更符合控制和生物力学的需求。
关节力矩的数学推导
从力到力矩的转化
考虑两个刚体通过关节连接,在关节处施加一对大小相等、方向相反的力 $f_i$。
对刚体 1 的力矩: $$ \tau_1 = \sum_{i} (r_1 + r_i) \times f_i = r_1 \times \sum_{i} f_i + \sum_{i} r_i \times f_i $$
由于 $\sum_{i} f_i = 0$,得: $$ \tau_1 = \sum_{i} r_i \times f_i $$
对刚体 2 的力矩: $$ \tau_2 = -\sum_{i} r_i \times f_i = -\tau_1 $$
✔ 结论:在关节上施加力矩 $\tau$ 等价于:
- 在一个刚体上施加 $\tau$
- 在另一个刚体上施加 $-\tau$

在运动方程中施加关节力矩
两刚体系统
对于两个刚体通过关节连接的系统,运动方程为:
$$ M\begin{bmatrix} \dot{v}_1 \\ \dot{\omega}_1 \\ \dot{v}_2 \\ \dot{\omega}_2 \end{bmatrix} + \begin{bmatrix} 0 \\ \omega_1 \times I_1 \omega_1 \\ 0 \\ \omega_2 \times I_2 \omega_2 \end{bmatrix} = \begin{bmatrix} 0 \\ \tau \\ 0 \\ -\tau \end{bmatrix} + J^T\lambda $$
$$ Jv = 0 $$
| 项 | 含义 |
|---|---|
| $\begin{bmatrix} 0 & \tau & 0 & -\tau \end{bmatrix}^T$ | 关节力矩(主动控制) |
| $J^T\lambda$ | 约束力(被动约束) |
✔ 惯例:通常在子刚体上加 $\tau$,在父刚体上加 $-\tau$。
关节力矩 vs. 约束力
理解关节力矩与约束力的区别是理解角色仿真的关键:
| 特性 | 关节力矩 $\tau$ | 约束力 $J^T\lambda$ |
|---|---|---|
| 来源 | 肌肉收缩、电机驱动 | 关节连接、接触 |
| 方向 | 沿关节轴向 | 由约束条件决定 |
| 计算 | 由控制器生成(如 PD 控制) | 由约束求解器计算 |
| 作用 | 主动驱动运动 | 被动维持约束 |
| 能量 | 可以做功(消耗能量) | 不做功(理想约束) |
关节力矩在控制中的位置
1. 驱动角色运动
关节力矩是角色运动的直接驱动力:
- 行走时腿部关节的力矩
- 抓取时手臂关节的力矩
- 转身时躯干关节的力矩
2. 与肌肉的关系
在生物力学中,关节力矩对应肌肉收缩产生的力矩:
- 伸肌群收缩 → 伸展关节
- 屈肌群收缩 → 弯曲关节
3. 在控制中的位置
$$ \text{控制器} \xrightarrow{\text{生成}} \tau \xrightarrow{\text{仿真}} \text{运动} $$
- PD 控制:根据期望角度和当前角度计算 $\tau$
- 轨迹优化:优化 $\tau$ 序列以实现目标运动
- 强化学习:学习策略网络输出 $\tau$
多刚体系统的关节力矩
对于 $n$ 个刚体、$m$ 个关节的系统:
$$ M\dot{v} + C(x,v) = f_{\text{ext}} + f_{\text{joint}} + J^T\lambda $$
其中 $f_{\text{joint}}$ 是所有关节力矩的堆叠向量。
✔ 关键点:每个关节力矩 $\tau_i$ 只影响其连接的两个刚体,一个加 $\tau_i$,另一个加 $-\tau_i$。
下一步:如何计算关节力矩?
本章介绍了关节力矩是什么,但还有一个关键问题:给定目标状态,如何计算需要的关节力矩 $\tau$?
这将在 Proportional-Derivative Control 中详细讲解。
核心思想(PD 控制): $$ \tau = k_p (\theta_{\text{des}} - \theta_{\text{curr}}) + k_d (\dot{\theta}{\text{des}} - \dot{\theta}{\text{curr}}) $$
| 章节 | 与关节力矩的关系 |
|---|---|
| Proportional-Derivative Control | 如何计算关节力矩 $\tau$ |
| Controlling Characters | PD 控制在角色上的应用 |
| Static Balance | 平衡时的关节力矩计算 |
| Tracking | 优化关节力矩序列跟踪参考运动 |
| Learning | 学习策略输出关节力矩 |
小结
关节力矩的核心要点:
- 物理本质:成对的内力矩,合力为零,合力矩不为零
- 施加方式:在一个刚体上加 $\tau$,另一个加 $-\tau$
- 控制作用:主动驱动角色运动的输入
- 与约束力的区别:$\tau$ 是主动的,$J^T\lambda$ 是被动的
- 与外力的区别:关节力矩只产生旋转,外力产生平动 + 旋转
运动方程的统一形式: $$ M\dot{v} + C(x,v) = f_{\text{ext}} + f_{\text{joint}} + J^T\lambda $$
$$ Jv = 0 $$
本文出自 CaterpillarStudyGroup,转载请注明出处。 https://caterpillarstudygroup.github.io/GAMES105_mdbook/