第2章 数学基础回顾:向量与矩阵、李群与李代数、旋转矩阵与四元数、刚体运动学

各位同学,欢迎来到《复杂环境下轨迹优化实战宝典》的第二讲。

说实话,每次开课讲到数学基础,我都怕大家觉得枯燥。但这一章,我真心建议你沉下心来看完。为什么?因为后面所有轨迹优化、状态估计、SLAM后端优化的代码,底层全是这些数学工具在撑腰。我自己当年在项目里踩过的坑,十有八九都是因为某个矩阵性质没搞懂,或者四元数更新算错了方向。

好,我们直接进入正题。

2.1 向量与矩阵:机器人学的“砖瓦”

向量和矩阵,说白了就是用来描述空间中的点和变换的。一个三维向量 p = [x, y, z]^T 可以表示一个位置,一个3x3矩阵可以表示一个旋转。

向量运算:点积(内积)和叉积(外积)是两大核心。

  • 点积a · b = |a||b|cosθ,用于判断两个向量是否垂直(点积为0),或者投影长度计算。
  • 叉积a × b 生成一个垂直于a和b的向量,方向由右手定则决定。模长等于 |a||b|sinθ
个人经验:我在做机械臂避障时,经常用叉积来判断障碍物在运动方向的哪一侧。比如,速度向量v和障碍物方向向量d的叉积方向,直接告诉我该往左躲还是往右躲。

矩阵运算:矩阵乘法、转置、逆、行列式。

  • 矩阵乘法:不满足交换律,即 AB ≠ BA。这一点在组合旋转时尤其要小心。
  • 转置:交换行和列。旋转矩阵的转置等于它的逆,这是一个非常重要的性质。
  • 逆矩阵:如果矩阵可逆,则 A * A^{-1} = I。在求解线性方程组时经常用到。
  • 行列式:表示矩阵所代表的线性变换对空间体积的缩放比例。旋转矩阵的行列式为+1,表示纯旋转,不改变体积。

2.2 旋转矩阵与四元数:姿态的两种“语言”

在机器人学里,描述一个物体的朝向(姿态),最常用的就是旋转矩阵和四元数。它们各有优缺点,我分别说说。

2.2.1 旋转矩阵

旋转矩阵是一个3x3的正交矩阵,满足 R^T R = Idet(R) = 1。它最大的优点是直观——矩阵的每一列就是旋转后的坐标轴在原始坐标系下的表示。

但缺点也很明显:

  • 冗余:9个参数描述3个自由度,存在约束,数值优化时容易不满足正交性。
  • 插值困难:直接对矩阵元素做线性插值,得到的矩阵大概率不是旋转矩阵。
避坑指南:我曾经在优化轨迹时,直接对旋转矩阵做差分更新,结果迭代几次后矩阵就“漂移”了,不再是正交矩阵。后来改用李代数,才解决了这个问题。

2.2.2 四元数

四元数 q = [w, x, y, z]^T 是一种紧凑、无奇异的姿态表示方法。它本质上是一个单位四元数,满足 w^2 + x^2 + y^2 + z^2 = 1

四元数的乘法可以组合旋转,而且比矩阵乘法快(只需要16次乘法和12次加法)。

四元数转旋转矩阵

R = [[1-2(y^2+z^2), 2(xy-wz), 2(xz+wy)],
     [2(xy+wz), 1-2(x^2+z^2), 2(yz-wx)],
     [2(xz-wy), 2(yz+wx), 1-2(x^2+y^2)]]

旋转矩阵转四元数

w = sqrt(1 + R[0][0] + R[1][1] + R[2][2]) / 2
x = (R[2][1] - R[1][2]) / (4 * w)
y = (R[0][2] - R[2][0]) / (4 * w)
z = (R[1][0] - R[0][1]) / (4 * w)
我的习惯:在代码里,我通常用四元数做姿态的存储和插值(比如球面线性插值Slerp),而在需要组合多个旋转时,先转成旋转矩阵计算,再转回四元数。这样既避免了万向锁,又保证了数值稳定性。

