SLAM学习笔记(一) 李群李代数基础
第二次翻看《视觉SLAM十四讲》,发现第一次看过的都忘记了,认真分析了一下,我认为是第一次学习没有弄清楚整体的脉络。因此这次做一个小小的总结,希望不要再过几天又忘掉。
首先,旋转矩阵是一个正交矩阵,它与自己的转置的乘积是单位矩阵。另外它还是关于时间的函数。
每次对R(t)求导,相当于将其左乘一个Φ(t)^,其中Φ(t)是一个三维向量,Φ(t)^为其对应的反对称矩阵。即满足如下关系式:
R(t)=exp(Φ0^t)
Φt即为R(t)对应的李代数。R(t)作为李群,是具有光滑连续性质的群,有封结幺逆性质。
封是两个元素都属于群,那么乘积也属于群;
结是结合律;
幺元是群中至少有一个元素,别的元素与其相乘都是自身;
逆是对于所有群中的元素,群中至少有一个元素,与其他元素相乘都得到一个固定的元素
1.每个李群有其对应的李代数。李代数是向量,反映的是李群的局部性质。例如上面,so(3)就反应了SO(3)的局部导数性质。
2.两个向量还有李括号运算,即a的^和b的^的乘积减去b的^和a的^,最后括起来,再用"v"变成一个向量。
3.指数映射,即exp(Φ^)泰勒展开,然后把Φ当成是θa的乘积,(θ是模长,a是方向),算的算的就会发现满足罗德里格斯公式,即书上的4.22公式。
罗德里格斯公式描述的是旋转矩阵R和旋转向量的关系,这里算出来的左边的exp(Φ^)其实也是旋转矩阵,
因此说明李代数so(3)其实就是旋转向量组成的空间,指数映射就是罗德里格斯公式。
4.对数映射,即反过来,求ln(R),然后再加个"v"操作,变成向量。这样李群SO3就能转化成李代数so3。不过这样太麻烦了,实际计算可以用迹的那个公式算。
5.整理一个图片:
6.扰动模型:
虽然李群和李代数满足的是这种指数关系,但是这里是矩阵,也就是说(e的a次方)乘以(e的b次方)结果并不等于e的a+b次方。
因此BCH公式就是说,当处理两个矩阵指数之积的时候,会产生一些李括号构成的余项。
例子:某个旋转R,对应李代数Φ,左乘一个微小旋转△R,对应的李代数△Φ,
那么李群就是直接相乘△R·R,而李代数不是直接相加,而是Φ+J(下标l,上标-1,自变量Φ)△Φ。
下标l是左乘,如果右乘就是r(即Jl的自变量Φ取反),上标-1是雅克比矩阵J的逆运算。J其实就是SE(3)和se(3)转换时候的那个J,就是上面那个图里的J。
7.李代数解决求导问题,原因是:
z=Tp+w,T是位姿,p世界坐标系下的点,w是噪声。
根据很多个点,构建误差最小化:
即构建与位姿有关的函数,讨论该函数关于位姿的导数,调整估计值。
因此是两种思路:
(1)用李代数表示姿态。根据李代数加法来对李代数求导;
(2) 用李群表示姿态,左右乘以微小扰动,对该扰动求导。
第一种思路,是要用Rp对R来求偏导,构建的方程为:
exp(Φ^)p对Φ求偏导,根据定义,加一个小量δΦ,exp((Φ+δΦ)^)p-exp(Φ^)p,再对小量δΦ求偏导。把exp((Φ+δΦ)^)p拆成两项,多一个雅克比矩阵出来,然后泰勒展开,把反对称符号看做叉积,交换变号,最后得到的结果是(-Rp)^JL。
用这种方式求出来的结果,带一个雅克比矩阵,不太方便计算。
第二种思路,是对R进行扰动,左乘一个△R,对应李代数ψ。Rp对ψ求偏导,那么式子变成exp(ψ^)exp(Φ^)p-exp(Φ^) 对ψ求偏导,exp(ψ^)泰勒展开,乘进去约掉,最后交换变号,得到(-Rp)^,省去了一个求解雅克比矩阵的步骤。
不过两种思路的区别是,一个是对R本身的李代数Φ求偏导,一个是对乘以的小量扰动△R的李代数ψ求偏导。
对于SE3,扰动也是同样的意思,最后得到的结果是,下面都是0,左上角是I,右上角是-(Rp+t)^,记为Tp⊙
不过这时的^不再是反对称矩阵的意思了,而是一个矩阵,
Φ^ ,ρ
0, 0
(对应的李代数是 [ρ,Φ]T)