视觉SLAM第4讲|李群与李代数:位姿优化的数学基石

视觉SLAM第4讲|李群与李代数:位姿优化的数学基石

前面第三讲我们讲了好几种描述刚体位姿的方式:旋转矩阵、四元数、欧拉角。学到这里你可能会问:能用的表示方式都有了,还折腾李群李代数干嘛?

答案很现实:做优化的时候麻烦了 。

旋转矩阵是带约束的:必须正交、行列式必须等于1。你要是把旋转矩阵直接当优化变量,每次更新完都得想办法把它"掰回"正交的样子,既麻烦又容易发散。

李群与李代数,就是来解决这个痛点的:把带约束的李群元素,映射成无约束的李代数向量。这样一来,位姿优化就变成了普通的无约束向量优化,求导、迭代都顺理成章。


一、李群:带特殊性质的矩阵集合

先从李群说起。群不是什么玄乎的东西,就是一个集合 + 一个运算,满足四条基本规则。

1.1 群的四条基本性质

以我们最熟悉的旋转矩阵SO(3)为例,运算就是矩阵乘法:

  1. 封闭性:两个旋转矩阵相乘,结果还是旋转矩阵。转两次,合起来还是一次旋转,符合直觉。
  2. 结合律:先算前两个相乘还是后两个相乘,最终结果一样。
  3. 幺元:单位矩阵。乘单位矩阵等于没转。
  4. 逆元:旋转矩阵的转置(也就是逆),对应反向旋转。转过去再转回来,等于没转。

满足这四条,这个集合就构成一个群。

💡通俗解释:群就是"自己和自己玩,怎么玩都出不去这个圈子"。旋转怎么复合都是旋转,怎么逆都是旋转,所以旋转矩阵全体构成一个群。

1.2 什么是李群

李群就是具有"连续光滑"性质的群。刚体可以连续地旋转、连续地平移,不是跳变的,所以SO(3)、SE(3)都是李群。

我们主要打交道的就是两个矩阵李群:

  • SO(3):三维旋转矩阵群,所有3×3、正交、行列式为1的矩阵。
  • SE(3):三维欧氏变换群,所有4×4的刚体变换矩阵。

二、李代数:李群单位元处的正切空间

李代数描述的是李群在单位元附近的局部性质,说白了就是:李群的导数空间。

2.1 从旋转矩阵求导引出so(3)

我们从一个很直观的问题切入:一个随时间连续变化的旋转矩阵R(t),它对时间的导数长什么样?

对"R乘以自身转置等于单位矩阵"这个式子两边求导,整理之后会得到一个结论:

R的导数等于一个反对称矩阵乘以R本身。

反对称矩阵,我们第三讲讲过,和三维向量是一一对应的。这个和导数对应的三维向量,就是李代数so(3)的元素。

💡通俗解释:你可以把李代数理解成"旋转的速度向量"。就像速度是位置的导数,李代数就是旋转矩阵在单位元处的"切向速度"。

so(3)的元素就是三维向量,它对应的反对称矩阵,就是我们第三讲讲的尖号算子形式。

两个李代数元素的李括号,本质就是叉乘运算。

2.2 se(3):SE(3)对应的李代数

SE(3)对应的李代数se(3),是一个六维向量:

  • 后三维:旋转部分,对应so(3)
  • 前三维:平移部分,但注意:它不是直接的平移向量t

se(3)对应的4×4矩阵,左上角是旋转对应的反对称矩阵,右侧是平移向量,底部一行全是0。

⚠️易错提醒:se(3)的平移分量,和变换矩阵里的平移向量t不是一回事。中间差了一个雅可比矩阵J的变换,后面指数映射会讲到。


三、指数与对数映射:李群和李代数的双向桥梁

有了李代数,怎么和李群互相转换?靠指数映射和对数映射。

3.1 SO(3)的指数映射

so(3)向量做指数映射,就得到SO(3)的旋转矩阵。

说穿了,指数映射就是罗德里格斯公式 。

旋转向量转旋转矩阵,我们第三讲就会了,本质就是指数映射。

反过来,旋转矩阵做对数映射,就得到对应的so(3)向量。

💡衔接记忆:第三讲的旋转向量 ↔ 旋转矩阵,本质就是李代数 ↔ 李群的指数/对数映射。换了个数学名字而已。

指数映射是满射,不是单射。意思是每个旋转矩阵都能找到对应的李代数,但可能有好几个李代数对应同一个旋转。毕竟旋转角度差2π,转出来结果一样。

通常我们把角度限制在±π之间,这样就一一对应了。

3.2 SE(3)的指数映射

SE(3)的指数映射稍微复杂一点:

  • 左上角:旋转部分,还是so(3)的指数映射,没变化。
  • 右上角:平移部分,不是直接等于se(3)的平移分量,要左乘一个雅可比矩阵J。

这个J矩阵由旋转部分的角度和转轴决定。也就是说:李代数里的平移量,要经过J的线性变换,才最终变成变换矩阵里的平移向量t。

