2. 运动学基础(上):刚体在空间中的位姿描述、齐次变换矩阵、平移与旋转的数学表达

各位同学,欢迎来到运动学基础部分。

说实话,搞机器人这么多年,我最大的体会就是:运动学是机器人的灵魂。你想想看,一个机械臂要抓杯子,它得先知道杯子在哪,自己的手在哪,然后才能算怎么过去。这一章,我们就来解决第一个问题——怎么描述一个刚体在空间中的位置和姿态

核心思想: 刚体在空间中有6个自由度——3个平移 + 3个旋转。我们用一个4×4的齐次变换矩阵,就能把这6个自由度全部打包带走。

2.1 位姿描述:位置 + 姿态

什么叫「位姿」?说白了就是两个东西:位置姿态

  • 位置:刚体上某个参考点(比如法兰盘中心)在空间中的坐标 (x, y, z)。
  • 姿态:刚体相对于参考坐标系的朝向,也就是它「脸朝哪边、头顶哪边」。

我记得刚入行时,有个老工程师跟我说:「小张,你光知道手在哪没用,你还得知道手是正着抓还是歪着抓。」这句话我一直记到现在。

在数学上,我们用一个3×1的位置矢量 p 描述位置,用一个3×3的旋转矩阵 R 描述姿态。合在一起,就是一个4×4的齐次变换矩阵 T

T = [ R   p ]
    [ 0   1 ]

这个矩阵,就是我们在机器人学里描述刚体位姿的「万能工具」。

2.2 旋转矩阵:姿态的数学表达

旋转矩阵 R 是一个3×3的正交矩阵,它的每一列代表刚体坐标系的一个轴在参考坐标系中的投影。

举个例子:假设有个坐标系 {B} 相对于参考坐标系 {A} 绕 Z 轴转了 θ 角度,那么旋转矩阵就是:

R_z(θ) = [ cosθ  -sinθ  0 ]
         [ sinθ   cosθ  0 ]
         [ 0      0     1 ]

同理,绕 X 轴和 Y 轴的旋转矩阵分别是:

R_x(θ) = [ 1   0      0    ]
         [ 0  cosθ  -sinθ ]
         [ 0  sinθ   cosθ ]

R_y(θ) = [ cosθ  0  sinθ ]
         [ 0     1  0    ]
         [-sinθ  0  cosθ ]

我的小技巧: 记不住这些矩阵?没关系。你只要记住「绕哪个轴转,哪个轴对应的行和列就不变」,剩下的就是二维旋转矩阵的翻版。我在项目里经常用这个口诀快速推导。

2.3 齐次变换矩阵:平移 + 旋转一把搞定

为什么要用4×4的齐次变换矩阵?因为它能把平移和旋转统一成一次矩阵乘法

你想想看,如果只用3×3的旋转矩阵,你只能描述旋转,平移还得单独加一个矢量。但有了齐次变换矩阵,我们可以把坐标变换写成:

B_p = T_A^B * A_p

其中 T_A^B 表示从坐标系 {A} 到 {B} 的变换矩阵,A_p 是点在 {A} 中的坐标,B_p 是同一个点在 {B} 中的坐标。

这个公式,我几乎每天都在用。不管是正运动学还是逆运动学,都离不开它。

2.4 平移与旋转的复合变换

实际应用中,我们很少只做一次平移或一次旋转。更多时候是先平移再旋转,或者先旋转再平移。这两种顺序得到的结果是不一样的。

我记得有一次调试一个焊接机器人,焊枪总是偏一点。查了半天,发现是变换顺序搞反了——先旋转后平移,写成了先平移后旋转。嗯,这个坑我替你们踩过了。

复合变换的数学表达很简单:

T = T1 * T2 * T3 * ...

注意:矩阵乘法不满足交换律,所以顺序很重要。从左到右依次作用。

避坑指南: 我曾经在项目中遇到过一个问题——两个坐标系之间的变换矩阵算出来总是差一个符号。后来发现,是我把「从A到B」和「从B到A」搞混了。记住:T_A^B 的逆矩阵就是 T_B^A,不要自己重新推导,直接用逆矩阵。

2.5 知识体系总览

下面这张图,是我自己总结的运动学基础核心逻辑。你把它看懂了,这一章就算过关了。

刚体位姿描述 位置 (x, y, z) 姿态 (旋转矩阵 R) 平移矢量 p 绕X/Y/Z轴旋转 齐次变换矩阵 T 坐标变换 · 正运动学 · 逆运动学

2.6 实战小例子

光说不练假把式。我们来看一个实际例子。

假设机器人末端执行器相对于基座标系 {0} 的变换矩阵是:

T_0^6 = [ 0.707  -0.707  0   100 ]
        [ 0.707   0.707  0   200 ]
        [ 0       0      1   300 ]
        [ 0       0      0   1   ]

这个矩阵告诉我们什么?

  • 末端的位置是 (100, 200, 300) mm
  • 末端的姿态是绕 Z 轴转了 45°(因为 cos45° = sin45° ≈ 0.707)

现在,如果末端上有一个点,在末端坐标系中的坐标是 (10, 20, 30),那么它在基座标系中的坐标就是:

p_0 = T_0^6 * p_6
    = [ 0.707  -0.707  0   100 ]   [10]
      [ 0.707   0.707  0   200 ] * [20]
      [ 0       0      1   300 ]   [30]
      [ 0       0      0   1   ]   [1 ]

    = [ 0.707*10 - 0.707*20 + 0*30 + 100 ]
      [ 0.707*10 + 0.707*20 + 0*30 + 200 ]
      [ 0*10     + 0*20     + 1*30 + 300 ]
      [ 1 ]

    = [ 100 - 7.07 ]
      [ 200 + 21.21 ]
      [ 330 ]
      [ 1 ]

    = [ 92.93 ]
      [ 221.21 ]
      [ 330 ]
      [ 1 ]

你看,一次矩阵乘法,就把平移和旋转都算进去了。这就是齐次变换矩阵的威力。

我的建议: 刚开始学的时候,一定要亲手算几个这样的例子。不要偷懒用计算器,手算能帮你建立直觉。我当年就是靠手算了几十个变换矩阵,才真正理解了运动学的本质。

2.7 本章小结

这一章我们讲了三个核心概念:

  1. 位姿 = 位置 + 姿态,用6个自由度描述刚体在空间中的状态
  2. 旋转矩阵是描述姿态的数学工具,绕X/Y/Z轴有标准形式
  3. 齐次变换矩阵把平移和旋转统一成4×4矩阵,方便进行坐标变换

这些内容看起来简单,但它们是整个机器人学的基石。下一章我们会继续深入,讲旋转的另一种表达方式——欧拉角和四元数。嗯,到时候再聊。


专注资料整理