提示:本笔记主要以SLAM实用为目的,故省略我认为不需要的数学推导。需要详细数学推导的读者请阅读 《视觉SLAM十四讲》第四讲
文章目录
1. 李群与李代数概念
1.1 群
群(group)是 一种集合(记作 A A A) 加上 一种运算 (记作 ⋅ \cdot ⋅ )的代数结构,群可记作 G = ( A , ⋅ ) G=(A,\cdot) G=(A,⋅)
具备以下性质,简称“封结幺逆”
我们需要接触到的群有:
- 特殊正交群 S O ( n ) \mathrm{SO(n)} SO(n):也就是所谓的旋转矩阵群,即旋转矩阵 R R R,其中 S O ( 2 ) \mathrm{SO(2)} SO(2)和 S O ( 3 ) \mathrm{SO(3)} SO(3)最为常见
- 特殊欧氏群 S E ( n ) \mathrm{SE(n)} SE(n):也就是前面提到的n维欧氏变换,即变换矩阵 T T T,如 S E ( 2 ) \mathrm{SE(2)} SE(2)和 S E ( 3 ) \mathrm{SE(3)} SE(3)
1.2 李群
李群是指具有连续(光滑)性质的群。
刚体在空间中的运动为连续的,故
S
O
(
3
)
\mathrm{SO(3)}
SO(3)与
S
E
(
3
)
\mathrm{SE(3)}
SE(3)都是李群,这两个李群对于摄像机姿态估计比较重要。
但是, S O ( 3 ) \mathrm{SO(3)} SO(3)与 S E ( 3 ) \mathrm{SE(3)} SE(3) 有着更丰富的几何性,没有角运动,所以难以计算取根函数,求导等运算。
1.3 李代数
1.3.1 李代数的引入
任意旋转矩阵 R R R满足: R R T = I RR^T=I RRT=I,因为旋转会随时间连续变化,故也可 R ( t ) R ( t ) T = I \boldsymbol{R}(t)\boldsymbol{R}(t)^\mathrm{T}=\boldsymbol{I} R(t)R(t)T=I
经过变形之后可以得到:
R
˙
(
t
)
=
ϕ
(
t
)
∧
R
(
t
)
=
[
0
−
ϕ
3
ϕ
2
ϕ
3
0
−
ϕ
1
−
ϕ
2
ϕ
1
0
]
R
(
t
)
\dot{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)
R˙(t)=ϕ(t)∧R(t)=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤R(t)
可以看到,每对旋转矩阵求一次导数,只需左乘一个 ϕ ∧ ( t ) \phi^{\wedge}(t) ϕ∧(t)矩阵即可。
设
t
0
=
0
t_0=0
t0=0, 并设此时旋转矩阵为
R
(
0
)
=
I
R(0)=I
R(0)=I 把
R
(
t
)
R(t)
R(t) 在
0
0
0 附近进行泰勒展开,保留一阶:
R
(
t
)
≈
R
(
t
0
)
+
R
˙
(
t
0
)
(
t
−
t
0
)
=
I
+
ϕ
(
t
0
)
∧
(
t
)
.
\boldsymbol{R}(t)\approx\boldsymbol{R}\left(t_0\right)+\dot{\boldsymbol{R}}\left(t_0\right)\left(t-t_0\right) =I+\phi(t_0)^{\wedge}(t).
R(t)≈R(t0)+R˙(t0)(t−t0)=I+ϕ(t0)∧(t).
则 ϕ \phi ϕ 反映了某一时刻 R R R 在局部的导数关系, 对应李群 S O ( 3 ) \mathrm{SO(3)} SO(3)的李代数 s o ( 3 ) \mathfrak{so}(3) so(3)。
在
t
0
t_0
t0附近,设
ϕ
\phi
ϕ保持为常数
ϕ
(
t
0
)
=
ϕ
0
\phi(t_0)=\phi_0
ϕ(t0)=ϕ0,将关于
R
R
R的微分方程
R
˙
(
t
)
=
ϕ
(
t
0
)
∧
R
(
t
)
=
ϕ
0
∧
R
(
t
)
\dot{\boldsymbol{R}}(t)=\boldsymbol{\phi}(t_0)^\wedge\boldsymbol{R}(t)=\boldsymbol{\phi}_0^\wedge\boldsymbol{R}(t)
R˙(t)=ϕ(t0)∧R(t)=ϕ0∧R(t)
解得:
R
(
t
)
=
exp
(
ϕ
0
∧
t
)
\boldsymbol{R}(t)=\exp\left(\boldsymbol{\phi}_0^{\wedge}t\right)
R(t)=exp(ϕ0∧t)
说明旋转矩阵可以由
exp
(
ϕ
0
∧
t
)
\exp\left(\phi_{0}^{\wedge}t\right)
exp(ϕ0∧t)计算出来。
这正是李群与李代数之间的指数/对数映射。
后文主要使用 S O ( 3 ) \mathrm{SO(3)} SO(3)加上平移矢量的方式来推导后续的运动方程、滤波器等关系。
1.3.2 李代数的定义
每个李群都有与之对应的李代数。李代数描述了李群的局部性质,准确地说,是单位元附近的正切空间。
李代数 ( V , F , [ , ] ) (\mathbb{V,F},[,]) (V,F,[,])由一个集合 V \mathbb{V} V、一个数域 F \mathbb{F} F 和一个二元运算 [ , ] [,] [,]组成,记作 g \mathfrak{g} g。
则
s
o
(
3
)
\mathfrak{so}(3)
so(3)含义为:
s
o
(
3
)
=
{
ϕ
∈
R
3
,
Φ
=
ϕ
∧
∈
R
3
×
3
}
\mathfrak{so}(3)=\left\{\boldsymbol{\phi}\in\mathbb{R}^3,\boldsymbol{\Phi}=\boldsymbol{\phi}^\wedge\in\mathbb{R}^{3\times3}\right\}
so(3)={ϕ∈R3,Φ=ϕ∧∈R3×3}
它们是一个由三维向量组成的集合,每个向量对应一个反对称矩阵,可以用于表达旋转矩阵的导数。
它与 S O ( 3 ) \mathrm{SO(3)} SO(3)的关系由指数映射给定: R = exp ( ϕ ∧ ) R=\exp(\phi^{\wedge}) R=exp(ϕ∧)
至于 s e ( 3 ) \mathfrak{se}(3) se(3)可以简单的理解为“由一个平移加上一个 S O ( 3 ) \mathrm{SO(3)} SO(3)元素构成的向量”
1.4 小结
三维旋转构成了三维旋转群
S
O
(
3
)
\mathrm{SO(3)}
SO(3),其对应的李代数为
s
o
(
3
)
\mathfrak{so}(3)
so(3);
三维变换构成了三维变换群
S
E
(
3
)
\mathrm{SE(3)}
SE(3), 对应的李代数为
s
e
(
3
)
\mathfrak{se}(3)
se(3)。
李代数元素到李群元素的映射为指数映射,其中 S O ( 3 ) \mathrm{SO(3)} SO(3)至 s o ( 3 ) \mathfrak{so}(3) so(3)的指数映射为
R = exp ( ϕ ∧ ) \boldsymbol{R}=\exp(\boldsymbol{\phi}^{\wedge}) R=exp(ϕ∧)
ϕ \phi ϕ表示李代数 s o ( 3 ) \mathfrak{so}(3) so(3)。
具体计算过程由罗德里格斯公式给出。反向的对数映射记作
ϕ
=
log
(
R
)
∨
\phi=\log(\boldsymbol{R})^{\vee}
ϕ=log(R)∨
2. S O ( 3 ) \mathrm{SO(3)} SO(3)上的BCH线性近似式
2.1 BCH公式
Baker-Campbell-Hausdorff(BCH)公式公式是一个用来在李群和李代数之间建立联系的数学工具。这个公式描述了如何将李代数中的加法操作与相应的李群上的乘法操作联系起来。
在李代数中两个元素相加,相对应李群的元素并不是简单的相乘。
李代数 X X X与 Y Y Y,加法 X + Y X+Y X+Y,李群上的元素 e X e^X eX与 e Y e^Y eY(指数映射),其乘积并不是 e X ⋅ e Y e^X \cdot e^Y eX⋅eY,因为李群为矩阵并不是标量。
BCH给出了李代数上操作加法小量与李群上乘小量之间的关系,它告诉我们当处理两个矩阵指数之积的时候,它们会产生一些由李括号组成的余项。
李括号是李代数的二元运算 [ , ] [,] [,]
具体来说,李代数 X X X与 Y Y Y相加,对应的李群(矩阵)乘积为:
Z
=
X
+
Y
+
1
2
[
X
,
Y
]
+
1
12
[
X
,
[
X
,
Y
]
]
+
1
12
[
Y
,
[
Y
,
X
]
]
+
⋯
Z=X+Y+\frac12[X,Y]+\frac1{12}[X,[X,Y]]+\frac1{12}[Y,[Y,X]]+\cdots
Z=X+Y+21[X,Y]+121[X,[X,Y]]+121[Y,[Y,X]]+⋯
[
X
,
Y
]
[X,Y]
[X,Y]即李括号。
BCH 公式的重要性在于它允许我们从李代数(一个相对简单的结构)推导出李群的行为(一个更复杂的结构)。
2.2 BCH线性近似式
BCH线性近似表达:
ln
(
exp
(
ϕ
1
∧
)
exp
(
ϕ
2
∧
)
)
∨
≈
{
J
l
(
ϕ
2
)
−
1
ϕ
1
+
ϕ
2
当
ϕ
1
为小量
,
J
r
(
ϕ
1
)
−
1
ϕ
2
+
ϕ
1
当
ϕ
2
为小量
.
\ln\left(\exp\left(\phi_1^{\wedge}\right)\exp\left(\phi_2^{\wedge}\right)\right)^{\vee}\approx\begin{cases}\boldsymbol{J}_l(\boldsymbol{\phi}_2)^{-1}\boldsymbol{\phi}_1+\boldsymbol{\phi}_2&\text{当}\boldsymbol{\phi}_1\text{为小量},\\\boldsymbol{J}_r(\boldsymbol{\phi}_1)^{-1}\boldsymbol{\phi}_2+\boldsymbol{\phi}_1&\text{当}\boldsymbol{\phi}_2\text{为小量}.\end{cases}
ln(exp(ϕ1∧)exp(ϕ2∧))∨≈{Jl(ϕ2)−1ϕ1+ϕ2Jr(ϕ1)−1ϕ2+ϕ1当ϕ1为小量,当ϕ2为小量.
分为左乘近似与右乘近似两种,以左乘为例:
J
l
(
θ
a
)
=
J
=
sin
θ
θ
I
+
(
1
−
sin
θ
θ
)
a
a
T
+
1
−
cos
θ
θ
a
∧
\boldsymbol{J}_l(\theta a)=\boldsymbol{J}=\frac{\sin\theta}\theta\boldsymbol{I}+\left(1-\frac{\sin\theta}\theta\right)\boldsymbol{a}\boldsymbol{a}^\mathrm{T}+\frac{1-\cos\theta}\theta\boldsymbol{a}^\mathrm{\wedge}
Jl(θa)=J=θsinθI+(1−θsinθ)aaT+θ1−cosθa∧
J
l
−
1
(
θ
a
)
=
θ
2
cot
θ
2
I
+
(
1
−
θ
2
cot
θ
2
)
a
a
T
−
θ
2
a
∧
\boldsymbol{J}_l^{-1}(\theta a)=\frac{\theta}{2}\cot\frac{\theta}{2}\boldsymbol{I}+\left(1-\frac{\theta}{2}\cot\frac{\theta}{2}\right)\boldsymbol{a}\boldsymbol{a}^\mathrm{T}-\frac{\theta}{2}\boldsymbol{a}^\mathrm{\wedge}
Jl−1(θa)=2θcot2θI+(1−2θcot2θ)aaT−2θa∧
而右雅各比矩阵仅需要对自变量取负号即可:
J
r
(
ϕ
)
=
J
l
(
−
ϕ
)
\boldsymbol{J}_r(\boldsymbol{\phi})=\boldsymbol{J}_l(-\boldsymbol{\phi})
Jr(ϕ)=Jl(−ϕ)
(1) S O ( 3 ) ⇒ s o ( 3 ) \mathrm{SO(3)}\Rightarrow \mathfrak{so}(3) SO(3)⇒so(3)
-
在李群中 S O ( 3 ) \mathrm{SO(3)} SO(3),某个旋转矩阵 R R R,其对应李代数为 ϕ \phi ϕ
-
一个微小旋转矩阵,记为 Δ R \Delta R ΔR ,其对应李代数 Δ ϕ \Delta \phi Δϕ
旋转矩阵进行微小旋转后,即对 R R R左乘 Δ R \Delta R ΔR,李群方面结果为 Δ R ⋅ R \Delta R \cdot R ΔR⋅R
根据BCH公式近似,李代数方面结果为: J 1 − 1 ( ϕ ) Δ ϕ + ϕ J_1^{-1}(\phi)\Delta\phi+\phi J1−1(ϕ)Δϕ+ϕ
合并后:
Δ R ⋅ R = exp ( Δ ϕ ∧ ) exp ( ϕ ∧ ) = exp ( ( J 1 − 1 ( ϕ ) Δ ϕ + ϕ ) ∧ ) \Delta R \cdot R=\exp(\Delta\phi^{\wedge})\exp(\phi^{\wedge})=\exp((J_1^{-1}(\phi)\Delta\phi+\phi)^{\wedge}) ΔR⋅R=exp(Δϕ∧)exp(ϕ∧)=exp((J1−1(ϕ)Δϕ+ϕ)∧)
(2) s o ( 3 ) ⇒ S O ( 3 ) \mathfrak{so}(3)\Rightarrow \mathrm{SO(3)} so(3)⇒SO(3)
李代数方面进行加法 Δ ϕ + ϕ \Delta\phi+\phi Δϕ+ϕ,则李群方面对应的乘法为:
exp ( ( Δ ϕ + ϕ ) ∧ ) = { exp ( ( J l ( ϕ ) Δ ϕ ) ∧ ) exp ( ϕ ∧ ) 左 雅 各 比 exp ( ϕ ∧ ) exp ( ( J r ( ϕ ) Δ ϕ ) ∧ ) 右 雅 各 比 \exp((\Delta\phi+\phi)^{\wedge})= \begin{cases} \exp((J_l(\phi)\Delta\phi)^{\wedge})\exp(\phi^{\wedge})&左雅各比\\ \exp(\phi^{\wedge})\exp((J_r(\phi)\Delta\phi)^{\wedge})&右雅各比 \end{cases} exp((Δϕ+ϕ)∧)={exp((Jl(ϕ)Δϕ)∧)exp(ϕ∧)exp(ϕ∧)exp((Jr(ϕ)Δϕ)∧)左雅各比右雅各比
3. 扰动模型
如果在李群上左乘或右乘增量(无论是用旋转矩阵表示,还是用四元数表示),则其对应的李代数上就会存在一个对应的增量,而这两个增量之间,由于BCH公式的存在,在一阶线性近似意义下,会存在一个雅可比矩阵。
实际运用中经常会构建与位姿有关的函数,然后讨论该函数关于位姿的导数,以调整当前的估计值。
一般用李代数来解决求导问题:
- 李代数表示姿态,根据李代数加法对李代数进行求导
- 李群左乘或右乘微小扰动,然后对该扰动求导,称为左扰动和右扰动模型
3.1 李代数求导
对空间点
p
p
p进行旋转,得到
R
p
Rp
Rp,计算旋转之后点的坐标相对于旋转的导数:
∂
(
R
p
)
∂
ϕ
=
(
−
R
p
)
∧
J
l
\frac{\partial\left(\boldsymbol{Rp}\right)}{\partial\boldsymbol{\phi}}=\left(-\boldsymbol{Rp}\right)^{\wedge}\boldsymbol{J}_{l}
∂ϕ∂(Rp)=(−Rp)∧Jl
其中, ϕ \phi ϕ为旋转矩阵 R R R的李代数,这里存在复杂的 J l J_l Jl。
3.2 扰动模型(左乘)
扰动模型提供了更简单的导数计算方式。
对 R R R进行一次扰动 Δ R \Delta R ΔR,这个扰动由李代数元素 φ \varphi φ 描述,看结果相对于扰动的变化率即计算 R p \boldsymbol{Rp} Rp(即 R \boldsymbol{R} R 和 p \boldsymbol{p} p 的组合)相对于 φ \boldsymbol{\varphi} φ 的变化率。
对
φ
\varphi
φ求导:
∂
(
R
p
)
∂
φ
=
lim
φ
→
0
exp
(
φ
∧
)
exp
(
ϕ
∧
)
p
−
exp
(
ϕ
∧
)
p
φ
\frac{\partial\left(\boldsymbol{Rp}\right)}{\partial\boldsymbol{\varphi}}=\lim_{\boldsymbol{\varphi}\to\boldsymbol{0}}\frac{\exp\left(\boldsymbol{\varphi}^{\wedge}\right)\exp\left(\boldsymbol{\phi}^{\wedge}\right)\boldsymbol{p}-\exp\left(\boldsymbol{\phi}^{\wedge}\right)\boldsymbol{p}}{\varphi}
∂φ∂(Rp)=φ→0limφexp(φ∧)exp(ϕ∧)p−exp(ϕ∧)p
经过
exp
(
φ
∧
)
\exp(\boldsymbol{\varphi}^{\wedge})
exp(φ∧)一阶泰勒展开、叉乘变换,得:
∂
(
R
p
)
∂
φ
=
−
(
R
p
)
∧
\frac{\partial\left(\boldsymbol{Rp}\right)}{\partial\boldsymbol{\varphi}}=-(Rp)^{\wedge}
∂φ∂(Rp)=−(Rp)∧
叉乘变换 a ∧ b c = a × b ⋅ c = − b ⋅ c × a a^{\wedge}bc=a\times b\cdot c=-b\cdot c\times a a∧bc=a×b⋅c=−b⋅c×a
4. 学习李群与李代数的原因
此处需要以后验证更新:
-
描述机器人的运动和姿态
在SLAM中,机器人的运动通常涉及到旋转和平移。李群提供了一种自然的框架来描述这些变换。例如,SE(2)群(二维特殊欧几里得群)用于描述二维空间中的平移和旋转,而SE(3)群(三维特殊欧几里得群)则用于描述三维空间中的平移和旋转。这些群的元素可以表示为机器人的位姿(位置和方向)。 -
处理不确定性和噪声
在实际应用中,机器人的传感器数据(如激光雷达、摄像头等)通常包含噪声。李群和李代数允许我们以一种数学上严谨的方式处理这些不确定性。通过使用李代数,我们可以在概率框架下(如卡尔曼滤波器)对机器人的运动和观测进行建模,从而估计机器人的位姿和地图。 -
优化问题
SLAM的核心是一个优化问题,目标是最小化机器人位姿和地图估计的误差。李群和李代数提供了一种有效的数学工具来表达和优化这些位姿。在优化过程中,我们通常需要计算雅可比矩阵(Jacobian),这是李群和李代数中的一个重要概念,它描述了函数对输入参数的敏感性。 -
运动模型和观测模型
在SLAM中,运动模型描述了机器人从一个位姿移动到另一个位姿的过程,而观测模型描述了传感器如何从环境特征中获取信息。李群和李代数为这些模型提供了一种紧凑且直观的表示方法,使得模型的数学表达和计算更加高效。 -
算法的鲁棒性
李群和李代数的引入使得SLAM算法更加鲁棒,能够处理复杂的运动和观测情况。例如,通过使用李群,我们可以更容易地处理机器人在非欧几里得空间(如球面或曲面)上的运动。 -
计算效率
李群和李代数的运算通常比传统的矩阵运算更高效。在SLAM中,这可以显著提高算法的计算速度,尤其是在处理大规模数据集时。