本文主要是介绍李群与李代数1:对应关系及指数/对数映射,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
李群与李代数1:对应关系及指数/对数映射
- 1. 群和李群
- 1.1 群的引出
- 1.2 群和李群定义及性质
- 2. 由李群引出李代数
- 2.1 反对称矩阵对应向量与求导关系
- 2.2 一阶导数矩阵求解
- 3. 李代数
- 4. 指数和对数映射
- 参考文献:
前言:本篇系列文章参照高翔老师《视觉SLAM十四讲从理论到实践》的第四讲,讲解李群与李代数。写此篇的目的是为了补足《十四讲》中的数学类基础知识,原书内容有点像直译文献,因此笔者根据自己理解,对整体内容重新划分,更改了目录章节,改写部分公式,同时扩展了部分内容,有书的同学可以参照阅读,达到事半功倍的效果。
摘要:在三维刚体运动一系列文章中,我们介绍了刚体运动的描述方式,包括旋转矩阵、旋转向量、欧拉角、四元数等若干方式,以及着重讲了四元数的插值方法,包括Lerp、Nlerp、Slerp、Squad、Spicv、Sping等方法。但是在SLAM中,除了表示旋转,我们还要对它进行估计和优化。因为在SLAM中位姿是未知的,而我们需要解决“相机位姿在哪儿最符合观测数据”这样的问题。一种典型的方式是把它构建成一个优化问题,求解最优的 R , t R,t R,t,使得误差最小化。
如前所言,旋转矩阵自身是带有约束的,即正交且行列式为1。它们作为优化变量时,会引入额外的约束,使优化变的困难。通过李群—李代数间的转换关系,我们希望把位姿估计变成无约束的优化问题,简化求解方式。考虑到读者可能还没有李群与李代数的基本知识,我们将从基本的知识讲起。
1. 群和李群
1.1 群的引出
在三维刚体运动中,我们介绍了旋转矩阵和变换矩阵的定义。当时,我们说三维旋转矩阵构成特殊正交群SO(3),而变换矩阵构成了特殊欧式群SE(3)。它们写起来像这样: S O ( 3 ) = { R ∈ R 3 × 3 ∣ R R T = I , d e t ( R ) = 1 } (1.1) SO(3)=\{\mathbf{R}\in \mathbb{R}^{3\times 3}|\mathbf{R}\mathbf{R}^{T}=\mathbf{I},det(\mathbf{R})=1\}\tag{1.1} SO(3)={R∈R3×3∣RRT=I,det(R)=1}(1.1) S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R } (1.2) SE(3)=\left \{ \mathbf{T}= \begin{bmatrix} \mathbf{R} & t\\ 0^{T} & 1 \end{bmatrix} \in \mathbb{R}^{4\times 4}|\mathbf{R}\in SO(3),t\in \mathbb{R}\right \}\tag{1.2} SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R}(1.2)
不过,当时我们并未详细解释群的定义。细心的读者应该会注意到,旋转矩阵也好,变换矩阵也罢,它们对加法是不封闭的。换句话说,对于任意两个旋转矩阵 R 1 , R 2 \mathbf{R_{1}},\mathbf{R_{2}} R1,R2及变换矩阵 T 1 , T 2 \mathbf{T_{1}},\mathbf{T_{2}} T1,T2,按照矩阵加法的定义,和不再是一个旋转矩阵或变换矩阵: R 1 + R 2 ∉ S O ( 3 ) , T 1 + T 2 ∉ S E ( 3 ) (1.3) \mathbf{R_{1}}+\mathbf{R_{2}}\notin SO(3),\mathbf{T_{1}}+\mathbf{T_{2}}\notin SE(3)\tag{1.3} R1+R2∈/SO(3),T1+T2∈/SE(3)(1.3)你也可以说两种矩阵没有良好定义的加法,或者说矩阵加法对这两个集合是不封闭的。相对地,它们只有一种较好的运算:乘法,SO(3)和SE(3)关于乘法是封闭的: R 1 R 2 ∈ S O ( 3 ) , T 1 T 2 ∈ S E ( 3 ) (1.4) \mathbf{R_{1}}\mathbf{R_{2}}\in SO(3),\mathbf{T_{1}}\mathbf{T_{2}}\in SE(3)\tag{1.4} R1R2∈SO(3),T1T2∈SE(3)(1.4)同时,我们也可以对任何一个旋转或变换矩阵求逆,对于这种只有一个良好运算的集合,我们称之为群,下面来看群的具体定义。
1.2 群和李群定义及性质
接下来,我们要稍微涉及一些抽象代数方面的知识。笔者觉得这是讨论李群与李代数的必要条件,先看一些基本知识。
群(Group):群是一种集合加上一种运算的代数结构。我们把集合记作 A A A,运算记作 ⋅ \cdot ⋅,那么群可以记作 G = ( A , ⋅ ) G=(A,\cdot) G=(A,⋅)。群要求这个运算满足以下几个条件:
- 封闭性: ∀ a 1 , a 2 ∈ A , a 1 ⋅ a 2 ∈ A \forall a_{1},a_{2}\in A,\space\space a_{1}\cdot a_{2}\in A ∀a1,a2∈A, a1⋅a2∈A.
- 结合律: ∀ a 1 , a 2 , a 3 ∈ A , ( a 1 ⋅ a 2 ) ⋅ a 3 = a 1 ⋅ ( a 2 ⋅ a 3 ) \forall a_{1},a_{2},a_{3}\in A,\space\space(a_{1}\cdot a_{2})\cdot a_{3}=a_{1}\cdot (a_{2} \cdot a_{3}) ∀a1,a2,a3∈A, (a1⋅a2)⋅a3=a1⋅(a2⋅a3).
- 幺元: ∃ a 0 ∈ A , s . t . ∀ a ∈ A , a 0 ⋅ a = a ⋅ a 0 = a \exists a_{0}\in A, \space\space s.t.\space\space \forall a\in A,\space\space a_{0}\cdot a=a\cdot a_{0}=a ∃a0∈A, s.t. ∀a∈A, a0⋅a=a⋅a0=a.
- 逆: ∀ a ∈ A , ∃ a − 1 ∈ A , s . t . a ⋅ a − 1 = a 0 \forall a \in A, \space\space\exists a^{-1}\in A,\space\space s.t. \space\space a\cdot a^{-1}=a_{0} ∀a∈A, ∃a−1∈A, s.t. a⋅a−1=a0.
读者可以将其记作“封结幺逆”。容易验证,旋转矩阵集合和矩阵乘法构成群,同样,变换矩阵集合和矩阵乘法也构成群。其它常见的群包括整数的加法 ( Z , + ) (\mathbb{Z},+) (Z,+),去掉0后的 有理数乘法 ( Q ∖ 0 , ⋅ ) (\mathbb{Q\setminus 0,\cdot)} (Q∖0,⋅)等等。矩阵中常见的群有:
- 一般线性群 G L ( n ) GL(n) GL(n):指 n × n n\times n n×n的可逆矩阵,它们对矩阵乘法成群。
- 特殊正交群 S O ( n ) SO(n) SO(n):也就是所谓的旋转矩阵群,其中 S O ( 2 ) SO(2) SO(2)和 S O ( 3 ) SO(3) SO(3)最为常见。
- 特殊欧式群 S E ( n ) SE(n) SE(n):也就是前面提到的 n n n维欧式变换,如 S E ( 2 ) SE(2) SE(2)和 S E ( 3 ) SE(3) SE(3)。
群结构保证了在群上的运算具有良好的性质,群论则是研究群的各种结构和性质的理论,感兴趣的读者可参考代数教材。
李群:是指具有连续(光滑)性质的群。像整数群 Z \mathbb{Z} Z那样离散的群没有连续性质,所以不是李群。而 S O ( n ) SO(n) SO(n)和 S E ( n ) SE(n) SE(n)在实数空间上是连续的,我们能够直观地想象一个刚体能够连续地在空间中运动,所以它们都是李群。由于 S O ( 3 ) SO(3) SO(3)和 S E ( 3 ) SE(3) SE(3)对相机姿态估计尤其重要,所以主要讨论这两个李群。
通常有两种思路来介绍李代数,一种是直接引入李代数,每个李群对应着一个李代数,但这样的话,读者不知道它有什么物理意义。所以,笔者准备花一点儿时间从旋转矩阵的李群引出李代数,我们先从较简单的李群 S O ( 3 ) SO(3) SO(3)开始,引出其对应的李代数 s o ( 3 ) \mathfrak{so}(3) so(3)。
2. 由李群引出李代数
2.1 反对称矩阵对应向量与求导关系
考虑 S O ( 3 ) SO(3) SO(3)中的任意旋转矩阵 R R R,我们知道它满足: R R T = I RR^{T}=I RRT=I在位姿中 R R R是某个相机的旋转,它会随时间连续地变化,即为时间的函数: R ( t ) R(t) R(t)。由于它仍是旋转矩阵,有: R ( t ) R ( t ) t = I R(t)R(t)^{t}=I R(t)R(t)t=I在等式两边对时间求导,得到: R ′ ( t ) R ( t ) T + R ( t ) R ′ ( t ) T = 0 R^{'}(t)R(t)^{T}+R(t)R^{'}(t)^{T}=0 R′(t)R(t)T+R(t)R′(t)T=0整理得: R ′ ( t ) R ( t ) T = − ( R ′ ( t ) R ( t ) T ) T (2.1) R^{'}(t)R(t)^{T}=-\left (R^{'}(t)R(t)^{T}\right)^{T}\tag{2.1} R′(t)R(t)T=−(R′(t)R(t)T)T(2.1)
可以看出, R ′ ( t ) R ( t ) T R^{'}(t)R(t)^{T} R′(t)R(t)T是一个反对称矩阵。在《三维空间刚体运动1:旋转矩阵与变换矩阵》第1节中方程(1.3),我们介绍了向量外积的概念: a × b = ∥ e 1 e 2 e 3 a 1 a 2 a 3 b 1 b 2 b 3 ∥ = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] b = d e f a ∧ b (2.2) a\times b= \begin{Vmatrix} e_{1} & e_{2} & e_{3}\\ a_{1} & a_{2} & a_{3}\\ b_{1} & b_{2} & b_{3} \end{Vmatrix}= \begin{bmatrix} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{bmatrix}= \begin{bmatrix} 0 & -a_{3} & a_{2}\\ a_{3} & 0 & -a_{1}\\ -a_{2} & a_{1} & 0 \end{bmatrix}b \xlongequal[]{def} a^{\wedge }b \tag{2.2} a×b=∥∥∥∥∥∥e1a1b1e2a2b2e3a3b3∥∥∥∥∥∥=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤=⎣⎡0a3−a2−a30a1a2−a10⎦⎤bdefa∧b(2.2)上式引入了符号 ∧ ^{\wedge} ∧,将一个向量变成了反对称矩阵。同理,对于任意反对称矩阵,也能找到唯一与之对应的向量,把这个运算用符号 ∨ ^{\vee} ∨表示,则有: A = a ∧ , A ∨ = a (2.3) A=a^{\wedge},A^{\vee}=a\tag{2.3} A=a∧,A∨=a(2.3)
于是,由于 R ′ ( t ) R ( t ) T R^{'}(t)R(t)^{T} R′(t)R(t)T是一个反对称矩阵,可以找到一个三维向量 ϕ ( t ) ∈ R 3 \phi (t)\in\mathbb{R}^{3} ϕ(t)∈R3与之对应: R ′ ( t ) R ( t ) T = ϕ ( t ) ∧ R^{'}(t)R(t)^{T}=\phi (t)^{\wedge} R′(t)R(t)T=ϕ(t)∧,等式两边右乘 R ( t ) R(t) R(t),由于 R R R为正交阵,有: R ′ ( t ) = ϕ ( t ) ∧ R ( t ) = [ 0 − ϕ 3 ϕ 2 ϕ 3 0 − ϕ 1 − ϕ 2 ϕ 1 0 ] R ( t ) (2.4) R^{'}(t)=\phi(t)^{\wedge}R(t)=\begin{bmatrix} 0 & -\phi_{3} & \phi_{2}\\ \phi_{3} & 0 & -\phi_{1}\\ -\phi_{2} & \phi_{1} & 0 \end{bmatrix}R(t)\tag{2.4} R′(t)=ϕ(t)∧R(t)=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤R(t)(2.4)可以看到,对旋转矩阵求一次导数,只需左乘一个 ϕ ( t ) ∧ \phi(t)^{\wedge} ϕ(t)∧矩阵即可。
2.2 一阶导数矩阵求解
考虑当 t = 0 t=0 t=0时,设此时旋转矩阵为 R ( 0 ) = I R(0)=I R(0)=I。按照导数定义,可以把 R ( t ) R(t) R(t)在 t = 0 t=0 t=0附近进行一阶泰勒展开: R ( t ) ≈ R ( t 0 ) + R ′ ( t 0 ) ( t − t 0 ) = t 0 = 0 R ( 0 ) + ϕ ( t 0 ) ∧ R ( 0 ) t = I + ϕ ( t 0 ) ∧ ⋅ t \begin{aligned} R(t) &\approx R(t_{0})+R^{'}(t_{0})(t-t_{0}) \\&\overset{\underset{\mathrm{t_{0}=0}}{}}{=}R(0)+\phi(t_{0})^{\wedge}R(0)t \\& = I+\phi(t_{0})^{\wedge}\cdot t\end{aligned} R(t)≈R(t0)+R′(t0)(t−t0)=t0=0R(0)+ϕ(t0)∧R(0)t=I+ϕ(t0)∧⋅t从上式看到 ϕ \phi ϕ反映了 R R R的导数性质,故称它在 S O ( 3 ) SO(3) SO(3)原点附近的正切空间1(Tangent Space)上。
同时在 t 0 t_{0} t0附近,设 ϕ ( t ) \phi(t) ϕ(t)保持为常数 ϕ ( t 0 ) = ϕ 0 \phi(t_{0})=\phi_{0} ϕ(t0)=ϕ0,那么根据公式(2.4),有: R ′ ( t ) = ϕ ( t 0 ) ∧ R ( t ) = ϕ 0 ∧ R ( t ) R^{'}(t)=\phi(t_{0})^{\wedge}R(t)=\phi_{0}^{\wedge}R(t) R′(t)=ϕ(t0)∧R(t)=ϕ0∧R(t)即: R ′ ( t ) − ϕ 0 ∧ R ( t ) = 0 (2.5) R^{'}(t)-\phi_{0}^{\wedge}R(t)=0\tag{2.5} R′(t)−ϕ0∧R(t)=0(2.5)上式是一个关于 R R R的微分方程,而且有初始值 R ( 0 ) = I R(0)=I R(0)=I,解得: R ( t ) = e x p ( ϕ 0 ∧ t ) (2.6) R(t)=exp(\phi_{0}^{\wedge}t)\tag{2.6} R(t)=exp(ϕ0∧t)(2.6)读者可以验证,上式对微分方程和初始值均成立。这说明在 t = 0 t=0 t=0附近,旋转矩阵可以由 e x p ( ϕ 0 ∧ t ) exp(\phi_{0}^{\wedge}t) exp(ϕ0∧t)计算出来。
可以看到,旋转矩阵 R R R与另一个反对称矩阵 ϕ 0 ∧ t \phi_{0}^{\wedge}t ϕ0∧t通过指数关系发生了联系。但是矩阵的指数是什么呢?这里我们有两个问题需要澄清:
- 给定某时刻的 R R R,有一个对应的 ϕ \phi ϕ,它描述了 R R R在某时刻局部的导数关系,而 ϕ \phi ϕ正是对应到 S O ( 3 ) SO(3) SO(3)上的李代数 s o ( 3 ) \mathfrak{so}(3) so(3)。
- 其次,给定某个向量 ϕ \phi ϕ时,矩阵指数 e x p ( ϕ ∧ ) exp(\phi^{\wedge}) exp(ϕ∧)如何计算得到 R R R?反之,给定 R R R时,能否有相反的运算来计算 ϕ \phi ϕ?而这正是李群与李代数之间的指数/对数映射关系。
下面分两个章节来解决这个问题。
3. 李代数
3.1 李代数的定义
每个李群都有与之对应的李代数。李代数描述了李群的局部性质,准确地说,是单位圆附近的正切空间。一般的李代数定义如下:
李代数由一个集合 V \mathbb{V} V、一个数域 F \mathbb{F} F和一个二元运算[,](又称李括号)组成。如果他们满足以下几条性质,则称 ( V , F , [ , ] ) (\mathbb{V},\mathbb{F},[,]) (V,F,[,])为一个李代数,记作 g \mathfrak{g} g(哥特体)。它具有以下性质:
- 封闭性: ∀ X , Y ∈ V , [ X , Y ] ∈ V \space \space \forall X,Y \in \mathbb{V},[X,Y]\in \mathbb{V} ∀X,Y∈V,[X,Y]∈V.
- 双线性: ∀ X , Y , Z ∈ V , a , b ∈ F \space \space \forall X, Y, Z \in \mathbb{V}, a, b \in \mathbb{F} ∀X,Y,Z∈V,a,b∈F,有 [ a X + b Y , Z ] = a [ X , Z ] + b [ Y , Z ] , [ Z , a X + b Y ] = a [ Z , X ] + b [ Z , Y ] [aX+bY,Z]=a[X,Z]+b[Y,Z],\space \space \space \space [Z,aX+bY]=a[Z,X]+b[Z,Y] [aX+bY,Z]=a[X,Z]+b[Y,Z], [Z,aX+bY]=a[Z,X]+b[Z,Y].
- 自反性2: ∀ X ∈ V , [ X , X ] = 0 \space \space \forall X \in \mathbb{V},[X,X]=0 ∀X∈V,[X,X]=0.
- 雅克比等价: ∀ X , Y , Z ∈ V \space \space \forall X,Y,Z \in \mathbb{V} ∀X,Y,Z∈V,有: [ X , [ Y , Z ] ] + [ Z , [ X , Y ] ] + [ Y , [ Z , X ] ] = 0 [X,[Y,Z]]+[Z,[X,Y]]+[Y,[Z,X]]=0 [X,[Y,Z]]+[Z,[X,Y]]+[Y,[Z,X]]=0
从表面上看,李代数所需要的性质还是挺多的。相比于群中较为简单的二元运算,李括号表达了两个元素的差异。它不要求乘法结合律,而要求元素和自己做李括号之后为零的性质(自反性)。作为例子,三维向量空间 R 3 \mathbb{R}^{3} R3上定义的叉积 × \times ×是一种李括号,即 ϕ × ϕ = ∣ ϕ ∣ ⋅ ∣ ϕ ∣ ⋅ sin θ = 0 \phi\times\phi=|\phi|\cdot|\phi|\cdot \sin \theta=0 ϕ×ϕ=∣ϕ∣⋅∣ϕ∣⋅sinθ=0,因此 g = ( R 3 , R , × ) \mathfrak{g}=(\mathbb{R}^{3},\mathbb{R},\times) g=(R3,R,×)构成了一个李代数。
3.2 李代数 s o ( 3 ) \mathfrak{so}(3) so(3)
之前提到的 ϕ \phi ϕ,事实上是一种李代数。 S O ( 3 ) SO(3) SO(3)对应的李代数是定义在 R 3 \mathbb{R}^{3} R3上的向量,我们记作 ϕ \phi ϕ。根据前面的推导,每个 ϕ \phi ϕ都可以生成一个反对称矩阵: Φ = ϕ ∧ = [ 0 − ϕ 3 ϕ 2 ϕ 3 0 − ϕ 1 − ϕ 2 ϕ 1 0 ] ∈ R 3 × 3 \Phi =\phi ^{\wedge}=\begin{bmatrix} 0 & -\phi_{3} & \phi_{2}\\ \phi_{3} & 0 & -\phi_{1}\\ -\phi_{2} & \phi_{1} & 0 \end{bmatrix}\in \mathbb{R}^{3\times 3} Φ=ϕ∧=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤∈R3×3在此定义下,举例证明其封闭性。设两个向量 ϕ 1 = ( a 1 , a 2 , a 3 ) , ϕ 2 = ( b 1 , b 2 , b 3 ) \phi_{1}=(a_{1},a_{2},a_{3}),\phi_{2}=(b_{1},b_{2},b_{3}) ϕ1=(a1,a2,a3),ϕ2=(b1,b2,b3),其对应的反对称矩阵为: Φ 1 = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] , Φ 2 = [ 0 − b 3 b 2 b 3 0 − b 1 − b 2 b 1 0 ] \Phi_{1} =\begin{bmatrix} 0 & -a_{3} & a_{2}\\ a_{3} & 0 & -a_{1}\\ -a_{2} & a_{1} & 0 \end{bmatrix},\Phi_{2} =\begin{bmatrix} 0 & -b_{3} & b_{2}\\ b_{3} & 0 & -b_{1}\\ -b_{2} & b_{1} & 0 \end{bmatrix} Φ1=⎣⎡0a3−a2−a30a1a2−a10⎦⎤,Φ2=⎣⎡0b3−b2−b30b1b2−b10⎦⎤则 ϕ 1 , ϕ 2 \phi_{1},\phi_{2} ϕ1,ϕ2的李括号为: [ ϕ 1 , ϕ 2 ] = ( Φ 1 Φ 2 − Φ 2 Φ 1 ) ∨ = [ 0 − a 1 b 2 + a 2 b 1 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 0 − a 2 b 3 + a 3 b 2 − a 3 b 1 + a 1 b 3 a 2 b 3 − a 3 b 2 0 ] ∨ = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] (3.1) [\phi_{1},\phi_{2}]=(\Phi_{1}\Phi_{2}-\Phi_{2}\Phi_{1})^{\vee}=\begin{bmatrix} 0 & -a_{1}b_{2}+a_{2}b_{1} & a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} & 0 & -a_{2}b_{3}+a_{3}b_{2}\\ -a_{3}b_{1}+a_{1}b_{3} & a_{2}b_{3}-a_{3}b_{2} & 0 \end{bmatrix}^{\vee}=\begin{bmatrix} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{bmatrix}\tag{3.1} [ϕ1,ϕ2]=(Φ1Φ2−Φ2Φ1)∨=⎣⎡0a1b2−a2b1−a3b1+a1b3−a1b2+a2b10a2b3−a3b2a3b1−a1b3−a2b3+a3b20⎦⎤∨=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤(3.1)可以看出,结果仍然为三维向量,满足封闭性。其它三条性质读者可自行证明。
由于向量 ϕ \phi ϕ与反对称矩阵是一一对应的,在不引起歧义的情况下,就说 s o ( 3 ) \mathfrak{so}(3) so(3)的元素是三维向量或三维反对称矩阵,不加区别: s o ( 3 ) = { ϕ ∈ R 3 , Φ = ϕ ∧ ∈ R 3 × 3 } (3.2) \mathfrak{so}(3)=\{\phi \in \mathbb{R}^{3},\Phi=\phi^{\wedge}\in \mathbb{R}^{3\times3}\}\tag{3.2} so(3)={ϕ∈R3,Φ=ϕ∧∈R3×3}(3.2)至此,我们已经清楚了 s o ( 3 ) \mathfrak{so}(3) so(3)的内容,它们是一个由三维向量组成的集合,每个向量对应一个反对称矩阵,可以用于表达旋转矩阵的导数。它与 S O ( 3 ) SO(3) SO(3)的关系由指数映射给定: R = exp ( ϕ ∧ ) = exp ( A ) R=\exp(\phi^{\wedge})=\exp(A) R=exp(ϕ∧)=exp(A)指数映射会在下一章介绍。由于已经介绍了李群 S O ( 3 ) SO(3) SO(3)对应的李代数 s o ( 3 ) \mathfrak{so}(3) so(3),我们顺带先来看李群 S E ( 3 ) SE(3) SE(3)对应的李代数 s e ( 3 ) \mathfrak{se}(3) se(3)。
3.3 李代数 s e ( 3 ) \mathfrak{se}(3) se(3)
为节省篇幅,这里就不介绍如何引出 s e ( 3 ) \mathfrak{se}(3) se(3)了。与 s o ( 3 ) \mathfrak{so}(3) so(3)相似, s e ( 3 ) \mathfrak{se}(3) se(3)位于 R 6 \mathbb{R}^{6} R6空间中: s e ( 3 ) = { ξ = [ ρ ϕ ] ∈ R 6 , ρ ∈ R 3 , ϕ ∈ s o ( 3 ) , Ξ = ξ ∧ = [ ϕ ∧ ρ 0 T 0 ] ∈ R 4 × 4 } (3.3) \mathfrak{se}(3)=\left \{\xi =\begin{bmatrix} \rho \\ \phi \end{bmatrix} \in \mathbb{R}^{6},\rho\in\mathbb{R}^{3},\phi \in \mathfrak{so}(3), \Xi = \xi ^{\wedge}=\begin{bmatrix} \phi^{\wedge} & \rho\\ 0^{T} & 0 \end{bmatrix}\in \mathbb{R}^{4\times 4}\right \}\tag{3.3} se(3)={ξ=[ρϕ]∈R6,ρ∈R3,ϕ∈so(3),Ξ=ξ∧=[ϕ∧0Tρ0]∈R4×4}(3.3)我们把每个 s e ( 3 ) \mathfrak{se}(3) se(3)元素记作 ξ \xi ξ,它是一个六维向量,前三维为平移(但含义与变换矩阵中的平移不同,分析见后),记作 ρ \rho ρ;后三维为旋转,记作 ϕ \phi ϕ,实质是 s o ( 3 ) \mathfrak{so}(3) so(3)的元素。
同时,我们拓展了符号 ∧ ^\wedge ∧的含义。在 s e ( 3 ) \mathfrak{se}(3) se(3)中,同样使用 ∧ ^{\wedge} ∧符号,将一个六维向量转换成四维矩阵,但这里不再表示反对称,而是指代“从向量到矩阵”的关系,同理使用 ∨ ^{\vee} ∨表示“从矩阵到向量”: Ξ = ξ ∧ = [ ϕ ∧ ρ 0 T 0 ] ∈ R 4 × 4 , Ξ ∨ = ξ (3.4) \Xi=\xi^{\wedge}=\begin{bmatrix} \phi^{\wedge} & \rho\\ 0^{T} & 0 \end{bmatrix}\in \mathbb{R}^{4\times4},\Xi^{\vee}=\xi\tag{3.4} Ξ=ξ∧=[ϕ∧0Tρ0]∈R4×4,Ξ∨=ξ(3.4)读者可以简单地把 s e ( 3 ) \mathfrak{se}(3) se(3)理解为“由一个平移 ρ \rho ρ加上一个 s o ( 3 ) \mathfrak{so}(3) so(3)元素构成的向量”。同样,李代数 s e ( 3 ) \mathfrak{se}(3) se(3)也有类似于公式(3.1)中 s o ( 3 ) \mathfrak{so}(3) so(3)的李括号: [ ξ 1 , ξ 2 ] = ( Ξ 1 Ξ 2 − Ξ 2 Ξ 1 ) ∨ (3.5) [\xi_{1},\xi_{2}]=(\Xi_{1}\Xi_{2}-\Xi_{2}\Xi_{1})^{\vee}\tag{3.5} [ξ1,ξ2]=(Ξ1Ξ2−Ξ2Ξ1)∨(3.5)读者可以验证 s e ( 3 ) \mathfrak{se}(3) se(3)是否满足李代数的其它性质。至此,我们已经见过两种重要的李代数 s o ( 3 ) \mathfrak{so}(3) so(3)和 s e ( 3 ) \mathfrak{se}(3) se(3)了。
4. 指数和对数映射
现在来考虑第二个问题:已知 ϕ \phi ϕ,如何计算 exp ( ϕ ∧ ) \exp(\phi^{\wedge}) exp(ϕ∧)?显然它是一个矩阵的指数,在李群和李代数中,它称为李代数到李群的指数映射(Exponential Map)。反之,已知 R R R,如何计算 ( l n R ) ∨ (lnR)^{\vee} (lnR)∨?同样,我们先讨论旋转变换,再讨论欧氏变换。
4.1 旋转变换 S O ( 3 ) SO(3) SO(3)上的指数/对数映射
4.1.1 s o ( 3 ) \mathfrak{so}(3) so(3)上的指数映射
矩阵指数是方块矩阵的一种矩阵函数,与指数函数类似。矩阵指数给出了矩阵李代数与对应的李群之间的关系。任意矩阵的指数映射可以写成一个泰勒展开,但是只有在收敛的情况下才会有结果,其结果仍是一个矩阵: exp ( A ) = ∑ n = 0 ∞ 1 n ! A n \exp(A)=\sum_{n=0}^{\infty }\frac{1}{n!}A^{n} exp(A)=n=0∑∞n!1An同样的,对 s o ( 3 ) \mathfrak{so}(3) so(3)中的任意元素 ϕ \phi ϕ,我们也可按此方式定义它的指数映射: exp ( ϕ ∧ ) = ∑ n = 0 ∞ 1 n ! ( ϕ ∧ ) n \exp(\phi^{\wedge})=\sum_{n=0}^{\infty }\frac{1}{n!}(\phi^{\wedge})^{n} exp(ϕ∧)=n=0∑∞n!1(ϕ∧)n但这个定义没法直接计算,因为我们不想计算矩阵的无穷次幂。下面我们推导一种计算矩阵指数映射的简便方法。
由于 ϕ \phi ϕ是三维向量,我们可以定义它的模长和方向,分别记作 θ \theta θ和 a \mathbf{a} a,于是有 ϕ = θ a \phi=\theta \mathbf{a} ϕ=θa,这里 a = [ a 1 , a 2 , a 3 ] T \mathbf{a}=[a_{1},a_{2},a_{3}]^{T} a=[a1,a2,a3]T是一个长度为1的方向向量,即 ∥ a ∥ = 1 \left \| \mathbf{a} \right \|=1 ∥a∥=1。首先,对于 a ∧ \mathbf{a}^{\wedge} a∧,有以下两条性质: a ∧ a ∧ = [ − a 2 2 − a 3 2 a 1 a 2 a 1 a 3 a 1 a 2 − a 1 2 − a 3 2 a 2 a 2 a 1 a 3 a 2 a 2 − a 1 2 − a 2 2 ] = a a T − I . (4.1) \mathbf{a}^{\wedge}\mathbf{a}^{\wedge}=\begin{bmatrix} -a_{2}^{2}-a_{3}^{2} & a_{1}a_{2} & a_{1}a_{3}\\ a_{1}a_{2} & -a_{1}^{2}-a_{3}^{2} & a_{2}a_{2}\\ a_{1}a_{3} & a_{2}a_{2} &-a_{1}^{2}-a_{2}^{2} \end{bmatrix}=\mathbf{a}\mathbf{a}^{T}-\mathbf{I}.\tag{4.1} a∧a∧=⎣⎡−a22−a32a1a2a1a3a1a2−a12−a32a2a2a1a3a2a2−a12−a22⎦⎤=aaT−I.(4.1)以及 a ∧ a ∧ a ∧ = a ∧ ( a a T − I ) = − a ∧ . (4.2) \mathbf{a}^{\wedge}\mathbf{a}^{\wedge}\mathbf{a}^{\wedge}=\mathbf{a}^{\wedge}(\mathbf{a}\mathbf{a}^{T}-\mathbf{I})=-\mathbf{a}^{\wedge}.\tag{4.2} a∧a∧a∧=a∧(aaT−I)=−a∧.(4.2)这两个式子提供了处理 a ∧ \mathbf{a}^{\wedge} a∧高阶项的方法。我们可以把指数映射写成: exp ( ϕ ∧ ) = exp ( θ a ∧ ) = ∑ n = 0 ∞ 1 n ! ( θ a ∧ ) n = I + θ a ∧ + 1 2 ! θ 2 a ∧ a ∧ + 1 3 ! θ 3 a ∧ a ∧ a ∧ + 1 4 ! θ 4 ( a ∧ ) 4 + ⋯ = ( 4.1 ) ( 4.2 ) a a T − a ∧ a ∧ + θ a ∧ + 1 2 ! θ 2 a ∧ a ∧ − 1 3 ! θ 3 a ∧ − 1 4 ! θ 4 ( a ∧ ) 2 + ⋯ = a a T + ( θ − 1 3 ! θ 3 + 1 5 ! θ 5 − ⋯ ) a ∧ − ( 1 − 1 2 ! θ 2 + 1 4 ! θ 4 − ⋯ ) a ∧ a ∧ = a ∧ a ∧ + I + sin θ a ∧ − cos θ a ∧ a ∧ = ( 1 − cos θ ) a ∧ a ∧ + I + sin θ a ∧ = cos θ I + ( 1 − cos θ ) a a T + sin θ a ∧ . \begin{aligned} \exp (\phi^{\wedge}) &= \exp (\theta \mathbf{a}^{\wedge})= \sum_{n=0}^{\infty }\frac{1}{n!}(\theta \mathbf{a}^{\wedge})^{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}(\mathbf{a}^{\wedge})^{4}+\cdots \\& \overset{\underset{\mathrm{(4.1)(4.2)}}{}}{=}\mathbf{a}\mathbf{a}^{T}-\mathbf{a}^{\wedge}\mathbf{a}^{\wedge}+\theta\mathbf{a}^{\wedge}+\frac{1}{2!}\theta^{2}\mathbf{a}^{\wedge}\mathbf{a}^{\wedge} - \frac{1}{3!}\theta^{3}\mathbf{a}^{\wedge} -\frac{1}{4!}\theta^{4}(\mathbf{a}^{\wedge})^{2} + \cdots \\& = \mathbf{a}\mathbf{a}^{T} + \left ( \theta - \frac{1}{3!}\theta^{3} + \frac{1}{5!}\theta^{5} - \cdots\right )\mathbf{a}^{\wedge}-\left ( 1- \frac{1}{2!}\theta^{2} + \frac{1}{4!}\theta^{4}-\cdots\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}+\mathbf{I}+\sin\theta\mathbf{a}^{\wedge} \\&= \cos\theta\mathbf{I}+(1-\cos\theta)\mathbf{a}\mathbf{a}^{T}+\sin\theta\mathbf{a}^{\wedge} \end{aligned}. exp(ϕ∧)=exp(θa∧)=n=0∑∞n!1(θa∧)n=I+θa∧+2!1θ2a∧a∧+3!1θ3a∧a∧a∧+4!1θ4(a∧)4+⋯=(4.1)(4.2)aaT−a∧a∧+θa∧+2!1θ2a∧a∧−3!1θ3a∧−4!1θ4(a∧)2+⋯=aaT+(θ−3!1θ3+5!1θ5−⋯)a∧−(1−2!1θ2+4!1θ4−⋯)a∧a∧=a∧a∧+I+sinθa∧−cosθa∧a∧=(1−cosθ)a∧a∧+I+sinθa∧=cosθI+(1−cosθ)aaT+sinθa∧.最后,得到一个似曾相识的式子: exp ( θ a ∧ ) = cos θ I + ( 1 − cos θ ) a a T + sin θ a ∧ . (4.3) \exp (\theta \mathbf{a}^{\wedge})= \cos\theta\mathbf{I}+(1-\cos\theta)\mathbf{a}\mathbf{a}^{T}+\sin\theta\mathbf{a}^{\wedge}.\tag{4.3} exp(θa∧)=cosθI+(1−cosθ)aaT+sinθa∧.(4.3)回想老火另一篇博客《旋转向量与罗德里格斯公式》,它和罗德里格斯公式(2.1)如出一辙。这表明,由所谓的旋转向量 ϕ \phi ϕ组成的李代数 s o ( 3 ) \mathfrak{so}(3) so(3),其指数映射即是罗德里格斯公式。
结论:通过罗德里格斯公式,我们把 s o \mathfrak{so} so中的任意一个向量 ϕ \phi ϕ对应到了一个位于 S O ( 3 ) SO(3) SO(3)中的旋转矩阵 R R R。
4.1.2 S O ( 3 ) SO(3) SO(3)上的对数映射
反之,如果定义对数映射,也能把 S O ( 3 ) SO(3) SO(3)中的元素对应到 s o ( 3 ) \mathfrak{so}(3) so(3)中。对于函数 l n ( 1 + x ) ln(1+x) ln(1+x),它对应的泰勒展开式为: l n ( 1 + x ) = ∑ n = 0 ∞ ( − 1 ) n + 1 n x n , ∀ x > − 1. ln(1+x)=\sum_{n=0}^{\infty }\frac{(-1)^{n+1}}{n}x^{n} ,\forall x>-1. ln(1+x)=n=0∑∞n(−1)n+1xn,∀x>−1.推广到矩阵有: ϕ = ( l n R ) ∨ = ( l n ( I + R − I ) ) ∨ = ∑ n = 0 ∞ ( − 1 ) n n + 1 ( R − I ) n + 1 (4.4) \begin{aligned} \phi &= (ln\mathbf{R})^{\vee} \\&=(ln(\mathbf{I}+\mathbf{R}-\mathbf{I}))^{\vee} \\&=\sum_{n=0}^{\infty }\frac{(-1)^{n}}{n+1}(\mathbf{R}-\mathbf{I})^{n+1} \end{aligned}\tag{4.4} ϕ=(lnR)∨=(ln(I+R−I))∨=n=0∑∞n+1(−1)n(R−I)n+1(4.4)和指数映射一样,我们没必要直接用泰勒展开计算对数映射。在《旋转向量与罗德里格斯公式》第3节,我们介绍过如何把旋转矩阵转换为旋转向量,即对应的李代数。计算方法即其中的公式 ( 3.2 ) (3.2) (3.2)和 ( 3.3 ) (3.3) (3.3),分别利用迹的性质求解旋转角度 θ \theta θ和归一化求转轴 u u u,显然采用这种方法更简便。
现在,我们介绍了对数映射的计算方法。但是,对于任意的 R R R是否都能找到唯一的 ϕ \phi ϕ呢?很遗憾,对数映射是一个满射,并不是单射。这意味着,每个 S O ( 3 ) SO(3) SO(3)中的元素 R R R,都可以找到一个 s o ( 3 ) \mathfrak{so}(3) so(3)中的元素 ϕ \phi ϕ与之对应;但可能存在多个 s o ( 3 ) \mathfrak{so}(3) so(3)中的元素 ϕ \phi ϕ对应到同一个 S O ( 3 ) SO(3) SO(3)中的元素 R R R。因为对于旋转角 θ \theta θ,它具有周期性,如果把 θ \theta θ固定在 ± π \pm\pi ±π之间,那么李群和李代数的元素是一一对应的。
总结:指数映射即罗德里格斯公式,旋转矩阵的导数可以由旋转向量指定,指导着如何在旋转矩阵中进行微积分运算。对数映射则可以通过矩阵到轴角的转换关系获得。
4.2 欧氏变换 S E ( 3 ) SE(3) SE(3)上的指数/对数映射
4.2.1 s e ( 3 ) \mathfrak{se}(3) se(3)上的指数映射
下面介绍 s e ( 3 ) \mathfrak{se}(3) se(3)上的指数映射。为了节省篇幅,不再像 s o ( 3 ) \mathfrak{so}(3) so(3)那样详细推导。 s e ( 3 ) \mathfrak{se}(3) se(3)上的指数映射形式如下: exp ( ξ ∧ ) = exp [ ϕ ∧ ρ 0 T 0 ] = [ ∑ n = 0 ∞ 1 n ! ( ϕ ∧ ) n ∑ n = 0 ∞ 1 ( n + 1 ) ! ( ϕ ∧ ) n ρ 0 T 1 ] = Δ [ R J ρ 0 T 1 ] (4.5) \begin{aligned} \exp(\xi^{\wedge}) &=\exp\begin{bmatrix} \phi^{\wedge} & \rho\\ 0^{T} &0 \end{bmatrix}\\&=\begin{bmatrix} \sum_{n=0}^{\infty }\frac{1}{n!}(\phi^{\wedge})^{n} & \sum_{n=0}^{\infty }\frac{1}{(n+1)!}(\phi^{\wedge})^{n}\rho\\ 0^{T} & 1 \end{bmatrix} \\&\overset{\underset{\mathrm{\Delta }}{}}{=}\begin{bmatrix} \mathbf{R} & J\rho\\ 0^{T} &1 \end{bmatrix}\end{aligned}\tag{4.5} exp(ξ∧)=exp[ϕ∧0Tρ0]=[∑n=0∞n!1(ϕ∧)n0T∑n=0∞(n+1)!1(ϕ∧)nρ1]=Δ[R0TJρ1](4.5)
只要有一点耐心,可以照着 s e ( 3 ) \mathfrak{se}(3) se(3)上的做法指导,把指数进行泰勒展开推导此式。关于矩阵的指数运算,可以参考附录文献3中的矩阵指数。
令 ϕ = θ a \phi=\theta \boldsymbol{a} ϕ=θa,其中 a \boldsymbol{a} a为单位向量,则: ∑ n = 0 ∞ 1 ( n + 1 ) ! ( ϕ ∧ ) n = I + 1 2 ! θ a ∧ + 1 3 ! θ 2 ( a ∧ ) 2 + 1 4 ! θ 3 ( a ∧ ) 3 + 1 5 ! θ 4 ( a ∧ ) 4 + ⋯ = 1 θ ( 1 2 ! θ 2 − 1 4 ! θ 4 + ⋯ ) ( a ∧ ) + 1 θ ( 1 3 ! θ 3 − 1 5 ! θ 5 + ⋯ ) ( a ∧ ) 2 + I = 1 θ ( 1 − cos θ ) ( a ∧ ) + θ − sin θ θ ( a a T − I ) + I = sin θ θ I + ( 1 − sin θ θ ) a a T + 1 − cos θ θ a ∧ = d e f J . \begin{aligned} \sum_{n=0}^{\infty }\frac{1}{(n+1)!}(\phi^{\wedge})^{n} &= \boldsymbol{I}+\frac{1}{2!}\theta\boldsymbol{a}^{\wedge}+\frac{1}{3!}\theta^{2}(\boldsymbol{a}^{\wedge})^{2}+\frac{1}{4!}\theta^{3}(\boldsymbol{a}^{\wedge})^{3}+\frac{1}{5!}\theta^{4}(\boldsymbol{a}^{\wedge})^{4}+\cdots \\&= \frac{1}{\theta}\left ( \frac{1}{2!}\theta^{2}- \frac{1}{4!}\theta^{4}+\cdots\right )(\boldsymbol{a}^{\wedge})+\frac{1}{\theta}\left ( \frac{1}{3!}\theta^{3}- \frac{1}{5!}\theta^{5}+\cdots\right )(\boldsymbol{a}^{\wedge})^{2}+\boldsymbol{I} \\&= \frac{1}{\theta}(1-\cos\theta)(\boldsymbol{a}^{\wedge})+\frac{\theta-\sin\theta}{\theta}(\boldsymbol{a}\boldsymbol{a}^{T}-\boldsymbol{I})+\boldsymbol{I} \\&= \frac{\sin\theta}{\theta}\boldsymbol{I}+(1-\frac{\sin\theta}{\theta})\boldsymbol{a}\boldsymbol{a}^{T}+\frac{1-\cos\theta}{\theta}\boldsymbol{a}^{\wedge}\overset{\underset{\mathrm{def}}{}}{=}\boldsymbol{J}. \end{aligned} n=0∑∞(n+1)!1(ϕ∧)n=I+2!1θa∧+3!1θ2(a∧)2+4!1θ3(a∧)3+5!1θ4(a∧)4+⋯=θ1(2!1θ2−4!1θ4+⋯)(a∧)+θ1(3!1θ3−5!1θ5+⋯)(a∧)2+I=θ1(1−cosθ)(a∧)+θθ−sinθ(aaT−I)+I=θsinθI+(1−θsinθ)aaT+θ1−cosθa∧=defJ.从结果上看, ξ \xi ξ的指数映射矩阵左上角的 R \boldsymbol{R} R,是我们熟知的 S O ( 3 ) SO(3) SO(3)中的元素,与 s e ( 3 ) \mathfrak{se}(3) se(3)中的旋转部分 ϕ \phi ϕ对应。而右上角的 J \boldsymbol{J} J由上面的推导给出: J = sin θ θ I + ( 1 − sin θ θ ) a a T + 1 − cos θ θ a ∧ (4.6) \boldsymbol{J}=\frac{\sin\theta}{\theta}\boldsymbol{I}+(1-\frac{\sin\theta}{\theta})\boldsymbol{a}\boldsymbol{a}^{T}+\frac{1-\cos\theta}{\theta}\boldsymbol{a}^{\wedge}\tag{4.6} J=θsinθI+(1−θsinθ)aaT+θ1−cosθa∧(4.6)该式与罗德里格斯公式有些相似,但不完全一样。我们看到,平移部分经过指数映射之后,发生了一次以 J \boldsymbol{J} J为系数矩阵的线性变换。请读者重视这个 J \boldsymbol{J} J,因为后面还要用到。
4.2.2 S E ( 3 ) SE(3) SE(3)上的对数映射
同样,虽然我们也可以类比推导对数映射,不过根据变换矩阵 T \boldsymbol{T} T求 s e ( 3 ) \mathfrak{se}(3) se(3)上的对应向量也有更省事的方式:从左上角的 R R R计算旋转向量 ϕ \phi ϕ,而右上角的 t t t满足: t = J ρ . t=\boldsymbol{J}\rho. t=Jρ.由于 J \boldsymbol{J} J可以由 ϕ \phi ϕ得到, t t t为测量量,所以这里的 ρ \rho ρ也可由上式解得。这样我们就能得到 ξ \xi ξ中全部变量 ϕ , ρ \phi,\rho ϕ,ρ了。
4.3 总结
现在,我们已经弄清了李群、李代数的定义以及它们之间相互的转换关系,总结图如下:
三维旋转变换:
∣ S O ( 3 ) R ∈ R 3 × 3 R R T = I d e t ( R ) = 1 ∣ → 对 数 映 射 : θ = arccos t r ( R ) − 1 2 , R a = a ← 指 数 映 射 : ϕ = θ a , exp ( θ a ∧ ) = cos θ I + ( 1 − cos θ ) a a T + sin θ a ∧ ∣ s o ( 3 ) ϕ ∈ R ϕ ∧ = [ 0 − ϕ 3 ϕ 2 ϕ 3 0 − ϕ 1 − ϕ 2 ϕ 1 0 ] ∣ \begin{vmatrix} SO(3)\\ R\in\mathbb{R}^{3\times3}\\ RR^{T}=I\\ det(R)=1 \end{vmatrix}\frac{\xrightarrow[]{对数映射:\theta=\arccos\frac{tr(R)-1}{2},Ra=a}}{\xleftarrow[指数映射:\phi=\theta a,\exp (\theta \mathbf{a}^{\wedge})= \cos\theta\mathbf{I}+(1-\cos\theta)\mathbf{a}\mathbf{a}^{T}+\sin\theta\mathbf{a}^{\wedge}]{}}\begin{vmatrix} \mathfrak{so}(3)\\ \phi\in\mathbb{R}\\ \phi^{\wedge}=\begin{bmatrix} 0 & -\phi_{3} & \phi_{2}\\ \phi_{3} & 0 & -\phi_{1}\\ -\phi_{2} & \phi_{1} & 0 \end{bmatrix} \end{vmatrix} ∣∣∣∣∣∣∣∣SO(3)R∈R3×3RRT=Idet(R)=1∣∣∣∣∣∣∣∣指数映射:ϕ=θa,exp(θa∧)=cosθI+(1−cosθ)aaT+sinθa∧对数映射:θ=arccos2tr(R)−1,Ra=a∣∣∣∣∣∣∣∣∣∣so(3)ϕ∈Rϕ∧=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤∣∣∣∣∣∣∣∣∣∣
三维欧氏变换:
∣ S E ( 3 ) T ∈ R 4 × 4 T = [ R t 0 T 1 ] ∣ → 对 数 映 射 : θ = arccos t r ( R ) − 1 2 , R a = a , t = J ρ ← 指 数 映 射 : ϕ = θ a , exp ( ξ ∧ ) = [ e x p ( ϕ ∧ ) J ρ 0 T 1 ] , J = sin θ θ I + ( 1 − sin θ θ ) a a T + 1 − cos θ θ a ∧ ∣ s e ( 3 ) ξ = [ ρ ϕ ] ∈ R 6 ξ ∧ = [ ϕ ∧ ρ 0 T 0 ] ∣ \begin{vmatrix} SE(3)\\ T\in\mathbb{R}^{4\times 4}\\ T=\begin{bmatrix} R & t\\ 0^{T} &1 \end{bmatrix} \end{vmatrix}\frac{\xrightarrow[]{对数映射:\theta=\arccos\frac{tr(R)-1}{2},Ra=a,t=\boldsymbol{J}\rho}}{\xleftarrow[指数映射:\phi=\theta a,\exp (\xi^{\wedge})= \begin{bmatrix} \\exp(\phi^{\wedge}) & J\rho\\ 0^{T} &1 \end{bmatrix},\boldsymbol{J}=\frac{\sin\theta}{\theta}\boldsymbol{I}+(1-\frac{\sin\theta}{\theta})\boldsymbol{a}\boldsymbol{a}^{T}+\frac{1-\cos\theta}{\theta}\boldsymbol{a}^{\wedge}]{}}\begin{vmatrix} \mathfrak{se}(3)\\ \xi=\begin{bmatrix} \rho\\ \phi \end{bmatrix}\in\mathbb{R}^{6}\\ \xi^{\wedge=}\begin{bmatrix} \phi^{\wedge} & \rho\\ 0^{T} &0 \end{bmatrix} \end{vmatrix} ∣∣∣∣∣∣∣∣SE(3)T∈R4×4T=[R0Tt1]∣∣∣∣∣∣∣∣指数映射:ϕ=θa,exp(ξ∧)=[exp(ϕ∧)0TJρ1],J=θsinθI+(1−θsinθ)aaT+θ1−cosθa∧对数映射:θ=arccos2tr(R)−1,Ra=a,t=Jρ∣∣∣∣∣∣∣∣∣∣se(3)ξ=[ρϕ]∈R6ξ∧=[ϕ∧0Tρ0]∣∣∣∣∣∣∣∣∣∣
本文基于《视觉SLAM十四讲:从理论到实践》编写,但相对于原文会适当扩充疑难部分,精简非必要陈述,同时为便于全面理解,会收集其他网络好文,加入一些注解和扩展知识点,如果您觉得还不错,请一键四连(点赞关注收藏评论),让更多的人看到。
参考文献:
- 《视觉SLAM十四讲:从理论到实践》,高翔、张涛等著,中国工信出版社
- 《为什么要有切线空间(Tangent Space),它的作用是什么?》
- 《线性代数笔记24——微分方程和exp(At)》
正切空间:可以理解为对于在3D模型表面上的任意一个点,在该点切平面上选取两条相互垂直的坐标轴以及切平面的法线所组成的坐标系。我们来举个简单的例子,假设地球是一个巨大的3D球模型,对于地球的任意一点P我们选择该点的由南向北方向为x坐标轴(T),由西向东方向为y坐标轴(B),地心与该点的连线方向为z坐标轴(N),这样的坐标系称为该点的切线空间。想进一步了解的同学请参考附录文献2。 ↩︎
自反性:是指自己与自己的运算为零的性质,比如三维向量的叉积。 ↩︎
这篇关于李群与李代数1:对应关系及指数/对数映射的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!