运动学基础回顾:正逆运动学、雅可比矩阵、奇异性分析

各位同学,欢迎来到第二章。说实话,很多做轨迹优化的朋友,最后栽跟头都栽在运动学基础上。不是算法不够好,而是对机器人本身的运动学特性理解不够深。今天我们就来把这块地基夯实。

我个人习惯把运动学比作机器人的「骨架」。你想想看,如果连骨架怎么动都搞不清楚,谈何优化轨迹?所以这一章,我们重点回顾三个核心模块:正逆运动学、雅可比矩阵、奇异性分析。别觉得基础,这里面坑不少。

2.1 正运动学:从关节空间到任务空间

正运动学,说白了就是:给定关节角度,求末端位姿。这是最直观的映射关系。

我刚开始做机器人时,总觉得正运动学就是套 DH 参数公式,没什么难度。直到有一次,我在调试一个六轴协作臂时,发现末端位置总是偏了 2 毫米。查了半天,原来是 DH 参数中一个连杆的扭转角符号搞反了。嗯,从那以后,我每次建 DH 模型都会手动验证至少三个特殊位姿。

核心公式(标准 DH 法):

T_i = Rot(z, θ_i) · Trans(z, d_i) · Trans(x, a_i) · Rot(x, α_i)

其中:
θ_i — 关节角(变量)
d_i — 连杆偏距
a_i — 连杆长度
α_i — 连杆扭转角

正运动学的计算流程其实很固定:

  1. 建立各连杆坐标系,确定 DH 参数表
  2. 逐关节计算齐次变换矩阵 T_i
  3. 连乘得到末端位姿矩阵 T_0n = T_1 · T_2 · ... · T_n
  4. 从 T_0n 中提取位置向量和旋转矩阵

这里有个小技巧——我建议你在代码里把每个 T_i 单独打印出来,逐级验证。很多 bug 其实就藏在中间某一级。

2.2 逆运动学:从任务空间回到关节空间

逆运动学就麻烦多了。给定末端位姿,求关节角度。这是个多解、甚至无解的问题。

我在项目中遇到过最头疼的事:一个六轴机器人,末端要走到某个点,结果逆解出来 8 组解,其中 4 组关节超限,2 组会撞到工作台,剩下 2 组里还有 1 组会导致奇异。你说怎么选?

所以逆运动学不只是求解,更是选解。

求解方法 适用场景 优缺点
解析法(封闭解) 满足 Pieper 准则的机器人 速度快、精度高;但通用性差
数值法(迭代法) 任意构型机器人 通用性强;但可能不收敛、依赖初值
几何法 低自由度或特殊构型 直观;但复杂构型难以推导

我的经验:对于轨迹优化,优先用解析法。如果必须用数值法,一定要做多初值尝试,并加入关节限位约束。我曾经因为初值选得不好,导致迭代发散,机器人差点撞到夹具。

2.3 雅可比矩阵:速度与力的桥梁

雅可比矩阵,这是轨迹优化里最核心的工具之一。它建立了关节速度与末端速度之间的线性映射关系。

公式很简单:ẋ = J(q) · q̇

但你别小看这个 J。它不仅是速度映射,还隐含了力映射(虚功原理):τ = Jᵀ · F

我在实际项目中,经常用雅可比矩阵做两件事:

  • 轨迹速度规划:根据末端期望速度,反算关节速度指令
  • 力控/阻抗控制:通过 Jᵀ 将末端力映射到关节力矩

计算雅可比矩阵有两种常见方法:

  1. 微分法:对正运动学方程求偏导,适合解析推导
  2. 矢量法:利用运动学链的几何关系直接构造,适合编程实现

注意:雅可比矩阵是位姿相关的!不同构型下,J 矩阵的元素差异很大。在轨迹优化中,如果你用固定雅可比去规划高速轨迹,大概率会出问题。

2.4 奇异性分析:轨迹优化的「雷区」

奇异性,说白了就是雅可比矩阵秩亏损的状态。此时机器人会丢失某个方向上的运动能力。

为什么会这样?因为当机器人处于某些特殊构型时,关节运动无法产生某个方向的末端运动。比如肘关节伸直时,你无法再让末端沿某个方向移动。

我遇到过最典型的案例:一个焊接机器人,在焊缝拐角处突然「卡住」,关节速度瞬间飙升到极限。后来一查,就是进入了奇异位形附近。

常见的奇异类型:

  • 边界奇异:关节到达物理限位
  • 内部奇异:关节轴线共线或共面(如腕部奇异、肘部奇异)
  • 算法奇异:数值求解时雅可比矩阵接近奇异

判断奇异的方法很简单:计算 det(J · Jᵀ) 或条件数 cond(J)。当条件数趋近无穷大时,就说明离奇异不远了。

轨迹优化中的避奇异策略:

  • 在代价函数中加入可操作度惩罚项(w = sqrt(det(J · Jᵀ)))
  • 设置奇异回避区域,当条件数超过阈值时调整路径
  • 使用阻尼最小二乘法(DLS)处理近奇异时的数值不稳定

2.5 知识体系总览

下面这张图,是我自己梳理的运动学基础与轨迹优化的关系。你看完应该能明白,为什么我说运动学是轨迹优化的「地基」。

运动学基础与轨迹优化关系图 运动学基础与轨迹优化关系 轨迹优化目标 正逆运动学 雅可比矩阵 奇异性分析 正运动学 DH参数 → 齐次变换 → 末端位姿 逆运动学:多解、选解、数值迭代 速度/力映射 ẋ = J·q̇ | τ = Jᵀ·F 微分法 / 矢量法构造 奇异检测与回避 det(J·Jᵀ) → 可操作度 阻尼最小二乘法(DLS) 轨迹规划 · 速度优化 · 力控 · 避奇异 · 时间最优 运动学基础是轨迹优化的「地基」——地基不稳,上层算法再漂亮也白搭 每个模块都直接影响轨迹的可行性、平滑性和安全性

2.6 实战中的几个坑

最后,分享几个我踩过的坑,希望能帮你省点时间:

  • DH 参数顺序别搞错:标准 DH 和改进 DH 的坐标系定义不同,混用会导致末端位姿完全错误。我建议你统一用一种,并在代码注释里标明。
  • 逆解多解处理:不要只取第一组解。我习惯按「关节位移最小 → 远离奇异 → 避障」的优先级排序选解。
  • 雅可比矩阵的维度:平面机器人是 3×n,空间机器人是 6×n。写代码时注意维度匹配,不然矩阵乘法会报错。
  • 奇异附近不要硬算:当条件数 > 1000 时,直接用伪逆会放大噪声。改用阻尼最小二乘法,或者干脆绕路。

一个小工具推荐:我平时调试运动学时,会用 MATLAB 的 Robotics Toolbox 或者 Python 的 Pinocchio 库。它们能快速验证你的 DH 参数和雅可比计算是否正确。别太相信手算,尤其是超过 3 个关节的机器人。