4. 逆运动学:逆运动学问题描述、解析法与数值法、多解与奇异位形

好,咱们接着聊运动学。上一章我们讲了正运动学,说白了就是给定关节角度,算出末端执行器在哪。那逆运动学呢?正好反过来——我知道末端要去哪,你给我算出每个关节该转多少度。

听起来好像就是解个方程?嗯,没那么简单。我在项目里吃过不少亏,今天就把这些坑一个个给你指出来。

4.1 逆运动学问题描述

先给个正式定义:逆运动学(Inverse Kinematics, IK)就是已知末端执行器在笛卡尔空间的位置和姿态,求解机器人各关节变量的过程。

数学上可以写成:

给定:T = [R p; 0 1]  (末端位姿矩阵)
求解:θ₁, θ₂, ..., θₙ  (各关节角度)
满足:f(θ₁, θ₂, ..., θₙ) = T

这里 f 就是正运动学函数。说白了,逆运动学就是正运动学的反函数。

但问题来了——这个反函数通常不好求。为什么?

  • 非线性:关节角度和末端位置之间是三角函数关系,不是简单的线性映射
  • 多解性:同一个末端位置,可能有多种关节角度组合
  • 无解:有些位置机器人根本够不着
  • 奇异位形:某些位形下,关节速度会变得无穷大

我个人习惯把逆运动学问题分成两类:一类是解析法能解的,一类是只能靠数值法硬算的。下面我们分别来看。

4.2 解析法

解析法,就是通过代数或几何推导,直接写出关节角度的表达式。优点是快、准、稳。缺点是——不是所有机器人都能用。

什么样的机器人能用解析法?满足 Pieper 准则的机器人:三个相邻关节轴交于一点,或者三个相邻关节轴平行。大多数工业六轴机器人(比如 KUKA、ABB)都满足这个条件。

核心思路:把逆运动学问题拆解成多个子问题,每个子问题对应一个或两个关节的求解。

举个例子,一个简单的 2R 平面机械臂:

已知:末端位置 (x, y),杆长 L₁, L₂
求:关节角 θ₁, θ₂

解:
1. 先求 θ₂(肘关节):
   cosθ₂ = (x² + y² - L₁² - L₂²) / (2L₁L₂)
   θ₂ = ±arccos(cosθ₂)  // 注意有正负两个解!

2. 再求 θ₁(肩关节):
   β = atan2(y, x)
   α = atan2(L₂sinθ₂, L₁ + L₂cosθ₂)
   θ₁ = β - α

你看,这里就出现了多解——肘关节可以向上弯,也可以向下弯。这就是所谓的「肘上」和「肘下」构型。

我的经验:在实际项目中,我一般优先用解析法。因为速度快,而且能明确知道有多少组解。我曾经在一个焊接机器人项目里,就因为用了数值法没控制好解的选择,导致机器人走了一条奇怪的路径,差点撞到工件。后来换成解析法,把多解情况全部枚举出来,再根据避障和关节限位筛选,问题就解决了。

4.3 数值法

当机器人不满足 Pieper 准则,或者结构比较复杂时,解析法就不好使了。这时候就得请出数值法。

数值法的核心思想是迭代逼近:先猜一组关节角度,算一下末端位置,看看和目标的差距,然后调整关节角度,再算,再调……直到误差足够小。

最常用的方法是牛顿-拉夫森法雅可比伪逆法

算法流程(雅可比伪逆法):
1. 初始化:θ = θ₀(初始猜测)
2. 循环直到收敛:
   a. 计算当前末端位姿 T_curr = f(θ)
   b. 计算误差 ΔT = T_desired - T_curr
   c. 如果 ||ΔT|| < ε,跳出循环
   d. 计算雅可比矩阵 J(θ)
   e. 计算关节增量 Δθ = J⁺ · ΔT  (J⁺ 是 J 的伪逆)
   f. 更新 θ = θ + Δθ
3. 返回 θ

注意:数值法有几个坑:

  • 初始值敏感:猜得不好可能不收敛
  • 局部最优:可能找到的不是你要的那组解
  • 奇异位形附近:雅可比矩阵会病态,增量变得很大

我曾经在一个协作机器人项目里,用数值法做逆运动学。有一次机器人突然抖了一下,我一看日志,原来是走到了奇异位形附近,雅可比矩阵的伪逆算出来的关节速度大得离谱。从那以后,我每次用数值法都会加一个阻尼项——这就是阻尼最小二乘法(DLS),也叫 Levenberg-Marquardt 方法。

4.4 多解问题

逆运动学有多解,这是常态。一个六轴机器人,同一个末端位姿,可能有 8 组甚至 16 组解。

常见的多解情况:

  • 肘上/肘下:肘关节的两种弯曲方向
  • 肩左/肩右:肩关节的两种朝向
  • 腕翻转:腕关节的两种姿态

这么多解,选哪个?

我个人习惯按以下优先级筛选:

  1. 关节限位:先排除超出关节角度范围的解
  2. 避障:排除会和环境碰撞的解
  3. 最短路径:选择离当前关节角度最近的解
  4. 运动平滑性:选择能让运动更平滑的解

避坑指南:我曾经在调试一个喷涂机器人时,发现机器人每次经过同一个点,关节角度都不一样。后来查了半天,发现是逆运动学求解器每次随机选了一组解。解决方案很简单——加入「解连续性」约束,让相邻时刻的解尽量接近。

4.5 奇异位形

奇异位形,说白了就是机器人「卡住」的位置。在这个位置,机器人会失去某个方向的运动能力。

从数学上看,奇异位形就是雅可比矩阵 J 的秩降低的时候。这时候 J 不可逆,关节速度和末端速度的关系变得很奇怪。

常见的奇异位形:

类型 描述 例子
边界奇异 机器人完全伸直或完全折叠 肘关节 0° 或 180°
内部奇异 两个或多个关节轴共线 腕关节的 4、6 轴共线
肩部奇异 肩关节和腕关节中心重合 六轴机器人肩部奇异

奇异位形有什么危害?

  • 关节速度会变得非常大(理论上无穷大)
  • 机器人可能突然加速,造成危险
  • 数值法求解会发散

我的教训:有一次在调试一个码垛机器人,程序里没做奇异位形检测。结果机器人走到某个位置时,第 4 关节突然以 500°/s 的速度猛转,差点把电机烧了。从那以后,我写逆运动学代码一定会加奇异位形检测,并在附近切换成阻尼最小二乘法。

4.6 知识体系总览

下面这张图把逆运动学的核心内容串起来了:

逆运动学知识体系 逆运动学 问题描述 已知末端位姿 → 求关节角度 求解方法 解析法 代数/几何推导 快、准、有闭式解 数值法 迭代逼近 通用、需初始值 核心问题 多解问题 肘上/肘下 肩左/肩右 奇异位形 雅可比降秩 关节速度无穷大 实际工程中:解析法优先,数值法兜底 多解要筛选,奇异要避开

嗯,逆运动学的内容就这些。说白了就是:能解析就解析,不行就数值迭代。多解要会选,奇异要会躲。这些都是我实际项目中踩过的坑,希望能帮你少走弯路。


专注资料整理