第二讲:数学基础回顾——向量与矩阵、坐标系与变换、欧拉角与四元数、李群与李代数初步
各位同学,欢迎来到《多约束条件下的轨迹优化实战》的第二讲。
说实话,做轨迹优化这么多年,我最大的体会就是:数学基础决定上层建筑。你想想看,如果连旋转矩阵都写不对,那后面谈什么避障、平滑、时间最优?
这一讲,我们快速过一遍后面会反复用到的数学工具。别怕,我不讲枯燥的推导,只讲你写代码时真正用得上的东西。
2.1 向量与矩阵:你每天都在用的线性代数
向量和矩阵,说白了就是描述空间状态和变换的「语言」。
- 向量:表示位置、速度、加速度。在三维空间中,一个位置向量
p = [x, y, z]^T就搞定了。 - 矩阵:表示变换。比如旋转矩阵
R,能把一个向量从机体坐标系转到世界坐标系。
我个人习惯用 列向量 表示点,用 行向量 表示法线或梯度。为什么?因为矩阵乘法默认是左乘,列向量更符合直觉。
- 点积:
a·b = a^T b,用于计算投影、夹角。 - 叉积:
a × b,用于计算法向量、旋转轴。 - 矩阵乘法:
C = A B,注意维度匹配(m×n 乘以 n×p)。 - 转置:
A^T,交换行列。 - 逆矩阵:
A^{-1},用于「撤销」变换。
R * p 是先旋转后平移,而 p * R 是反的。在代码里,左乘 vs 右乘 一定要分清。
2.2 坐标系与变换:从世界到机体
做轨迹优化,你至少需要搞懂三个坐标系:
- 世界坐标系(W):固定在地面,通常 Z 轴向上。
- 机体坐标系(B):固定在机器人上,通常 X 轴向前。
- 工具坐标系(T):固定在末端执行器上,比如机械臂的夹爪。
变换的核心公式就一个:
p_W = R_WB * p_B + t_WB
其中 R_WB 是旋转矩阵,t_WB 是平移向量。
嗯,这里要注意:齐次变换矩阵 可以把旋转和平移写在一起:
T_WB = [ R_WB t_WB ]
[ 0^T 1 ]
这样,p_W = T_WB * p_B 一步到位。我在做多机器人协同规划时,全靠齐次矩阵来统一不同机器人的位姿表达。
T_WB 和 T_BW 搞混。记住:T_WB 表示「从 B 系到 W 系的变换」,下标顺序是「目标_源」。我曾经因为这个搞反了,导致两台机器人差点撞上。
2.3 欧拉角与四元数:旋转的两种表达
旋转矩阵有9个参数,但自由度只有3个。所以我们需要更紧凑的表达方式。
欧拉角
欧拉角用三个角度描述旋转:偏航(Yaw)、俯仰(Pitch)、滚转(Roll)。
- 优点:直观,容易理解。
- 缺点:万向锁(Gimbal Lock)。当 Pitch 接近 ±90° 时,Yaw 和 Roll 会失去一个自由度。
我建议:只在人机交互界面用欧拉角,算法内部尽量别用。
四元数
四元数用四个参数表示旋转:q = [w, x, y, z]^T,其中 w 是实部,(x, y, z) 是虚部。
- 优点:无万向锁,插值平滑(球面线性插值 Slerp)。
- 缺点:不够直观,需要习惯。
四元数乘法:
q1 * q2 = [w1*w2 - x1*x2 - y1*y2 - z1*z2,
w1*x2 + x1*w2 + y1*z2 - z1*y2,
w1*y2 - x1*z2 + y1*w2 + z1*x2,
w1*z2 + x1*y2 - y1*x2 + z1*w2]^T
q_start 到 q_end,用 Slerp 插值可以保证旋转路径最短。但要注意:四元数必须归一化,否则插值结果会变形。
2.4 李群与李代数初步:优化问题的核心工具
为什么需要李群和李代数?因为旋转矩阵 SO(3) 和齐次变换矩阵 SE(3) 不是向量空间,不能直接做加减法。
- 李群:连续的、光滑的群。比如
SO(3)(旋转矩阵)和SE(3)(齐次变换矩阵)。 - 李代数:李群在单位元处的切空间。比如
so(3)(三维旋转向量)和se(3)(六维运动旋量)。
核心关系:
R = exp(θ * [ω]×) // 从李代数到李群(指数映射)
θ * [ω]× = log(R) // 从李群到李代数(对数映射)
其中 [ω]× 是 ω 的反对称矩阵。
说白了,李代数允许我们把旋转「线性化」,这样就能用常规的优化算法(比如高斯-牛顿法)来求解。
- 在优化过程中,我们需要对位姿求导。李代数提供了 右扰动 和 左扰动 两种求导方式。
- 比如,你想知道「旋转矩阵 R 对时间 t 的导数」,用李代数可以写成
dR/dt = R * [ω]×。 - 在 因子图优化 和 非线性最小二乘 中,李代数是标准工具。
知识体系总览
下面这张图总结了本章的核心逻辑:从基础数学工具到轨迹优化的应用链路。
好了,这一讲的内容就到这里。数学基础是枯燥的,但它是你后面写优化代码的「底气」。下一讲我们会进入正题,开始搭建轨迹优化的基本框架。
- 写一个函数,把欧拉角转成四元数,再转回欧拉角,验证是否一致。
- 用李代数实现一个简单的旋转矩阵求导,验证数值梯度与解析梯度是否一致。
可可精品资料库