本文为b站视频的一个笔记
在SLAM中,我们经常要解下面一个问题
F
=
m
i
n
J
(
T
)
=
Σ
i
=
1
N
∣
∣
z
i
−
T
p
i
∣
∣
2
F = minJ(T) = \Sigma_{i=1}^N||z_i - Tp_i||^2
F=minJ(T)=Σi=1N∣∣zi−Tpi∣∣2
这个问题中, T是位姿变量。对于求最小值问题,我们第一步就要求函数对于变量的偏导数,比如说我们对
y
=
x
2
y = x^2
y=x2这个函数来说,偏导数就是
y
′
=
2
x
y' = 2x
y′=2x, 初始值
x
=
10
x = 10
x=10, 设置步长为1,那就是逐步从10->0. 直到偏导数等于0的时候,收敛至稳定解x= 0.
这里我们要求F对T的偏导数
然后将小量 δ T \delta T δT 加到T上去迭代
因为表示旋转的李群SO(3)是不能直接相加的,所以这里要费一番功夫来介绍李代数的概念。
一、群的概念
用于机器人中表示位姿的是特殊正交群SO(3):
S
O
(
3
)
=
R
∈
3
×
3
∣
R
R
T
=
I
,
d
e
t
(
R
)
=
1
SO(3) = {R\in 3\times 3| RR^T=I, det(R) = 1}
SO(3)=R∈3×3∣RRT=I,det(R)=1
严格的来说,群需要满足如下定义:
- 封闭性 ∀ a 1 , a 2 ∈ A , a 1 a 2 ∈ A \forall a_1, a_2 \in A, a_1a_2\in A ∀a1,a2∈A,a1a2∈A
- 结合律 ∀ a 1 , a 2 , a 3 , a 1 a 2 a 3 = a 1 ( a 2 a 3 ) \forall a_1, a_2, a_3, a_1a_2a_3 = a_1(a_2a_3) ∀a1,a2,a3,a1a2a3=a1(a2a3)
- 幺元 ∃ a 0 , s . t . ∀ a ∈ A , a 0 a = a a 0 = a \exists a_0, s.t. \forall a\in A, a_0a = aa_0 = a ∃a0,s.t.∀a∈A,a0a=aa0=a
- 逆 ∀ a ∈ A , ∃ a − 1 ∈ A , s . t . a a − 1 = a 0 \forall a \in A, \exists a^{-1} \in A, s.t. aa^{-1}=a_0 ∀a∈A,∃a−1∈A,s.t.aa−1=a0
上面四个条件用人话说一遍其实就是:1. 两个这种东西相乘,本质还是这个东西。2. 先乘后乘一样。3. 有一个单位阵。4. 有个相反的东西可以让它乘了就回去。可以简单的验证,旋转矩阵集合+矩阵乘法,它是构成群的。
李群是指连续性质的群,很显然,SO(3)是属于李群的。
SO(3)有个缺点,那就是它是由旋转矩阵+乘法构成的,它没有加法。因此直接在SO(3)上求偏导数不行,得想其他办法。而李代数,刚好能解决这个问题。李代数对应李群的正切空间,它描述了李群局部的导数。
二、李代数
首先对旋转矩阵的导数形式进行了探索:
也就是说,旋转矩阵是可以表示成指数形式的。那只要把
ϕ
\phi
ϕ找出来,就可以求旋转矩阵的导数了。
李代数的定义
每一个李群都有与之对应的李代数,李代数描述了李群单位元数的正切空间性质
三维空间向量 +
R
3
R^3
R3 + 叉乘运算 构成李代数
其中,这个里面证明
ϕ
\phi
ϕ是一个单位向量与模长相乘,那么就可以说明它就是旋转向量。
三、李代数求导与扰动模型
BCH公式
这个公式的作用,就是解决 f ( x + δ x ) f(x+\delta x) f(x+δx)是多少的问题
KaTeX parse error: Got function '\hat' with no arguments as superscript at position 15: ln(exp(\phi_1^\̲h̲a̲t̲ ̲))