2. 逆运动学求解方法(上):解析法(代数法与几何法)推导,以6轴工业机器人为例,求解封闭解的条件与技巧。
各位同学,欢迎来到第二章。上一章我们聊了逆运动学到底在解决什么问题——说白了,就是给机器人一个末端位姿,让它自己算出每个关节该转多少度。
这一章,我们直接上手最核心的求解方法:解析法。我个人习惯把解析法分成两派——代数法和几何法。别被名字吓到,其实思路都很直观。
2.1 为什么非要解析法?数值法不香吗?
你可能会问:现在计算机这么快,直接迭代算不就行了?嗯,我在项目里确实见过不少直接用数值法(比如牛顿-拉夫森法)的工程师。但说实话,工业现场最怕的就是迭代不收敛。
解析法有几个硬核优势:
- 速度快:公式代入,一次出结果,没有迭代开销
- 确定性:同样的输入,永远得到同样的输出
- 可预测:你能提前知道有多少组解,每组解长什么样
核心观点:解析法求出的解叫"封闭解"(Closed-form Solution)。对于6轴工业机器人,只有满足特定条件才能得到封闭解。这个条件就是——三个相邻关节轴交于一点,或者三个相邻关节轴平行。
为什么会这样?因为只有这些几何约束才能让方程解耦,把6个方程拆成几个低次方程。我最早做焊接机器人项目时,就因为没注意这个条件,硬算了三天三夜没收敛……后来一查,机器人末端三轴根本就没交于一点。
2.2 封闭解存在的条件——Pieper准则
1968年,Pieper老爷子给出了一个经典结论:6自由度串联机器人存在封闭解的充分条件是:三个相邻关节轴交于一点,或三个相邻关节轴平行。
现代工业机器人几乎都遵守这个准则。比如你常见的KUKA、ABB、FANUC,它们的腕部(第4、5、6轴)都设计成相交于一点,这个点叫腕心(Wrist Center)。
| 机器人类型 | 封闭解条件 | 典型结构 |
|---|---|---|
| 6轴串联(标准) | 后三轴交于一点 | KUKA KR系列、ABB IRB系列 |
| 6轴串联(偏置腕) | 前三轴平行 | 部分SCARA-like结构 |
| 协作机器人 | 后三轴交于一点 | UR系列、Franka Emika |
实战技巧:拿到一台新机器人的DH参数表,第一件事就是检查后三轴的坐标系原点是否重合。如果重合,恭喜你,可以用解析法。如果不重合……嗯,你可能得考虑数值法了。
2.3 代数法——从矩阵方程到三角函数
代数法的思路很直接:把正运动学的齐次变换矩阵展开,然后逐元素对比,建立方程。
正运动学公式长这样:
T_06 = T_01 * T_12 * T_23 * T_34 * T_45 * T_56
其中每个T_i(i+1)都是关于关节角θ_i的函数。展开后,T_06的每个元素都是sin和cos的复杂组合。
我们的目标是:已知T_06的数值(目标位姿),反求θ_1到θ_6。
2.3.1 第一步:分离腕心位置
因为后三轴交于腕心,我们可以把问题拆成两步:
- 位置逆解:用前三轴把腕心送到目标位置
- 姿态逆解:用后三轴调整末端姿态
腕心的位置怎么算?很简单:
P_wrist = P_06 - d_6 * R_06 * [0, 0, 1]^T
其中d_6是末端连杆长度,R_06是目标姿态矩阵。这一步把6自由度问题降成了3自由度问题。
注意:这个公式成立的前提是后三轴交于一点。如果腕部有偏置,P_wrist的计算会更复杂,甚至无法直接分离。
2.3.2 第二步:求解前三轴关节角
有了腕心位置,我们就可以建立关于θ_1、θ_2、θ_3的方程。以典型的6轴机器人为例:
- θ_1:通常由腕心在基坐标系中的x、y坐标通过atan2直接求出
- θ_2、θ_3:通过余弦定理,在由连杆2、连杆3和腕心构成的三角形中求解
这里有个经典公式:
cos(θ_3) = (P_x^2 + P_y^2 + P_z^2 - a_2^2 - a_3^2 - d_3^2 - d_4^2) / (2 * a_2 * sqrt(a_3^2 + d_4^2))
嗯,看着有点复杂。但说白了,就是解一个三角形——你初中就学过的东西。
2.3.3 第三步:求解后三轴关节角
前三轴算出来后,我们可以算出前三轴对末端姿态的贡献R_03。然后用目标姿态R_06减去这个贡献,得到后三轴需要的姿态R_36:
R_36 = (R_03)^T * R_06
R_36是θ_4、θ_5、θ_6的函数。对于标准腕部结构,通常:
- θ_5:通过R_36的(3,3)元素用arccos求解
- θ_4、θ_6:通过atan2求解,注意处理θ_5=0时的奇异情况
避坑指南:我曾经在调试喷涂机器人时,发现θ_5接近0°时,θ_4和θ_6的解会突然跳变。后来才意识到,这是腕部奇异点——两个关节轴重合了。解决办法是:当|sin(θ_5)| < ε时,固定θ_4为当前值,只算θ_6。
2.4 几何法——用空间想象力解题
代数法虽然严谨,但有时候太抽象。我个人更喜欢几何法——把机器人简化成几根棍子,在三维空间里画图。
几何法的核心思想:把机器人的运动学约束投影到平面或球面上,用几何关系直接求解。
2.4.1 平面几何法(适用于前三轴)
对于前三轴,我们可以把问题投影到两个平面:
- 水平面(XY平面):求解θ_1
- 垂直平面(由关节2、3和腕心构成):求解θ_2、θ_3
举个例子,求解θ_1:
θ_1 = atan2(P_y, P_x) // 如果第一关节是旋转关节
就这么简单。但要注意,如果P_x和P_y都接近0(腕心在基座正上方),θ_1有无穷多解。这时候我一般会取当前关节角的值,或者加一个约束条件。
2.4.2 球面几何法(适用于后三轴)
后三轴构成一个球面腕——三个旋转轴交于一点,末端姿态可以看作在球面上的旋转。
球面几何法的步骤:
- 把目标姿态分解成三个欧拉角(Z-Y-Z或Z-X-Z,取决于机器人结构)
- 每个欧拉角对应一个关节角
- 注意多解:同一个姿态对应多组欧拉角
经验之谈:我习惯用Z-Y-Z欧拉角来对应标准腕部的θ_4、θ_5、θ_6。因为大多数机器人的腕部结构就是绕Z轴转、绕Y轴转、再绕Z轴转。但不同厂家的定义可能不同,一定要查DH参数表确认。
2.5 多解处理——选哪一组?
解析法的一大特点就是多解。一个6轴机器人,最多可以有8组逆解(2^3,因为前三轴各有两种构型)。
怎么选?我一般按这个优先级:
| 优先级 | 选择策略 | 适用场景 |
|---|---|---|
| 1 | 关节角度变化最小(最小路径) | 连续轨迹、焊接、喷涂 |
| 2 | 避免关节极限 | 所有场景 |
| 3 | 避免奇异位形 | 高速运动、精密装配 |
| 4 | 优先"肘部向上"或"肘部向下" | 根据工作空间需求 |
重要提醒:多解选择不是一次性的。在连续轨迹中,每一帧都要重新评估,否则可能出现关节角跳变。我见过一个案例,因为没做多解连续性检查,机器人在运动过程中突然"甩腕",差点把工件甩飞。
2.6 本章知识体系总览
下面这张图总结了本章的核心逻辑:
这张图把本章的核心脉络串起来了。你从最上面的"解析法"出发,先检查Pieper条件是否满足,然后选择代数法或几何法(或者两者结合),最后得到多组解,再根据实际需求选择最优解。
2.7 实战建议
最后,给各位几个实战中的建议:
- 先检查DH参数:拿到机器人,先确认后三轴是否交于一点。这是解析法的基础。
- 代数法和几何法结合用:我习惯前三轴用几何法(直观),后三轴用代数法(严谨)。
- 多解选择要加平滑:连续运动中,相邻两帧的解要尽量接近,避免跳变。
- 奇异点要单独处理:θ_5接近0°或180°时,后三轴会退化,需要特殊逻辑。
总结一句话:解析法不是万能的,但没有解析法是万万不能的。在工业机器人领域,90%以上的场景都可以用解析法搞定。掌握好代数法和几何法,你就掌握了逆运动学的核心武器。