第1章:基础数学预备知识

各位同学,欢迎来到《路径跟踪核心算法与工程落地实战》的第一课。

做机器人控制,说白了就是跟数学打交道。我见过不少同学,一上来就啃PID、MPC,结果算到一半卡在坐标变换上,代码跑出来机器人原地打转。嗯,这种坑我自己也踩过。

所以这一章,咱们先把地基打牢。坐标系、向量、旋转矩阵、四元数——这些概念你搞明白了,后面写代码才有底气。

1.1 坐标系与坐标变换

先问个问题:你告诉机器人“往前走1米”,它怎么知道往哪走?

答案就是坐标系。没有坐标系,位置和方向都是废话。

1.1.1 世界坐标系与机器人坐标系

世界坐标系,你可以理解为整个场景的“绝对参考系”。比如我在地面上画个原点,X轴朝东,Y轴朝北,Z轴朝天。所有障碍物、目标点,都用这个坐标系来描述。

机器人坐标系呢?它跟着机器人走。原点在机器人中心,X轴朝前,Y轴朝左,Z轴朝天。机器人自己感知到的障碍物,都是在这个坐标系下的。

我在项目中遇到过一个问题:激光雷达扫到的障碍物坐标,直接拿来用,结果机器人撞墙了。为什么?因为雷达装在车头,坐标是相对于雷达的,不是相对于机器人中心的。你得先做一次坐标变换。

核心要点: 世界坐标系是“地图”,机器人坐标系是“我”。两者之间需要变换矩阵来转换。

1.1.2 坐标变换的数学本质

说白了,坐标变换就是“平移+旋转”。

假设机器人坐标系原点在世界坐标系下的位置是 t,机器人坐标系相对于世界坐标系的旋转是 R。那么,一个在机器人坐标系下的点 p_robot,在世界坐标系下的坐标就是:

p_world = R * p_robot + t

反过来,从世界坐标到机器人坐标:

p_robot = R^(-1) * (p_world - t)

注意,旋转矩阵的逆就是它的转置,这个性质后面会经常用到。

我的习惯: 写代码时,我会把变换矩阵封装成一个类。输入一个点,输出变换后的点。这样不容易搞混。

1.2 向量与矩阵基础

向量和矩阵,是机器人学的“砖瓦”。你后面要学的雅可比矩阵、协方差矩阵,都从这里来。

1.2.1 向量的基本运算

向量就是一堆数字排成一列。比如位置向量 [x, y, z]^T,速度向量 [vx, vy, vz]^T。

  • 加法: 对应分量相加。比如位置+位移=新位置。
  • 点积: 结果是一个数。几何意义是投影长度。我常用它来判断两个方向是否一致。
  • 叉积: 结果是一个向量。垂直于原来的两个向量。在机器人里,叉积常用来计算力矩。

举个例子,你要判断机器人前方有没有障碍物。把机器人的朝向向量和障碍物方向向量做点积,如果结果接近1,说明障碍物就在正前方。

1.2.2 矩阵与线性变换

矩阵可以看作一种“映射”。一个向量乘上一个矩阵,就变成了另一个向量。

旋转矩阵就是典型的例子。它把一个向量“转”到另一个方向,长度不变。

我记得刚学的时候,总觉得矩阵乘法很抽象。后来我把它理解为“对向量施加一系列操作”。比如:

v' = A * v

意思就是:向量 v 经过矩阵 A 的变换,变成了 v'。

运算 数学表示 几何意义
旋转 v' = R * v 绕某个轴旋转
缩放 v' = S * v 沿坐标轴拉伸
平移 v' = v + t 移动位置
避坑指南: 我曾经在写代码时,把矩阵乘法的顺序搞反了。记住:先旋转后平移,和先平移后旋转,结果完全不同。顺序很重要!

1.3 刚体运动与旋转矩阵

