- 为了求得符合当前观测数据的最佳相机位姿(计算目标误差函数对变换矩阵/旋转矩阵的导数,即位姿估计问题),而旋转矩阵因为正交性产生的约束(加法不封闭,无法直接求导)使优化变得困难,特引出李群和李代数的概念。
- 书中本节公式推导较多,涉及到解微分方程、泰勒展开、叉积的反对称矩阵表示等基础数学知识,以及Baker-Campbell-Hausdorff公式(BCH公式)& Rodrigues’s Formula(罗德里格斯公式)。
视觉SLAM学习打卡【3】-李群和李代数
一、基础概念
1.群
- 群=集合+一种运算,运算满足以下几条(注:此处运算不一定是乘法):“凤姐咬你”
1. 封闭性: ∀ a 1 , a 2 ∈ A , a 1 ⋅ a 2 ∈ A . 2. 结合律: ∀ a 1 , a 2 , a 3 ∈ A , ( 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 , a ⋅ a − 1 = a − 1 ⋅ a = a 0 \begin{aligned} &1.\text{ 封闭性: }\forall\mathrm{a}_1,\mathrm{a}_2\in\mathrm{A},\quad\mathrm{a}_1\cdot\mathrm{a}_2\in\mathrm{A}. \\ &\text{2. 结合律: }\forall\mathrm{a}_{1},\mathrm{a}_{2},\mathrm{a}_{3}\in\mathrm{A},\quad\left(\mathrm{a}_{1}\cdot\mathrm{a}_{2}\right)\cdot\mathrm{a}_{3}=\mathrm{a}_{1}\cdot\left(\mathrm{a}_{2}\cdot\mathrm{a}_{3}\right) \\ &\text{3. 幺元: }\exists\mathrm{a_0~\in A,~s.t.~}\quad\forall\mathrm{a\in A},\quad\mathrm{a_0~\cdot a=a\cdot a_0~=a} \\ &\text{4. 逆: }\forall\mathrm{a}\in\mathrm{A},\quad\exists\mathrm{a}^{-1}\in\mathrm{A},\quad\mathrm{a}\cdot\mathrm{a}^{-1}=\mathrm{a}^{-1}\cdot\mathrm{a}=\mathrm{a}_0 \end{aligned} 1. 封闭性: ∀a1,a2∈A,a1⋅a2∈A.2. 结合律: ∀a1,a2,a3∈A,(a1⋅a2)⋅a3=a1⋅(a2⋅a3)3. 幺元: ∃a0 ∈A, s.t. ∀a∈A,a0 ⋅a=a⋅a0 =a4. 逆: ∀a∈A,∃a−1∈A,a⋅a−1=a−1⋅a=a0 - n*n的可逆矩阵+矩阵乘法=一般线性群GL(n)——是群但不是李群
2.李群
- 李群:具有连续(光滑)性质的群
- 旋转矩阵集合+矩阵乘法=特殊正交群SO(n)
变换矩阵集合+矩阵乘法=特殊欧式群SE(n)
3.李代数
- 李代数=集合V+数域F+二元运算
- 每个李群对应一个李代数,反应李群局部性质。
- 李代数有种“曲线救国”的感觉:李群类似一个无法定义加法的曲面,李代数类似曲面的切面,在切线附近具有和原曲面相近的性质。我们想对李群求导(用到加法-导数定义中需要加一微小的量),可以通过李代数实现。
- 相信仅凭文字,读者可能对李代数的定位仍不清晰。无妨,直接上图:
- 李代数满足运算:“饱经风霜,独自优雅”
1. 封闭性 ∀ X , Y ∈ V , [ X , Y ] ∈ V . 2.双线性 ∀ 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 ] 3.自反性 ∀ X ∈ V , [ X , X ] = 0 4. 雅可比性 ∀ X , Y , Z ∈ V , [ X , [ Y , Z ] ] + [ Z , [ X , Y ] ] + [ Y , [ Z , X ] ] = 0. \begin{aligned} &1.\text{封闭性}\quad\forall X,Y\in\mathbb{V},[X,Y]\in\mathbb{V}. \\ &\text{2.双线性}\quad\forall X,Y,Z\in\mathbb{V},a,b\in\mathbb{F},\text{有:}[aX+bY,Z]=a[X,Z]+b[Y,Z],[Z,aX+bY]=a[Z,X]+b[Z,Y] \\ &\text{3.自反性}\quad\forall X\in\mathbb{V},[X,X]=0 \\ &4.\text{雅可比性}\forall X,Y,Z\in\mathbb{V},[X,[Y,Z]]+[Z,[X,Y]]+[Y,[Z,X]]=0.\ \end{aligned} 1.封闭性∀X,Y∈V,[X,Y]∈V.2.双线性∀X,Y,Z∈V,a,b∈F,有:[aX+bY,Z]=a[X,Z]+b[Y,Z],[Z,aX+bY]=a[Z,X]+b[Z,Y]3.自反性∀X∈V,[X,X]=04.雅可比性∀X,Y,Z∈V,[X,[Y,Z]]+[Z,[X,Y]]+[Y,[Z,X]]=0.
其中,二元运算[ , ]称为李括号,表达了两个元素的差异(eg:自反性——自己和自己的差异为0)
二、两个重要的李代数
1.李群SO(3)对应的李代数so(3)
两个向量的 ϕ 1 , ϕ 2 \phi_1,\phi_2 ϕ1,ϕ2的李括号为:
[ ϕ 1 , ϕ 2 ] = ( Φ 1 Φ 2 − Φ 2 Φ 1 ) ∨ [\phi_1,\phi_2]=(\Phi_1\Phi_2-\Phi_2\Phi_1)^\vee [ϕ1,ϕ2]=(Φ1Φ2−Φ2Φ1)∨
注:一般情况下,李代数so(3)既可以是3维向量 ϕ \phi ϕ,也可以是3*3反对称矩阵 Φ \Phi Φ,不加区分。
2.李群SE(3)对应的李代数se(3)
两个向量的 ξ 1 , ξ 2 \xi_1,\xi_2 ξ1,ξ2的李括号为:
[ ξ 1 , ξ 2 ] = ( ξ 1 ∧ ξ 2 ∧ − ξ 2 ∧ ξ 1 ∧ ) ∨ [\xi_1,\xi_2]=(\xi_1^{\wedge}\xi_2^{\wedge}-\xi_2^{\wedge}\xi_1^{\wedge})^{\vee} [ξ1,ξ2]=(ξ1∧ξ2∧−ξ2∧ξ1∧)∨
注:此处的 ξ ∧ \xi^{\wedge} ξ∧虽然不是反对称矩阵,但为和so(3)统一,仍作此表示。
三、指数与对数映射
- 从 李代数 到 李群 :指数映射
- 从 李群 到 李代数 :对数映射
相互映射的推导主要用到指数、正弦,余弦的泰勒展开,具体过程略去,直接给结论。
注:
- 看过上一节视觉SLAM学习打卡【二】,细心的友友们可能会发现:李代数se(3)到李群SO(3)的指数映射=旋转向量到旋转矩阵的转换公式=罗德里格斯公式。
- 李群SO(3)(旋转矩阵组成)对应的李代数so(3)就是旋转向量组成的空间。
四、李代数求导
- 引入李代数的一大动机就是方便求导优化
- 使用李代数解决求导问题的思路分为两种:
a.用李代数表示姿态,然后根据李代数加法来对李代数求导。
b.对李群左乘或者右乘微小扰动,然后对扰动求导,称为左扰动和右扰动模型。
1.Baker-Campbell-Hausdorff公式(BCH公式)
- 由于是矩阵的指数,而不是标量的指数,故李群乘积和李代数加法并不等价。 即 R 1 R 2 = exp ( ϕ 1 ∧ ) exp ( ϕ 2 ∧ ) ≠ exp ( ( ϕ 1 + ϕ 2 ) ∧ ) 即\mathrm R_1\mathrm R_2=\exp(\phi_1^{\wedge})\exp(\phi_2^{\wedge})\neq\exp((\phi_1+\phi_2)^{\wedge}) 即R1R2=exp(ϕ1∧)exp(ϕ2∧)=exp((ϕ1+ϕ2)∧)
- 李群乘积与李代数运算的对应关系由BCH公式给出。 即 ln ( exp ( A ) exp ( B ) ) = A + B + 1 2 [ A , B ] + 1 12 [ A , [ A , B ] ] − 1 12 [ B , [ A , B ] ] + . . . 即\ln(\exp(\mathrm{A})\exp(\mathrm{B}))=\mathrm{A}+\mathrm{B}+\frac{1}{2}\left[\mathrm{A},\mathrm{B}\right]+\frac{1}{12}\left[\mathrm{A},[\mathrm{A},\mathrm{B}]\right]-\frac{1}{12}\left[\mathrm{B},[\mathrm{A},\mathrm{B}]\right]+... 即ln(exp(A)exp(B))=A+B+21[A,B]+121[A,[A,B]]−121[B,[A,B]]+...
注:上式中 [ , ] 表示李括号运算 - 当 ϕ 1 , ϕ 2 \phi_1,\phi_2 ϕ1,ϕ2为小量时,可以对BCH公式进行线性近似,得到李群乘积对应的李代数的表达式。
即 ln ( exp ( ϕ 1 ∧ ) exp ( ϕ 2 ∧ ) ) ∨ ≈ { J l ( ϕ 2 ) − 1 ϕ 1 + ϕ 2 当 ϕ 1 为小量时 J r ( ϕ 1 ) − 1 ϕ 2 + ϕ 1 当 ϕ 2 为小量时 即\ln(\exp(\phi_1^{\wedge})\exp(\phi_2^{\wedge}))^{\vee}\approx\begin{cases}\mathrm{J}_l\left(\phi_2\right)^{-1}\phi_1+\phi_2&\text{ 当}\phi_1\text{为小量时}\\\mathrm{J}_\text{r}\left(\phi_1\right)^{-1}\phi_2+\phi_1&\text{ 当}\phi_2\text{为小量时}\end{cases} 即ln(exp(ϕ1∧)exp(ϕ2∧))∨≈{ Jl(ϕ2)−1ϕ1+ϕ2Jr(ϕ1)−1ϕ2+ϕ1 当ϕ1为小量时 当ϕ2为小量时
其中,左乘雅可比 J l \mathrm{J}_l Jl为: J l = sin θ θ I + ( 1 − sin θ θ ) α α T + 1 − cos θ θ α ∧ \mathrm{J}_l=\frac{\sin\theta}\theta\mathrm{I}+(1-\frac{\sin\theta}\theta)\alpha\alpha^\mathrm{T}+\frac{1-\cos\theta}\theta\alpha^\wedge Jl=θsinθI+(1−θsinθ)ααT+θ1−cosθα∧
J l \mathrm{J}_l Jl逆为:
J l − 1 = θ 2 cot θ 2 I + ( 1 − θ 2 cot θ 2 ) α α T + θ 2 α ∧ \mathrm{J}_l^{-1}=\frac{\theta}{2}\cot\frac{\theta}{2}\mathrm{I}+(1-\frac{\theta}{2}\cot\frac{\theta}{2})\alpha\alpha^\mathrm{T}+\frac{\theta}{2}\alpha^{\wedge} Jl−1=2θcot2θI+(1−2θcot2θ)ααT+2θα∧
右乘雅可比矩阵只需对自变量取负号即可:
J r ( ϕ ) = J 1 ( − ϕ ) \mathrm{J}_\mathrm{r}\left(\phi\right)=\mathrm{J}_1\left(-\phi\right) Jr(ϕ)=J1(−ϕ) - BCH公式应用:对旋转R(李代数为 ϕ \phi ϕ)左乘一个微小旋转ΔR (李代数为Δ ϕ \phi ϕ),得到的李群ΔR ⋅ R 对应的李代数为:
ln ( exp ( Δ ϕ ∧ ) exp ( ϕ ∧ ) ) ∨ = ϕ + J l − 1 ( ϕ ) Δ ϕ \ln\left(\exp(\Delta\phi^{\wedge})\exp(\phi^{\wedge})\right)^{\vee}=\phi+\mathrm{J}_l^{-1}\left(\phi\right)\Delta\phi ln(exp(Δϕ∧)exp(ϕ∧))∨=ϕ+Jl−1(ϕ)Δϕ
2.SO(3)对应的李代数求导
- 用李代数 ϕ 表示旋转R,通过李代数加法对李代数求导.
∂ ( R p ) ∂ ϕ = − ( R p ) ∧ J l \frac{\partial(\mathrm{Rp})}{\partial\mathrm{ϕ }}=-(\mathrm{Rp})^{\wedge}\mathrm{J}_l ∂ϕ∂(Rp)=−(Rp)∧Jl - 对R左乘扰动ΔR(对应李代数为 φ {\varphi} φ).
∂ ( R p ) ∂ φ = − ( R p ) ∧ \frac{\partial(\mathrm{Rp})}{\partial\mathrm{ {\varphi}}}=-(\mathrm{Rp})^{\wedge} ∂φ∂(Rp)=−(Rp)∧
注:扰动模型相比于直接对李代数求导,省去了雅可比 J l \mathrm{J}_l Jl的计算。因此,扰动模型在实际中更为实用。
3.SE(3)对应的李代数求导
扰动模型(左乘扰动ΔT(李代数为 δ ξ {\delta\xi} δξ)):
∂ ( R p ) ∂ δ ξ = [ I − ( R p + t ) ∧ 0 T 0 T ] = ( T P ) ⊙ \left.\frac{\partial(\mathrm{Rp})}{\partial\delta\xi}=\left[\begin{array}{cc}\mathrm{I}&-(\mathrm{Rp}+\mathrm{t})^\wedge\\0^\mathrm{T}&0^\mathrm{T}\end{array}\right.\right]=(\mathrm{TP})^\odot ∂δξ∂(Rp)=[I0T−(Rp+t)∧0T]=(TP)⊙