Visual SLAM 筆記——李群和李代數詳解
李群和李代數
問題的引入
當我們估計出相機姿態 [ R , t ] [R, t] [R,t]了以後,估計的結果和實際的相機姿態肯定會有一些不一致性,因而我們需要對估計出來的結果進行優化。優化方法一般都採用迭代優化的方法,每次迭代都更新一個位姿的增量 Δ \Delta Δ,使得目標函式最小。這個 Δ \Delta Δ就是通過誤差函式對 T \mathbf{T} T或者 R \mathbf{R} R求微分得到的,也就是說我們需要對變換矩陣 T \mathbf{T} T以及旋轉矩陣 R \mathbf{R} R求導。
但是,旋轉矩陣並沒有良好定義的加法,即 R 1 R_1 R1和 R 2 R_2 R2是都是旋轉矩陣,但是 R 1 + R 2 R_1 + R_2 R1+R2並不符合旋轉矩陣的定義:旋轉矩陣應該滿足 R R T = I RR^T = I RRT=I,且 d e t ( R ) = 1 det(R) = 1 det(R)=1,即行列式的值為1的正交矩陣,因此上邊的結論是顯而易見的。
所以,在實際操作中,我們無法通過如下的微調滿足我們對相機觀測模型的優化:
[ R , t ] ⟶ Δ R , Δ t [ R ′ , t ′ ] t ′ = t + Δ t R ′ = R + Δ R [R, t] \stackrel{\Delta R, \Delta t}{\longrightarrow} [R', t'] \\ t' = t + \Delta t \\ R' = R + \Delta R [R,t]⟶ΔR,Δt[R′,t′]t′=t+ΔtR′=R+ΔR
因而也會影響到觀測模型(關於旋轉矩陣的函式)對 R \mathbf{R} R的求導,因為通常來說我們的導數定義為:
U ( R ) = d U d R = lim Δ R → 0 U ( R + Δ R ) − U ( R ) Δ R U(R) = \frac{dU}{dR} = \lim\limits_{\Delta R \to 0}\frac{U(R + \Delta R) - U(R)}{\Delta R} U(R)=dRdU=ΔR→0limΔRU(R+ΔR)−U(R)
沒有良好定義的加法——沒有傳統意義上的導數定義。
因此,李群和李代數的作用就是間接對
R
\mathbf{R}
R進行求導。
預備知識
矩陣指數
首先要引入矩陣指數的概念(Matrix Exponential)。矩陣指數可以由線性微分方程的解的形式匯出,比如有一階線性微分方程:
x ⋅ = a x ( t ) \stackrel{·}{x} = ax(t) x⋅=ax(t)
其中, x ( t ) ∈ R x(t) \in \mathbb{R} x(t)∈R, a ∈ R a \in \mathbb{R} a∈R,並且初始分佈為 x ( 0 ) = x 0 x(0) = x_0 x(0)=x0,那麼解為:
x ( t ) = e a t x 0 x(t) = e^{at}x_0 x(t)=eatx0
其中指數函式可以展開為無窮級數:
e a t = 1 + a t + ( a t ) 2 2 ! + ( a t ) 3 3 ! + ⋅ ⋅ ⋅ e^{at} = 1 + at + \frac{(at)^2}{2!} + \frac{(at)^3}{3!} + ··· eat=1+at+2!(at)2+3!(at)3+⋅⋅⋅
同理,如果我們對三維向量由一階線性微分方程:
x ⋅ ( t ) = A x ( t ) \stackrel{·}{x}(t) = Ax(t) x⋅(t)=Ax(t)
其中 x ( t ) ∈ R 3 x(t) \in \mathbb{R}^3 x(t)∈R3, A ∈ R 3 × 3 A \in \mathbb{R}^{3 \times 3} A∈R3×3,且初始條件為 x ( 0 ) = x 0 x(0) = x_0 x(0)=x0,那麼解為:
x ( t ) = e A t x 0 \\ x(t) = e^{At}x_0 x(t)=eAtx0
其中矩陣指數函式可以展開為無窮級數的形式:
e A t = I + A t + ( A t ) 2 2 ! + ( A t ) 3 3 ! + ⋅ ⋅ ⋅ \\ e^{At} = I + At + \frac{(At)^2}{2!} + \frac{(At)^3}{3!} + ··· eAt=I+At+2!(At)2+3!(At)3+⋅⋅⋅
矩陣指數與矩陣旋轉的關係
如上圖,三維向量 p ( 0 ) p(0) p(0)繞著單位旋轉軸 ω ^ \hat{\omega} ω^ ( ω ^ ∈ R 3 \hat{\omega} \in \mathbb{R}^3 ω^∈R3, ∣ ∣ ω ^ ∣ ∣ = 1 \vert\vert \hat\omega \vert\vert = 1 ∣∣ω^∣∣=1)旋轉 θ \theta θ角度,得到三維向量 p ( θ ) p(\theta) p(θ)。該旋轉運動亦可以視作是三維向量 p ( 0 ) p(0) p(0)以 1 r a d / s 1rad/s 1rad/s的角速度繞著單位旋轉軸 ω ^ \hat{\omega} ω^從時間 t = 0 t = 0 t=0 運動到時間 t = θ t = \theta t=θ得到三維向量 p ( θ ) p(\theta) p(θ)。
如果用 p ( t ) p(t) p(t)來表示旋轉路徑上向量端點處的位置,用 p ⋅ ( t ) \stackrel{·}{p}(t) p⋅(t)表示該點的瞬時速度值,則有:
p ⋅ = ω ^ × p \stackrel{·}{p} = \hat{\omega} \times p p⋅=ω^×p
而向量叉乘可以寫為左端向量對應的反對稱矩陣與右端向量的乘積形式:
p ⋅ = [ ω ^ ] p \stackrel{·}{p} = [\hat{\omega}]p p⋅=[ω^]p
其中,定義 [ ⋅ ] [·] [⋅]為反對稱矩陣運算元,假如 ω ^ = { ω 1 ω 2 ω 3 } \hat{\omega} = \begin{Bmatrix} \omega_1 \\ \omega_2 \\ \omega_3 \end{Bmatrix} ω^=⎩⎨⎧ω1ω2ω3⎭⎬⎫,那麼有:
[ ω ] = [ 0 − ω 3 ω 2 ω 3 0 − ω 1 − ω 2 ω 1 0 ] [\omega] = \begin{bmatrix} 0 & -\omega_{3} & \omega_{2} \\ \omega_{3} & 0 & -\omega_{1} \\ -\omega_{2} & \omega_{1} & 0 \end{bmatrix} [ω]=⎣⎡0ω3−ω2−ω30ω1ω2−ω10⎦⎤
那麼上式就有如下解:
p ( t ) = e [ ω ^ ] t p ( 0 ) p(t) = e^{[\hat\omega]t}p(0) p(t)=e[ω^]tp(0)
因為角速度為 1 r a d / s 1rad/s 1rad/s,所以這裡角度 θ \theta θ和時間 t t t是可以互換的:
p ( t ) = e [ ω ^ ] θ p ( 0 ) p(t) = e^{[\hat\omega]\theta}p(0) p(t)=e[ω^]θp(0)
由於反對稱矩陣有滿足 [ ω ^ ] 3 = − [ ω ^ ] {[\hat\omega]}^3 = -[\hat\omega] [ω^]3=−[ω^],將矩陣指數函式展開有:
e [ ω ^ ] θ = I + [ ω ^ ] θ + [ ω ^ ] 2 θ 2 2 ! + [ ω ^ ] 3 θ 3 3 ! + ⋅ ⋅ ⋅ = I + ( θ − θ 3 3 ! + θ 5 5 ! − ⋅ ⋅ ⋅ ) [ ω ^ ] + ( θ 2 2 ! − θ 4 4 ! + θ 6 6 ! − ⋅ ⋅ ⋅ ) [ ω ^ ] 2 = I + sin θ [ ω ^ ] + ( a − cos θ ) [ ω ^ ] 2 e^{[\hat\omega]\theta} = I + [\hat\omega]\theta + [\hat\omega]^2\frac{\theta ^ 2}{2!} + [\hat\omega]^3\frac{\theta ^ 3}{3!} + ··· \\ = I + (\theta - \frac{\theta ^ 3}{3!} + \frac{\theta ^ 5}{5!} - ···)[\hat\omega] + (\frac{\theta ^ 2}{2!} - \frac{\theta ^ 4}{4!} + \frac{\theta ^ 6}{6!}-···)[\hat\omega] ^ 2 \\ = I + \sin{\theta}[\hat\omega] + (a-\cos{\theta})[\hat\omega] ^ 2 e[ω^]θ=I+[ω^]θ+[ω^]22!θ2+[ω^]33!θ3+⋅⋅⋅=I+(θ−3!θ3+5!θ5−⋅⋅⋅)[ω^]+(2!θ2−4!θ4+6!θ6−⋅⋅⋅)[ω^]2=I+sinθ[ω^]+(a−cosθ)[ω^]2
因此,三維旋轉矩陣 R R R就可以用矩陣指數 e [ ω ^ ] θ e^{[\hat{\omega}]\theta} e[ω^]θ的形式來表示。
李群和李代數
群
群是一種集合加上一種代數運算。這個集合和運算應該滿足“封結么逆”四個性質,把集合記為 A \mathbf{A} A ,運算記為 ⋅ \cdot ⋅, 群就可以記為 G = ( A , ⋅ ) \mathbf{G}=(\mathbf{A},\cdot) G=(A,⋅)。
- 封閉性: ∀ a 1 , a 2 ∈ A , a 1 ⋅ a 2 ∈ A \forall a_1,a_2 \in \mathbf{A},a_1 \cdot a_2 \in \mathbf{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 \mathbf{A}, (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 \exists a_0 \in \mathbf{A}, s.t. \forall a \in \mathbf{A}, a_0 \cdot a = a \cdot a_0 ∃a0∈A,s.t.∀a∈A,a0⋅a=a⋅a0
- 逆元: ∀ a ∈ A , ∃ a − 1 ∈ A , s . t . a ⋅ a − 1 = a 0 \forall a \in \mathbf{A},\exists a^{-1} \in A, \quad s.t. \space a \cdot a^{-1}=a_0 ∀a∈A,∃a−1∈A,s.t. a⋅a−1=a0
可以驗證,三維旋轉矩陣對矩陣乘法構成了特殊正交群 S O ( 3 ) SO(3) SO(3)——直觀意義上接連兩次旋轉動作認為旋轉。
S O ( 3 ) = { R ∈ R 3 × 3 ∣ R R T = I , d e t ( R ) = 1 } SO(3) = \{R \in \mathbb{R}^{3 \times 3} | RR^T = I, det(R) = 1\} SO(3)={R∈R3×3∣RRT=I,det(R)=1}
變換矩陣構成了特殊歐式群 S E ( 3 ) SE(3) SE(3),它也對乘法封閉。
S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 × 3 } SE(3) = \{ T = \begin{bmatrix} R & t \\ {0^T} & 1 \\ \end{bmatrix} \in \mathbb{R}^{4\times 4} | R \in SO(3), t \in \mathbb{R}^{3\times 3}\} SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3×3}
但是二者對加法都不封閉,即兩個變換矩陣相加後並不是旋轉矩陣。
李群
李群(Lie group)是具有群結構的光滑微分流形,其群作用與微分結構相容,從抽象上來說,李群就是具有光滑或連續性質的群。對應到我們的問題上,由於三維機器人在空間中移動必然是連續地運動,不可能發生“瞬移”的情形,因而 S O ( 3 ) SO(3) SO(3)和 S E ( 3 ) SE(3) SE(3)都是李群。
下面由旋轉矩陣 R R R引出李代數。因為R是隨時間連續變化的——相機可看成是連續運動,我們將相機姿態看作是時間 t t t的函式,那麼自然就有 R ( t ) R ( t ) T = I R(t)R(t)^T = I R(t)R(t)T=I成立。上式的左右兩側同時對t求導,我們可得
R ⋅ ( t ) R ( t ) T + R ( t ) R ⋅ ( t ) T = 0 \stackrel{·}{R}(t)R(t)^T + R(t)\stackrel{·}{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 \stackrel{·}{R}(t)R(t)^T = -{( R(t)\stackrel{·}{R}(t)^T )}^T R⋅(t)R(t)T=−(R(t)R⋅(t)T)T
如果我們把等式左邊看成一個整體,那麼我們會發現上式左邊是一個反對陳矩陣。
對於任意一個反對稱矩陣,我們都由一個向量做反對稱變換得到,比如:
a ∧ = A = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] , A ∨ = a = { a 1 , a 2 , a 3 } . a^{\wedge} = A = \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \\ \end{bmatrix}, \quad A^{\vee} = a = \{a_1, a_2, a_3\}. a∧=A=⎣⎡0a3−a2−a30a1a2−a10⎦⎤,A∨=a={a1,a2,a3}.
如果將上式左邊記為 ϕ ( t ) ∧ = R ⋅ ( t ) R ( t ) T ∈ R 3 \phi(t)^{\wedge} = \stackrel{·}{R}(t)R(t)^T \in \mathbb{R}^3 ϕ(t)∧=R⋅(t)R(t)T∈R3,我們對這個式子兩邊右乘 R ( t ) R(t) R(t)並注意到 R ( t ) R(t) R(t)的正交矩陣性質,就可以得到:
R ⋅ ( t ) = ϕ ∧ ( t ) R ( t ) \stackrel{·}{R}(t) = \phi^{\wedge}(t)R(t) R⋅(t)=ϕ∧(t)R(t)
就好像對 R ( t ) R(t) R(t)求導後其實是左乘了一個 ϕ ( t ) \phi(t) ϕ(t),而上邊這個等式就類似一個一階微分方程, ϕ \phi ϕ反應了一節導數的性質,它位於正切空間上(tangent space)。我們認為初始值 R ( 0 ) = I R(0) = I R(0)=I,那麼就可以解得:
R ( t ) = e ϕ ∧ t R(t) = e^{\phi ^ \wedge t} R(t)=eϕ∧t
由於這個式子只在 t t t附近有效。由此可知,對任意時刻 t t t,旋轉矩陣 R R R和一個向量 ϕ \phi ϕ對應,二者滿足矩陣指數關係,這個 ϕ \phi ϕ就是 S O ( 3 ) SO(3) SO(3)上的李代數 s o ( 3 ) so(3) so(3)。因而,為了求 R R R,我們只需要求出 e x p ( ϕ t ) exp(\phi t) exp(ϕt)即可,這個關係即為指數對映。現在的問題是 s o ( 3 ) so(3) so(3)是如何定義的,指數對映又如何求出呢?
李代數
每個李群都有與之對應的李代數,李代數描述了李群的區域性性質。在這個區域性正切空間裡,一些我們可以找到一些比較好的性質,比如良好定義的加法,從而我們有了良好定義的導數——將李群的導數轉化為李代數上的導數,求出來後再轉化回去,這就是我們處理李群導數相關內容的基本思路,同時也是研究的重心。
李代數由一個集合 V V V, 一個數域$F 和 一 個 二 元 運 算 和一個二元運算 和一個二元運算[\cdot]$ 組成。如果它們滿足以下幾條性質,則稱 ( V , F , [ ⋅ ] ) (V, F, [\cdot]) (V,F,[⋅]) 為一個李代數,記作 g g g,其中二元運算 [ ⋅ ] [\cdot] [⋅]成為離括號,表達了兩個元素的差異。
- 封閉性: ∀ X , Y ∈ V , [ X , Y ] ∈ V \forall \mathbf{X}, \mathbf{Y} \in V,\ [\mathbf{X}, \mathbf{Y}] \in V ∀X,Y∈V, [X,Y]∈V
- 雙線性: ∀ X , Y , Z ∈ V , a , b ∈ F \forall \mathbf{X}, \mathbf{Y}, \mathbf{Z} \in V,\ a, b \in F ∀X,Y,Z∈V, a,b∈F , 有 [ a X + b Y , Z ] = a [ X , Z ] + [ Y , Z ] , [ Z , a X + b Y ] = a [ Z , X ] + b [ Z , Y ] [a\mathbf{X} +b\mathbf{Y},\ \mathbf{Z}]=a[\mathbf{X}, \mathbf{Z}] + [\mathbf{Y}, \mathbf{Z}],\ [\mathbf{Z},a\mathbf{X} +b\mathbf{Y}]=a[\mathbf{Z},\mathbf{X}] +b[\mathbf{Z},\mathbf{Y}] [aX+bY, Z]=a[X,Z]+[Y,Z], [Z,aX+bY]=a[Z,X]+b[Z,Y]
- 自反性: ∀ X ∈ V , [ X , X ] = 0 \forall \mathbf{X} \in V,\ [\mathbf{X}, \mathbf{X}]=\mathbf{0} ∀X∈V, [X,X]=0
- 雅可比等價: ∀ X , Y , Z ∈ V , [ X , [ Y , Z ] ] + [ Z , [ X , Y ] ] + [ Y , [ Z , X ] ] = 0 \forall \mathbf{X},\mathbf{Y},\mathbf{Z} \in V,\ [\mathbf{X},[\mathbf{Y},\mathbf{Z}]] + [\mathbf{Z},[\mathbf{X},\mathbf{Y}]] +[\mathbf{Y},[\mathbf{Z},\mathbf{X}]]=\mathbf{0} ∀X,Y,Z∈V, [X,[Y,Z]]+[Z,[X,Y]]+[Y,[Z,X]]=0
舉例三位向量 R 3 \mathbb{R}^3 R3上定義的叉乘就是一個離括號,其中 g = ( R 3 , R , × ) g = (\mathbb{R}^3, \mathbb{R}, \times) g=(R3,R,×)就構成了李代數。
李代數 s o ( 3 ) so(3) so(3)
之前提到的 S O ( 3 ) SO(3) SO(3)對應的向量 ϕ \phi ϕ就是一種李代數,他定義在 R 3 \mathbb{R}^3 R3的向量上。它的反對稱矩陣記作: Φ = ϕ ∧ \mathbf{\Phi} = \phi^\wedge Φ=ϕ∧,那麼SO(3)中的向量對應的李括號為:
[ ϕ 1 , ϕ 2 ] = ( Φ 1 Φ 2 − Φ 2 Φ 1 ) ∨ [\phi_1, \phi_2] = (\mathbf{\Phi}_1\mathbf{\Phi}_2 - \mathbf{\Phi}_2\mathbf{\Phi}_1)^{\vee} [ϕ1,ϕ2]=(Φ1Φ2−Φ2Φ1)∨
經過驗證可以得到上邊的式子等價於兩向量作外積。
[ ϕ 1 , ϕ 2 ] = ϕ 1 × ϕ 2 [\phi_1, \phi_2] = \phi_1 \times \phi_2 [ϕ1,ϕ2]=ϕ1×ϕ2
李代數 s e ( 3 ) se(3) se(3)
與 s o ( 3 ) so(3) so(3)不同的是, s e ( 3 ) 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 } se(3)=\begin{Bmatrix} \mathbf{\xi}=\begin{bmatrix} \mathbf{\rho} \\ \mathbf{\phi} \end{bmatrix} \in R^6,\mathbf{\rho} \in R^3, \mathbf{\phi} \in so(3), \mathbf{\xi}^\wedge=\begin{bmatrix}\phi^\wedge & \mathbf{\rho} \\ \mathbf{0}^T & 0 \end{bmatrix} \in R^{4 \times 4} \end{Bmatrix} se(3)={ξ=[ρϕ]∈R6,ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧0Tρ0]∈R4×4}
其中 s e ( 3 ) se(3) se(3)每個元素都稱為 ξ \xi ξ,它是一個六維向量:前三維為平移,記作 ρ \rho ρ,後三位即為三維旋轉向量 ϕ \phi ϕ,實質上就是 s o ( 3 ) so(3) so(3)中的元素。另外在 s e ( 3 ) se(3) se(3) 中, ∧ \wedge ∧ 符號的含義被擴充了:這裡它將一個六維向量轉換為四維矩陣,但這裡不再表示反對稱矩陣,其實這裡 ξ \xi ξ即為變換矩陣的轉置。同樣,李代數 s e ( 3 ) se(3) se(3)的李括號被定義為:
[ ξ 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∧)∨
上式經驗證後發現,李括號將兩個變換矩陣變成了了一個無旋的變換矩陣:
[ ξ 1 , ξ 2 ] = { Φ 1 ∧ ρ 2 − Φ 2 ∧ ρ 1 0 3 × 3 } [\xi_1, \xi_2] = \begin{Bmatrix} \Phi_1^{\wedge}\rho_2 - \Phi_2^{\wedge}\rho_1 \\ \mathbf{0}_{3\times 3} \end{Bmatrix} [ξ1,ξ2]={Φ1∧ρ2−Φ2∧ρ103×3}
即旋轉部分被抹去,只剩下平移部分,而平移部分是由原來兩個元素中的旋轉和平移部分組合得到的。
指數對映和對數對映
李群到李代數之間是一個指數對映(反之是對數對映),通過藉助這個指數對映我們可以將大量在李群上不好解決的問題轉嫁到李代數上解決,之後再對映回去間接得到李群上的答案。
S O ( 3 ) SO(3) SO(3)上的指數對映
我們利用關係李群和李代數之間的關係:
R ⋅ ( t ) = ϕ ∧ ( t ) R ( t ) \stackrel{·}{R}(t) = \phi^{\wedge}(t)R(t) R⋅(t)=ϕ∧(t)R(t)
可知求出起初指數對映,就能得到李群上的導數。求指數對映我們需要用到泰勒展開式。任意矩陣的指數對映都可以寫成一個泰勒展開式,這個展開式只有在收斂的情況下才有解,結果仍然是一個矩陣。所以對於 s o ( 3 ) so(3) so(3)中的元素 ϕ \phi ϕ,其指數對映可以寫成
e x p ( ϕ ∧ ) = ∑ n = 0 ∞ 1 n ! ( ϕ ∧ ) n exp(\phi^{\wedge}) = \sum\limits_{n=0}^\infty\frac{1}{n!}(\phi^\wedge)^n exp(ϕ∧)=n=0∑∞n!1(ϕ∧)n
我們定義 ϕ = θ a \phi = \theta \mathbf{a} ϕ=θa,其中 θ \theta θ和 a a a分別是 ϕ \phi ϕ的模長和單位向量。我們可以驗證:
a ∧ a ∧ = a a T − I a ∧ a ∧ a ∧ = − a ∧ \mathbf{a}^\wedge \mathbf{a}^\wedge=\mathbf{a}\mathbf{a}^T-\mathbf{I} \\ \mathbf{a}^\wedge \mathbf{a}^\wedge \mathbf{a}^\wedge=-\mathbf{a}^\wedge a∧a∧=aaT−Ia∧a∧a∧=−a∧
以上兩個式子提供了我們對泰勒展開式中高次項化簡的方法。 那麼我們對上邊泰勒展開式化簡可以得到:
exp ϕ ∧ = exp ( θ a ) = ∑ n = 0 ∞ 1 n ! ( θ a ∧ ) n = cos θ I + ( 1 − cos θ ) a a T + sin θ a T \exp{\phi^\wedge}=\exp(\theta \mathbf{a})=\sum\limits_{n=0}^\infty \frac{1}{n!}(\theta \mathbf{a}^\wedge)^n \\ =\cos\theta\mathbf{I} + (1-\cos\theta)\mathbf{a}\mathbf{a}^T + \sin\theta\mathbf{a}^T expϕ∧=exp(θa)=n=0∑∞n!1(θa∧)n=cosθI+(1−cosθ)aaT+sinθaT
這和之前的羅德里格斯公式有著相同的形式,標明 s o ( 3 ) so(3) so(3)實際上就是由旋轉向量組成的空間,而指數對映其實就是羅德里格斯公式。那麼與之對應的對數對映,給定旋轉矩陣,我們就可以求李代數,將 S O ( 3 ) SO(3) SO(3)對映到 s o ( 3 ) so(3) so(3)上:
ϕ = ln ( R ) ∨ = ( ∑ n = 0 ∞ ( − 1 ) n n + 1 ( R − I ) n + 1 ) ∨ \phi=\ln(R)^\vee=(\sum\limits_{n=0}^\infty\frac{(-1)^n}{n+1}(\mathbf{R}-\mathbf{I})^{n+1})^\vee ϕ=ln(R)∨=(n=0∑∞n+1(−1)n(R−I)n+1)∨
但是實際上沒必要這樣求,因為旋轉向量已經介紹了矩陣到向量的轉換關係:
θ = arccos t r ( R ) − 1 2 R n = n \theta = \arccos{\frac{tr(\mathbf{R}) - 1}{2}} \\ \mathbf{R}n = n θ=arccos2tr(R)−1Rn=n
這裡需要注意的是,指數對映是一個滿射,即每個 S O ( 3 ) SO(3) SO(3)中的元素都可以找到一個 s o ( 3 ) so(3) so(3)裡的元素與之對應;但是泛指不成立,因為多旋轉一圈的旋轉向量對應的李代數是相同的。但是如果把旋轉角固定在 [ 0 , 2 π ] [0, 2\pi] [0,2π]之間,那麼李群和李代數的元素就是一一對應的。
S E ( 3 ) SE(3) SE(3)上的指數對映
下面是推導結果:
exp ( ξ ∧ ) = [ ∑ n = 0 ∞ 1 n ! ( ϕ ∧ ) n ∑ n = 0 ∞ 1 ( n + 1 ) ! ( ϕ ∧ ) n ρ 0 T 1 ] = [ R J ρ 0 T 1 ] = T \exp(\xi^\wedge)=\begin{bmatrix} \sum\limits_{n=0}^\infty\frac{1}{n!}(\phi^\wedge)^n & \sum\limits_{n=0}^\infty\frac{1}{(n+1)!}(\phi^\wedge)^n\rho \\ \mathbf{0}^T & 1 \\ \end{bmatrix}= \begin{bmatrix} \mathbf{R} & \mathbf{J}\rho \\ \mathbf{0}^T & 1 \\ \end{bmatrix}=\mathbf{T} exp(ξ∧)=⎣⎡n=0∑∞n!1(ϕ∧)n0Tn=0∑∞(n+1)!1(ϕ∧)nρ1⎦⎤=[R0TJρ1]=T
其中 e x p ( ξ ∧ ) exp(\xi^{\wedge}) exp(ξ∧)的左上角是SO(3)的元素,即旋轉部分。矩陣 J \mathbf{J} J則為:
J = sin θ θ I + ( 1 − sin θ θ ) a a T + 1 − cos θ θ a ∧ \mathbf{J} = \frac{\sin\theta}{\theta}\mathbf{I}+(1-\frac{\sin\theta}{\theta})\mathbf{a}\mathbf{a}^T+\frac{1-\cos\theta}{\theta}\mathbf{a}^\wedge J=θsinθI+(1−θsinθ)aaT+θ1−cosθa∧
這個公式與落地裡格斯公式類似, ξ \xi ξ中的平一部分經過 ρ \rho ρ指數變換後,發生了一次以 J \mathbf{J} J為係數的線性變換。
相反的, S E ( 3 ) SE(3) SE(3)到 s e ( 3 ) se(3) se(3)也有相應的對數對映,但是我們一般不用,我們一般利用左上角的旋轉矩陣計算出旋轉向量,再用右上角的平移向量得到 ρ \rho ρ。
李代數求導與擾動模型
李代數與李群的計算對應關係
我們由於李群沒有加法討論出來了李代數,我們想要利用李代數的加法定義李群的導數,再利用指數對映和對數對映完成變換關係。但是還有一個基本問題,就是在李代數上做加法,是否就等價於在李群上做乘法呢?
e x p ( ϕ 1 ∧ ) e x p ( ϕ 2 ∧ ) = e x p ( ( ϕ 1 + ϕ 2 ) ∧ ) exp(\phi_1^{\wedge})exp(\phi_2^{\wedge}) = exp({(\phi_1 + \phi_2)}^{\wedge}) exp(ϕ1∧)exp(ϕ2∧)=exp((ϕ1+ϕ2)∧)
上式在標量的情況下顯然是成立的,但是現在指數上式矩陣,結果很遺憾是不成立的。我們由BCH(Baker-Campbell-Hausdorff)公式給出:
ln ( exp ( A ) exp ( B ) ) = A + B + 1 12 [ A , B ] + 1 12 [ A , [ A , B ] ] − 1 12 [ B , [ A , B ] ] + … \ln(\exp(\mathbf{A})\exp(\mathbf{B}))=\mathbf{A}+\mathbf{B}+\frac{1}{12}[\mathbf{A},\mathbf{B}]+\frac{1}{12}[\mathbf{A},[\mathbf{A},\mathbf{B}]]-\frac{1}{12}[\mathbf{B},[\mathbf{A},\mathbf{B}]]+\ldots ln(exp(A)exp(B))=A+B+121[A,B]+121[A,[A,B]]−121[B,[A,B]]+…
其中 [ ⋅ ] [\cdot] [⋅]為李括號,可以看到,兩個矩陣指數的乘積結果的指數項,是兩個矩陣之和再加上一些由李括號組成的餘項。
我們在求導數的時候,其中一項肯定是小量,可以看成相機連續兩幀之間的位姿變化,利用這個小量,我們就可以對上邊的式子進行優化:
ln ( exp ( ϕ 1 ∧ ) exp ( ϕ 2 ∧ ) ) ∨ ≈ { J l ( ϕ 2 ) − 1 ϕ 1 + ϕ 2 , 當 ϕ 1 為 小 量 J r ( ϕ 1 ) − 1 ϕ 2 + ϕ 1 , 當 ϕ 2 為 小 量 \ln(\exp(\phi^\wedge_1)\exp(\phi^\wedge_2))^\vee \approx \begin{cases} \mathbf{J}_l(\phi_2)^{-1}\phi_1 + \phi2,\ 當\phi_1 為小量\\ \mathbf{J}_r(\phi_1)^{-1}\phi_2 + \phi_1,\ 當\phi_2 為小量\\ \end{cases} ln(exp(ϕ1∧)exp(ϕ2∧))∨≈{Jl(ϕ2)−1ϕ1+ϕ2, 當ϕ1為小量Jr(ϕ1)−1ϕ2+ϕ1, 當ϕ2為小量
上邊的優化結果分別對應著 ϕ 1 \phi_1 ϕ1和 ϕ 2 \phi_2 ϕ2為小量時的近似狀態,我們分別稱為左乘模型和右乘模型。之所以要區分做成還是右乘模型,是因為其中的 J l \mathbf{J}_l Jl和 J r \mathbf{J}_r Jr是不一樣的。對於左乘BCH近似模型,雅可比矩陣 J l \mathbf{J}_l Jl就是:
J l = J = sin θ θ I + ( 1 − sin θ θ ) a a T + 1 − cos θ θ a ∧ \mathbf{J}_l = \mathbf{J} = \frac{\sin\theta}{\theta}\mathbf{I}+(1-\frac{\sin\theta}{\theta})\mathbf{a}\mathbf{a}^T+\frac{1-\cos\theta}{\theta}\mathbf{a}^\wedge Jl=J=θsinθI+(1−θsinθ)aaT+θ1−cosθa∧
它的逆為:
J l − 1 = θ 2 cot θ 2 I + ( 1 − θ 2 cot θ 2 ) a a T − θ 2 a ∧ \mathbf{J}_l^{-1}=\frac{\theta}{2}\cot\frac{\theta}{2}\mathbf{I}+(1-\frac{\theta}{2}\cot\frac{\theta}{2})\mathbf{a}\mathbf{a}^T-\frac{\theta}{2}\mathbf{a}^\wedge Jl−1=2θcot2θI+(1−2θcot2θ)aaT−2θa∧
而對於右乘模型,右乘雅可比矩陣就是將左乘雅可比矩陣的自變數取負號。
J r ( ϕ ) = J l ( ϕ ) \mathbf{J}_r(\phi) = \mathbf{J}_l(\phi) Jr(ϕ)=Jl(ϕ)
現在來小結一下,假如有一個旋轉矩陣 R \mathbf{R} R,對應的李代數為 ϕ \phi ϕ,現在對它有一個微小的擾動,記作 Δ R \mathbf{\Delta R} ΔR,對應的李代數為 Δ ϕ \Delta \phi Δϕ。那麼在李群上,新的旋轉矩陣即為 δ R ⋅ R \mathbf{\delta R \cdot R} δR⋅R,而在李代數上,新的李代數為 J l − 1 Δ ϕ + ϕ \mathbf{J}_l^{-1}\Delta \phi + \phi Jl−1Δϕ+ϕ,即:
exp ( ϕ ∧ ) exp ( Δ ϕ ∧ ) = exp ( ( ϕ + J l ( ϕ ) − 1 Δ ϕ ) ∧ ) \exp(\phi^\wedge)\exp(\Delta\phi^\wedge)=\exp((\phi+\mathbf{J}_l(\phi)^{-1}\Delta\phi)^\wedge) exp(ϕ∧)exp(Δϕ∧)=exp((ϕ+Jl(ϕ)−1Δϕ)∧)
反之,如果我們在李代數上做加法,那麼可以近似為李群上帶左/右雅可比矩陣的乘法:
e x p ( ( ϕ + Δ ϕ ) ∧ ) = e x p ( ( J l Δ ϕ ) ∧ ) e x p ( ϕ ∧ ) = e x p ( ϕ ∧ ) e x p ( ( J r Δ ϕ ) ∧ ) exp((\phi + \Delta \phi)^\wedge) = exp((\mathbf{J_l}\Delta\phi)^\wedge)exp(\phi^\wedge) = exp(\phi^\wedge)exp((\mathbf{J_r}\Delta\phi)^\wedge) exp((ϕ+Δϕ)∧)=exp((JlΔϕ)∧)exp(ϕ∧)=exp(ϕ∧)exp((JrΔϕ)∧)
至此,我們可以討論一下怎麼求沒有良好定義加法的李群上的導數:
- 利用李代數表示位子,然後根據李代數的加法對李代數進行求導。(導數模型)
- 對李群來左乘或右乘微小擾動,並對這個擾動的李代數求導。(擾動模型)
求導模型
假設空間點 p \mathbf{p} p進行了一次旋轉 R \mathbf{R} R,得到了新的點 R p \mathbf{Rp} Rp,要計算旋轉後的點相對於旋轉的導數,可以不嚴謹得寫為:
∂ ( R p ) ∂ R \frac{\partial(\mathbf{R}\mathbf{p})}{\partial\mathbf{R}} ∂R∂(Rp)
設 R \mathbf{R} R對應的李代數為 ϕ \phi ϕ,就可以寫成:
∂ ( R p ) ∂ R = ∂ ( exp ( ϕ ∧ ) p ) ∂ ϕ \frac{\partial(\mathbf{R}\mathbf{p})}{\partial\mathbf{R}} = \frac{\partial(\exp(\phi^\wedge)\mathbf{p})}{\partial\phi} ∂R∂(Rp)=∂ϕ∂(exp(ϕ∧)p)
按照導數的定義並利用一階泰勒展開以及BCH公式,就可以得到:
∂ ( exp ( ϕ ∧ ) p ) ∂ ϕ = lim δ ϕ → 0 exp ( ( ϕ + δ ϕ ) ∧ ) p − exp ( ϕ ∧ ) p δ ϕ = − ( R p ) ∧ J l \frac{\partial(\exp(\phi^\wedge)\mathbf{p})}{\partial\phi}=\lim_{\delta\phi\to0}\frac{\exp((\phi+\delta\phi)^\wedge)\mathbf{p}-\exp(\phi^\wedge)\mathbf{p}}{\delta\phi}=-(\mathbf{R}\mathbf{p})^\wedge\mathbf{J}_l ∂ϕ∂(exp(ϕ∧)p)=δϕ→0limδϕexp((ϕ+δϕ)∧)p−exp(ϕ∧)p=−(Rp)∧Jl
這個公式時直接對旋轉矩陣 R \mathbf{R} R進行求導,最後結果含有左雅可比矩陣 J l \mathbf{J_l} Jl。當然,我們自然希望避免計算雅可比矩陣,所以我們一般選用下邊的擾動模型。
擾動模型
假設某空間點 p \mathbf{p} p 經過了一次變換 T \mathbf{T} T,對應的李代數為 ξ \xi ξ,得到 T p \mathbf{Tp} Tp。給 T \mathbf{T} T左乘一個微小擾動 Δ T \mathbf{\Delta T} ΔT,擾動項的李代數為 δ ξ = [ δ ρ , δ ϕ ] T \delta \xi = [\delta \rho , \delta \phi]^T δξ=[δρ,δϕ]T。則有:
∂ ( T p ) ∂ δ ξ = lim δ ξ → 0 exp ( δ ξ ∧ ) exp ( ξ ∧ ) p − exp ( ξ ∧ ) p δ ξ = [ I 3 × 3 − ( R p + t ) 3 × 3 ∧ 0 1 × 3 T 0 1 × 3 T ] = ( T p ) ⨀ \frac{\partial(\mathbf{T}\mathbf{p})}{\partial\delta\xi}=\lim_{\delta\xi\to0}\frac{\exp(\delta\xi^\wedge)\exp(\xi^\wedge)\mathbf{p}-\exp(\xi^\wedge)\mathbf{p}}{\delta\xi}= \begin{bmatrix} \mathbf{I}_{3\times3} & -(\mathbf{R}\mathbf{p} + \mathbf{t})^\wedge_{3\times3} \\ \mathbf{0}^T_{1\times3} & \mathbf{0}^T_{1\times3}\\ \end{bmatrix}=(\mathbf{T}\mathbf{p})^{\bigodot} ∂δξ∂(Tp)=δξ→0limδξexp(δξ∧)exp(ξ∧)p−exp(ξ∧)p=[I3×301×3T−(Rp+t)3×3∧01×3T]=(Tp)⨀
最後結果被定義為了運算子號 ⨀ \bigodot ⨀,把一個齊次座標下的空間點變換成一個4*6 的矩陣。
相關文章
- 視覺slam十四講CH4 ---李群與李代數求導視覺SLAM李群李代數求導
- 視覺SLAM中的數學基礎 第三篇 李群與李代數視覺SLAM李群李代數
- 視覺SLAM中的數學基礎 第四篇 李群與李代數(2)視覺SLAM李群李代數
- OA-SLAM 筆記SLAM筆記
- SLAM學習筆記(1)SLAM筆記
- Nginx變數詳解(學習筆記十九)Nginx變數筆記
- TensorFlow常量、變數和佔位符詳解(學習筆記)變數筆記
- 《代數的歷史》讀書筆記筆記
- [筆記]數位dp例題及詳解(更新中)筆記
- 《線性代數的本質》筆記10筆記
- 《線性代數的本質》筆記(09)筆記
- [論文解讀] DXSLAM: A Robust and Efficient Visual SLAM System with Deep FeaturesSLAM
- 李巨集毅機器學習-學習筆記機器學習筆記
- [心得]機器學習基礎之線性代數筆記機器學習筆記
- 高等代數筆記:克萊姆法則(Cramer)筆記
- 筆記八:URI Search 詳解筆記
- 【TCP/IP】TCP詳解筆記TCP筆記
- “花書”的佐餐,你的線性代數筆記筆記
- 《線性代數的本質》筆記(01-03)筆記
- 李巨集毅深度學習 筆記(四)深度學習筆記
- Visual Studio Code 使用筆記筆記
- ES 筆記八:URI Search 詳解筆記
- Go學習筆記-GMP詳解Go筆記
- LDAP--Jenkins詳解筆記LDAJenkins筆記
- Visual Studio 使用GIT詳解Git
- JVM學習筆記(3)---OutOfMemory詳解JVM筆記
- Swift筆記之變數講解Swift筆記變數
- Django筆記三十之log日誌記錄詳解Django筆記
- Mathematics for Machine Learning--學習筆記(線性代數篇)Mac筆記
- 線性代數學習筆記(二)+貪心學習筆記(一)(2024.10.5)筆記
- mysql學習筆記-底層原理詳解MySql筆記
- jsp應用開發詳解筆記JS筆記
- stl 和 數學slide 筆記 by JeefyIDE筆記
- 線性代數的本質課程筆記1-6講筆記
- 註解和反射學習筆記反射筆記
- 2.Visual FoxPro記憶體變數顯示和清除命令記憶體變數
- 連線池和連線數詳解
- Redis 主從配置和引數詳解Redis