Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(五)
3. Joint optimization
3.2 IMU preintegration
3.3.2 IMU preintegration
在开始后面的推导之前,我们先整理一下上一篇博客中推导的公式:
R
i
T
R
j
=
∏
k
=
i
j
−
1
E
x
p
(
(
w
k
~
−
η
w
k
−
b
w
k
)
Δ
t
)
=
Δ
R
i
j
R
i
T
(
v
j
−
v
i
−
g
Δ
t
i
j
)
=
∑
k
=
i
j
−
1
(
Δ
R
i
k
(
a
k
~
−
η
a
k
−
b
a
k
)
Δ
t
)
=
Δ
v
i
j
R
i
T
(
p
j
−
p
i
−
1
2
g
Δ
t
i
j
2
−
v
i
Δ
t
i
j
)
=
∑
k
=
i
j
−
1
(
Δ
v
i
k
Δ
t
+
1
2
Δ
R
i
k
(
a
~
k
−
η
a
k
−
b
a
k
)
Δ
t
2
)
=
Δ
p
i
j
R_i^TR_j=\prod_{k=i}^{j-1}Exp((\tilde{w_k}-\eta_{w}^k-b_w^k)\Delta t)=\Delta R_{ij}\\ R_i^T(v_j-v_i-g\Delta t_{ij})=\sum_{k=i}^{j-1}(\Delta R_{ik}(\tilde {a_k}-\eta_a^k-b_a^k)\Delta t)=\Delta v_{ij}\\ R_i^T(p_j-p_i-\frac{1}{2}g\Delta t_{ij}^2-v_i\Delta t_{ij})=\sum_{k=i}^{j-1}(\Delta v_{ik}\Delta t+\frac{1}{2}\Delta R_{ik}(\tilde a_k-\eta_a^k-b_a^k)\Delta t^2)=\Delta p_{ij}
RiTRj=k=i∏j−1Exp((wk~−ηwk−bwk)Δt)=ΔRijRiT(vj−vi−gΔtij)=k=i∑j−1(ΔRik(ak~−ηak−bak)Δt)=ΔvijRiT(pj−pi−21gΔtij2−viΔtij)=k=i∑j−1(ΔvikΔt+21ΔRik(a~k−ηak−bak)Δt2)=Δpij
非常好,现在计算出来的增量
Δ
=
[
Δ
R
i
j
,
Δ
v
i
j
,
Δ
p
i
j
]
T
\Delta =[\Delta R_{ij},\Delta v_{ij},\Delta p_{ij}]^T
Δ=[ΔRij,Δvij,Δpij]T就不依赖于
i
i
i和
j
j
j时刻的状态了,但是还遗留了一个问题,就是推导出来的增量还依赖于偏置
b
w
,
b
a
b_w,b_a
bw,ba和噪声
η
w
,
η
a
\eta_w,\eta_a
ηw,ηa。在VINS的原始论文中,做了这样一个假设,即假设偏置在两个关键帧之间是不发生变化的,也即:
b
a
i
=
b
a
i
+
1
=
.
.
.
=
b
a
j
−
1
,
b
w
i
=
b
w
i
+
1
=
.
.
.
=
b
w
j
−
1
b_a^i=b_a^{i+1}=...=b_a^{j-1},b_w^i=b_w^{i+1}=...=b_w^{j-1}
bai=bai+1=...=baj−1,bwi=bwi+1=...=bwj−1
现在假设偏置
b
a
i
b_a^i
bai和
b
w
i
b_w^{i}
bwi已知,则可以将增量
Δ
\Delta
Δ进一步化简。为了简化书写,有的地方不再显示的书写叉乘
∧
\wedge
∧符号,还请注意。我们首先来看旋转矩阵:
Δ
R
i
j
=
∏
k
=
i
j
−
1
E
x
p
(
(
w
k
~
−
b
w
k
−
η
w
k
)
Δ
t
)
\Delta R_{ij}=\prod_{k=i}^{j-1}Exp((\tilde{w_k}-b_w^k-\eta_{w}^k)\Delta t)
ΔRij=k=i∏j−1Exp((wk~−bwk−ηwk)Δt)
怎样才能把噪声分离出来呢?我刚开始看的时候觉得,这还不简单吗,高中生都会啊
exp
(
a
+
b
)
=
exp
(
a
)
exp
(
b
)
\exp(a+b)=\exp(a)\exp(b)
exp(a+b)=exp(a)exp(b),这不就把噪声分离出来了吗!后来仔细想了想,好像有一丝丝不对,对于标量来说上式肯定成立,但是我们可是矩阵的指数函数啊!
exp
(
a
∧
+
b
∧
)
=
exp
(
a
∧
)
exp
(
b
∧
)
\exp(a\wedge+b\wedge)=\exp(a\wedge)\exp(b\wedge)
exp(a∧+b∧)=exp(a∧)exp(b∧)成立吗?
我们从其表示的物理意义上考虑一下。
exp
(
a
∧
)
\exp(a\wedge)
exp(a∧)表示的是旋转轴为向量a方向上的单位向量且旋转角为
∣
∣
a
∣
∣
2
||a||_2
∣∣a∣∣2的旋转矩阵,
exp
(
b
∧
)
\exp(b\wedge)
exp(b∧)对应的是旋转轴为向量
b
b
b方向上的单位向量且旋转角度为
∣
∣
b
∣
∣
2
||b||_2
∣∣b∣∣2的旋转矩阵,而
exp
(
a
∧
+
b
∧
)
\exp(a\wedge+b\wedge)
exp(a∧+b∧)表示的则是旋转轴为向量
a
+
b
a+b
a+b对应的单位向量且旋转角度为
∣
∣
a
+
b
∣
∣
2
||a+b||_2
∣∣a+b∣∣2的旋转矩阵,如果上式成立,那岂不是说:
先绕
a
a
a旋转
∣
∣
a
∣
∣
2
||a||_2
∣∣a∣∣2度,再绕
b
b
b旋转
∣
∣
b
∣
∣
2
||b||_2
∣∣b∣∣2度,等同于绕轴
a
+
b
a+b
a+b旋转
∣
∣
a
+
b
∣
∣
2
||a+b||_2
∣∣a+b∣∣2度????再具体点,绕z轴
[
0
,
0
,
1
]
T
[0,0,1]^T
[0,0,1]T旋转45度,再绕x轴
[
1
,
0
,
0
]
T
[1,0,0]^T
[1,0,0]T旋转45度,等同于绕
[
1
,
0
,
1
]
T
[1,0,1]^T
[1,0,1]T旋转
45
×
2
45\times\sqrt2
45×2度????
这是什么神仙定律啊!!当然了,事实上这肯定是不对的,于是这可咋把噪声分离出来呢?聪明的数学家们人狠话不多,并直接向你脸上甩了个Baker-Campell-Hausdauff(BCH)公式,且当
a
a
a或者
b
b
b的其中一个模很小的时候,可以得到一阶近似:
{
exp
(
a
∧
+
b
∧
)
≈
exp
(
a
∧
)
exp
(
J
r
(
a
)
b
∧
)
,
b
为
穷
小
量
exp
(
a
∧
+
b
∧
)
≈
exp
(
J
l
(
b
)
a
∧
)
exp
(
b
∧
)
,
a
为
无
穷
小
量
\begin{cases} \exp(a\wedge+b\wedge)\approx\exp(a\wedge)\exp(J_r(a)b\wedge),\ \ b为穷小量\\ \exp(a\wedge+b\wedge)\approx\exp(J_l(b)a\wedge)\exp(b\wedge),\ \ a为无穷小量 \end{cases}
{exp(a∧+b∧)≈exp(a∧)exp(Jr(a)b∧), b为穷小量exp(a∧+b∧)≈exp(Jl(b)a∧)exp(b∧), a为无穷小量
虎扑J_r注意了,式中的
J
r
J_r
Jr和
J
l
J_l
Jl表示的可是
S
O
(
3
)
SO(3)
SO(3)的右雅克比和左雅克比。哭了,摊牌了,这个东西我真的推导不出来,关于这个BCH公式、BCH的无穷小一阶近似以及雅克比的具体形式的推导,感兴趣的可以去参考神书吧[1]。
总之有了这个公式后,我们可以把旋转矩阵中的噪声分离出来了,即:
Δ
R
i
j
≈
∏
k
=
i
j
−
1
exp
(
(
w
~
k
−
b
w
i
)
Δ
t
)
exp
(
−
J
r
η
w
k
Δ
t
)
=
Δ
R
i
j
~
exp
(
−
δ
ϕ
i
j
)
\Delta R_{ij}\approx\prod_{k=i}^{j-1}\exp((\tilde w_k-b_w^i)\Delta t)\exp(-J_r\eta_w^k\Delta t)=\Delta \tilde{R_{ij}}\exp(-\delta\phi_{ij})
ΔRij≈k=i∏j−1exp((w~k−bwi)Δt)exp(−JrηwkΔt)=ΔRij~exp(−δϕij)
接下来,为了求速度增量
v
i
j
v_{ij}
vij,我们需要把当前计算好的
Δ
R
i
j
\Delta R_{ij}
ΔRij带入到
Δ
v
i
j
\Delta v_{ij}
Δvij中,即:
Δ
v
i
j
≈
∑
k
=
i
j
−
1
(
Δ
R
i
k
~
exp
(
−
δ
ϕ
i
j
)
(
a
k
~
−
b
a
i
−
η
a
k
)
Δ
t
)
\Delta v_{ij}\approx\sum_{k=i}^{j-1}(\Delta \tilde{R_{ik}}\exp(-\delta \phi_{ij})(\tilde {a_k}-b_a^i-\eta_a^k)\Delta t)
Δvij≈k=i∑j−1(ΔRik~exp(−δϕij)(ak~−bai−ηak)Δt)
为了把
δ
ϕ
i
j
\delta \phi_{ij}
δϕij分离出来,我们需要对
exp
(
−
δ
ϕ
i
j
)
\exp(-\delta \phi_{ij})
exp(−δϕij)进行泰勒展开和一阶近似,即
e
x
p
(
−
δ
ϕ
i
j
)
≈
I
−
δ
ϕ
i
j
exp(-\delta \phi_{ij})\approx I-\delta \phi_{ij}
exp(−δϕij)≈I−δϕij。然后将其带入上式:
Δ
v
i
j
≈
∑
k
=
i
j
−
1
(
Δ
R
i
k
~
(
I
−
δ
ϕ
i
j
)
(
a
k
~
−
b
a
i
−
η
a
k
)
Δ
t
)
=
(
∑
k
=
i
j
−
1
Δ
R
i
k
~
(
a
k
~
−
b
a
i
)
)
−
δ
v
i
j
=
Δ
v
i
j
~
−
δ
v
i
j
\Delta v_{ij}\approx\sum_{k=i}^{j-1}(\Delta \tilde{R_{ik}}(I-\delta \phi_{ij})(\tilde {a_k}-b_a^i-\eta_a^k)\Delta t)\\=(\sum_{k=i}^{j-1}\Delta \tilde{R_{ik}}(\tilde {a_k}-b_a^i))-\delta v_{ij}=\Delta \tilde{v_{ij}}-\delta v_{ij}
Δvij≈k=i∑j−1(ΔRik~(I−δϕij)(ak~−bai−ηak)Δt)=(k=i∑j−1ΔRik~(ak~−bai))−δvij=Δvij~−δvij
同样可以得到关于位置的表示:
Δ
p
i
j
=
Δ
p
i
j
~
−
δ
p
i
j
\Delta p_{ij}=\Delta \tilde{p_{ij}}-\delta p_{ij}
Δpij=Δpij~−δpij
最后整理一下:
Δ
R
i
j
~
=
R
i
T
R
j
exp
(
δ
ϕ
i
j
)
Δ
v
i
j
~
=
R
i
T
(
v
j
−
v
i
−
g
Δ
t
i
j
)
+
δ
v
i
j
Δ
p
i
j
~
=
R
i
T
(
p
j
−
p
i
−
v
i
Δ
t
i
j
−
1
2
g
Δ
t
i
j
2
)
+
δ
p
i
j
\Delta \tilde{R_{ij}}=R_i^TR_j\exp(\delta \phi_{ij})\\ \Delta \tilde{v_{ij}}=R_i^T(v_j-v_i-g\Delta t_{ij})+\delta v_{ij}\\ \Delta\tilde{p_{ij}}=R_i^T(p_j-p_i-v_i\Delta t_{ij}-\frac{1}{2}g\Delta t_{ij}^2)+\delta p_{ij}
ΔRij~=RiTRjexp(δϕij)Δvij~=RiT(vj−vi−gΔtij)+δvijΔpij~=RiT(pj−pi−viΔtij−21gΔtij2)+δpij
看起来是不是很漂亮!!再对这些噪声做一个高斯噪声假设,再来个Negative-log,数学形式不要太完美。