第二章:机器人运动学基础

各位工程师朋友,大家好。今天我们来聊聊机器人运动学。说实话,这章内容是整个轨迹规划的基石。你想想看,要让机器人动起来,首先得知道它现在在哪儿,要去哪儿,怎么去。这就是运动学要解决的问题。

我个人习惯把运动学分成两部分:正运动学和逆运动学。正运动学是已知关节角度,求末端位置;逆运动学正好反过来。听起来简单,但实际项目中坑不少。我曾经在一个焊接项目里,就因为逆运动学求解没处理好,导致机器人差点撞到工件。嗯,咱们慢慢聊。

2.1 空间描述与变换

先说说空间描述。机器人工作在一个三维空间里,我们需要描述物体的位置和姿态。位置好办,三个坐标(x,y,z)就搞定了。但姿态呢?光有位置不够,你还要知道它朝哪个方向。

举个例子。我在调试一个抓取工位时,发现机器人总是抓偏。后来一查,原来是姿态描述出了问题。位置对了,但手爪的方向差了5度,结果就是抓不稳。

空间变换说白了就是坐标系的转换。从一个坐标系到另一个坐标系,需要旋转和平移。旋转可以用旋转矩阵表示,平移就是加个向量。这里我建议你记住一个原则:先旋转,后平移。顺序搞反了,结果就全错了。

核心要点:空间描述 = 位置 + 姿态。位置用向量,姿态用旋转矩阵。变换时注意顺序。

2.2 齐次变换矩阵

齐次变换矩阵是个好东西。它把旋转和平移统一到一个4x4的矩阵里。为什么是4x4?因为3x3的旋转矩阵只能处理旋转,加不上平移。齐次坐标引入了一个额外的维度,让一切变得简单。

齐次变换矩阵的形式是这样的:

| R   t |
| 0   1 |

其中R是3x3旋转矩阵,t是3x1平移向量。最后一行是[0 0 0 1]。

我记得第一次用齐次变换矩阵时,总觉得多了一行一列很别扭。但用久了你会发现,它让连续变换变得特别直观。比如你要从基坐标系到工具坐标系,中间经过几个关节,只需要把每个关节的变换矩阵乘起来就行。

小技巧:矩阵乘法不满足交换律。变换顺序不同,结果天差地别。我建议你在代码里明确标注每个变换的物理意义,避免搞混。

2.3 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的角度

为什么用DH参数?因为它标准化了。不管你是六轴机器人还是SCARA,都能用同一套方法建模。我在项目中遇到过一个问题:不同厂家的机器人,DH参数定义可能略有差异。有的用标准DH,有的用改进DH。你拿到参数后,一定要先确认是哪种。

注意:标准DH和改进DH的区别在于坐标系附着的位置。标准DH把坐标系放在连杆末端,改进DH放在连杆起始端。搞混了,正运动学算出来就是错的。

下面是一个六轴机器人的DH参数表示例:

关节i ai-1 (mm) αi-1 (°) di (mm) θi (°)
1 0 0 400 θ1
2 250 -90 0 θ2
3 200 0 0 θ3
4 0 -90 300 θ4
5 0 90 0 θ5
6 0 -90 100 θ6

2.4 正运动学求解

正运动学就是已知关节角度,求末端位姿。说白了,就是把这些DH参数代进去,算出齐次变换矩阵。

具体步骤:

  1. 根据DH参数,写出每个关节的变换矩阵 i-1Ti
  2. 把所有变换矩阵乘起来:0T6 = 0T1 · 1T2 · ... · 5T6
  3. 从结果矩阵中提取位置和姿态

代码实现很简单,就是矩阵乘法。我习惯用Python的numpy库,几行就搞定:

import numpy as np

def dh_transform(a, alpha, d, theta):
    ct = np.cos(theta)
    st = np.sin(theta)
    ca = np.cos(alpha)
    sa = np.sin(alpha)
    
    T = np.array([
        [ct, -st*ca,  st*sa, a*ct],
        [st,  ct*ca, -ct*sa, a*st],
        [0,   sa,     ca,    d],
        [0,   0,      0,     1]
    ])
    return T

# 计算正运动学
T = np.eye(4)
for i in range(6):
    T = T @ dh_transform(a[i], alpha[i], d[i], theta[i])

正运动学的好处是:结果唯一。给定一组关节角,末端位姿是确定的。这在调试时很有用,你可以手动转动关节,然后验证计算结果。

2.5 逆运动学求解

逆运动学就麻烦多了。已知末端位姿,求关节角度。为什么麻烦?因为解不唯一。同一个末端位置,可能有多种关节角度组合。比如六轴机器人,通常有8组解。

求解方法主要有两种:

  • 解析法:通过几何关系推导出封闭解。速度快,但只适用于特定构型。
  • 数值法:用迭代逼近,比如牛顿-拉夫森法。通用性强,但可能不收敛。

我在实际项目中,优先用解析法。为什么呢?因为稳定。数值法有时候会跳到奇异点附近,导致关节速度爆炸。我曾经在一个码垛项目里,数值法算出来的关节角突然跳变,机器人差点把箱子甩出去。从那以后,我只要能用解析法,绝不用数值法。

经验之谈:逆运动学求解时,一定要考虑关节限位。有些解虽然在数学上成立,但关节角度超出了机械限位,就不能用。我建议你在求解后加一个关节限位检查。

解析法的核心思路是:把末端位姿方程拆解,逐层求解。比如先求第一个关节角,再求第二个,以此类推。每个关节的求解都依赖于前面的结果。

举个例子,对于六轴机器人,通常先求关节1:

# 伪代码示例
# 已知末端位置 (px, py, pz) 和姿态矩阵 R
theta1 = atan2(py, px)  # 关节1的角度

然后根据theta1,再求theta2、theta3。这个过程需要仔细推导,一步错步步错。

注意:逆运动学求解时,要注意奇异位形。比如关节5为0度时,关节4和关节6的轴重合,导致解不唯一。这种情况需要特殊处理。

知识体系总览

下面这张图展示了本章的知识结构,我画了个SVG方便你理解:

机器人运动学基础 空间描述与变换 位置 + 姿态 旋转矩阵 + 平移向量 先旋转后平移 齐次变换矩阵 4x4矩阵统一旋转+平移 连续变换矩阵乘法 注意乘法顺序 DH参数法 a, α, d, θ 四个参数 标准DH vs 改进DH 标准化建模方法 正/逆运动学 正解:关节角→末端位姿 逆解:末端位姿→关节角 解析法 vs 数值法 运动学是轨迹规划的基础,正解和逆解相辅相成

好了,这一章的内容就到这里。运动学基础是后续轨迹规划的根基,建议你多动手算几个例子。下一章我们会聊轨迹规划的具体方法,到时候这些知识都会用上。


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