3、逆运动学求解:解析法与数值法、多解选择策略、奇异位形分析
逆运动学,说白了就是给机器人末端一个位姿,让它自己算出每个关节该转多少度。这活儿看着简单,做起来门道不少。我入行那会儿,第一次写逆解代码,以为套个公式就完事了,结果机器人直接撞上了工作台……嗯,从那以后我再也不敢小看逆运动学了。
3.1 解析法:又快又准,但有前提
解析法,也叫封闭解法。它直接通过代数或几何推导,把关节角度算出来。速度极快,精度也高。
适用条件:
- 机器人满足 Pieper 准则(相邻三关节轴线交于一点,或平行)
- 大多数工业六轴机器人(如 KUKA、ABB、FANUC)都满足这个条件
常见解析法:
- 代数法:利用齐次变换矩阵的等式关系,逐元素对比,解出角度。比如从 T06 的 (1,3) 元素解出 θ1。
- 几何法:把空间问题投影到平面,用三角学求解。我习惯用几何法做前三个关节,直观,不容易出错。
核心思路:将末端位姿矩阵 T06 拆解,利用相邻连杆变换矩阵的逆,逐步剥离出单个关节变量。
举个例子,对于常见的球形腕机器人(后三个关节轴线交于一点),我们可以先解前三个关节确定腕部位置,再解后三个关节确定腕部姿态。这样就把一个六元方程组,拆成了两个三元方程组。
// 伪代码:解析法求解 θ1
// 已知 T06,求 θ1
// 利用 T06 的 (2,3) 和 (1,3) 元素
θ1 = atan2(T06[1][3], T06[0][3])
// 注意:这里可能有双解,θ1 和 θ1 + π
我的经验:解析法虽然快,但推导过程容易出错。我建议你推导完后,用数值法验证几个随机点位。我曾经因为一个符号写反,调试了整整两天。
3.2 数值法:通用但慢,适合复杂构型
当机器人不满足 Pieper 准则,或者你懒得推导解析式时,数值法就派上用场了。说白了,就是迭代逼近。
常用方法:
- 牛顿-拉夫森法:利用雅可比矩阵的逆,迭代修正关节角度。收敛快,但需要计算雅可比逆。
- 阻尼最小二乘法(Levenberg-Marquardt):在牛顿法基础上加了阻尼项,防止雅可比奇异时发散。我实际项目中用得最多的就是它。
- 梯度下降法:简单,但收敛慢,适合离线或精度要求不高的场景。
// 伪代码:牛顿-拉夫森法求解逆运动学
while (误差 > 阈值) {
// 计算当前位姿与目标位姿的偏差 ΔX
ΔX = 目标位姿 - 当前正解位姿
// 计算雅可比矩阵 J
J = 计算雅可比(当前关节角)
// 求解关节角增量 Δθ
Δθ = J⁻¹ * ΔX
// 更新关节角
θ = θ + Δθ
}
注意:数值法对初值敏感。初值选不好,可能收敛到错误解,甚至发散。我一般先用解析法(如果可行)或经验值给个初值,再用数值法精调。
3.3 多解选择策略:不是所有解都可用
逆运动学通常有多个解。比如一个六轴机器人,最多可能有 8 组解(前三个关节各有两种可能,后三个关节也有两种可能)。但实际能用的,往往只有一两个。
选择原则:
- 关节限位优先:先排除超出关节限位的解。这是硬约束,没得商量。
- 运动连续性:选择与当前关节角最接近的解。这样可以避免关节大幅跳动。我习惯用加权欧氏距离来评估。
- 避障需求:如果机器人周围有障碍物,需要选择不碰撞的解。这通常需要结合碰撞检测算法。
- 关节负载均衡:尽量让各关节运动量均匀,避免某个关节过度磨损。
| 策略 | 适用场景 | 缺点 |
|---|---|---|
| 最短路径法 | 点对点运动 | 可能陷入局部最优 |
| 加权最小范数法 | 连续轨迹 | 权重需要调试 |
| 优先级法 | 复杂约束场景 | 规则设计繁琐 |
避坑指南:我曾经在一个焊接项目中,只用了最短路径法选解。结果机器人从 A 点到 B 点,中间关节转了个大圈,差点撞到夹具。后来我加了碰撞检测,才把问题解决。记住:多解选择不是数学问题,是工程问题。
3.4 奇异位形分析:机器人的“死穴”
奇异位形,就是机器人失去某个方向运动能力的位形。说白了,你让末端沿某个方向动,关节怎么转都转不动。
常见奇异类型:
- 边界奇异:机器人手臂完全伸直或完全折叠时。比如大臂和小臂成一条直线。
- 内部奇异:腕部奇异,即关节 4 和关节 6 的轴线重合时。此时关节 4 和关节 6 的运动互相抵消。
- 肩部奇异:肩关节(关节 1)的轴线与腕部中心共线时。
如何检测奇异?
- 计算雅可比矩阵的行列式。行列式接近 0,说明接近奇异。
- 计算条件数。条件数越大,越接近奇异。
- 观察关节速度。如果某个关节速度突然变得很大,很可能进入了奇异区域。
// 检测奇异:计算雅可比行列式
double det = 计算行列式(J);
if (fabs(det) < 阈值) {
// 进入奇异区域,需要特殊处理
启用阻尼最小二乘法(阻尼系数);
}
警告:在奇异位形附近,关节速度会趋于无穷大。如果你用纯比例控制,电机可能会过速报警,甚至损坏机械结构。我见过一个案例,机器人在奇异点附近高速运动,直接打坏了减速器。
处理策略:
- 回避法:规划路径时,主动避开奇异区域。这是最稳妥的方法。
- 阻尼法:在雅可比逆中加阻尼项,牺牲一点精度,换取运动平稳。
- 冗余法:如果有冗余关节(比如七轴机器人),可以利用冗余自由度避开奇异。
3.5 知识体系总览
下面这张图,是我自己梳理的逆运动学知识框架。你照着这个思路学,不会乱。
嗯,逆运动学这块内容,说深也深,说浅也浅。关键是要理解背后的几何意义,而不是死记公式。我当年带徒弟时,总让他们先用手画运动简图,再写代码。这个习惯,我一直保留到现在。
可可精品资料库