李群与李代数
这部分内容是在slam中经常会用到的数学内容。
群
群(group)是一种代数结构,由两部分(一个集合A与一种运算\(\cdot\))构成,可以记作\(G=(A, \cdot)\),并且群满足如下条件: 1. 封闭性: $ a_1, a_2, a_1 a_2 A $ 2. 结合律: $ a_1, a_2, a_3, (a_1 a_2) a_3 = a_1 ( a_2 a_3) $ 3. 幺元: $ a_0 A, s.t. a A, a_0 a = a a_0 = a $ 4. 逆: $ a A, a^{-1} A, s.t. a a^{-1} = a_0 $
由上面我们可以知道了群的定义,下面例举几个群: - 一般线性群\(GL(n)\): n×n的可逆矩阵与矩阵乘法构成一个群,幺元是E矩阵
旋转矩阵群\(SO(n)\): 旋转矩阵与矩阵乘法构成的一个群,满足上面任何一个性质,幺元是旋转角度0的矩阵。 \[\begin{equation} SO(n) = \{ \mathbf{R} \in \mathbb{R}^{n \times n} | \mathbf{R R}^T = \mathbf{I}, det(\mathbf{R})=1 \} \end{equation}\]
特殊欧式群\(SE(n)\): 欧式变换矩阵(旋转加平移)与矩阵乘法也构成一个群,它的幺元是旋转角度为0,平移也是0的变换矩阵。 \[\begin{equation} SE(3) = \left\{ \mathbf{T} = \left[ {\begin{array}{*{20}{c}} \mathbf{R} & \mathbf{t} \\ {\mathbf{0}^T} & 1 \end{array}} \right] \in \mathbb{R}^{4 \times 4} | \mathbf{R} \in SO(3), \mathbf{t} \in \mathbb{R}^3\right\} \end{equation} \]
相似变换群\(Sim(n)\): 相似变换就是在旋转矩阵上再加上尺度变换,这个群主要会在单目视觉中使用,因为单目具有尺度不确定性。如果在单目slam中使用\(SE(3)\)来表示位姿,那么由于尺度不确定性与尺度漂移,整个slam过程中尺度会发生变化,而这在SE(3)中不能体现出来。所以在单目视觉中,我们一般在相似变换群上来进行位姿的优化。 \[ \begin{equation} Sim(3) = \left\{ \mathbf{S} = \left[ {\begin{array}{*{20}{c}} \mathbf{sR} & \mathbf{t} \\ {\mathbf{0}^T} & 1 \end{array}} \right] \in \mathbb{R}^{4 \times 4} | \mathbf{R} \in SO(3), \mathbf{t} \in \mathbb{R}^3\right\} \end{equation} \]
李群
李群是指具有连续性质的群。比如向整数群Z那样的离散的群就没有连续性质,所以不是李群。而\(SO(n)\)与\(SE(n)\)是李群
李代数
每个李群都有与之对应的李代数。李代数描述了李群的局部性质。
通常李代数由一个集合V,一个数域F和一个二元运算[]组成。通常如果我们说\((\mathbb{V}, \mathbb{F}, [])\)是一个李代数,那么它具有如下性质: - 封闭性: \(\forall \mathbf{X}, \mathbf{Y} \in \mathbb{V}, [\mathbf{X} \mathbf{Y}] \in \mathbb{V}\)
双线性: \(\forall \mathbf{X,Y,Z} \in \mathbb{V}, a,b \in \mathbb{F},\)有 \[[a\mathbf{X}+b\mathbf{Y}, \mathbf{Z}] = a[\mathbf{X}\mathbf{Z}] + b [ \mathbf{Y} \mathbf{Z} ] \quad [\mathbf{Z}, a \mathbf{X}+b\mathbf{Y}] = a [\mathbf{Z} \mathbf{X} ]+ b [\mathbf{ZY}]\]
自反性: \(\forall \mathbf{X} \in \mathbb{V}, [\mathbf{X} \mathbf{X}] = \mathbf{0}\)
雅可比等价: \(\forall \mathbf{X,Y,Z} \in \mathbb{V}, [\mathbf{X}, [\mathbf{YZ}] ] + [\mathbf{Z}, [\mathbf{YX}] ] + [\mathbf{Y}, [\mathbf{ZX}]]\)
通常我们成李代数中的二元运算为李括号。相比于群中较为简单的二元运算,李括号通常的含义是计算集合中两个元素的差异。一般它不要求结合律,但是满足反对称性,以及元素和自己做李括号之后为0的性质。一个典型的例子是\(\mathfrak{g} = (\mathbb{R}^3, \mathbb{R}, \times)\)是一个李代数。
三维旋转群\(SO(3)\)与其对应的李代数\(\mathfrak{so}(3)\)
三维旋转群描述三维空间中的旋转,其集合元素为3×3的正交且行列式为1的矩阵R,我们知道\(RR^T=I\)。如果将R看作一个随着时间t变化的函数R(t),则有\(\mathbf{R}(t) \mathbf{R}(t) ^T = \mathbf{I}\)。在等式两边分别对时间求导,可以得到:
\[ \begin{equation} \mathbf{\dot{R}} (t) \mathbf{R} {(t)^T} + \mathbf{R} (t) \mathbf{\dot{R}} {(t)^T} = 0 \end{equation} \]
对上式进行整理,可以得到:
\[ \begin{equation} \mathbf{\dot{R}} (t) \mathbf{R} {(t)^T} = - \left( \mathbf{\dot{R}} (t) \mathbf{R} {(t)^T} \right)^T \end{equation}\]
从上面的公式我们可以看出\(\mathbf{\dot{R}} (t) \mathbf{R} {(t)^T}\)是一个反对称矩阵。
反对称矩阵与叉乘
对于三维向量a与b之间的外积,其中\(\mathbf{a}=[a_1, a_2, a_3]^T\),如下公式:
\[ a×b = a^{\wedge} b \]
\[\begin{equation} {\mathbf{a}^ \wedge } = \left[ {\begin{array}{*{20}{c}} 0&{ - {a_3}}&{a_2} \\ {a_3}&0&{ - {a_1}}\\ { - {a_2}}&{a_1}&0 \end{array}} \right] \end{equation} \]
回到刚才的话题,对于\(\mathbf{\dot{R}} (t) \mathbf{R} {(t)^T}\)这个反对称矩阵,我们将其记为A。可以将其对应到一个向量\(\mathbf{a}=[a_1, a_2, a_3]^T\)。 |
\[\begin{equation} {\mathbf{a}^ \wedge } = \mathbf{A} = \left[ {\begin{array}{*{20}{c}} 0&{ - {a_3}}&{a_2}\\ {a_3}&0&{ - {a_1}}\\ { - {a_2}}&{a_1}&0 \end{array}} \right] \end{equation}\] |
上式也就可以写做 |
\[ \begin{equation} \mathbf{ \dot{R} } (t) \mathbf{R}(t)^T = \mathbf{\phi} (t) ^ {\wedge} \end{equation} \] |
将上式左右各右乘\(\mathbf{R}(t)\),由于R是正交的,所以有 |
\[ \begin{equation} \mathbf{ \dot{R} } (t) = \mathbf{\phi} (t)^{\wedge} \mathbf{R}(t) = \left[ {\begin{array}{*{20}{c}} 0&{ - {\phi _3}}&{\phi _2}\\ {\phi _3}&0&{ - {\phi _1}}\\ { - {\phi _2}}&{\phi _1}&0 \end{array}} \right] \mathbf{R} (t) \end{equation}\] |
由上式我们可以发现,每次对旋转矩阵求导数,只需要左乘一个\(\mathbf{\phi}\)矩阵即可。这表明\(\mathbf{\phi}\)反映了R的导数性质,所以称其在\(SO(3)\)的正切空间上。同时对上面微分方程进行求解,我们可以得到 |
\[\begin{equation} \mathbf{R}(t) = \exp \left( \mathbf{\phi} (t) ^\wedge \right) \mathbf{R}(t_0) \end{equation}\] |
由上我们可以知道,三维旋转群\(SO(3)\)与其对应的李代数\(\mathfrak{so}(3)\)是\((\mathbb{R}^3, \mathbb{R}, \times)\)(三维向量,实数,外积运算),这个李代数的集合由三维向量组成,每个向量对应到一个反对称矩阵,可以表达旋转矩阵的导数。它描述了三维旋转群\(SO(3)\)的局部性质。
此处我们发现SO(3)对应的李代数是定义在\(\mathbb{R}^3\)上的向量,我们记作\(\mathbf{\phi}\)(注意这是个向量,虽然希腊字母的粗体不明显)。而每个\(\mathbf{\phi}\)都可以生成一个反对称矩阵:
\[ \begin{equation} \label{eq:phi} \mathbf{\Phi} = \mathbf{\phi}^{\wedge} = \left[ {\begin{array}{*{20}{c}} 0&{ - {\phi _3}}&{\phi _2}\\ {\phi _3}&0&{ - {\phi _1}}\\ { - {\phi _2}}&{\phi _1}&0 \end{array}} \right] \in \mathbb{R}^{3 \times 3} \end{equation} \]
在此定义下,两个向量\(\mathbf{\phi}_1, \mathbf{\phi}_2\)的李括号运算对应的反对称矩阵运算为:
\[ \begin{equation} [\mathbf{\phi}_1, \mathbf{\phi}_2]^{\wedge} = \mathbf{ \Phi }_1 \mathbf{ \Phi }_2 - \mathbf{ \Phi }_2 \mathbf{ \Phi }_1 \end{equation} \]
由于向量与其对应的反对称矩阵关系密切,所以我们说旋转矩阵群的李代数的元素是3维向量或者3维反对称矩阵,都是可以的。
\[ \begin{equation} \mathfrak{so}(3) = \left\{ \Phi = \mathbf{\phi^\wedge} \in \mathbb{R}^{3 \times 3} | \mathbf{\phi} \in \mathbb{R}^3 \right\} \end{equation} \]
\(SO(3)\)上的指数映射
首先,任意矩阵的指数映射可以写成一个泰勒展开,当然,只有在收敛的情况下才会有结果,其结果仍然是一个矩阵。
\[\begin{equation} \exp(\mathbf{A}) = \sum\limits_{n = 0}^\infty {\frac{1}{n!}{ \mathbf{A}^n}} \end{equation}\]
同样,对\[\mathfrak{so}(3)\]中任意一个元素\(\mathbf{\phi}\),它的指数映射是:
\[ \begin{equation} \exp(\mathbf{\phi}^\wedge) = \sum\limits_{n = 0}^\infty {\frac{1}{n!}{ (\mathbf{\phi}^{\wedge})^n}} \end{equation} \]
仔细推导这个定义,首先\(\mathbf{\phi}\)是一个三维向量,我们可以定义它的模长和方法,分别记作\(\theta\)与\(\mathbf{a}\)(注意此处的\(\mathbf{a}\)是一个单位长度的向量),于是有\(\mathbf{\phi} = {\theta} {a}\),首先此处说明的是,\(a^{\wedge}\)具有如下两条性质:
\[\begin{equation} \mathbf{a} \mathbf{a}^T = \mathbf{a}^{\wedge} \mathbf{a}^{\wedge} + \mathbf{I} \end{equation}\]
\[ \begin{equation} \mathbf{a}^{\wedge} \mathbf{a}^{\wedge} \mathbf{a}^{\wedge} = - \mathbf{a}^{\wedge} \end{equation} \]
上述性质有时间可以尝试证明一下,利用这两个性质,我们可以进行如下推导:
\[ \begin{align*} \exp \left( {\mathbf{\phi} ^ \wedge } \right) &= \exp \left( {\theta {\mathbf{a}^ \wedge }} \right) = \sum\limits_{n = 0}^\infty {\frac{1}{n!}{\left( {\theta {\mathbf{a}^ \wedge }} \right)}^n} \\ &= \mathbf{I} + \theta {\mathbf{a}^ \wedge } + \frac{1}{2!}{\theta ^2}{\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge } + \frac{1}{3!}{\theta ^3}{\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge } + \frac{1}{4!}{\theta ^4}{\left( {\mathbf{a}^ \wedge } \right)^4} + ...\\ &= \mathbf{a} {\mathbf{a}^T} - {\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge } + \theta {\mathbf{a}^ \wedge } + \frac{1}{2!}\theta {\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge } - \frac{1}{3!}{\theta ^3}{\mathbf{a}^ \wedge } + \frac{1}{4!}{\theta ^4}{\left( {\mathbf{a}^ \wedge } \right)^4} + ...\\ &= \mathbf{a}{\mathbf{a}^T} + \left( {\theta - \frac{1}{3!}{\theta ^3} + \frac{1}{5!}{\theta ^5} - ...} \right){\mathbf{a}^ \wedge } - \left( {1 - \frac{1}{2!}{\theta ^2} + \frac{1}{4!}{\theta ^4} - ...} \right){\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge }\\ &= {\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge } + \mathbf{I} + \sin \theta {\mathbf{a}^ \wedge } - \cos \theta {\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge }\\ &= (1 - \cos \theta ){\mathbf{a}^ \wedge }{\mathbf{a}^ \wedge } + I + \sin \theta {\mathbf{a}^ \wedge }\\ &= \cos \theta \mathbf{I} + (1 - \cos \theta )\mathbf{a}{\mathbf{a}^T} + \sin \theta {\mathbf{a}^ \wedge } \\ \end{align*} \]
记住最后的这个公式:
\[ \begin{equation} \exp( \theta \mathbf{a} ) = \cos \theta \mathbf{I} + (1 - \cos \theta )\mathbf{a}{\mathbf{a}^T} + \sin \theta {\mathbf{a}^ \wedge } \end{equation} \]
这时罗德里格斯公式,这个公式本身的作用是将旋转向量变换成旋转矩阵。所以从这里我们知道\[\mathfrak{so}(3)\]实际上是由旋转向量组成的空间。而指数映射就是罗德里格斯公式映射,通过他们我们可以将\[\mathfrak{so}(3)\]中的任意一个旋转向量对应到一个\(SO(3)\)中的一个旋转矩阵。
这里需要提到的一点是,指数映射不是一个双射,但他是一个满射。这一意味着每一个旋转矩阵都可以找到一个向量与之对应,但是可能存在多个向量对应到同一个矩阵。这个很好理解,因为旋转角度具有周期性,多转360度效果一样。
同理,指数映射作用是从向量到矩阵的映射,反过来,从矩阵到向量的映射是对数映射。
三维欧式群\(SE(3)\)与其对应的李代数\(\mathfrak{se}(3)\)
首先,列出三维欧式群\(SE(3)\)的定义:
\[\begin{equation} SE(3) = \left\{ \mathbf{T} = \left[ {\begin{array}{*{20}{c}} \mathbf{R} & \mathbf{t} \\ {\mathbf{0}^T} & 1 \end{array}} \right] \in \mathbb{R}^{4 \times 4} | \mathbf{R} \in SO(3), \mathbf{t} \in \mathbb{R}^3\right\} \end{equation}\]
由于每个欧式变换矩阵具有六个自由度,所以其对应的李代数位于\(\mathbb{R}^6\)中:
\[\begin{equation} \mathfrak{se}(3) = \left\{ \mathbf{ \Xi } = \mathbf{\xi}^\wedge \in \mathbb{R}^{4 \times 4} | \mathbf{\xi} \in \mathbb{R}^6 \right\} \end{equation}\]
不过需要注意的是,此处我们对\(^\wedge\)的作用进行拓展,使得其不再是一个反对称关系,而是讲一个六维度向量转换成四维矩阵。如下:
\[\begin{equation} \mathbf{\xi}^\wedge = {\left[ \begin{array}{l} \mathbf{\rho} \\ \mathbf{\phi} \end{array} \right]^ \wedge } = \left[ {\begin{array}{*{20}{c}} {\mathbf{\phi} ^ \wedge }&\mathbf{\rho} \\ {\mathbf{0}^T}&0 \end{array}} \right] = \mathbf{\Xi} \end{equation}\]
其中,前三维是平移分量,后三位为旋转分量,这个分量是\(\mathfrak{so}(3)\)的元素。在此处,该李代数对应的微分方程是:
\[\begin{equation} \mathbf{\dot{T}}(t) = \mathbf{\xi}^\wedge(t) \mathbf{T}(t) \end{equation}\]
三维欧式群及其李代数的指数与对数映射类似。
总结
其中,J是雅克比矩阵,这个矩阵是在SE(3)上的指数映射中,平移部分经过指数映射后,发生了一次以J为系数矩阵的线性变换。旋转部分的指数映射还是罗德里格斯公式。
参考文献
- [1] 视觉SLAM十四讲:从理论到实践