运动学基础(上):空间描述与变换、齐次变换矩阵、DH参数法建模

各位同学,欢迎来到第二章。说实话,运动学是整个机械臂开发的基石。你想想看,如果连机器人的手在哪儿、朝哪个方向都说不清楚,那后面的轨迹规划、控制算法全是空中楼阁。这一章我会把空间描述、齐次变换矩阵和DH参数法这三个核心工具讲透,这些都是我这些年做项目时反复用到的东西。

2.1 空间描述:怎么描述一个物体在空间中的位置和姿态?

我们先从最基础的问题开始:怎么告诉别人一个物体在空间里到底在哪儿?

位置好办,三个坐标值(x, y, z)就能搞定。但姿态呢?光说“它朝那边”可不行。我们需要一个数学工具,既能描述位置,又能描述朝向。

核心概念:一个刚体在空间中的完整状态 = 位置(3个自由度)+ 姿态(3个自由度),总共6个自由度。

我个人习惯把姿态想象成“这个物体自己的坐标系相对于世界坐标系是怎么旋转的”。比如一个扳手,它的“鼻子”指向哪儿,“肚子”朝向哪儿,都需要用三个角度或者一个旋转矩阵来描述。

这里有个常见的坑:旋转矩阵是正交矩阵,它的逆等于它的转置。这个性质在后续计算中会反复用到,一定要记住。

2.2 齐次变换矩阵:把位置和姿态打包成一个矩阵

好,现在问题来了:位置用一个3×1向量,姿态用一个3×3矩阵,每次变换都要分开算,太麻烦了。能不能把它们合在一起?

能。这就是齐次变换矩阵的由来。

一个4×4的齐次变换矩阵长这样:

| R(3×3)  p(3×1) |
| 0 0 0    1     |

其中R是旋转矩阵,p是位置向量。最后一行是固定的[0 0 0 1]。

为什么叫“齐次”?说白了,就是给三维向量加了一个维度,变成四维齐次坐标。这样旋转和平移就能用一次矩阵乘法搞定。

我的经验:刚开始学的时候,我总觉得最后一行是多余的。直到有一次做手眼标定,需要把相机坐标系下的点转换到机器人基坐标系,中间要经过五六个变换。如果用齐次矩阵,一次乘法就搞定;如果分开算,代码量翻倍还容易出错。从那以后,我再也没跳过齐次变换。

齐次变换矩阵有几个重要性质:

  • 可逆性:逆矩阵表示反向变换
  • 可组合性:多个变换可以连乘成一个
  • 不满足交换律:变换顺序很重要,先旋转再平移和先平移再旋转结果不同

嗯,这里要注意:矩阵乘法不满足交换律。我在项目中遇到过有人把两个变换顺序搞反,结果机械臂直接撞到工件上。还好速度不快,不然就出事故了。

2.3 DH参数法:给机械臂建模的标准语言

现在我们知道怎么描述一个刚体了。但机械臂有多个关节,每个关节之间怎么描述?总不能每个关节都单独定义坐标系吧?

Denavit和Hartenberg两位前辈给出了标准答案:DH参数法。它用四个参数就能唯一确定相邻两个关节坐标系之间的变换关系。

四个参数分别是:

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

有了这四个参数,相邻坐标系之间的齐次变换矩阵就可以直接写出来:

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

展开后就是:

| cosθ  -sinθ·cosα   sinθ·sinα   a·cosθ |
| sinθ   cosθ·cosα  -cosθ·sinα   a·sinθ |
|  0      sinα        cosα         d     |
|  0       0           0           1     |

避坑指南:我曾经在给一个六轴协作臂建DH模型时,把α的符号搞反了。结果仿真里看着没问题,一上真机,末端执行器偏了十几度。查了两天才发现是扭角方向定义错了。所以,一定要严格按照右手定则确定α的正负。

2.4 标准DH与改进DH:两种流派

你可能会问:DH参数只有一种吗?其实有两种主流版本:

  • 标准DH(Classic DH):坐标系建在连杆的末端
  • 改进DH(Modified DH):坐标系建在连杆的起始端

两种方法本质上等价,但变换顺序和参数定义略有不同。我个人更习惯用改进DH,因为它在处理树形结构(比如并联机器人)时更直观。

下面这张图展示了标准DH的坐标系建立规则:

标准DH参数坐标系建立规则 标准DH参数坐标系建立规则 关节 i-1 关节 i 关节 i+1 连杆 i 连杆 i+1 DH参数说明 ai : 沿xi轴,从zi-1到zi的距离 αi: 绕xi轴,从zi-1到zi的转角 di : 沿zi-1轴,从xi-1到xi的距离 θi: 绕zi-1轴,从xi-1到xi的转角

2.5 实战:给一个两轴机械臂建DH模型

光说不练假把式。我们拿一个简单的两轴平面机械臂来练手。

假设:

  • 连杆1长度:L1 = 0.3m
  • 连杆2长度:L2 = 0.25m
  • 两个关节都是旋转关节

按照标准DH法,我们建立坐标系:

  1. 基坐标系{0}:原点在关节1,z轴向上
  2. 坐标系{1}:原点在关节2,x轴沿连杆1方向
  3. 坐标系{2}:原点在末端,x轴沿连杆2方向

对应的DH参数表:

i ai αi di θi
1 L1 0 0 θ1
2 L2 0 0 θ2

代入齐次变换矩阵公式,得到:

T_01 = | cosθ1  -sinθ1  0  L1·cosθ1 |
       | sinθ1   cosθ1  0  L1·sinθ1 |
       |  0       0     1     0     |
       |  0       0     0     1     |

T_12 = | cosθ2  -sinθ2  0  L2·cosθ2 |
       | sinθ2   cosθ2  0  L2·sinθ2 |
       |  0       0     1     0     |
       |  0       0     0     1     |

T_02 = T_01 × T_12

这样,给定任意两个关节角θ1和θ2,我们就能算出末端在基坐标系下的位置和姿态。这就是正运动学。

小技巧:我建议你在写代码时,先把DH参数表定义成一个结构体数组,然后用循环计算连乘。这样代码可读性强,也方便后期修改参数。千万别手写每个矩阵的展开式,容易写错。

2.6 本章小结

这一章我们覆盖了三个核心工具:

  • 空间描述:位置+姿态=6自由度,用旋转矩阵和位置向量表示
  • 齐次变换矩阵:4×4矩阵,把旋转和平移统一起来
  • DH参数法:用四个参数标准化描述相邻关节的变换关系