第二章 数学基础回顾:向量、矩阵与刚体运动

各位同学,欢迎来到第二章。说实话,轨迹规划这个领域,看着花哨,底子就是数学。我见过不少同学一上来就猛啃算法,结果推导到一半卡在坐标变换上,代码跑出来全是奇点。这一章,咱们就把这些基础工具彻底捋一遍。

你想想看,机器人要运动,首先得知道自己在哪里、目标在哪里、中间怎么过去。这些问题的答案,全藏在向量、矩阵和刚体运动描述里。别怕,咱们不搞纯数学推导,我带你从工程视角过一遍。

2.1 向量与矩阵:轨迹规划的“语言”

向量是什么?说白了就是空间里的一个箭头。位置、速度、加速度,在机器人眼里全是向量。矩阵呢?就是给这个箭头做变换的“操作员”。

2.1.1 向量运算

先看最基本的。一个三维向量 v = [x, y, z]^T,表示从原点指向 (x, y, z) 的箭头。我们常用的运算就这几个:

  • 点积:a · b = |a||b|cosθ。用来算夹角、算投影。我在做路径平滑时,经常用点积判断两个速度方向是否一致。
  • 叉积:a × b = |a||b|sinθ · n。结果是一个垂直于 a、b 平面的向量。嗯,这里要注意,叉积不满足交换律,a×b = -b×a。
  • 模长:||v|| = sqrt(x² + y² + z²)。就是箭头的长度,也就是距离。

工程经验:在轨迹规划中,向量归一化(把模长变成1)非常常见。比如你要算一个方向向量,一定要先归一化,否则后续计算全错。我曾经在AGV导航项目里,因为忘记归一化,导致路径偏移了30度,排查了整整一个下午。

2.1.2 矩阵运算

矩阵在轨迹规划里,主要干两件事:变换和求解。

运算 数学表示 轨迹规划中的应用
矩阵乘法 C = A × B 复合变换:先旋转再平移
矩阵转置 A^T 求逆的快捷方式(正交矩阵)
矩阵求逆 A^{-1} 从世界坐标回到局部坐标
特征值分解 A = QΛQ^{-1} 分析轨迹的稳定性

我个人习惯,写代码时尽量用现成的线性代数库(比如 Eigen、NumPy),但一定要理解背后的几何意义。矩阵乘法不满足交换律,AB ≠ BA,这个坑我踩过不止一次。

避坑指南:我曾经在写串联机械臂的雅可比矩阵时,把乘法顺序搞反了,结果末端执行器直接飞到了奇异位置。记住:矩阵乘法顺序是从右往左读,先发生的变换在右边。

2.2 坐标系与齐次坐标

机器人世界里,坐标系多到你头疼。世界坐标系、基坐标系、工具坐标系、相机坐标系……每个物体都有自己的“小天地”。怎么在这些坐标系之间来回切换?答案就是齐次坐标。

2.2.1 为什么需要齐次坐标?

你想想看,一个三维空间里的点,用 (x, y, z) 表示。旋转可以用 3×3 矩阵搞定,但平移呢?你没法用 3×3 矩阵表示平移。怎么办?加一维。

齐次坐标把三维点变成四维:p = [x, y, z, 1]^T。方向向量则用 [x, y, z, 0]^T。这样一来,旋转和平移就能统一在一个 4×4 矩阵里了。

记忆技巧:最后一个分量是1表示点,是0表示方向。为什么?因为方向向量平移后不变,所以平移分量对它无效。

2.2.2 齐次变换矩阵

一个标准的齐次变换矩阵长这样:

T = [ R   t ]
    [ 0   1 ]

其中:
R:3×3 旋转矩阵
t:3×1 平移向量
0:1×3 零向量
1:标量 1

这个矩阵 T 可以同时完成旋转和平移。复合变换就是矩阵乘法:T_13 = T_12 × T_23。注意顺序,先乘的变换先发生。

2.3 刚体运动描述

刚体运动,说白了就是一个物体在空间里又转又移,但自身不变形。描述刚体姿态,主要有三种方式:旋转矩阵、欧拉角、四元数。我一个个说。

2.3.1 旋转矩阵

旋转矩阵 R 是一个 3×3 的正交矩阵,满足 R^T R = I,det(R) = 1。它把向量从一个坐标系旋转到另一个坐标系。

绕 X、Y、Z 轴旋转 θ 角的基本矩阵:

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

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

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

复合旋转就是矩阵乘法。但这里有个大坑:万向锁。用欧拉角(比如 ZYX 顺序)描述姿态时,当第二个旋转角达到 ±90°,第一个和第三个旋转轴会重合,丢失一个自由度。

避坑指南:我在做六轴机械臂的轨迹规划时,用欧拉角做插值,结果在某个奇异点附近,关节速度突然变得极大。后来改用四元数,问题迎刃而解。所以,如果你要做平滑插值,别用欧拉角,用四元数。

2.3.2 四元数

四元数是什么?说白了就是“带约束的复数在三维空间的推广”。一个四元数 q = w + xi + yj + zk,其中 w 是实部,x、y、z 是虚部,满足 i² = j² = k² = ijk = -1。

单位四元数(模长为1)可以用来表示旋转。绕单位轴 u 旋转 θ 角:

q = [cos(θ/2), u_x·sin(θ/2), u_y·sin(θ/2), u_z·sin(θ/2)]

四元数的最大好处:无奇点、可平滑插值。球面线性插值(SLERP)就是专门为四元数设计的。

特性 旋转矩阵 欧拉角 四元数
存储空间 9个元素 3个元素 4个元素
奇点问题 无 有(万向锁) 无
插值平滑性 差 差 好(SLERP)
复合运算 矩阵乘法 复杂 四元数乘法
直观性 一般 好 差

我个人习惯,在代码里用四元数做内部运算,只在用户界面显示时转成欧拉角。这样既避免了奇点,又方便调试。

2.4 知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当作一个“思维地图”,以后遇到具体问题,先定位到对应的模块。

轨迹规划数学基础知识体系 轨迹规划数学基础 向量与矩阵 坐标系与变换 刚体运动描述 点积 / 叉积 矩阵乘法 / 求逆 齐次坐标 变换矩阵 T 旋转矩阵 四元数 核心原则 理解几何意义 > 死记公式 | 优先用四元数做插值 | 注意矩阵乘法顺序

2.5 本章小结

这一章的内容,说白了就是轨迹规划的“工具箱”。向量和矩阵是基础运算工具,齐次坐标和变换矩阵是坐标系转换工具,旋转矩阵和四元数是姿态描述工具。你不需要背下所有公式,但一定要理解每个工具的适用场景和局限性。

我的建议:学完这一章,你可以做一个小练习:写一个函数,输入一个四元数,输出对应的旋转矩阵和欧拉角。这个练习能帮你把三个概念串起来。我当年就是这么入门的。