3. 数学基础(二):运动学基础

运动学,说白了就是研究机器人怎么动,但不关心为什么动。你给它一组关节角度,它告诉你末端在哪儿——这叫正运动学。反过来,你告诉它末端要去哪儿,它算出一组关节角度——这叫逆运动学。这两件事,是轨迹规划的基石。

我记得刚入行那会儿,总觉得运动学是理论课才用的东西。直到第一次调工业机器人,发现末端走不准,才意识到DH参数表里一个符号写反了,整个轨迹全偏。嗯,从那以后我再也不敢小看这章内容了。

3.1 正运动学:DH参数法

正运动学解决的是:已知关节角度,求末端位姿。最经典的方法就是Denavit-Hartenberg参数法,简称DH法。

DH法的核心,是在每个关节上建立一个坐标系,然后用四个参数描述相邻坐标系之间的变换关系:

参数 符号 物理含义
连杆长度 ai-1 沿xi-1轴,从zi-1到zi的距离
连杆扭角 αi-1 绕xi-1轴,从zi-1到zi的转角
连杆偏距 di 沿zi轴,从xi-1到xi的距离
关节转角 θi 绕zi轴,从xi-1到xi的转角

有了这四个参数,相邻坐标系的变换矩阵就是:

i-1T_i = Rot(x, α_{i-1}) · Trans(x, a_{i-1}) · Rot(z, θ_i) · Trans(z, d_i)

展开成4×4矩阵:

i-1T_i = 
[ cosθ_i   -sinθ_i·cosα_{i-1}   sinθ_i·sinα_{i-1}   a_{i-1}·cosθ_i ]
[ sinθ_i    cosθ_i·cosα_{i-1}  -cosθ_i·sinα_{i-1}   a_{i-1}·sinθ_i ]
[ 0         sinα_{i-1}          cosα_{i-1}           d_i            ]
[ 0         0                   0                    1              ]

把每个关节的变换矩阵连乘,就得到末端相对于基座的位姿:

0T_n = 0T_1 · 1T_2 · ... · n-1T_n
我的习惯:建DH表时,先把每个关节的z轴画出来,再定x轴。z轴沿着关节旋转轴方向,x轴由zi-1指向zi。这个顺序搞反了,后面全乱套。

3.2 逆运动学:解析法与数值法

逆运动学比正运动学麻烦得多。你想想看,正运动学是唯一解,逆运动学可能无解、有唯一解、有多解,甚至无穷多解。我曾在项目里遇到过六轴机器人末端走奇异点,逆解直接报错,整个产线停了半小时……

求解逆运动学,主流方法有两种:

3.2.1 解析法

解析法就是通过代数或几何推导,直接写出关节角度的闭式表达式。优点是快、准、稳,缺点是需要针对每个机器人单独推导。

常见的解析法套路:

  • 代数法:利用矩阵方程两边对应元素相等,解出角度。比如从0Tn的(1,4)和(2,4)元素解θ1。
  • 几何法:把机器人投影到平面,用余弦定理等几何关系求解。适合前三个关节决定位置、后三个关节决定姿态的构型。
  • Pieper准则:如果机器人后三个关节轴线交于一点(球形腕),则前三个关节的位置解和后三个关节的姿态解可以分离求解。
核心结论:解析法只适用于满足Pieper准则的机器人。大多数工业六轴都满足,但协作臂和冗余臂不一定。

3.2.2 数值法

数值法不依赖具体构型,通用性强。最常用的是牛顿-拉夫森法:

给定目标位姿 T_des,当前关节角度 q_cur
while ||Δx|| > ε:
    计算当前正运动学 T_cur = f(q_cur)
    计算位置误差 Δx = log(T_des · T_cur^{-1})
    计算雅可比矩阵 J(q_cur)
    解线性方程 J · Δq = Δx
    更新 q_cur = q_cur + Δq

数值法的优缺点很明显:

对比项 解析法 数值法
计算速度 快(微秒级) 慢(毫秒级,需迭代)
通用性 差(每款机器人单独推导) 好(换机器人只需改DH参数)
奇异点处理 可提前规避 雅可比矩阵奇异时需阻尼处理
多解选择 可显式枚举所有解 依赖初值,可能收敛到非期望解
我曾经踩过的坑:数值法迭代时,如果目标位姿在奇异点附近,雅可比矩阵接近奇异,Δq会变得极大。轻则关节速度超限,重则机器人飞车。解决方案是加阻尼项:JTJ + λI,λ根据奇异程度动态调整。

3.3 雅可比矩阵与速度运动学

雅可比矩阵把关节速度映射到末端速度。它是运动学里最强大的工具之一,也是轨迹规划中速度、加速度约束的基础。

定义很简单:

ẋ = J(q) · q̇

其中:
ẋ = [v_x, v_y, v_z, ω_x, ω_y, ω_z]^T  —— 末端速度(线速度+角速度)
q̇ = [q̇_1, q̇_2, ..., q̇_n]^T          —— 关节速度
J(q) ∈ R^{6×n}                         —— 雅可比矩阵

雅可比矩阵的每一列,对应一个关节对末端速度的贡献。对于旋转关节i:

J_i = [ z_{i-1} × (p_n - p_{i-1}) ]
      [ z_{i-1}                     ]

其中zi-1是关节i的旋转轴方向,pn是末端位置,pi-1是关节i的位置。

有了雅可比矩阵,我们能做很多事:

  • 速度正解:给定关节速度,算末端速度。直接矩阵乘法就行。
  • 速度逆解:给定末端速度,算关节速度。需要求J的逆或伪逆。
  • 奇异性检测:当J的行列式接近0时,机器人处于奇异位形。
  • 可操作度:用sqrt(det(J·JT))衡量机器人当前位形的灵活性。
  • 力/力矩映射:τ = JT · F,把末端力映射到关节力矩。
我建议:在轨迹规划中,不要只在位置层面做规划。把速度、加速度约束通过雅可比矩阵映射到关节空间,能避免很多执行时的超限问题。比如末端走直线时,关节速度可能突然飙升——用雅可比矩阵的伪逆可以提前发现并调整。

3.4 本章知识体系

下面这张图把本章的核心逻辑串起来了。你从左上角开始看,顺着箭头走一遍,就能理解运动学在轨迹规划中的位置。

运动学基础知识体系 运动学基础 · 知识体系 关节角度 q 正运动学:DH参数法 → 末端位姿 T 雅可比矩阵 J(q) = ∂f/∂q 速度运动学:ẋ = J · q̇ 逆运动学:解析法 / 数值法 → 关节角度 q 轨迹规划应用:速度约束 · 奇异性规避 · 力控制 说明:正运动学是基础,雅可比矩阵是桥梁,逆运动学是目标,三者共同支撑轨迹规划

从这张图你能看到:正运动学是基础,雅可比矩阵是连接位置和速度的桥梁,逆运动学是实际控制中反复调用的核心模块。三者缺一不可。

我个人习惯在写轨迹规划代码时,先把正运动学和雅可比矩阵封装成独立模块,逆运动学基于它们实现。这样换机器人时,只需要改DH参数表和雅可比矩阵的解析式,上层代码几乎不用动。