李群李代数的理论 -16

既然你已经掌握了旋转矩阵、四元数等表示法,那么恭喜你,你已经推到了机器人学“高等数学”的门口。

李群(Lie Group)李代数(Lie Algebra)听起来名字很玄乎,但它们存在的目的只有一个:解决旋转矩阵在优化(求导)时不好算的问题。


1. 为什么要引入李群李代数?(痛点在哪里)

我们知道旋转矩阵 属于特殊正交群 ,它有两个严苛的约束:

问题来了: 如果你在做 SLAM 优化,想要更新一个旋转 ,使误差函数最小。按照微积分,你需要对 加上一个增量 。
但是,** 通常不再是旋转矩阵了**(它很难同时满足正交和行列式为1)。

这就像你在一个球面上行走,如果你迈直线的步子,就会离开球面。李群李代数的引入,就是为了让我们能在平面上计算增量,然后映射回球面上。


2. 直观理解:群、李群、李代数

群 (Group)

“群”就是一种集合加上一种运算。旋转矩阵集合和乘法运算构成的就是李群

  • **旋转矩阵群 **:乘法对应连续旋转,求逆对应反向旋转。
  • **变换矩阵群 **:包含平移和旋转。

李代数 (Lie Algebra) —— “切空间”

想象一个放置在原点的地球仪(单位旋转)。

  • 李群是这个球面的表面。
  • 李代数就是在原点处,与球面相切的那个平面(切空间)

在这个平面上,你可以自由地做加减法(线性运算)。每一个李代数向量,都对应着球面上的一个旋转动作。


3. 指数映射:连接两个世界的桥梁

如何从“切平面”(李代数)回到“球面”(李群)呢?答案是指数映射 (Exponential Map)

SO(3) 上的变换

  • 李代数 :其实就是一个三维向量 。没错,它就是我们之前学过的旋转向量
  • 对应关系

这里的 是把向量变成反对称矩阵。

这个指数映射的展开式,惊人地发现它就是罗德里格斯公式

直观理解:李代数里的向量长度代表旋转快慢,方向代表轴。如果你沿着这个方向“跑”一段距离,最后就落在了李群对应的旋转位置上。


4. 为什么求导变简单了?

这是李代数最核心的功用。

在李群上: 很难求导。
在李代数上:我们可以利用 左扰动模型

我们不直接对 求导,而是在 上左乘一个微小的扰动 。
由于 是一个普通的三维向量,我们可以直接对这个向量求偏导。

这个结果非常简洁! 它告诉我们:旋转后点的位置偏导数,就是该点坐标对应的反对称矩阵(取负号)。这让 SLAM 里的高斯-牛顿迭代变得异常简单。


5. 总结:这套理论教了我们什么?

你可以把这套关系想象成对数与指数的关系:

维度 李群 (Lie Group) 李代数 (Lie Algebra) 关系
空间形态 弯曲的曲面 (流形) 平坦的切空间 (向量空间) 指数/对数映射
运算 乘法 (旋转合成) 加法 (增量累加)
约束 有严格约束 (正交等) 无约束 (三维向量即可) 极大方便优化
符号

6. 对应到前面的 Eigen 代码

在 Eigen 中,并没有直接给李群李代数起名叫 LieAlgebra,但其实你已经见过它们了:

  • Eigen::Matrix3d 就是李群 的元素。
  • Eigen::AngleAxisd 或普通的 Eigen::Vector3d 在做增量更新时,扮演的就是李代数 的角色。

在高级的 SLAM 库(如 Sophus)中,你会直接看到这样的代码:

Sophus::SO3d SO3_R(rotation_matrix); // 李群
Eigen::Vector3d omega(0.01, 0.02, 0.03); // 李代数(扰动)
Sophus::SO3d updated_R = Sophus::SO3d::exp(omega) * SO3_R; // 指数映射+左乘扰动

你想看看在真实的优化场景(比如后端优化)中,这个导数公式是怎么被使用的吗?或者是想了解 SE(3)(带平移的李群)有什么特殊之处?

posted @ 2026-01-09 10:20  jack-chen666  阅读(5)  评论(0)    收藏  举报