2.3 李群与李代数:连续优化的“瑞士军刀”

李群和李代数,听起来很高大上,其实核心思想很简单:在流形上做优化

旋转矩阵构成的集合 SO(3) 是一个李群,它是一个连续的、光滑的流形。而它的李代数 so(3) 是流形在单位元处的切空间,由三维向量 φ = [φ1, φ2, φ3]^T 组成。

为什么需要李代数?

  • 旋转矩阵有约束(正交、行列式为1),直接优化很难。
  • 四元数也有单位约束。
  • 李代数是无约束的向量空间,可以在上面做常规的加法、梯度下降。

指数映射:将李代数映射到李群。对于 so(3),指数映射就是罗德里格斯公式:

R = exp(φ^) = I + sin(θ) * (φ^/θ) + (1 - cos(θ)) * (φ^/θ)^2

其中 θ = ||φ||φ^ 是 φ 的反对称矩阵。

对数映射:将李群映射回李代数,即从旋转矩阵中提取旋转向量。

核心应用:在轨迹优化中,我们通常把姿态误差表示为李代数上的小扰动,然后在这个无约束空间里做优化。优化完成后,再通过指数映射更新旋转矩阵。这样既保证了姿态的合法性,又简化了计算。

2.4 刚体运动学:位置与姿态的“时间演化”

刚体运动学描述的是物体位置和姿态随时间的变化关系。对于轨迹规划来说,我们关心的是:给定速度、角速度,如何更新位姿。

位置更新

p(t + dt) = p(t) + v(t) * dt

很简单,就是速度乘以时间。

姿态更新:这里就有讲究了。如果用旋转矩阵:

R(t + dt) = R(t) * exp(ω^ * dt)

其中 ω 是角速度向量,ω^ 是它的反对称矩阵。

如果用四元数:

q(t + dt) = q(t) ⊗ [cos(||ω|| * dt / 2), (ω/||ω||) * sin(||ω|| * dt / 2)]^T

其中 表示四元数乘法。

我曾经踩过的坑:在做无人机轨迹跟踪时,我直接用欧拉角做姿态更新,结果在大角度机动时出现了万向锁,导致控制发散。后来改用四元数更新,问题就解决了。所以,千万别在需要大范围运动时用欧拉角

2.5 知识体系总览

为了让你更直观地理解这些数学工具之间的关系,我画了一张图:

第2章 数学基础知识体系 向量与矩阵 点积、叉积、矩阵运算 旋转矩阵 正交矩阵,3x3 四元数 单位四元数,紧凑 李群 SO(3) 与 李代数 so(3) 指数映射、对数映射、无约束优化 刚体运动学 位置更新、姿态更新(旋转矩阵/四元数)

从图中你可以看到:向量与矩阵是基础,旋转矩阵和四元数是描述姿态的两种具体形式,它们之间可以互相转换。而李群与李代数则提供了在流形上做优化的数学框架,最终服务于刚体运动学——也就是我们轨迹规划中实际要用的位置和姿态更新公式。

2.6 本章小结

这一章的内容,说白了就是为后续的轨迹优化打地基。你不需要一次性全部记住,但一定要理解它们之间的逻辑关系:

  • 用向量和矩阵描述位置和旋转。
  • 用旋转矩阵或四元数表示姿态。
  • 用李代数做无约束优化。
  • 用刚体运动学公式做状态更新。

嗯,这些工具在后面的章节里会反复出现。尤其是李代数,它在轨迹优化中几乎是标配。我个人建议你花点时间把指数映射和对数映射的代码写一遍,这样印象会深很多。

一句话总结:数学是工具,不是目的。理解它们能帮你解决什么问题,比死记硬背公式重要得多。

专注资料整理