刚体运动,就是物体在空间里“又转又移”,但形状不变。机器人就是典型的刚体。

1.3.1 旋转矩阵的性质

旋转矩阵 R 有三个重要性质:

  1. 它是正交矩阵:R^T * R = I
  2. 行列式为 +1
  3. 每一列都是单位向量,且互相垂直

这些性质保证了旋转不会改变向量的长度。你想想看,如果旋转一下,物体变大了,那还叫旋转吗?

1.3.2 绕坐标轴的旋转

绕 X、Y、Z 轴的旋转矩阵,是基础中的基础。我建议你手推一遍,不要死记硬背。

绕Z轴旋转θ角:
R_z(θ) = [cosθ  -sinθ  0]
         [sinθ   cosθ  0]
         [0      0     1]

绕X轴和Y轴的类似,只是把1和三角函数放在不同位置。

我的经验: 实际项目中,很少直接用单个轴的旋转。更多是用“欧拉角”组合,或者直接用四元数。但理解单轴旋转,是理解复杂旋转的基础。

1.4 四元数与欧拉角

说到旋转表示法,就不得不提欧拉角和四元数。这两个东西,是很多初学者的噩梦。我当年也绕晕过。

1.4.1 欧拉角

欧拉角用三个角度表示旋转:偏航(Yaw)、俯仰(Pitch)、滚转(Roll)。

  • 偏航: 绕Z轴转,就像你左右摇头。
  • 俯仰: 绕Y轴转,就像你点头。
  • 滚转: 绕X轴转,就像你歪头。

欧拉角很直观,但有个致命问题——万向锁。当俯仰角达到±90度时,偏航和滚转就分不清了。我在做无人机仿真时遇到过这个问题,姿态突然“卡住”,怎么调都调不回来。

避坑指南: 如果你用欧拉角做插值,一定要小心万向锁。我建议在内部计算时用四元数,只在人机交互时转成欧拉角显示。

1.4.2 四元数

四元数可以理解为“带约束的复数”。它用四个数表示旋转:一个实部,三个虚部。

q = w + xi + yj + zk

其中 w 是实部,x、y、z 是虚部。约束条件是 w^2 + x^2 + y^2 + z^2 = 1。

四元数的好处是:没有万向锁,插值平滑,计算效率高。坏处是:不直观。你很难一眼看出 q = [0.707, 0, 0.707, 0] 表示绕Y轴转90度。

1.4.3 如何选择?

我个人习惯是:

  • 人机交互: 用欧拉角。直观,好理解。
  • 内部计算: 用四元数。稳定,无奇点。
  • 存储和传输: 用旋转矩阵。方便,直接可用。
核心要点: 三种表示法可以互相转换。你不需要记住所有公式,但要知道什么时候该用哪一种。

知识体系总览

下面这张图,是我自己梳理的本章知识结构。你可以把它当作一个“地图”,随时回来对照。

第1章:基础数学预备知识 坐标系与变换 向量与矩阵 旋转表示法 世界坐标系 机器人坐标系 向量运算 矩阵变换 欧拉角 四元数 平移 + 旋转 变换矩阵 点积 / 叉积 线性映射 万向锁问题 平滑插值 核心目标:任意坐标系下的点 ↔ 机器人坐标系下的点 掌握变换,才能让机器人“知道自己在哪,要去哪”

这张图把本章内容串起来了。你从左上角开始看:坐标系是基础,向量和矩阵是工具,旋转表示法是具体实现。三者结合,才能完成坐标变换。

我的建议: 学完这一章,你可以自己动手写一个小程序:输入一个点在机器人坐标系下的坐标,输出它在世界坐标系下的坐标。代码跑通了,概念才算真懂了。

好了,这一章就到这里。数学基础打牢了,后面讲PID、MPC、LQR的时候,你才不会觉得“天书”。

记住:坐标系是地图,向量是路标,矩阵是方向盘。三者缺一不可。

专注资料整理