4. 速度运动学:雅可比矩阵——关节速度与末端速度的关系
好,我们进入第四章。前面几章我们把位置、姿态、正逆运动学都聊了一遍。说白了,那些都是在讲“静态”的事——机器人末端在哪儿、怎么转。但人形机器人要动起来,光知道位置可不够。你得知道:关节转多快,末端才能跑多快。
这就是速度运动学要干的事。核心工具就是——雅可比矩阵。
4.1 为什么需要雅可比矩阵?
先想一个问题:你让机器人抬手,肩关节转1度,手腕能移动几厘米?这取决于当前手臂的姿势。同一个关节速度,在不同姿态下,末端速度完全不一样。
我刚开始做机器人控制时,犯过一个低级错误:以为关节速度和末端速度是简单的比例关系。结果一跑起来,末端抖得跟筛糠似的。后来才明白,雅可比矩阵就是那个“比例系数”,但它不是常数,是随姿态变化的。
雅可比矩阵的本质,就是关节空间到操作空间的线性映射。数学上写为:
ẋ = J(q) · q̇
其中:
ẋ —— 末端速度(6维:3个线速度 + 3个角速度)
q̇ —— 关节速度(n维)
J(q) —— 雅可比矩阵(6×n矩阵,随关节位置变化)
你想想看,这个式子多漂亮。它把复杂的运动关系,浓缩成一个矩阵乘法。但漂亮归漂亮,用起来可有不少坑。
4.2 雅可比矩阵的构造方法
构造雅可比矩阵,我习惯分两步走:先求位置雅可比,再求姿态雅可比。
4.2.1 位置雅可比
对于旋转关节,末端位置对关节角的偏导,就是该关节轴方向向量与末端到关节的矢量的叉积。公式长这样:
J_v_i = z_i × (p_end - p_i)
其中 z_i 是第 i 个关节的旋转轴方向,p_end 是末端位置,p_i 是关节位置。
对于移动关节,更简单:
J_v_i = z_i
就是关节轴的方向向量本身。
4.2.2 姿态雅可比
姿态部分稍微绕一点。对于旋转关节,末端角速度就是关节轴方向:
J_ω_i = z_i
对于移动关节,角速度贡献为0:
J_ω_i = 0
把位置部分和姿态部分拼起来,就得到完整的雅可比矩阵:
J = [J_v; J_ω] (6×n)
我的小技巧:实际编程时,我习惯先初始化一个6×n的零矩阵,然后逐列填充。每列对应一个关节的贡献。这样不容易漏掉维度。
4.3 一个简单的2连杆例子
光说理论太干。我们拿一个平面2连杆臂来算一遍。假设杆长 L1、L2,关节角 q1、q2。
末端位置:
x = L1*cos(q1) + L2*cos(q1+q2)
y = L1*sin(q1) + L2*sin(q1+q2)
对 q1、q2 求偏导,得到位置雅可比:
J_v = [
[-L1*sin(q1) - L2*sin(q1+q2), -L2*sin(q1+q2)],
[ L1*cos(q1) + L2*cos(q1+q2), L2*cos(q1+q2)]
]
姿态部分(平面内只有绕z轴的旋转):
J_ω = [1, 1]
拼起来就是2连杆的完整雅可比矩阵。你看,它确实只跟当前关节角有关。
关键点:雅可比矩阵的每一列,物理意义是“该关节单位速度对末端速度的贡献”。这个理解很重要,后面做奇异点分析时会用到。
4.4 雅可比矩阵的逆与伪逆
有了正问题,自然要问反问题:给定末端速度,怎么求关节速度?
如果雅可比矩阵是方阵且可逆,直接求逆:
q̇ = J⁻¹ · ẋ
但人形机器人通常是冗余的——关节数多于6个。这时候 J 不是方阵,没有常规逆矩阵。怎么办?用伪逆。
q̇ = J⁺ · ẋ
其中 J⁺ = Jᵀ(J·Jᵀ)⁻¹。这个伪逆给出的解,是所有可行解中关节速度范数最小的那个。
我曾经踩过的坑:伪逆在奇异点附近会出问题。当 J 接近奇异时,J·Jᵀ 接近奇异,求逆会爆炸。关节速度会变得极大,电机根本跟不上。后来我加了阻尼最小二乘法(DLS),才稳住。
4.5 奇异点分析
说到奇异点,这是雅可比矩阵绕不开的话题。当机器人处于某些特殊姿态时,雅可比矩阵的秩会下降。这时候:
- 某些方向的末端速度无法实现
- 关节速度理论上会趋于无穷大
- 控制精度急剧下降
常见的奇异点类型:
| 类型 | 表现 | 典型场景 |
|---|---|---|
| 边界奇异 | 手臂完全伸直或折叠 | 肘关节锁死 |
| 内部奇异 | 腕关节对齐 | 手腕翻转极限 |
| 结构奇异 | 关节轴线共面 | 特定构型 |
检测奇异点的方法很简单:计算 det(J·Jᵀ),如果接近0,就说明离奇异点不远了。
4.6 本章知识体系
下面这张图,把本章的核心逻辑串起来了。我建议你多看几遍,理清脉络。
4.7 实际应用中的注意事项
最后,聊几个我在项目中遇到的实战问题。
第一,雅可比矩阵的更新频率。 人形机器人运动很快,雅可比矩阵必须实时更新。我一般控制在1kHz以上,也就是每1毫秒重新算一次。算得太慢,控制就滞后了。
第二,数值稳定性。 求伪逆时,J·Jᵀ 的条件数很重要。条件数太大,说明接近奇异。我习惯在代码里加一个阈值判断,条件数超过1000就触发保护逻辑。
第三,冗余利用。 人形机器人关节多,冗余度可以用来做次要任务,比如避障、优化能耗。这需要用到零空间投影:
q̇ = J⁺ · ẋ + (I - J⁺·J) · q̇₀
其中 q̇₀ 是次要任务的关节速度。这个公式很实用,我几乎每个项目都会用到。
一个小建议:刚开始学雅可比矩阵时,别急着上高维。先在2D平面上把2连杆、3连杆的雅可比算清楚,再推广到6轴。基础打牢了,后面才不容易翻车。
好了,这一章就到这里。雅可比矩阵是连接关节控制和末端运动的桥梁,后面讲轨迹跟踪时,你会反复用到它。把基础概念和计算方法吃透,后面就顺了。