反反复复看过很多次,总是有些地方不太明白,希望通过整理,再有一些新的认识。
参考:
视觉SLAM14讲 第4讲 https://zhuanlan.zhihu.com/p/33156814
https://blog.csdn.net/heyijia0327/article/details/50446140
群
群(group)是一种集合加上一种运算的代数结构。把集合记为 ,运算记为
, 群就可以记为
。而这个运算必须满足以下条件:
- 封闭性:
- 结合律:
- 幺元:
- 逆:
李群
李群就是具有连续(光滑)性质的群。
三维旋转矩阵构成了特殊正交群 SO(3),变换矩阵构成了特殊欧式群 SE(3)。
李代数
李代数描述了李群的局部性质。
李代数的必要性:
考虑问题:假设某个时刻我们预测机器人的位姿为 (待定值), 观测到了一个惯性坐标系下的点
而产生了一个观测数据
,
机器人的位姿估计即为寻找一个最优的 使得整体的误差最小化:
如上最小二乘问题,一般利用初始值+梯度进行自变量更新,计算导数时需要用到加法,但是李群对加法不具备封闭性,遂引入李代数。
李代数的引出
考虑任意的旋转矩阵 ,有
因为机器人在不断运动,所以 也在随时间不断变换,引入时间t 就得到
,上式也变成
等式两边一起对时间求导可得:
亦即
一个矩阵等于其自身转置后取负号,可知 是一个反对称矩阵。我们之前就介绍过反对称矩阵和^ 符号,可知对应地,对于任意的反对称矩阵,可以找到一个与之对应的向量,这个关系可以用
来表示:
设这个对应的向量为 ,就有
等式两边同时右乘 则有
从式(11)(上式) 可以看到,每对旋转矩阵求一次导数,只需要左乘一个 就可以了。假设t0 = 0 并设此时
,对式(10) 进行一阶泰勒展开就有:
NOTE: 反应了
的导数的性质,故称它在SO(3) 原点附近的正切空间(Tangent Space)上。
同时,在t0 附近,设 也是一个常数,即
,根据式(11) 就有
显然,上式是一个关于 的微分方程,而且知道初始值
,解为
由于之前的假设,所以这个式子只在t 附近有效。
但可以确定,当某个时刻的 已知时,存在一个向量
,二者满足这个矩阵指数关系 。而这个
,就是对应到SO(3) 上的李代数so(3)。
李代数so(3)
李代数so(3) 对应的向量 ,是定义在R3 上的向量,每个向量对应到一个反对称矩阵;(李括号为三维向量的外积运算);可以用来表达旋转矩阵的导数,和SO(3) 的关系由指数映射给定:
.
两个向量 的李括号为:
李代数se(3)
对于SE(3),它也有对应的李代数se(3)。和so(3) 类似,se(3) 在R6 空间中:
把每个se(3) 元素记做 ,它是一个六维向量:前三维为平移,记作
;后三维是旋转,记作
,实质上是so(3) 元素。
此外,在se(3) 中, 符号的含义被拓展了:这里它将一个六维向量转换为四维矩阵,但这里不再表示反对称矩阵。
李代数se(3) 的李括号:
指数和对数映射
从李代数到李群,通过指数映射;反之,从李群到李代数,则通过对数映射。
so(3) :
so(3) —— SO(3):
SO(3) —— so(3):
BCH近似
对于两次连续的旋转可以用矩阵乘法来描述,但用李代数如何表示呢?我们自然是希望李群中两个矩阵相乘对应李代数上对应元素的相加,这样我们才能够利用加法来计算导数和进行更新。但很遗憾,这是不成立的。
李代数指数映射的乘积,见BCH公式:
BCH 的线性近似:
根据BCH 近似:
扰动模型
利用李代数求导,有两种思路:
- 用李代数来表示位姿,根据李代数加法来对李代数进行求导;
- 利用李群来左乘或者右乘微小扰动,在对这个扰动的李代数进行求导。
一般使用第二种,扰动模型:
先对旋转矩阵 进行一次扰动
,然后再求导。
这里以左乘扰动模型为例。设左扰动的李代数为 ,直接对
(而不是
)进行求导:
SE(3)上的扰动模型:
假设某空间点 经过了一次变换
,对应的李代数为
,得到了
。给
左乘一个微小扰动
,扰动项的李代数为
。则有:
最后的结果被定义为符号 的一个运算:把一个齐次坐标下的空间点变换成一个4*6 的矩阵。