反过来也一样,从变换矩阵求对数映射得到se(3),平移部分也要经过J的逆变换。


四、BCH近似:李代数加法对应李群乘法

李代数最大的用处是做优化、做增量更新。那问题来了:李群上两个矩阵相乘,对应李代数上是什么操作?

直接相加是不对的。完整的展开式叫BCH公式(贝克-坎贝尔-豪斯多夫公式)。

4.1 BCH线性近似

当其中一个旋转量是很小的增量时,高阶小项可以忽略,就有了BCH近似。

简单说:

  • 给旋转R左乘一个微小旋转,对应的李代数增量 ≈ 左雅可比的逆 × 微小李代数 + 原李代数
  • 右乘同理,对应右雅可比

💡通俗解释:李群上"乘一个小变换",近似等于李代数上"加一个小向量"。只是这个小向量要乘一个雅可比系数,不是直接加。

这就是为什么我们能对位姿做增量优化:每次算一个李代数增量,加到当前李代数上,再映射回李群,就完成了一次位姿更新。

4.2 扰动模型:求导的标准姿势

做优化必须求导。对位姿求导,标准做法就是扰动模型:给位姿左乘或者右乘一个微小扰动,然后求结果关于扰动的导数。

最常用的左扰动模型,结论非常简洁:

一个空间点p经过旋转R之后得到Rp,对左扰动李代数求导,结果等于 -(Rp)的反对称矩阵。

💡这个结论有多重要?后面视觉里程计、后端BA里,所有重投影误差对位姿的雅可比,全都是从这个式子推出来的。可以说,不会这个导数,后端优化就没法写。

SE(3)的扰动模型同理,最终得到一个4×6的雅可比矩阵,是后面位姿图优化的基础。


五、实践:Sophus库的使用

理论最终落地到代码。Eigen没有原生的李代数支持,Strasdat维护的Sophus库就是专门干这个的,直接基于Eigen开发,纯头文件,用起来很方便。

5.1 基本操作

  • 构造:可以从旋转矩阵、四元数直接构造SO3对象;从R和t构造SE3对象。
  • 对数映射:调用.log()方法,直接得到对应的李代数向量。
  • 指数映射:Sophus::exp(李代数向量),得到对应的李群矩阵。
  • 增量更新:用exp(增量)乘原李群元素,就是带BCH近似的更新。

💡新手注意:Sophus的se(3)存储顺序是平移在前、旋转在后,和有些书里的顺序不一样,用的时候注意对应。

5.2 工程常用:轨迹误差计算

SLAM里评估算法精度,最常用的指标就是ATE(绝对轨迹误差) 。

做法很简单:把估计轨迹和真实轨迹,每一位姿做差,转成李代数算距离,再算均方根误差RMSE。

用Sophus写起来非常简洁:两个变换矩阵求逆相乘,log转李代数,算范数平方,平均开根号就是RMSE。

这个指标是论文里的标配,做算法对比必算。


六、补充:相似变换群Sim(3)

单目SLAM有尺度不确定性,所以还会用到相似变换群Sim(3),就是在SE(3)基础上多了一个尺度因子s。

对应的李代数sim(3)是7维向量,比se(3)多了一维尺度σ。

指数映射之后,旋转部分多一个指数缩放,平移部分的雅可比也更复杂。

单目稠密重建、单目回环校正里经常会碰到Sim(3),知道有这么个东西就行。


小结

这一讲看起来偏数学,但它是整个后端优化的数学基石。

核心价值就是一句话:把带约束的位姿优化,转化成了无约束的李代数向量优化 。

不用再操心正交约束、行列式约束,直接在向量空间里算梯度、做迭代,效率和稳定性都上了一个台阶。

后面讲后端的光束法平差、位姿图优化,全都是建立在李代数扰动模型的基础之上。把这一讲吃透,后面看后端公式就不会觉得是凭空蹦出来的了。

相关推荐
落798.1 小时前
ChatGPT 的回答,也能被“结构化抓取”?
人工智能·chatgpt·亮数据
你就是答案 -1481 小时前
多轨道怎么按时间戳编辑
人工智能
海宇服务1 小时前
零信任架构实战:基于海宇车辆vin码查车辆信息详版构建自动化汽配云仓参配核验网关
java·人工智能·架构·自动化
红姐跨境书1 小时前
亚马逊广告接入 ChatGPT 后,卖家该如何布局 AI 电商营销?
人工智能·chatgpt
田里的水稻1 小时前
IL_策略训练---Mamba\SSM神经网络种类六
人工智能·深度学习·神经网络·机器学习
天天代码码天天1 小时前
把老动画带给新一代孩子:用 C# WinForms、APISR 和 Vulkan 做一个视频超分工具
人工智能
空堂与归1 小时前
清华VPP2登顶RoboDojo:凭预测解耦突围GPT-6
人工智能·gpt·ai·具身智能
AliCloudROS1 小时前
MiniMax-H3 视频生成模型 — 一键部署与使用指南
人工智能·音视频
云端设计台1 小时前
技术方案评审画图难?AI文本可视化工具实测
人工智能