IMU模型
一、概念介绍
- VIO:Viausl-Inertial-Odometry
以视觉与IMU融合实现里程计
- IMU: Inertial-Measurement-Unit,惯性测量单元
典型6轴IMU以较高频率(>100Hz)返回被测物体的
角速度
与加速度
受自身温度、零偏、振动等因素干扰,积分得到的平移和旋转容易漂移; 温度和振动的干扰可以标定。
- VO: Visual Odometry
以图像形式记录数据,频率较低(15Hz-60Hz)居多 通过图像特征点或像素推断相机运动
二、IMU
六自由度 IMU 本身由一个陀螺仪和一个加速度计组成,分别测量自身的角速度和加速度。
IMU 与视觉定位方案优势与劣势对比:
方案 | IMU | 视觉 |
---|---|---|
优势 | 快速响应不受成像质量影响角速度普遍比较准确可估计绝对尺度 | 不产生漂移直接测量旋转与平移 |
劣势 | 存在零偏低精度 IMU 积分位姿发散高精度价格昂贵 | 受图像遮挡、运动物体干扰单目视觉无法测量尺度单目纯旋转运动无法估计快速运动时易丢失 |
整体上,视觉和IMU定位方案存在一定互补性质:
可利用视觉定位信息来估计IMU的零偏,减少IMU由零偏导致的发散和累积误差;反之,IMU可以为视觉提供快速运动时的定位。
IMU适合计算短时间、快速
的运动
视觉适合计算长时间、慢速
的运动
内积( ⋅ \cdot ⋅ 乘)
a
⋅
b
=
a
T
b
=
∑
i
=
1
3
a
i
b
i
=
∣
a
∣
∣
b
∣
cos
⟨
a
,
b
⟩
.
\boldsymbol{a} \cdot \boldsymbol{b}=\boldsymbol{a}^{\mathrm{T}} \boldsymbol{b}=\sum_{i=1}^{3} a_{i} b_{i}=|\boldsymbol{a}||\boldsymbol{b}| \cos \langle\boldsymbol{a}, \boldsymbol{b}\rangle .
a⋅b=aTb=i=1∑3aibi=∣a∣∣b∣cos⟨a,b⟩.
其中
⟨
a
,
b
⟩
\langle\boldsymbol{a}, \boldsymbol{b}\rangle
⟨a,b⟩ 指向量
a
,
b
\boldsymbol{a}, \boldsymbol{b}
a,b 的夹角。结果为标量
,其大小符合平行四边形法则,内积也可以描述向量间的投影关系。
外积( × \times × 乘)
而外积则是这个样子:
a
×
b
=
∥
e
1
e
2
e
3
a
1
a
2
a
3
b
1
b
2
b
3
∥
=
[
a
2
b
3
−
a
3
b
2
a
3
b
1
−
a
1
b
3
a
1
b
2
−
a
2
b
1
]
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
b
=
def
a
∧
b
.
\boldsymbol{a} \times \boldsymbol{b}=\left\|\begin{array}{ccc} \boldsymbol{e}_{1} & \boldsymbol{e}_{2} & \boldsymbol{e}_{3} \\ a_{1} & a_{2} & a_{3} \\ b_{1} & b_{2} & b_{3} \end{array}\right\|=\left[\begin{array}{l} a_{2} b_{3}-a_{3} b_{2} \\ a_{3} b_{1}-a_{1} b_{3} \\ a_{1} b_{2}-a_{2} b_{1} \end{array}\right]=\left[\begin{array}{ccc} 0 & -a_{3} & a_{2} \\ a_{3} & 0 & -a_{1} \\ -a_{2} & a_{1} & 0 \end{array}\right] \boldsymbol{b} \stackrel{\text { def }}{=} \boldsymbol{a}^{\wedge} \boldsymbol{b} .
a×b=∥∥∥∥∥∥e1a1b1e2a2b2e3a3b3∥∥∥∥∥∥=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤=⎣⎡0a3−a2−a30a1a2−a10⎦⎤b= def a∧b.
外积的结果是一个向量
, 它的方向垂直于这两个向量, 大小为
∣
a
∣
∣
b
∣
sin
⟨
a
,
b
⟩
|\boldsymbol{a}||\boldsymbol{b}| \sin \langle\boldsymbol{a}, \boldsymbol{b}\rangle
∣a∣∣b∣sin⟨a,b⟩, 是两个向量张成的四边形的有向面积。对于外积运算, 我们引入
∧
\wedge
∧ 符号, 把
a
\boldsymbol{a}
a 写成一个矩阵。事实上是一个反对称矩阵 (Skew-symmetric Matrix ) , 你可以将
∧
^{\wedge}
∧ 记成一个反对称符号。这样就把外积
a
×
b
\boldsymbol{a} \times \boldsymbol{b}
a×b 写成了矩阵与向量的乘法
a
∧
b
\boldsymbol{a}^{\wedge} \boldsymbol{b}
a∧b, 把它变成了线性运算。这个符号将在后文经常用到, 请记住它, 并且此符号是一个一 一映射, 意味着任意向量都对应着唯一的一个反对称矩阵, 反之亦然:
a
∧
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
\boldsymbol{a}^{\wedge}=\left[\begin{array}{ccc} 0 & -a_{3} & a_{2} \\ a_{3} & 0 & -a_{1} \\ -a_{2} & a_{1} & 0 \end{array}\right]
a∧=⎣⎡0a3−a2−a30a1a2−a10⎦⎤
a
∧
\boldsymbol{a}^{\wedge}
a∧为向量 a 的反对称矩阵 A ;(任意向量都对应着唯一的一个反对称矩阵)
a ∧ = A \boldsymbol{a}^{\wedge} = A a∧=A ; A ∨ = a A^\vee =a A∨=a ; A T = − A A^T=-A AT=−A
同时, 需要提醒读者的是, 向量和加减法、内外积, 即使在不谈论它们的坐标时也可以计算。 例如, 虽然内积在有坐标时, 可以用两个向量的分量乘积之和表达, 但是即使不知道它们的坐标, 也可以通过长度和夹角来计算二者的内积。所以两个向量的内积结果和坐标系的选取是无关的。
三、四元数的微分函数
三维世界中的刚体运动描述方式主要包括:旋转向量;旋转矩阵;欧拉角;四元数等
IMU中最常用的是:旋转矩阵;四元数。
1.四元数
四元数 q 有一个实部和三个虚部。四元数与轴角的表示很接近,也是使用一个3维向量表示转轴和一个角度分量表示绕此转轴的旋转角度
我们把实部写在前:
q
=
[
q
0
,
q
1
,
q
2
,
q
3
]
⊤
q=[q_0,q_1,q_2,q_3]^⊤
q=[q0,q1,q2,q3]⊤ 或
q
=
[
w
,
x
,
y
,
z
]
⊤
q=[w,x,y,z]^⊤
q=[w,x,y,z]⊤
其中
q
0
q_0
q0 为实部,
[
q
1
,
q
2
,
q
3
]
⊤
[q_1,q_2,q_3]^⊤
[q1,q2,q3]⊤ 为虚部。因为实部为标量,虚部为矢量,所以也可记为:
q
=
[
s
,
v
]
⊤
\boldsymbol{q}=[s, v]^{\top}
q=[s,v]⊤
其中 s 为标量,v 为虚部的矢量。
四元数乘法
q
a
⊗
q
b
=
w
a
w
b
−
x
a
x
b
−
y
a
y
b
−
z
a
z
b
+
(
w
a
x
b
+
x
a
w
b
+
y
a
z
b
−
z
a
y
b
)
i
+
(
w
a
y
b
−
x
a
z
b
+
y
a
w
b
+
z
a
x
b
)
j
+
(
w
a
z
b
+
x
a
y
b
−
y
a
x
b
+
z
a
w
b
)
k
q
a
⊗
q
b
=
[
s
a
s
b
−
v
a
⊤
v
b
,
s
a
v
b
+
s
b
v
a
+
v
a
×
v
b
]
⊤
\begin{gathered} \mathbf{q}_{a} \otimes \mathbf{q}_{b}=w_{a} w_{b}-x_{a} x_{b}-y_{a} y_{b}-z_{a} z_{b} \\ +\left(w_{a} x_{b}+x_{a} w_{b}+y_{a} z_{b}-z_{a} y_{b}\right) i \\ +\left(w_{a} y_{b}-x_{a} z_{b}+y_{a} w_{b}+z_{a} x_{b}\right) j \\ +\left(w_{a} z_{b}+x_{a} y_{b}-y_{a} x_{b}+z_{a} w_{b}\right) k \\ \mathbf{q}_{a} \otimes \mathbf{q}_{b}=\left[s_{a} s_{b}-\mathbf{v}_{a}^{\top} \mathbf{v}_{b}, s_{a} \mathbf{v}_{b}+s_{b} \mathbf{v}_{a}+\mathbf{v}_{a} \times \mathbf{v}_{b}\right]^{\top} \end{gathered}
qa⊗qb=wawb−xaxb−yayb−zazb+(waxb+xawb+yazb−zayb)i+(wayb−xazb+yawb+zaxb)j+(wazb+xayb−yaxb+zawb)kqa⊗qb=[sasb−va⊤vb,savb+sbva+va×vb]⊤
此外,四元数可类似复数,定义加减、模长、逆、共轭等运算,不一一展开。
2.四元数的微分函数(方法一):
假设某个旋转运动的旋转轴为单位向量
u
\mathrm{u}
u ,绕该轴旋转的角度为
θ
\theta
θ ,那么它对应的单位四元数为:
q
=
[
cos
θ
2
u
sin
θ
2
]
q=\left[\begin{array}{c} \cos \frac{\theta}{2} \\ \mathrm{u} \sin \frac{\theta}{2} \end{array}\right]
q=[cos2θusin2θ]
当旋转一段微小的时间,即旋转角度趋于零时,容易有:
Δ
q
=
[
cos
δ
θ
2
u
sin
δ
θ
2
]
≈
[
1
u
δ
θ
2
]
=
[
1
1
2
δ
θ
]
\Delta \mathbf{q}=\left[\begin{array}{c}\cos \frac{\delta \theta}{2} \\ \mathbf{u} \sin \frac{\delta \theta}{2}\end{array}\right] \approx\left[\begin{array}{c}1 \\ \mathbf{u} \frac{\delta \theta}{2}\end{array}\right]=\left[\begin{array}{c}1 \\ \frac{1}{2} \boldsymbol{\delta} \boldsymbol{\theta}\end{array}\right]
Δq=[cos2δθusin2δθ]≈[1u2δθ]=[121δθ]
其中
δ
θ
\delta \theta
δθ 的方向表示旋转轴,模长表示旋转角度。
角速度:当旋转一段微小的时间,即旋转角度趋于零时,容易有:
ω
=
lim
Δ
→
0
δ
θ
Δ
t
\omega=\lim _{\Delta \rightarrow 0} \frac{\delta \theta}{\Delta t}
ω=Δ→0limΔtδθ
则四元数的导数为:
q ˙ ≜ lim Δ t → 0 q ( t + Δ t ) − q ( t ) Δ t = lim Δ t → 0 q ⊗ Δ q − q Δ t = lim Δ t → 0 q ⊗ ( [ 1 1 2 δ θ ] − [ 1 0 ] ) Δ t = q ⊗ [ 0 1 2 ω ] \begin{aligned} \dot{\mathbf{q}} & \triangleq \lim _{\Delta t \rightarrow 0} \frac{\mathbf{q}(t+\Delta t)-\mathbf{q}(t)}{\Delta t} \\ &=\lim _{\Delta t \rightarrow 0} \frac{\mathbf{q} \otimes \Delta \mathbf{q}-\mathbf{q}}{\Delta t} \\ &=\lim _{\Delta t \rightarrow 0} \frac{\mathbf{q} \otimes\left(\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta} \end{array}\right]-\left[\begin{array}{l} 1 \\ \mathbf{0} \end{array}\right]\right)}{\Delta t} \\ &=\mathbf{q} \otimes\left[\begin{array}{c} 0 \\ \frac{1}{2} \boldsymbol{\omega} \end{array}\right] \end{aligned} q˙≜Δt→0limΔtq(t+Δt)−q(t)=Δt→0limΔtq⊗Δq−q=Δt→0limΔtq⊗([121δθ]−[10])=q⊗[021ω]
3.四元数的微分函数(方法二):
1、单位四元数可表达任意三维旋转,且无奇异性。
四元数和角轴的转换关系: 设角轴为
ω
\omega
ω 和
θ
\theta
θ ,那么它对应的四元数为:
q
=
[
cos
θ
2
,
ω
sin
θ
2
]
T
\mathbf{q}=\left[\cos \frac{\theta}{2}, \omega \sin \frac{\theta}{2}\right]^{\mathbf{T}}
q=[cos2θ,ωsin2θ]T
2、四元数时间导数
设初始旋转为
q
=
[
s
,
v
]
q=[\mathrm{s}, \mathrm{v}]
q=[s,v] ,然后,发生了角轴为
ω
\omega
ω 和
θ
\theta
θ 的旋转 (右乘,对应四元数记作
Δ
q
\Delta q
Δq ),那么
q
q
q 相对该旋转的导数为:
lim
θ
→
0
q
⊗
Δ
q
−
q
θ
=
lim
θ
→
0
[
s
cos
θ
2
−
v
T
ω
sin
θ
2
,
s
ω
sin
θ
2
+
cos
θ
2
v
+
v
×
ω
sin
θ
2
]
T
−
q
θ
=
lim
θ
→
0
[
s
(
cos
θ
2
−
1
)
−
v
T
ω
sin
θ
2
,
s
ω
sin
θ
2
+
(
cos
θ
2
−
1
)
v
+
v
×
ω
sin
θ
2
]
T
θ
=
[
−
1
2
v
T
ω
,
1
2
s
ω
+
1
2
V
×
ω
]
T
=
q
⊗
[
0
,
1
2
ω
]
T
\begin{aligned} \lim _{\theta \rightarrow 0} \frac{\mathbf{q} \otimes \Delta \mathbf{q}-\mathbf{q}}{\theta} &=\lim _{\theta \rightarrow 0} \frac{\left[s \cos \frac{\theta}{2}-\mathbf{v}^{T} \boldsymbol{\omega} \sin \frac{\theta}{2}, s \boldsymbol{\omega} \sin \frac{\theta}{2}+\cos \frac{\theta}{2} \mathbf{v}+\mathbf{v} \times \boldsymbol{\omega} \sin \frac{\theta}{2}\right]^{\mathrm{T}}-\mathbf{q}}{\theta} \\ &=\lim _{\theta \rightarrow 0} \frac{\left[s\left(\cos \frac{\theta}{2}-1\right)-\mathbf{v}^{T} \boldsymbol{\omega} \sin \frac{\theta}{2}, s \boldsymbol{\omega} \sin \frac{\theta}{2}+\left(\cos \frac{\theta}{2}-1\right) \mathbf{v}+\mathbf{v} \times \boldsymbol{\omega} \sin \frac{\theta}{2}\right]^{\mathrm{T}}}{\theta} \\ &=\left[-\frac{1}{2} \mathbf{v}^{T} \boldsymbol{\omega}, \frac{1}{2} s \boldsymbol{\omega}+\frac{1}{2} \mathbf{V} \times \boldsymbol{\omega}\right]^{\mathrm{T}} \\ &=\mathbf{q} \otimes\left[0, \frac{1}{2} \boldsymbol{\omega}\right]^{\mathrm{T}} \end{aligned}
θ→0limθq⊗Δq−q=θ→0limθ[scos2θ−vTωsin2θ,sωsin2θ+cos2θv+v×ωsin2θ]T−q=θ→0limθ[s(cos2θ−1)−vTωsin2θ,sωsin2θ+(cos2θ−1)v+v×ωsin2θ]T=[−21vTω,21sω+21V×ω]T=q⊗[0,21ω]T
即四元数表示旋转时对时间的导数为:
q
˙
=
q
⊗
[
0
,
1
2
ω
]
T
\dot{\mathbf{q}}=\mathbf{q} \otimes\left[0, \frac{1}{2} \boldsymbol{\omega}\right]^{\mathrm{T}}
q˙=q⊗[0,21ω]T
4.为什么(Why?)
为啥非要对四元数求微分泥?
由于实际工程中我们都是通过固连在机体上的陀螺仪等传感器来获知机体角速度
w
b
w^{b}
wb
它与地理坐标系下的角速度表示有如下关系
w
=
q
(
t
)
w
b
q
(
t
)
−
1
w=q(t) w^{b} q(t)^{-1}
w=q(t)wbq(t)−1
带入上式即可得到姿态解具过程中常用的四元数的微分形式
q
˙
(
t
)
=
1
2
q
(
t
)
w
b
\dot{q}(t)=\frac{1}{2} q(t) w^{b}
q˙(t)=21q(t)wb
可以看出,通过一次四元数乘法运算便可得到四元数的微分。
上式可以写成如下的矩阵形式:
[
q
˙
0
q
˙
1
q
˙
2
q
˙
3
]
=
1
2
[
q
0
−
q
1
−
q
2
−
q
3
q
1
q
0
−
q
3
q
2
q
2
q
3
q
0
−
q
1
q
3
−
q
2
q
1
q
0
]
[
0
ω
ξ
b
ω
η
b
ω
z
b
]
\left[\begin{array}{l} \dot{q}_{0} \\ \dot{q}_{1} \\ \dot{q}_{2} \\ \dot{q}_{3} \end{array}\right]=\frac{1}{2}\left[\begin{array}{cccc} q_{0} & -q_{1} & -q_{2} & -q_{3} \\ q_{1} & q_{0} & -q_{3} & q_{2} \\ q_{2} & q_{3} & q_{0} & -q_{1} \\ q_{3} & -q_{2} & q_{1} & q_{0} \end{array}\right]\left[\begin{array}{c} 0 \\ \omega_{\xi}^{b} \\ \omega_{\eta}^{b} \\ \omega_{z}^{b} \end{array}\right]
⎣⎢⎢⎡q˙0q˙1q˙2q˙3⎦⎥⎥⎤=21⎣⎢⎢⎡q0q1q2q3−q1q0q3−q2−q2−q3q0q1−q3q2−q1q0⎦⎥⎥⎤⎣⎢⎢⎡0ωξbωηbωzb⎦⎥⎥⎤
或者:
[
q
˙
0
q
˙
1
q
˙
2
q
˙
3
]
=
1
2
[
0
−
ω
x
b
−
ω
y
b
−
ω
z
b
ω
z
b
0
ω
z
b
−
ω
y
b
ω
y
b
−
ω
z
b
0
ω
z
b
ω
z
b
ω
y
b
−
ω
z
b
0
]
[
q
0
q
1
q
2
q
3
]
\left[\begin{array}{c} \dot{q}_{0} \\ \dot{q}_{1} \\ \dot{q}_{2} \\ \dot{q}_{3} \end{array}\right]=\frac{1}{2}\left[\begin{array}{cccc} 0 & -\omega_{x}^{b} & -\omega_{y}^{b} & -\omega_{z}^{b} \\ \omega_{z}^{b} & 0 & \omega_{z}^{b} & -\omega_{y}^{b} \\ \omega_{y}^{b} & -\omega_{z}^{b} & 0 & \omega_{z}^{b} \\ \omega_{z}^{b} & \omega_{y}^{b} & -\omega_{z}^{b} & 0 \end{array}\right]\left[\begin{array}{l} q_{0} \\ q_{1} \\ q_{2} \\ q_{3} \end{array}\right]
⎣⎢⎢⎡q˙0q˙1q˙2q˙3⎦⎥⎥⎤=21⎣⎢⎢⎡0ωzbωybωzb−ωxb0−ωzbωyb−ωybωzb0−ωzb−ωzb−ωybωzb0⎦⎥⎥⎤⎣⎢⎢⎡q0q1q2q3⎦⎥⎥⎤
四、旋转矩阵 R \mathrm{R} R 的微分函数
相机运动过程时,旋转矩阵可以用
R
(
t
)
,
R
R(t) , R
R(t),R 关于时间
t
t
t 的函数表示
对于旋转矩阵
R
R
T
=
I
R R^{T}=I
RRT=I
于是有
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
⇒
R
˙
(
t
)
R
(
t
)
T
=
−
R
(
t
)
R
˙
(
t
)
T
⇒
R
˙
(
t
)
R
(
t
)
T
=
−
(
R
˙
(
t
)
R
(
t
)
T
)
T
\begin{gathered} \dot{R}(t) R(t)^{T}+R(t) \dot{R}(t)^{T}=0 \\ \Rightarrow \dot{R}(t) R(t)^{T}=-R(t) \dot{R}(t)^{T} \\ \Rightarrow \dot{R}(t) R(t)^{T}=-\left(\dot{R}(t) R(t)^{T}\right)^{T} \end{gathered}
R˙(t)R(t)T+R(t)R˙(t)T=0⇒R˙(t)R(t)T=−R(t)R˙(t)T⇒R˙(t)R(t)T=−(R˙(t)R(t)T)T
说明
R
(
t
)
R
(
t
)
T
R(t) R(t)^{T}
R(t)R(t)T 为反对称矩阵,存在一个三维向量
ϕ
(
t
)
\phi(t)
ϕ(t) 与之对应,有
R
˙
(
t
)
R
(
t
)
T
=
ϕ
(
t
)
∧
\dot{R}(t) R(t)^{T}=\phi(t)^{\wedge}
R˙(t)R(t)T=ϕ(t)∧
等式两边右乘
R
(
t
)
R(t)
R(t) ,得:
R
˙
(
t
)
=
ϕ
(
t
)
∧
R
(
t
)
\dot{R}(t)=\phi(t)^{\wedge} R(t)
R˙(t)=ϕ(t)∧R(t)
总结:
- 说明对旋转矩阵求导,等价于在
旋转矩阵左乘一个反对称矩阵
;
问 题 由 对 R ˙ ( t ) ⇒ 求 ϕ ( t ) 问题由对\dot{R}(t)\Rightarrow求\phi(t) 问题由对R˙(t)⇒求ϕ(t)
如何求得这个反对称矩阵呢?
对于
t
0
t_{0}
t0 时刻,
R
(
0
)
=
I
R(0)=I
R(0)=I, 把
R
(
t
)
R(t)
R(t) 在
t
=
0
t=0
t=0 附近进行一阶泰勒展开:
R
(
t
)
≈
R
(
t
0
)
+
R
˙
(
t
0
)
(
t
−
t
0
)
=
R
(
t
0
)
+
ϕ
(
t
0
)
∧
R
(
t
0
)
(
t
−
t
0
)
=
I
+
ϕ
(
t
0
)
∧
t
\begin{gathered} R(t) \approx R\left(t_{0}\right)+\dot{R}\left(t_{0}\right)\left(t-t_{0}\right)=R\left(t_{0}\right)+\phi\left(t_{0}\right)^{\wedge} R\left(t_{0}\right)\left(t-t_{0}\right) \\ =I+\phi\left(t_{0}\right)^{\wedge} t \end{gathered}
R(t)≈R(t0)+R˙(t0)(t−t0)=R(t0)+ϕ(t0)∧R(t0)(t−t0)=I+ϕ(t0)∧t
此为一个关于
R
R
R 的微分方程,且
R
(
0
)
=
I
R(0)=I
R(0)=I ,便可解得:
R
(
t
)
=
exp
(
ϕ
0
∧
t
)
R(t)=\exp \left(\phi_{0}^{\wedge} t\right)
R(t)=exp(ϕ0∧t)
3. 说明在
t
=
0
t=0
t=0 的附近,旋转矩阵可以由
exp
(
ϕ
0
t
)
\exp \left(\phi_{0} t\right)
exp(ϕ0t) 解出。
给定某个时刻的
R
R
R, 我们可以求出一个
ϕ
\phi
ϕ,描述了
R
R
R 在局部的导数关系;
ϕ
\phi
ϕ 是
S
O
(
3
)
S O(3)
SO(3) 对应的李代数
s
o
(
3
)
s o(3)
so(3)上的指数映射;
R
=
exp
(
ϕ
∧
)
R=\exp \left(\phi^{\wedge}\right)
R=exp(ϕ∧)
4. 实际使用过程中也可以写作下列形式:
使用旋转矩阵
R
\mathrm{R}
R 时,角速度为
ω
\omega
ω ,那么
R
\mathrm{R}
R 相对于时间的导数可写作:
R
˙
=
R
ω
∧
\dot{\mathrm{R}}=\mathrm{R} \omega^{\wedge}
R˙=Rω∧
其中
ω
∧
=
[
0
−
ω
3
ω
2
ω
3
0
−
ω
1
−
ω
2
ω
1
0
]
\boldsymbol{\omega}^{\wedge}=\left[\begin{array}{ccc} 0 & -\omega_{3} & \omega_{2} \\ \omega_{3} & 0 & -\omega_{1} \\ -\omega_{2} & \omega_{1} & 0 \end{array}\right]
ω∧=⎣⎡0ω3−ω2−ω30ω1ω2−ω10⎦⎤
实际当中左右乘等价
,仅为习惯上的差别。
注:(i) 不同的 R 函数,具体的导数形式也不同。
(ii) 在程序中,不必区分 R 是以矩阵存储或是以四元数存储,只需按照该式更新即可。
五、李群与李代数
前面介绍了三维世界中刚体运动的描述方式,包括旋转矩阵、旋转向量、欧拉角、四元数等若干种方式。重点介绍了旋转的表示,但是在SLAM中,除了表示,还要对它们进行估计和优化。因为在SLAM中位姿是未知的,而我们需要解决形如“什么样的相机位姿最符合当前观测数据”这样的问题。一种典型的方式是把它构建成一个优化问题,求解最优的R,t,使得误差最小化。如前所言,旋转矩阵自身是带有约束的(正交且行列式为1 )。它们作为优化变量时,会引人入额外的约束,使优化变得困难。通过李群一李 代数间的转换关系,我们希望把位姿估计变成无约束的优化问题
,简化求解方式。
1. 李群
三维旋转矩阵构成了特殊正交群
S
O
(
3
)
\mathrm{SO}(3)
SO(3), 而变换矩阵构成了特殊欧氏群
S
E
(
3
)
\mathrm{SE}(3)
SE(3) 。
S
O
(
3
)
=
{
R
∈
R
3
×
3
∣
R
R
T
=
I
,
det
(
R
)
=
1
}
S
E
(
3
)
=
{
T
=
[
R
t
0
T
1
]
∈
R
4
×
4
∣
R
∈
S
O
(
3
)
,
t
∈
R
3
}
\begin{aligned} &\mathrm{SO}(3)=\left\{\boldsymbol{R} \in \mathbb{R}^{3 \times 3} \mid \boldsymbol{R} \boldsymbol{R}^{\mathrm{T}}=\boldsymbol{I}, \operatorname{det}(\boldsymbol{R})=1\right\} \\ &\mathrm{SE}(3)=\left\{\boldsymbol{T}=\left[\begin{array}{ll} \boldsymbol{R} & \boldsymbol{t} \\ \mathbf{0}^{\mathrm{T}} & 1 \end{array}\right] \in \mathbb{R}^{4 \times 4} \mid \boldsymbol{R} \in \mathrm{SO}(3), \boldsymbol{t} \in \mathbb{R}^{3}\right\} \end{aligned}
SO(3)={R∈R3×3∣RRT=I,det(R)=1}SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3}
- 它们对加法是不封闭的。换句话说, 对于任意两个旋转矩阵
R
1
,
R
2
\boldsymbol{R}_{1}, \boldsymbol{R}_{2}
R1,R2, 按照矩阵加法的定义, 和不再是一个旋转矩阵:
R 1 + R 2 ∉ S O ( 3 ) , T 1 + T 2 ∉ S E ( 3 ) . \boldsymbol{R}_{1}+\boldsymbol{R}_{2} \notin \mathrm{SO}(3), \quad \boldsymbol{T}_{1}+\boldsymbol{T}_{2} \notin \mathrm{SE}(3) . R1+R2∈/SO(3),T1+T2∈/SE(3).
通常矩阵加法对这两个集合不封闭。 - 它们只有一种较好的运算: 乘法。
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 和
S
E
(
3
)
\mathrm{SE}(3)
SE(3) 关于乘法是封闭的:
R 1 R 2 ∈ S O ( 3 ) , T 1 T 2 ∈ S E ( 3 ) . \boldsymbol{R}_{1} \boldsymbol{R}_{2} \in \mathrm{SO}(3), \quad \boldsymbol{T}_{1} \boldsymbol{T}_{2} \in \mathrm{SE}(3) . R1R2∈SO(3),T1T2∈SE(3).
也可以对任何一个旋转或变换矩阵(在乘法的意义上)求逆。我们知道, 乘法对应着旋转或变换的复合, 两个旋转矩阵相乘表示做了两次旋转。对于这种只有一个 (良好的) 运算的 集合, 我们称之为群。
2. 李代数
每个李群都有与之对应的李代数。李代数描述了李群的局部性质,准确地说,是单位元附近的正切空间。之前提到的
ϕ
(
t
)
\phi(t)
ϕ(t),事实上是一种李代数。
ϕ
\phi
ϕ 是
S
O
(
3
)
S O(3)
SO(3) 对应的李代数
s
o
(
3
)
s o(3)
so(3)上的指数映射;
R
=
exp
(
ϕ
∧
)
R=\exp \left(\phi^{\wedge}\right)
R=exp(ϕ∧)
现在来考虑第一个问题:如何计算
exp
(
ϕ
∧
)
?
\exp \left(\phi^{\wedge}\right) ?
exp(ϕ∧)?
任意矩阵的指数映射可以写成一个泰勒展开, 但是只有在收敛的情况下才会有结果, 其结果仍是一个矩阵:
exp
(
A
)
=
∑
n
=
0
∞
1
n
!
A
n
\exp (\boldsymbol{A})=\sum_{n=0}^{\infty} \frac{1}{n !} \boldsymbol{A}^{n}
exp(A)=n=0∑∞n!1An
同样地, 对
s
o
(
3
)
\mathfrak{s o}(3)
so(3) 中的任意元素
ϕ
\phi
ϕ, 我们也可按此方式定义它的指数映射:
exp
(
ϕ
∧
)
=
∑
n
=
0
∞
1
n
!
(
ϕ
∧
)
n
\exp \left(\phi^{\wedge}\right)=\sum_{n=0}^{\infty} \frac{1}{n !}\left(\phi^{\wedge}\right)^{n}
exp(ϕ∧)=n=0∑∞n!1(ϕ∧)n
但这个定义没法直接计算, 因为我们不想计算矩阵的无穷次幂。下面我们推导一种计算指数映 射的简便方法。由于
ϕ
\phi
ϕ 是三维向量, 我们可以定义它的模长和方向, 分别记作
θ
\theta
θ 和
a
a
a, 于是有
ϕ
=
θ
a
\boldsymbol{\phi}=\theta \boldsymbol{a}
ϕ=θa 。这里
a
\boldsymbol{a}
a 是一个长度为 1 的方向向量, 即
∥
a
∥
=
1
\|\boldsymbol{a}\|=1
∥a∥=1 。首先, 对于
a
∧
\boldsymbol{a}^{\wedge}
a∧, 有以下两条性质:
a
∧
a
∧
=
[
−
a
2
2
−
a
3
2
a
1
a
2
a
1
a
3
a
1
a
2
−
a
1
2
−
a
3
2
a
2
a
3
a
1
a
3
a
2
a
3
−
a
1
2
−
a
2
2
]
=
a
a
T
−
I
\boldsymbol{a}^{\wedge} \boldsymbol{a}^{\wedge}=\left[\begin{array}{ccc} -a_{2}^{2}-a_{3}^{2} & a_{1} a_{2} & a_{1} a_{3} \\ a_{1} a_{2} & -a_{1}^{2}-a_{3}^{2} & a_{2} a_{3} \\ a_{1} a_{3} & a_{2} a_{3} & -a_{1}^{2}-a_{2}^{2} \end{array}\right]=\boldsymbol{a} \boldsymbol{a}^{\mathrm{T}}-\boldsymbol{I}
a∧a∧=⎣⎡−a22−a32a1a2a1a3a1a2−a12−a32a2a3a1a3a2a3−a12−a22⎦⎤=aaT−I
以及
a
∧
a
∧
a
∧
=
a
∧
(
a
a
T
−
I
)
=
−
a
∧
.
\boldsymbol{a}^{\wedge} \boldsymbol{a}^{\wedge} \boldsymbol{a}^{\wedge}=\boldsymbol{a}^{\wedge}\left(\boldsymbol{a} \boldsymbol{a}^{\mathrm{T}}-\boldsymbol{I}\right)=-\boldsymbol{a}^{\wedge} .
a∧a∧a∧=a∧(aaT−I)=−a∧.
这两个式子提供了处理
a
∧
\boldsymbol{a}^{\wedge}
a∧ 高阶项的方法。我们可以把指数映射写成
exp
(
ϕ
∧
)
=
exp
(
θ
a
∧
)
=
∑
n
=
0
∞
1
n
!
(
θ
a
∧
)
n
\exp \left(\phi^{\wedge}\right)=\exp \left(\theta \boldsymbol{a}^{\wedge}\right)=\sum_{n=0}^{\infty} \frac{1}{n !}\left(\theta \boldsymbol{a}^{\wedge}\right)^{n}
exp(ϕ∧)=exp(θa∧)=n=0∑∞n!1(θa∧)n
化简最后, 得到罗德里格斯公式:
exp
(
θ
a
∧
)
=
cos
θ
I
+
(
1
−
cos
θ
)
a
a
T
+
sin
θ
a
∧
\exp \left(\theta \boldsymbol{a}^{\wedge}\right)=\cos \theta \boldsymbol{I}+(1-\cos \theta) \boldsymbol{a} \boldsymbol{a}^{\mathrm{T}}+\sin \theta \boldsymbol{a}^{\wedge}
exp(θa∧)=cosθI+(1−cosθ)aaT+sinθa∧
这表明,
s
o
(
3
)
\mathfrak{s o}(3)
so(3) 实际上就是 由所谓的旋转向量组成的空间, 而指数映射即罗德里格斯公式。通过它们, 我们把
s
o
(
3
)
\mathfrak{s o}(3)
so(3) 中任意 一个向量对应到了一个位于
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 中的旋转矩阵。反之, 如果定义对数映射, 也能把
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 中的 元素对应到
s
o
(
3
)
\mathfrak{s o}(3)
so(3) 中:
ϕ
=
ln
(
R
)
∨
=
(
∑
n
=
0
∞
(
−
1
)
n
n
+
1
(
R
−
I
)
n
+
1
)
∨
.
\phi=\ln (\boldsymbol{R})^{\vee}=\left(\sum_{n=0}^{\infty} \frac{(-1)^{n}}{n+1}(\boldsymbol{R}-\boldsymbol{I})^{n+1}\right)^{\vee} .
ϕ=ln(R)∨=(n=0∑∞n+1(−1)n(R−I)n+1)∨.
和指数映射一样, 我们没必要直接用泰勒展开计算对数映射。
是否对于任 意的
R
\boldsymbol{R}
R 都能找到一个唯一的
ϕ
\boldsymbol{\phi}
ϕ ?
指数映射只是一个满射, 并不是单射。这意味着每个
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 中的元素, 都可以找到一个
s
o
(
3
)
\mathfrak{s o}(3)
so(3) 元素与之对应; 但是可能存在多个
s
o
(
3
)
\mathfrak{s o}(3)
so(3) 中的元素, 对应 到同一个
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 。至少对于旋转角
θ
\theta
θ, 我们知道多转
36
0
∘
360^{\circ}
360∘ 和没有转是一样的一一它具有周期性。 但是, 如果我们把旋转角度固定在
±
π
\pm \pi
±π 之间, 那么李群和李代数元素是一一对应的。
3. 李代数求导与扰动
由于李群对加法不封闭
导致无法进行最优化求解,李代数由向量组成,具有良好的加法运算,
因此,使用李代数解决求导问题的思路分为两种:
- 用
李代数
表示姿态,然后根据李代数加法对李代数求导。 - 对
李群
左乘或右乘微小扰动,然后对该扰动求导,称为左扰动和右扰动模型。
第一种方式对应到李代数的求导模型,而第二种方式则对应到扰动模型。下面讨论这两种思路的异同。
1. 李代数求导
首先, 考虑
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 上的情况。假设我们对一个空间点
p
\boldsymbol{p}
p 进行了旋转, 得到了
R
p
\boldsymbol{R} \boldsymbol{p}
Rp 。现在, 要 计算旋转之后点的坐标相对于旋转的导数, 我们非正式地记为
∂
(
R
p
)
∂
R
\frac{\partial(\boldsymbol{R} p)}{\partial \boldsymbol{R}}
∂R∂(Rp)
由于
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 没有加法, 所以该导数无法按照导数的定义进行计算。设
R
\boldsymbol{R}
R 对应的李代数为
ϕ
\boldsymbol{\phi}
ϕ, 我 们转而计算:
∂
(
exp
(
ϕ
∧
)
p
)
∂
ϕ
\frac{\partial\left(\exp \left(\phi^{\wedge}\right) p\right)}{\partial \phi}
∂ϕ∂(exp(ϕ∧)p)
按照导数的定义, 有
∂
(
exp
(
ϕ
∧
)
p
)
∂
ϕ
=
lim
δ
ϕ
→
0
exp
(
(
ϕ
+
δ
ϕ
)
∧
)
p
−
exp
(
ϕ
∧
)
p
δ
ϕ
=
lim
δ
ϕ
→
0
exp
(
(
J
l
δ
ϕ
)
∧
)
exp
(
ϕ
∧
)
p
−
exp
(
ϕ
∧
)
p
δ
ϕ
=
lim
δ
ϕ
→
0
(
I
+
(
J
l
δ
ϕ
)
∧
)
exp
(
ϕ
∧
)
p
−
exp
(
ϕ
∧
)
p
δ
ϕ
=
lim
δ
ϕ
→
0
(
J
l
δ
ϕ
)
∧
exp
(
ϕ
∧
)
p
δ
ϕ
=
lim
δ
ϕ
→
0
−
(
exp
(
ϕ
∧
)
p
)
∧
J
l
δ
ϕ
δ
ϕ
=
−
(
R
p
)
∧
J
l
\begin{aligned} \frac{\partial\left(\exp \left(\phi^{\wedge}\right) p\right)}{\partial \phi} &=\lim _{\delta \phi \rightarrow 0} \frac{\exp \left((\phi+\delta \phi)^{\wedge}\right) p-\exp \left(\phi^{\wedge}\right) p}{\delta \phi} \\ &=\lim _{\delta \phi \rightarrow 0} \frac{\exp \left(\left(J_{l} \delta \phi\right)^{\wedge}\right) \exp \left(\phi^{\wedge}\right) p-\exp \left(\phi^{\wedge}\right) p}{\delta \phi} \\ &=\lim _{\delta \phi \rightarrow 0} \frac{\left(\boldsymbol{I}+\left(\boldsymbol{J}_{l} \delta \boldsymbol{\phi}\right)^{\wedge}\right) \exp \left(\boldsymbol{\phi}^{\wedge}\right) \boldsymbol{p}-\exp \left(\boldsymbol{\phi}^{\wedge}\right) \boldsymbol{p}}{\delta \boldsymbol{\phi}} \\ &=\lim _{\delta \boldsymbol{\phi} \rightarrow \mathbf{0}} \frac{\left(\boldsymbol{J}_{l} \delta \boldsymbol{\phi}\right)^{\wedge} \exp \left(\boldsymbol{\phi}^{\wedge}\right) \boldsymbol{p}}{\delta \boldsymbol{\phi}} \\ &=\lim _{\delta \boldsymbol{\phi} \rightarrow 0} \frac{-\left(\exp \left(\boldsymbol{\phi}^{\wedge}\right) \boldsymbol{p}\right)^{\wedge} \boldsymbol{J}_{l} \delta \boldsymbol{\phi}}{\delta \boldsymbol{\phi}}\\ &=-(\boldsymbol{R} \boldsymbol{p})^{\wedge} \boldsymbol{J}_{l} \end{aligned}
∂ϕ∂(exp(ϕ∧)p)=δϕ→0limδϕexp((ϕ+δϕ)∧)p−exp(ϕ∧)p=δϕ→0limδϕexp((Jlδϕ)∧)exp(ϕ∧)p−exp(ϕ∧)p=δϕ→0limδϕ(I+(Jlδϕ)∧)exp(ϕ∧)p−exp(ϕ∧)p=δϕ→0limδϕ(Jlδϕ)∧exp(ϕ∧)p=δϕ→0limδϕ−(exp(ϕ∧)p)∧Jlδϕ=−(Rp)∧Jl
由于这里仍然含有形式比较复杂的
J
l
\boldsymbol{J}_{l}
Jl,我们不太希望计算它。而下面要讲的扰动模型则提供了更简单的导数计算方式。
2. 李群左右扰动
左扰动求导:
对
R
R
R 进行一次左扰动
△
R
\triangle R
△R ,左乘在
R
R
R 左侧,
△
R
\triangle R
△R 对应的李代数设为
φ
,
R
p
\varphi, R p
φ,Rp 对
φ
\varphi
φ 求导:
∂
(
R
p
)
∂
φ
=
lim
φ
→
0
Δ
R
R
p
−
R
p
φ
=
lim
φ
→
0
exp
(
φ
∧
)
exp
(
ϕ
∧
)
p
−
exp
(
ϕ
∧
)
p
φ
=
lim
φ
→
0
(
I
+
φ
Λ
)
exp
(
ϕ
∧
)
p
−
exp
(
ϕ
∧
)
p
φ
=
lim
φ
→
0
φ
∧
exp
(
ϕ
∧
)
p
φ
=
lim
φ
→
0
φ
∧
R
p
φ
=
lim
φ
→
0
−
(
R
p
)
∧
φ
φ
=
−
(
R
p
)
∧
\begin{aligned} \frac{\partial(R p)}{\partial \varphi} &=\lim _{\varphi \rightarrow 0} \frac{\Delta R R p-R p}{\varphi}\\ &=\lim _{\varphi \rightarrow 0} \frac{\exp \left(\varphi^{\wedge}\right) \exp \left(\phi^{\wedge}\right) p-\exp \left(\phi^{\wedge}\right) p}{\varphi} \\ &= \lim _{\varphi \rightarrow 0} \frac{\left(I+\varphi^{\Lambda}\right) \exp \left(\phi^{\wedge}\right) p-\exp \left(\phi^{\wedge}\right) p}{\varphi}\\ &=\lim _{\varphi \rightarrow 0} \frac{\varphi^{\wedge} \exp \left(\phi^{\wedge}\right) p}{\varphi} \\ &=\lim _{\varphi \rightarrow 0} \frac{\varphi^{\wedge} R p}{\varphi}\\ &=\lim _{\varphi \rightarrow 0} \frac{-(R p)^{\wedge} \varphi}{\varphi}\\& =-(R p)^{\wedge} \end{aligned}
∂φ∂(Rp)=φ→0limφΔRRp−Rp=φ→0limφexp(φ∧)exp(ϕ∧)p−exp(ϕ∧)p=φ→0limφ(I+φΛ)exp(ϕ∧)p−exp(ϕ∧)p=φ→0limφφ∧exp(ϕ∧)p=φ→0limφφ∧Rp=φ→0limφ−(Rp)∧φ=−(Rp)∧
此式比上面用李代数求导少了一个雅克比计算,所以扰动模型更实用。
旋转点右扰动求导:
∂
(
R
p
)
∂
φ
=
lim
φ
→
0
R
e
x
p
(
φ
∧
)
p
−
R
p
φ
=
lim
φ
→
0
R
(
I
+
φ
∧
)
p
−
R
p
φ
=
lim
φ
→
0
R
φ
∧
p
φ
=
lim
φ
→
0
−
R
p
∧
φ
φ
=
−
R
p
∧
\begin{aligned} \frac{\partial(\mathbf{R p})}{\partial \varphi}&=\lim _{\varphi \rightarrow 0} \frac{\mathbf{Rexp}\left(\varphi^{\wedge}\right) \mathbf{p}-\mathbf{R p}}{\varphi}\\ &=\lim _{\varphi \rightarrow 0} \frac{\mathbf{R}\left(\mathbf{I+} \varphi^{\wedge}\right) \mathbf{p}-\mathbf{R p}}{\varphi}\\ &=\lim _{\varphi \rightarrow 0} \frac{\mathbf{R} \varphi^{\wedge} \mathbf{p}}{\varphi}\\ &=\lim _{\varphi \rightarrow 0} \frac{-\mathbf{R p}^{\wedge} \varphi}{\varphi}\\ &=-\mathbf{R p}^{\wedge} \end{aligned}
∂φ∂(Rp)=φ→0limφRexp(φ∧)p−Rp=φ→0limφR(I+φ∧)p−Rp=φ→0limφRφ∧p=φ→0limφ−Rp∧φ=−Rp∧
3. 旋转连乘雅克比
d
ln
(
R
1
R
2
)
∨
d
R
2
=
lim
ϕ
→
0
ln
(
R
1
R
2
exp
(
ϕ
∧
)
)
∨
−
ln
(
R
1
R
2
)
∨
ϕ
=
lim
ϕ
→
0
ln
(
R
1
R
2
)
∨
+
J
r
−
1
ϕ
−
ln
(
R
1
R
2
)
∨
ϕ
=
J
r
−
1
(
ln
(
R
1
R
2
)
∨
)
\begin{aligned} \frac{\mathrm{d} \ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}}{\mathrm{d} \mathbf{R}_{2}} &=\lim _{\phi \rightarrow \mathbf{0}} \frac{\ln \left(\mathbf{R}_{1} \mathbf{R}_{2} \exp \left(\phi^{\wedge}\right)\right)^{\vee}-\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}}{\phi} \\ &=\lim _{\phi \rightarrow \mathbf{0}} \frac{\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}+\mathbf{J}_{r}^{-1} \boldsymbol{\phi}-\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}}{\phi} \\ &=\mathbf{J}_{r}^{-1}\left(\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}\right) \end{aligned}
dR2dln(R1R2)∨=ϕ→0limϕln(R1R2exp(ϕ∧))∨−ln(R1R2)∨=ϕ→0limϕln(R1R2)∨+Jr−1ϕ−ln(R1R2)∨=Jr−1(ln(R1R2)∨)
其中用到了对
∀
R
\forall \mathbf{R}
∀R :
ln
(
R
exp
(
ϕ
∧
)
)
∨
=
ln
(
R
)
∨
+
J
r
−
1
ϕ
\ln \left(\mathbf{R} \exp \left(\phi^{\wedge}\right)\right)^{\vee}=\ln (\mathbf{R})^{\vee}+\mathbf{J}_{r}^{-1} \phi
ln(Rexp(ϕ∧))∨=ln(R)∨+Jr−1ϕ
和
J
r
−
1
\mathbf{J}_{r}^{-1}
Jr−1 为
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 上的右雅可比:
J
r
−
1
(
θ
ω
)
=
θ
2
cot
θ
2
I
+
(
1
−
θ
2
cot
θ
2
)
ω
ω
T
+
θ
2
ω
∧
\mathbf{J}_{r}^{-1}(\theta \boldsymbol{\omega})=\frac{\theta}{2} \cot \frac{\theta}{2} \mathbf{I}+\left(1-\frac{\theta}{2} \cot \frac{\theta}{2}\right) \boldsymbol{\omega} \boldsymbol{\omega}^{\mathrm{T}}+\frac{\theta}{2} \boldsymbol{\omega}^{\wedge}
Jr−1(θω)=2θcot2θI+(1−2θcot2θ)ωωT+2θω∧
旋转连乘的雅可比:
d
ln
(
R
1
R
2
)
∨
d
R
1
=
lim
ϕ
→
0
ln
(
R
1
exp
(
ϕ
∧
)
R
2
)
∨
−
ln
(
R
1
R
2
)
∨
ϕ
=
lim
ϕ
→
0
ln
(
R
1
R
2
exp
(
(
R
2
T
ϕ
)
∧
)
)
∨
−
ln
(
R
1
R
2
)
∨
ϕ
=
J
r
−
1
(
ln
(
R
1
R
2
)
∨
)
R
2
T
\begin{aligned} \frac{\mathrm{d} \ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}}{\mathrm{d} \mathbf{R}_{1}} &=\lim _{\phi \rightarrow 0} \frac{\ln \left(\mathbf{R}_{1} \exp \left(\phi^{\wedge}\right) \mathbf{R}_{2}\right)^{\vee}-\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}}{\phi} \\ &=\lim _{\phi \rightarrow 0} \frac{\ln \left(\mathbf{R}_{1} \mathbf{R}_{2} \exp \left(\left(\mathbf{R}_{2}^{T} \phi\right)^{\wedge}\right)\right)^{\vee}-\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}}{\phi} \\ &=\mathbf{J}_{r}^{-1}\left(\ln \left(\mathbf{R}_{1} \mathbf{R}_{2}\right)^{\vee}\right) \mathbf{R}_{2}^{T} \end{aligned}
dR1dln(R1R2)∨=ϕ→0limϕln(R1exp(ϕ∧)R2)∨−ln(R1R2)∨=ϕ→0limϕln(R1R2exp((R2Tϕ)∧))∨−ln(R1R2)∨=Jr−1(ln(R1R2)∨)R2T
这里用到了
S
O
(
3
)
\mathrm{SO}(3)
SO(3) 的伴随性质:
R
T
exp
(
ϕ
∧
)
R
=
exp
(
(
R
T
ϕ
)
∧
)
\mathbf{R}^{T} \exp \left(\boldsymbol{\phi}^{\wedge}\right) \mathbf{R}=\exp \left(\left(\mathbf{R}^{T} \boldsymbol{\phi}\right)^{\wedge}\right)
RTexp(ϕ∧)R=exp((RTϕ)∧)
4. 总结
六、IMU模型
1. 基本模型
IMU 误差模型
误差分类
• 加速度计和陀螺仪的误差可以分为:确定性误差,随机误差。
• 确定性误差可以事先标定确定
,包括:bias, scale …
• 随机误差通常假设噪声服从高斯分布
,包括:高斯白噪声,bias随机游走…
忽略scale,只考虑高斯白噪声n和bias随机游走b:
ω
~
b
=
ω
b
+
b
g
+
n
g
a
~
b
=
q
b
w
(
a
w
+
g
w
)
+
b
a
+
n
a
\begin{aligned} \tilde{\boldsymbol{\omega}}^{b} &=\boldsymbol{\omega}^{b}+\mathbf{b}^{g}+\mathbf{n}^{g} \\ \tilde{\mathbf{a}}^{b} &=\mathbf{q}_{b w}\left(\mathbf{a}^{w}+\mathbf{g}^{w}\right)+\mathbf{b}^{a}+\mathbf{n}^{a} \end{aligned}
ω~ba~b=ωb+bg+ng=qbw(aw+gw)+ba+na
这是VIO中的IMU模型,上标有波浪线的表示测量值,右上的b表示body系,w表示世界系或惯性系,a表示acc,g表示gyro。PVQ表示为:
p
˙
w
b
t
=
v
t
w
v
˙
t
w
=
a
t
w
q
˙
w
b
t
=
q
w
b
t
⊗
[
0
1
2
ω
b
t
]
\begin{aligned} \dot{\mathbf{p}}_{w b_{t}} &=\mathbf{v}_{t}^{w} \\ \dot{\mathbf{v}}_{t}^{w} &=\mathbf{a}_{t}^{w} \\ \dot{\mathbf{q}}_{w b_{t}} &=\mathbf{q}_{w b_{t}} \otimes\left[\begin{array}{c} 0 \\ \frac{1}{2} \boldsymbol{\omega}^{b_{t}} \end{array}\right] \end{aligned}
p˙wbtv˙twq˙wbt=vtw=atw=qwbt⊗[021ωbt]
2. 连续时间下 IMU 运动模型
根据上面的导数关系, 可以从第
i
\mathrm{i}
i 时刻的
P
V
Q
\mathrm{PVQ}
PVQ, 通过对 IMU 的测量 值进行积分, 得到第
j
\mathrm{j}
j 时刻的 PVQ:
p
w
b
j
=
p
w
b
i
+
v
i
w
Δ
t
+
∬
t
∈
[
i
,
j
]
(
q
w
b
t
a
b
t
−
g
w
)
δ
t
2
v
j
w
=
v
i
w
+
∫
t
∈
[
i
,
j
]
(
q
w
b
t
a
b
t
−
g
w
)
δ
t
q
w
b
j
=
∫
t
∈
[
i
,
j
]
q
w
b
t
⊗
[
0
1
2
ω
b
t
]
δ
t
\begin{aligned} &\mathbf{p}_{w b_{j}}=\mathbf{p}_{w b_{i}}+\mathbf{v}_{i}^{w} \Delta t+\iint_{t \in[i, j]}\left(\mathbf{q}_{w b_{t}} \mathbf{a}^{b_{t}}-\mathbf{g}^{w}\right) \delta t^{2} \\ &\mathbf{v}_{j}^{w}=\mathbf{v}_{i}^{w}+\int_{t \in[i, j]}\left(\mathbf{q}_{w b_{t}} \mathbf{a}^{b_{t}}-\mathbf{g}^{w}\right) \delta t \\ &\mathbf{q}_{w b_{j}}=\int_{t \in[i, j]} \mathbf{q}_{w b_{t}} \otimes\left[\begin{array}{c} 0 \\ \frac{1}{2} \end{array}{\boldsymbol{\omega}}^{b_{t}}\right] \delta t \end{aligned}
pwbj=pwbi+viwΔt+∬t∈[i,j](qwbtabt−gw)δt2vjw=viw+∫t∈[i,j](qwbtabt−gw)δtqwbj=∫t∈[i,j]qwbt⊗[021ωbt]δt
3. 运动模型的离散积分一一欧拉法
使用欧拉法, 即两个相邻时刻
k
k
k 到
k
+
1
k+1
k+1 的位姿是用第
k
k
k 时刻的测量 值
a
,
ω
\mathrm{a}, \omega
a,ω 来计算。
p
w
b
k
+
1
=
p
w
b
k
+
v
k
w
Δ
t
+
1
2
a
Δ
t
2
v
k
+
1
w
=
v
k
w
+
a
Δ
t
q
w
b
k
+
1
=
q
w
b
k
⊗
[
1
1
2
ω
δ
t
]
\begin{aligned} &\mathbf{p}_{w b_{k+1}}=\mathbf{p}_{w b_{k}}+\mathbf{v}_{k}^{w} \Delta t+\frac{1}{2} \mathbf{a} \Delta t^{2} \\ &\mathbf{v}_{k+1}^{w}=\mathbf{v}_{k}^{w}+\mathbf{a} \Delta t \\ &\mathbf{q}_{w b_{k+1}}=\mathbf{q}_{w b_{k}} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \boldsymbol{\omega} \delta t \end{array}\right] \end{aligned}
pwbk+1=pwbk+vkwΔt+21aΔt2vk+1w=vkw+aΔtqwbk+1=qwbk⊗[121ωδt]
其中,
a
=
q
w
b
k
(
a
b
k
−
b
k
a
)
−
g
w
ω
=
ω
b
k
−
b
k
g
\begin{aligned} &\mathbf{a}=\mathbf{q}_{w b_{k}}\left(\mathbf{a}^{b_{k}}-\mathbf{b}_{k}^{a}\right)-\mathbf{g}^{w} \\ &\boldsymbol{\omega}=\boldsymbol{\omega}^{b_{k}}-\mathbf{b}_{k}^{g} \end{aligned}
a=qwbk(abk−bka)−gwω=ωbk−bkg
4. 运动模型的离散积分一一中值积分法
p
w
b
k
+
1
=
p
w
b
k
+
v
k
w
Δ
t
+
1
2
a
Δ
t
2
v
k
+
1
w
=
v
k
w
+
a
Δ
t
q
w
b
k
+
1
=
q
w
b
k
⊗
[
1
1
2
ω
δ
t
]
\begin{aligned} &\mathbf{p}_{w b_{k+1}}=\mathbf{p}_{w b_{k}}+\mathbf{v}_{k}^{w} \Delta t+\frac{1}{2} \mathbf{a} \Delta t^{2} \\ &\mathbf{v}_{k+1}^{w}=\mathbf{v}_{k}^{w}+\mathbf{a} \Delta t \\ &\mathbf{q}_{w b_{k+1}}=\mathbf{q}_{w b_{k}} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \omega \delta t \end{array}\right] \end{aligned}
pwbk+1=pwbk+vkwΔt+21aΔt2vk+1w=vkw+aΔtqwbk+1=qwbk⊗[121ωδt]
其中,
a
=
1
2
[
q
w
b
k
(
a
b
k
−
b
k
a
)
−
g
w
+
q
w
b
k
+
1
(
a
b
k
+
1
−
b
k
a
)
−
g
w
]
ω
=
1
2
[
(
ω
b
k
−
b
k
g
)
+
(
ω
b
k
+
1
−
b
k
g
)
]
\begin{aligned} &\mathbf{a}=\frac{1}{2}\left[\mathbf{q}_{w b_{k}}\left(\mathbf{a}^{b_{k}}-\mathbf{b}_{k}^{a}\right)-\mathbf{g}^{w}+\mathbf{q}_{w b_{k+1}}\left(\mathbf{a}^{b_{k+1}}-\mathbf{b}_{k}^{a}\right)-\mathbf{g}^{w}\right] \\ &\boldsymbol{\omega}=\frac{1}{2}\left[\left(\boldsymbol{\omega}^{b_{k}}-\mathbf{b}_{k}^{g}\right)+\left(\boldsymbol{\omega}^{b_{k+1}}-\mathbf{b}_{k}^{g}\right)\right] \end{aligned}
a=21[qwbk(abk−bka)−gw+qwbk+1(abk+1−bka)−gw]ω=21[(ωbk−bkg)+(ωbk+1−bkg)]
更加仔细的推到过程见另一篇优秀的博客———IMU模型