3、运动学基础(下):正运动学建模(DH参数法)、逆运动学求解(解析法与数值法)、雅可比矩阵与奇异性

好,咱们接着聊运动学。上一节我们把坐标系变换和位姿描述讲透了,这一节要动真格的了——正运动学、逆运动学、还有雅可比矩阵。这三个东西,说白了就是机器人的“手脚怎么动”、“脑子怎么想”、“什么时候会抽筋”。

我在项目里见过不少工程师,正运动学算得飞起,一到逆解就抓瞎。还有人把机器人跑到奇异点附近,结果关节速度瞬间爆表,差点把电机烧了。嗯,这些坑咱们今天都得填上。

3.1 正运动学建模:DH参数法

正运动学,就是已知关节角度,求末端位姿。你给机器人发指令:“肘关节弯30度,肩关节抬45度”,然后它告诉你手在哪儿、朝哪个方向。这就是正运动学。

建模方法有很多,但我个人最常用的是DH参数法。为什么?因为它规整、系统、不容易漏参数。你想想看,一个六轴机器人,六个关节,每个关节4个参数,总共24个参数就能完整描述。多清爽。

3.1.1 DH参数的定义

DH参数有四个:

  • θ(关节角):绕Z轴的旋转角
  • d(连杆偏距):沿Z轴的平移距离
  • a(连杆长度):沿X轴的平移距离
  • α(连杆扭角):绕X轴的旋转角

每个关节对应一组参数。对于旋转关节,θ是变量;对于移动关节,d是变量。其他参数都是固定的,由机械结构决定。

核心公式:相邻连杆的变换矩阵

T = Rot(z, θ) * Trans(z, d) * Trans(x, a) * Rot(x, α)

展开后就是4x4的齐次变换矩阵,把上一关节的坐标系变换到下一关节。

3.1.2 建立DH坐标系的步骤

我记得第一次给六轴机器人建DH模型时,卡在坐标系建立上整整两天。后来总结出一套流程,分享给你:

  1. 找关节轴:每个关节的旋转轴(或移动轴)就是Z轴
  2. 定原点:相邻两关节轴的公垂线与Z轴的交点
  3. 定X轴:沿公垂线方向,从当前Z轴指向下一Z轴
  4. 定Y轴:右手定则,Z×X
  5. 填参数:按定义读出θ、d、a、α

小技巧:如果相邻两关节轴平行,公垂线不唯一。这时候我习惯取前一个关节的原点做公垂线起点,这样参数最规整。

3.1.3 一个简单的2自由度臂示例

咱们拿一个平面2R机械臂练练手。两个旋转关节,都在同一平面内。

# DH参数表
# 关节  θ    d    a    α
# 1    q1    0    L1   0
# 2    q2    0    L2   0

# 正运动学计算
T01 = DH(q1, 0, L1, 0)
T12 = DH(q2, 0, L2, 0)
T02 = T01 * T12

# 末端位置
x = L1*cos(q1) + L2*cos(q1+q2)
y = L1*sin(q1) + L2*sin(q1+q2)

你看,结果跟几何法算出来的一模一样。但DH法的优势在于——当机器人变成6轴、7轴时,你依然可以用同一套流程,不会乱。

3.2 逆运动学求解

逆运动学就反过来了:已知末端位姿,求关节角度。说白了就是“手到了这个位置,各个关节应该怎么摆”。

这玩意儿比正运动学难多了。为什么?因为正解是唯一的,逆解可能有多解、无解、甚至无穷多解。你想想看,一个六轴机器人,同一个末端位姿,可能有8组甚至16组关节角度解。

3.2.1 解析法

解析法,就是通过代数或几何推导,直接写出关节角度的表达式。速度快、精度高,是工业机器人最常用的方法。

但解析法有个前提:机器人必须满足Pieper准则——相邻的三个关节轴交于一点。大多数工业六轴机器人(比如典型的6R构型)都满足这个条件,因为它们的腕部三个关节轴交于一点。

解析法的典型步骤(以六轴机器人为例):

  1. 用前三个关节确定腕部位置(位置逆解)
  2. 用后三个关节确定腕部姿态(姿态逆解)
  3. 组合得到8组解,再根据关节限位和避障需求筛选

我在项目中遇到过一个问题:解析法算出来的解,有时候关节角度跳变特别大。比如上一时刻q1=10°,下一时刻q1=350°。虽然数学上没错,但实际跑起来机器人会“甩”一下。所以后来我加了一步——最小行程筛选,选离当前关节角度最近的那组解。

3.2.2 数值法

如果机器人不满足Pieper准则,或者你懒得推导解析式,那就用数值法。数值法的核心思想是迭代逼近:先猜一组关节角,算正运动学得到末端位姿,跟目标位姿对比,然后修正关节角,再算,再修正……直到误差足够小。

最常用的数值法是牛顿-拉夫森法雅可比伪逆法。这里给个伪代码:

q = q0  # 初始猜测
while error > threshold:
    T = forward_kinematics(q)    # 正运动学
    e = target_pose - T          # 位姿误差
    J = jacobian(q)              # 雅可比矩阵
    dq = pinv(J) * e             # 关节修正量
    q = q + dq                   # 更新关节角
    error = norm(e)

注意:数值法有两个大坑。第一,初始猜测离真实解太远可能不收敛。第二,遇到奇异点时雅可比矩阵不可逆,算法直接崩掉。我曾经在调试时忘了处理奇异点,结果机器人“咔”一下卡住,吓得我赶紧按了急停。

3.2.3 解析法 vs 数值法

对比项 解析法 数值法
计算速度 快(微秒级) 慢(毫秒级,需迭代)
精度 理论精确 受迭代次数和阈值影响
适用性 需满足Pieper准则 通用,任意构型
多解处理 显式得到所有解 只得到一个解(依赖初值)
实现难度 高(需推导) 低(通用框架)

我个人习惯是:能解析就解析,解析不了再用数值法。毕竟工业现场对实时性要求很高,解析法那几十微秒的计算时间,比数值法的几毫秒香太多了。

3.3 雅可比矩阵与奇异性

雅可比矩阵,是连接关节空间和操作空间的桥梁。它告诉你:关节转一点点,末端会动多少、往哪个方向动。

数学上,雅可比矩阵J满足:

v = J * dq

其中v是末端的线速度和角速度(6维向量),dq是关节速度(n维向量)。J是6×n的矩阵。

3.3.1 雅可比矩阵的求法

有两种常用方法:

  • 微分法:对正运动学表达式求偏导。适合解析式已知的情况。
  • 矢量积法:用运动学递推公式,逐关节计算。适合编程实现。

矢量积法的公式很简单:

对于旋转关节i:
J_vi = Zi × (Pe - Pi)
J_wi = Zi

其中Zi是关节i的Z轴方向,Pe是末端位置,Pi是关节i的原点位置。

3.3.2 奇异性分析

奇异性,就是雅可比矩阵的秩下降(行列式为0)的状态。这时候机器人会“失去”某个方向的运动能力。

常见的奇异位形有:

  • 边界奇异:手臂完全伸直或完全折叠
  • 腕部奇异:腕部三个关节轴共面(比如关节4和关节6的轴平行)
  • 肩部奇异:肩关节和肘关节的轴共线

避坑指南:我曾经调试一个焊接机器人,在焊缝拐角处机器人突然剧烈抖动。查了半天,发现是路径刚好经过腕部奇异点。雅可比矩阵接近奇异,关节速度理论上趋近无穷大,控制器为了跟上轨迹拼命加速,结果就是抖动。后来我在路径规划中加了奇异点规避,问题解决。

3.3.3 奇异点的处理策略

遇到奇异点怎么办?有三种常用策略:

  1. 阻尼最小二乘法(DLS):给雅可比矩阵加一个阻尼项,让逆矩阵在奇异点附近“软着陆”。公式是J^T*(J*J^T + λI)^(-1)。λ越大,越稳定,但精度越低。
  2. 奇异值分解(SVD):把雅可比矩阵分解成U*Σ*V^T,把接近零的奇异值直接置零或加阻尼。
  3. 路径规划规避:在规划阶段就避开奇异区域,这是最根本的解决办法。

我的经验:实际项目中,我通常把策略1和策略3结合使用。路径规划时尽量远离奇异点,但万一靠近了,DLS能兜底。别指望单一策略解决所有问题。

3.4 本章知识体系

下面这张图把本章的核心逻辑串起来了。你看一遍,应该能理清正运动学、逆运动学、雅可比矩阵之间的关系。

运动学基础(下)知识体系 正运动学(DH参数法) 逆运动学求解 雅可比矩阵与奇异性 DH参数定义:θ, d, a, α 坐标系建立步骤 变换矩阵连乘 → 末端位姿 解析法(Pieper准则) 数值法(牛顿-拉夫森) 多解筛选与最小行程 微分法 / 矢量积法 奇异性分析(三种奇异位形) DLS / SVD / 路径规避 核心逻辑 关节角度 → 正运动学 → 末端位姿(正向) 末端位姿 → 逆运动学 → 关节角度(反向) 雅可比矩阵连接速度层,奇异性是运动学“死穴”

嗯,这一章内容不少。正运动学是基础,逆运动学是核心,雅可比矩阵是进阶。三块内容环环相扣,缺一不可。你在实际项目中,大概率会反复用到这些知识——不管是做轨迹规划、运动控制,还是调试机器人。

记住一点:理论是死的,但应用是活的。别死磕公式,多想想“这个公式在机器人上到底对应什么物理意义”。想通了,你就能从“会用”变成“懂用”。


公众号:蓝海资料掘金营,微信deep3321