前言
研究位置与姿态,位置很好说,反正就是xyz,都是线性空间,中学就学过了。但是姿态就很难研究了,姿态的运算不满足加法律,导数也没法求,很多东西难以研究,所以就需要李群与李代数的理论指导了。说白一点,《李群与李代数》学的就是“位姿微积分”。
我们为什么要学“位姿微积分”,是因为我们在slam过程中要解决以下问题:
什么样的相机位姿最符合当前观测数据,即解最优的R、t。
群论
群是一种代数结构。通俗点说,群就是元素集合加上代数运算,使得集合中任意两个元素经过运算后形成的第三个元素仍然在这个集合里面。
设(G)是一个非空集合,(cdot)是它的一个二元运算,如果满足以下条件:
(1) 封闭性:若(a,bin G) ,则存在唯一确定的(cin G) 使得(acdot b=c) ;
(2) 结合律成立,即对(G)中任意元素(a,b,c)都有((acdot b)cdot c=acdot (bcdot c)) ;
(3) 单位元存在:存在(ein G) ,对任意(ain G),满足(acdot e=ecdot a=a)。(e)称为单位元,也称幺元;
(4) 逆元存在:任意(ain G),存在(bin G),(acdot b=bcdot a=e)((e)为单位元),则称(a)与(b)互为逆元素,简称逆元。(b)记作(a^{-1});
则称(G)对(cdot)构成一个群。
通常称(G)上的二元运算(cdot)为“乘法”,称(acdot b)为(a)与(b)的积,并简写为(ab)。
若群(G)中元素个数是有限的,则(G)称为有限群。否则称为无限群。有限群的元素个数称为有限群的阶。
李群
李群是一种不可交换的连续群,在这里主要讲的是两种常用的群:特殊正交群(SO(3))和特殊欧氏群(SE(3)),在上篇文章中提到过。
对应的就是旋转矩阵与变换矩阵
需要提一下特殊欧氏群的乘法运算:
李代数
不论(SO(3))还是(SE(3)),都伴随着一个相应的李代数。李代数是定义在某个(mathbb{F})上的(mathbb{V}),同时定义了一个称为李括号([⋅,⋅])的双目运算符。我们把蓝色字体部分称为李代数的三个要素。同李群类似,对所有的(mathbf{X}, mathbf{Y}, mathbf{Z} in mathbb{V})和(a, b in mathbb{F}),李代数也必须满足四个性质:
- 封闭性:([mathbf{X}, mathbf{Y}] in mathbb{V})
- 双线性:([amathbf{X} + bmathbf{Y}, mathbf{Z}] = a[mathbf{X}, mathbf{Z}] + b[mathbf{Y}, mathbf{Z}] qquad and qquad [ mathbf{Z}, amathbf{X} + bmathbf{Y}] = a[mathbf{Z}, mathbf{X}] + b[mathbf{Z}, mathbf{Y}])
- 自反性:([mathbf{X}, mathbf{X}] = mathbf{0})
- 雅可比恒等:([mathbf{X}, [mathbf{Y}, mathbf{Z}]] + [mathbf{Y}, [mathbf{Z}, mathbf{X}]] + [mathbf{Z}, [mathbf{X}, mathbf{Y}]] = mathbf{0})
举例:三维向量(mathbb{R}^3)上定义的叉积( imes)是一种李括号,因此(g=(mathbb{R}^3,mathbb{R}, imes))构成了一种李代数。
李代数(mathfrak{so}(3))
在SLAM14 4.1.2的内容中,我们也根据微分方程定义了一个反对称矩阵:
我们可以解出这个微分方程:在(t_0)附近时,设(phi)保持常数(phi(t_0)=phi_0),有:
我们可以看到这个(phi^land)的特殊地位,可以由R直接通过指数关系得出,且与导数也有联系。所以我们觉得试试这个(phi^land)作为(SO(3))的李代数
- 集合:(mathfrak{so}(3) = { mathbf{Phi} = oldsymbol{phi}^{wedge} in mathbb{R}^{3 imes 3} | oldsymbol{phi} in mathbb{R}^3})
- 李括号:([mathbf{Phi}_1, mathbf{Phi}_2] = mathbf{Phi}_1mathbf{Phi}_2 - mathbf{Phi}_2mathbf{Phi}_1 in mathbb{R}^{3 imes 3})
其中,(mathbf{Phi})是一个反对称矩阵
书上证明了这个定义是符合李代数标准的
李代数(mathfrak{so}(3))与(SO(3))的关系由指数映射给定:
精髓来了!稍微推导一下上式,我们记(oldsymbol{phi} = phi mathbf{a}),其中,(phi = | oldsymbol{phi} |)表示(oldsymbol{phi})的模长,而(mathbf{a} = frac{oldsymbol{phi}}{phi})表示与(oldsymbol{phi})方向一致的单位向量。这样,指数映射就可表达为:
这个就是罗德里格斯公式,因此从数学意义上来说:李代数(phi)表征的就是一个旋转向量,(phi)的模长表达了旋转的角度,(phi)的方向表达了旋转轴的方向。这给后面的求导提供了指导思想与方便。
李代数(mathfrak{se}(3))
- 集合:(mathfrak{se}(3) = { mathbf{Xi} = oldsymbol{xi}^{wedge} in mathbb{R}^{4 imes 4} | oldsymbol{xi} in mathbb{R}^6})
- 李括号:([mathbf{Xi}_1, mathbf{Xi}_2] = mathbf{Xi}_1mathbf{Xi}_2 - mathbf{Xi}_2mathbf{Xi}_1 in mathbb{R}^{4 imes 4})
其中,
总结
其实饶了一大圈就是发现了,旋转向量与旋转矩阵之间的指数关系。