2. 机器人运动学基础(上):齐次变换矩阵、DH参数法与正运动学建模

各位同学,欢迎来到第二章。这一章是机器人学的“地基”——运动学基础。说白了,就是搞清楚机器人每个关节动一下,末端到底会跑到哪里去。

我个人习惯把运动学分成两块:正运动学和逆运动学。正运动学是已知关节角度,求末端位姿;逆运动学反过来。本章我们先啃正运动学这块硬骨头。

核心要点: 正运动学建模 = 用数学描述“关节空间 → 笛卡尔空间”的映射关系。DH参数法就是干这个的标准工具。

2.1 齐次变换矩阵:描述位姿的“瑞士军刀”

在机器人学里,我们不光要知道一个点在哪(位置),还得知道它朝哪个方向(姿态)。齐次变换矩阵就是同时干这两件事的。

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

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

左上角3×3是旋转矩阵,描述姿态;右上角3×1是平移向量,描述位置。最后一行是固定的[0 0 0 1],用来保证矩阵乘法能串联变换。

为什么叫“齐次”? 因为我们在三维坐标(x,y,z)后面加了个1,变成(x,y,z,1)。这样旋转和平移就能用一个矩阵乘法搞定,不用分开算。

我的经验: 刚开始学的时候,我总觉得4×4矩阵比3×3麻烦。但实际做STM32标定程序时,你会发现齐次矩阵的链式乘法太方便了——一个for循环就能把从基座到末端的变换全部串起来。

2.2 DH参数法:标准DH vs 改进DH

DH参数法(Denavit-Hartenberg)是机器人运动学建模的经典方法。它用4个参数来描述相邻两个连杆之间的变换关系。

这4个参数分别是:

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

但这里有个坑——DH参数有两种主流版本:标准DH (Standard DH) 和 改进DH (Modified DH)。很多初学者在这里栽跟头。

对比项 标准DH (SDH) 改进DH (MDH)
坐标系附着位置 附着在连杆i的输出端 附着在连杆i的输入端
变换顺序 先绕Z轴旋转θ,再沿Z轴平移d,再沿X轴平移a,最后绕X轴旋转α 先绕X轴旋转α,再沿X轴平移a,再绕Z轴旋转θ,最后沿Z轴平移d
常见应用 传统工业机器人(如PUMA 560) 现代机器人、移动机器人、树形结构
参数定义 θ和d是关节变量,a和α是连杆常数 θ和d是关节变量,a和α是连杆常数(但坐标系定义不同)
避坑指南: 我曾经在做一个六轴机械臂标定项目时,用了标准DH建模,但参考的论文用的是改进DH。结果正运动学算出来末端位置差了十几厘米。后来花了整整两天才排查出来——就是坐标系附着位置搞反了。所以,建模前一定要确认你用的DH版本,并且全程保持一致。

2.2.1 标准DH的变换矩阵

标准DH从连杆i-1到连杆i的变换矩阵为:

T_i = Rot(z, θ_i) · Trans(z, d_i) · Trans(x, a_i) · Rot(x, α_i)

     | cosθ_i  -sinθ_i·cosα_i   sinθ_i·sinα_i   a_i·cosθ_i |
     | sinθ_i   cosθ_i·cosα_i  -cosθ_i·sinα_i   a_i·sinθ_i |
T_i = | 0        sinα_i           cosα_i          d_i        |
     | 0        0                 0               1          |

2.2.2 改进DH的变换矩阵

改进DH从连杆i-1到连杆i的变换矩阵为:

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

     | cosθ_i           -sinθ_i          0          a_{i-1}        |
     | sinθ_i·cosα_{i-1}  cosθ_i·cosα_{i-1}  -sinα_{i-1}  -d_i·sinα_{i-1} |
T_i = | sinθ_i·sinα_{i-1}  cosθ_i·sinα_{i-1}   cosα_{i-1}   d_i·cosα_{i-1} |
     | 0                 0                 0          1              |
怎么选? 我个人建议:如果你做的是串联机器人(像常见的六轴工业臂),用标准DH就够了,资料多、公式成熟。如果你做的是并联机器人、移动机械臂或者树形结构,用改进DH更灵活。我在STM32上做标定程序时,统一用的改进DH——因为它的坐标系定义更符合“从基座往末端推”的直觉。

2.3 正运动学建模:从关节角到末端位姿

正运动学建模的流程其实很简单:

  1. 建立连杆坐标系:按照DH规则,在每个关节处建立坐标系
  2. 填写DH参数表:把每个连杆的θ、d、a、α填进去
  3. 计算单个变换矩阵:用DH公式算出每个相邻连杆的变换矩阵T_i
  4. 链式相乘:T_0n = T_1 · T_2 · ... · T_n,得到从基座到末端的总变换

嗯,这里要注意——第4步的链式相乘,顺序不能乱。矩阵乘法不满足交换律,你调换顺序,末端位置就飞到天上去了。

2.3.1 一个简单的2自由度机械臂例子

假设我们有一个2自由度平面机械臂:

  • 连杆1长度L1,关节角θ1
  • 连杆2长度L2,关节角θ2

用标准DH建模,参数表如下:

连杆i θ_i d_i a_i α_i
1 θ1 0 L1 0
2 θ2 0 L2 0

代入标准DH公式,得到两个变换矩阵:

T_1 = | 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_2 = | 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_1 · T_2,末端位置就在T_02的右上角:

x = L1·cosθ1 + L2·cos(θ1+θ2)
y = L1·sinθ1 + L2·sin(θ1+θ2)

你看,这就是正运动学——输入θ1和θ2,输出(x,y)。

关键理解: 正运动学是“确定”的——给定一组关节角,末端位姿是唯一确定的。这也是为什么标定算法能收敛:我们通过测量末端实际位姿,反推DH参数的误差,然后修正。

2.4 本章知识体系总览

为了让你对本章内容有个整体把握,我画了一张结构图:

第2章 知识体系:机器人运动学基础(上) 正运动学建模 齐次变换矩阵 DH参数法 正运动学流程 旋转矩阵R 平移向量P 标准DH 改进DH 建立坐标系 填写DH参数表 4个参数:θ, d, a, α 计算T_i矩阵 链式相乘 输出:末端位姿 (位置 + 姿态) 关节空间 → 笛卡尔空间

2.5 本章小结

这一章我们干了三件事:

  • 齐次变换矩阵:用4×4矩阵统一描述旋转和平移,是运动学计算的“基本单元”
  • DH参数法:标准DH和改进DH的区别与选择,4个参数的物理含义
  • 正运动学建模:从关节角到末端位姿的完整计算流程
给STM32实战的铺垫: 下一章我们会把这些公式写成C代码,跑在STM32上。到时候你会发现——矩阵乘法用for循环实现,DH参数表用结构体数组存储,正运动学就是一个函数调用的事。但前提是,你得把本章的数学基础打牢。

嗯,今天就到这里。记住:运动学是机器人学的“语法”,不掌握它,后面的标定、控制、轨迹规划都无从谈起。动手把2自由度机械臂的例子在纸上算一遍,比看十遍公式都管用。