第三章 数学基础(二):李群与李代数
好,咱们接着聊。上一章我们把三维空间里的旋转和变换矩阵搞清楚了,但有个问题一直卡着我——你想想看,优化一个位姿的时候,总不能直接去加减矩阵里的元素吧?那玩意儿有约束,加完就不是旋转矩阵了。我在做第一个视觉SLAM项目时就踩过这个坑,直接对旋转矩阵做差分,结果迭代出来的矩阵行列式不再是1,整个系统直接崩了。
后来我才明白,得用李群和李代数这套工具。说白了,李群就是那些连续的、光滑的变换群,比如旋转矩阵构成的SO(3),还有刚体变换矩阵构成的SE(3)。而李代数呢,就是它们对应的“切空间”,也就是在单位元附近的微小扰动。
核心思想:李群描述“状态”,李代数描述“变化”。优化时我们在李代数上做加法,再映射回李群,这样就能保证约束始终满足。
3.1 SO(3) 与 so(3)
SO(3) 是三维旋转矩阵的集合,满足 RTR = I 且 det(R)=1。这个集合构成了一个群,而且是个李群——因为它是连续的,你可以从单位矩阵平滑地变到任意旋转。
对应的李代数 so(3) 呢?其实就是三维向量的集合,通常记作 φ ∈ ℝ3。每个三维向量对应一个反对称矩阵:
φ = [φ1, φ2, φ3]T → φ^ =
[ 0 -φ3 φ2 ]
[ φ3 0 -φ1 ]
[-φ2 φ1 0 ]
我个人习惯把 φ 叫做“旋转向量”,因为它其实就是旋转轴乘以旋转角度。嗯,这里要注意:so(3) 里的元素和三维空间中的角速度是同一个东西,物理意义很直观。
3.2 SE(3) 与 se(3)
SE(3) 是刚体变换矩阵的集合,形式是 4×4 矩阵:
T = [ R t ]
[ 0 1 ]
对应的李代数 se(3) 是六维向量 ξ = [ρ, φ]T,其中 ρ 是平移部分,φ 是旋转部分。它的反对称矩阵形式是 4×4 的:
ξ^ = [ φ^ ρ ]
[ 0 0 ]
我在做多传感器融合时,经常需要在 SE(3) 上做插值和滤波。直接在矩阵上做线性插值?不行,插出来的矩阵大概率不是刚体变换。得在 se(3) 上插值,再映射回 SE(3)。
3.3 指数映射与对数映射
这是李群和李代数之间最核心的桥梁。指数映射把李代数中的元素映射到李群,对数映射则反过来。
对于 SO(3):
给定旋转向量 φ = θ·n(θ 是旋转角,n 是单位旋转轴),指数映射就是罗德里格斯公式:
R = exp(φ^) = I + sinθ·n^ + (1-cosθ)·(n^)2
反过来,给定旋转矩阵 R,对数映射提取旋转向量:
θ = arccos((tr(R)-1)/2)
n^ = (R - RT) / (2·sinθ)
对于 SE(3):
指数映射稍微复杂一点,涉及一个雅可比矩阵 J:
T = exp(ξ^) = [ exp(φ^) J·ρ ]
[ 0 1 ]
其中 J = (sinθ/θ)·I + (1-sinθ/θ)·n·nT + ((1-cosθ)/θ)·n^
我的小技巧:实际编程时,别自己手写这些公式,直接用 Sophus 或 Eigen 的库函数。我早期手写过一次,调试了三天才发现是 θ 接近 0 时数值不稳定。
3.4 扰动模型
终于到重点了。在SLAM中,我们经常要对位姿求导。比如,误差函数对位姿的雅可比矩阵怎么算?
有两种方式:
- 左扰动模型:在位姿左边乘一个小扰动,然后对扰动求导
- 右扰动模型:在位姿右边乘一个小扰动
我个人更常用左扰动模型,因为直观。对于 SO(3):
∂(R·p) / ∂φ = -R·p^
这个公式的意思是:旋转一个点 p,然后对旋转向量 φ 求导,结果就是 -R 乘以 p 的反对称矩阵。
对于 SE(3):
∂(T·p) / ∂ξ = [ I -R·p^ ]
[ 0 0 ]
我曾经在优化相机位姿时,用错了扰动模型,导致雅可比矩阵符号反了,优化结果一直在震荡。后来换成左扰动模型,一次收敛。
避坑指南:不同文献对扰动模型的定义可能不同。有的用左扰动,有的用右扰动,有的在局部坐标系下扰动。一定要搞清楚你用的库或用的是哪种,否则求导结果差一个负号或一个旋转。
3.5 知识体系总览
下面这张图总结了本章的核心逻辑,我建议你把它记在脑子里:
3.6 实际编程中的注意事项
讲完了理论,说点实际的。我在写SLAM系统时,总结了几条经验:
- 用 Sophus 库:它封装了 SO(3) 和 SE(3) 的常用操作,包括指数映射、对数映射、扰动模型。别自己造轮子。
- 注意数值稳定性:当旋转角接近 0 时,罗德里格斯公式的分母接近 0,要用泰勒展开近似。
- 区分左乘和右乘:在优化中,左扰动对应世界坐标系下的雅可比,右扰动对应局部坐标系下的雅可比。搞混了,梯度方向就错了。
- 链式法则:实际误差函数往往很复杂,记得用链式法则把扰动模型的雅可比和误差函数的雅可比乘起来。
调试技巧:如果你不确定自己的雅可比算对了没,可以用数值微分验证。给位姿加一个小扰动,看误差的变化是否和解析雅可比一致。我每次写新的优化问题都会这么干一遍。
好了,李群和李代数就讲这么多。这套工具是SLAM优化的基石,你后面会反复用到。刚开始可能觉得抽象,但用多了就会发现——说白了,就是一套让你能在流形上做优化的数学工具。
可可精品资料库