在SLAM问题中我们经常要进行位姿的优化,优化中最重要的过程就是对方程进行求导,而在矩阵层面上去进行求导或者其他的数学处理是什么麻烦的,所以一般我们在李代数上进行这些优化操作,而且李代数上的优化是一种无约束的优化,十分的简洁方便相比使用李代数来说。
什么是李群和李代数
基础知识:
-
三维旋转矩阵构成了特殊正交群
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 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } SE_{(3)}= \{ T= \begin{bmatrix} R&t\\ 0^T&1\\ \end{bmatrix} \in \mathbb{R}^{4\times4}| R\in SO_{(3)},t \in \mathbb{R}^3 \} SE(3)={ T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3} -
什么是群?
- 群是一个集合加上一种运算的代数结构
- 记集合为A,运算为. ,那么当运算满足以下性质时,称(A,.)成群:
-
封闭性:
∀ a 1 , a 2 ∈ A a 1 ⋅ a 2 ∈ A \forall a_1,a_2 \in A\\ a_1\cdot a_2 \in A ∀a1,a2∈Aa1⋅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\\ (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 , ∀ a ∈ A a 0 ⋅ a = a ⋅ a 0 = a \exists a_0 \in A, \forall a \in A\\ a_0 \cdot a=a \cdot a_0=a ∃a0∈A,∀a∈Aa0⋅a=a⋅a0=a -
逆:
∀ a 0 ∈ A , ∃ a − 1 ∈ A a ⋅ a − 1 = a 0 \forall a_0 \in A,\exists a^{-1} \in A\\ a \cdot a^{-1}=a_0 ∀a0∈A,∃a−1∈Aa⋅a−1=a0
-
-
可以验证:
- 旋转矩阵集合和矩阵乘法成群
- 变换矩阵集合和矩阵乘法成群
- 因此称他们为旋转矩阵群和变换矩阵群
李群和李代数的导出
-
什么是李群(Lie Group)
- 具有连续(光滑)性质的群。
- 直观上看,一个刚体能够连续的在空间中运动,故 S O ( 3 ) SO_{(3)} SO(3)和 S E ( 3 ) SE_{(3)} SE(3)都是李群。
- 但是, S O ( 3 ) SO_{(3)} SO(3)和 S E ( 3 ) SE_{(3)} SE(3)只有定义良好的乘法,没有加法,所以难以进行取极限、求导等操作。
-
什么是李代数?
- 与李群对应的一种结构,位于向量空间
- 通常记作小写的 s o ( 3 ) so_{(3)} so(3)和 s e ( 3 ) se_{(3)} se(3)
- 事实上是李群单位元处的正切空间。
-
李代数的引出:
任意旋转矩阵R满足:
R R T = I RR^T=I RRT=I
考虑R随时间的变化,有:
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 \dot{R}(t) R(t)^T+R(t)\dot{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 \dot{R}(t) R(t)^T=- \begin{pmatrix} \dot{R}(t) R(t)^T \end{pmatrix}^T R˙(t)R(t)T=−(R˙(t)R(t)T)T
可以看出上式是一个反对称矩阵,记为(反对称符号):
R ˙ ( t ) R ( t ) T = ϕ ( t ) Λ \dot{R}(t) R(t)^T = \phi(t)^{\Lambda} R˙(t)R(t)T=ϕ(t)Λ
两侧右乘R(t)
R ˙ ( t ) = ϕ ( t ) Λ R ( t ) \dot{R}(t)=\phi(t)^{\Lambda}R(t) R˙(t)=ϕ(t)ΛR(t)
可以看到,对R求导之后,左侧多出一个 ϕ ( t ) Λ \phi(t)^{\Lambda} ϕ(t)Λ
下面我们考虑简单的情况(泰勒展开):
t 0 = 0 , R ( 0 ) = I R ( t ) ≈ R ( t 0 ) + R ˙ ( t 0 ) ( t − t 0 ) = R ( 0 ) + ϕ ( t 0 ) Λ R ( t 0 ) ( t − 0 ) = I + ϕ ( t 0 ) Λ ( t ) t_0=0,R(0)=I\\ R(t)\approx R(t_0)+\dot{R}(t_0)(t-t_0)\\=R(0)+ \phi(t_0)^{\Lambda}R(t_0)(t-0)\\=I+\phi(t_0)^{\Lambda}(t) t0=0,R(0)=IR(t)≈R(t0)+R˙(t0)(t−t0)=R(0)+ϕ(t0)ΛR(t0)(t−0)=I+ϕ(t0)Λ