声明:本文是深蓝学院 高翔博士主讲的《SLAM理论与实践》的学习笔记。
运动方程中的x,可以用旋转平移(R,t)或者变换矩阵T来表示。
当相机位置姿态估计不准确时需要进行微调。
一般使用梯度进行微调。需要求导。根据倒数的定义求导必须得有加法。例如 u是关于R的函数,对应的倒数为:
平移量有定义好的加法。
但是旋转矩阵没有定义好的加法:相加之后不满足 旋转矩阵的正交性和行列式为1性。
用四元数表示矩阵也没有良好的加法:因为q的行列式要等于1,相加之后不满足。
为了解决这个问题我们引入群。
群
群(Group)是一种集合加上一种运算的代数结构。记集合为A,运算为 · ,那么当运算满足以下性质时,称 (A, · )为群。
容易验证
- 旋转矩阵集合与矩阵乘法构成群,称为旋转矩阵群,也称作特殊正交群(Special Orthogonal Group),SO(2) SO(3)最常见。
- 变换矩阵集合与矩阵乘法构成群,称为变换矩阵群,也称为特殊欧氏群(Special Euclidean Group),如SE(2) SE(3)。
除此之外还有一般线性群GL(n) 指nxn的可逆矩阵,它们对矩阵乘法成群。
群结构保证了在群上的运算具有良好的性质。群论是研究群的各种结构和性质的理论,具体介绍见各抽象代数或近世代数教材。
李群与李代数
李群(Lie Group):具有连续(光滑)性质的群。既是群也是流形。
直观上看,一个刚体能够连续地在空间中运动,故SO(3)和SE(3)都是李群。但是,SO(3)和SE(3)只有定义良好的乘法,没有加法,所以难以进行取极限、求导等操作。
既然没法直接求导,能否做一些近似或者说分析上的求导?
一个流行可以在一个点做出一个切空间。上面可以定义良好加法。可以通过切空间研究流形上的性质。
李代数:与李群对应的一种结构,位于向量空间。通常记作小写的so(3)和se(3)。书中以哥特体突出显示。事实上是李群单位元处的正切空间
下面从旋转矩阵引出李代数:
考虑任意旋转矩阵R,满足正交性
令R随时间变化(连续运动),有
两侧对时间求导
整理得
可以看出它是一个反对成矩阵(),记作:
两侧右乘R(t):
可看成对R求导后,左侧多出一个 类似于:
在单位元附近,
可见反映了一阶导数的性质,它位于正切空间(tangent space)上.
李群是高维空间(3x3=9维)中的低维流形(3维,因为旋转矩阵只有三个*度),原点做一个切空间,切空间上的点都可以通过指数映射映射回流形上面,或者从流形上映射到切空间。
反对称符号说明:
李代数(Lie Algebra)
每个李群都有与之对应的李代数。李代数描述了李群单位元附近的正切空间性质。
二元运算[,]被称为李括号(Lie Bracket) (直观上说,李括号表达了两个元素的差异。)
SO(3)对应有李代数so(3): 三维空间向量+叉积运算(作为李括号) 构成李代数
- 三维空间向量 so(3):
- 叉积运算
不同书籍对se(3)的平移/旋转分量的先后顺序定义不同。这里使用平移在前的方式,也有地方是旋转在前的。
把李代数理解成向量形式或矩阵形式都是可以的。向量形式更加自然一些。
指数映射与对数映射
SO(3)<->so(3)
指数映射(罗德里格斯公式)
指数映射反映了从李代数到李群的对应关系。 .但是是一个矩阵,如何定义矩阵的指数运算呢?
可以根据泰勒展开:
由于 是向量,定义其角度和模长:角度乘单位向量:. 而a具有下面性质, 为化解泰勒展开中的高阶项提供了有效方法。
刚好就是上一讲的罗德里格斯公式,说明so(3)的物理意义就是旋转向量。
对数映射
反之,给定旋转矩阵时,亦能求李代数(对数映射)。
但实际当中没必要这样求,在旋转向量小节已经介绍了旋转矩阵到向量的转换关系。
至此,说明了 SO(3) 与 so(3) 的对应关系。
SE(3)<->se(3)
说明李代数中的平移量与实际平移量差一个J
总结
求导与扰动模型
SLAM的定位即位姿估计, 需要使用导数进行微调,而导数需要加法。但李群无加法: 导数无从定义。
解决办法:利用李代数上加法定义李群元素的导数?使用指数映射和对数映射完成变换关系。
那么一个基本问题是当在李代数中做加法时,是否等价于在李群上做乘法?
在使用标量的情况下,该式明显成立。但这里的为矩阵!并不成立。完整形式由 BCH(Baker-Campbell-Hausdorff) 公式给出。部分展开式如下:
当A或B其中一个量为小量时,忽略其高阶项,BCH具有线性近似形式
说明李群上做乘法对应的李代数上要做一个带J的加法。
- 在李群上左乘小量时,李代数上的加法相差左雅可比的逆
李代数上进行小量加法时,相当于李群上左(右)乘一个带左(右)雅可比的量
SE(3)比SO(3)更复杂:
考虑一个基本问题:旋转后的点关于旋转的导数。不严谨地记为:
由于R没有加法,导数无从定义.
通过BCH线性近似 存在两种解决办法可以定义李代数上的导数:
对 R 对应的李代数加上小量,求相对于小量的变化率(导数模型);
对 R 左乘或右乘一个小量,求相对于小量的李代数的变化率(扰动模型)。
SE(3)上的扰动模型: