VIO第3讲:基于优化的IMU与视觉信息融合之IMU预积分
文章目录
- VIO第3讲:基于优化的IMU与视觉信息融合之IMU预积分
- 1 IMU预积分
- 1.1 IMU常规积分—连续时间—不适用
- 1.2 预积分形式
- ① 定义
- ② 如何推导出预积分定义
- ③ 用预积分表达IMU积分公式
- ④ 预积分误差(残差)
- ⑤ 预积分的离散形式
- 1.3 为什么采用预积分
- 1.4 预积分量的误差递推(噪声模型)
- ① 基于一阶泰勒展开的误差递推方程
- ② 基于误差随时间变化的递推方程
- ③ 预积分误差传递的形式
- 1.4 零偏更新
- 2 VIO残差函数的构建
- 2.1 VIO系统的状态量
- 2.2 目标函数
1 IMU预积分
1.1 IMU常规积分—连续时间—不适用
旋转矩阵表示(没有写出噪声项,0均值)
p b k + 1 w = p b k w + ν b k w Δ t k + ∬ t ∈ [ k , k + 1 ] [ R t w ( a ^ t − b a t ) − g w ] d t 2 v b k + 1 w = v b k w + ∫ t ∈ [ k , k + 1 ] [ R t w ( a ^ t − b a t ) − g w ] d t q b k + 1 w = q b k w ⊗ ∫ t ∈ [ k , k + 1 ] 1 2 Ω ( ω ^ t − b ω t ) q t b k d t \begin{gathered} p_{b_{k+1}}^{w}=p_{b_{k}}^{w}+\nu_{b_{k}}^{w}\Delta t_{k}+\iint_{t\in[k,k+1]}\bigl[R_{t}^{w}\bigl(\widehat{a}_{t}-b_{a_{t}}\bigr)-g^{w}\bigr]dt^{2} \\ v_{b_{k+1}}^{w}=v_{b_{k}}^{w}+\int_{t\in[k,k+1]}\bigl[R_{t}^{w}\bigl(\widehat{a}_{t}-b_{a_{t}}\bigr)-g^{w}\bigr]dt \\ q_{b_{k+1}}^{w}=q_{b_{k}}^{w}\otimes\int_{t\in[k,k+1]}\frac{1}{2}\Omega(\widehat{\omega}_{t}-b_{\omega_{t}})q_{t}^{b_{k}}dt \end{gathered} pbk+1w=pbkw+νbkwΔtk+∬t∈[k,k+1][Rtw(a t−bat)−gw]dt2vbk+1w=vbkw+∫t∈[k,k+1][Rtw(a t−bat)−gw]dtqbk+1w=qbkw⊗∫t∈[k,k+1]21Ω(ω t−bωt)qtbkdt
四元数表示—上面是k时刻至k+1时刻,下面是
i-j
时刻,道理相同
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}_{wb_{j}}=\mathbf{p}_{wb_{i}}+\mathbf{v}_{i}^{w}\Delta t+\int\int_{t\in[i,j]}(\mathbf{q}_{wb_{t}}\mathbf{a}^{b_{t}}-\mathbf{g}^{w})\delta t^{2} \\ &\begin{aligned}\mathbf{v}_j^w=\mathbf{v}_i^w+\int_{t\in[i,j]}(\mathbf{q}_{wb_t}\mathbf{a}^{b_t}-\mathbf{g}^w)\delta t\end{aligned} \\ &\mathbf{q}_{wb_j}=\int_{t\in[i,j]}\mathbf{q}_{wb_t}\otimes\begin{bmatrix}0\\\frac{1}{2}\boldsymbol{\omega}^{b_t}\end{bmatrix}\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
对于上面积分的离散形式-----中值法----把定积分展开!认为区间内加速度等于两个边界对应的平均值
p b i + 1 w = p b i w + v b i w δ t + 1 2 a ^ ˉ i δ t 2 v b i + 1 w = v b i w + a ^ ˉ i δ t q b i + 1 w = q b i w ⊗ [ 1 1 2 ω ‾ i δ t ] a ^ ˉ i = 1 2 [ q i ( a ^ i − b a i ) − g w + q i + 1 ( a ^ i + 1 − b a i ) − g w ] ω ^ ‾ i = 1 2 ( ω ^ i + ω ^ i + 1 ) − b ω i \begin{gathered} p_{b_{i+1}}^{w}=p_{b_{i}}^{w}+v_{b_{i}}^{w}\delta t+\frac{1}{2}\bar{\hat{a}}_{i}\delta t^{2} \\ v_{b_{i+1}}^{w}=v_{b_{i}}^{w}+\bar{\hat{a}}_{i}\delta t \\ q_{b_{i+1}}^{w}=q_{b_{i}}^{w}\otimes\left[\frac1{\frac12\overline{\omega}_{i}\delta t}\right] \\ \bar{\hat{a}}_i=\frac{1}{2}\bigl[q_{i}\bigl(\widehat{a}_{i}-b_{a_{i}}\bigr)-g^{w}+q_{i+1}\bigl(\widehat{a}_{i+1}-b_{a_{i}}\bigr)-g^{w}\bigr] \\ \overline{\widehat{\omega}}_{i}=\frac{1}{2}\left(\widehat{\omega}_{i}+\widehat{\omega}_{i+1}\right)-b_{\omega_{i}} \end{gathered} pbi+1w=pbiw+vbiwδt+21a^ˉiδt2vbi+1w=vbiw+a^ˉiδtqbi+1w=qbiw⊗[21ωiδt1]a^ˉi=21[qi(a i−bai)−gw+qi+1(a i+1−bai)−gw]ω i=21(ω i+ω i+1)−bωi
1.2 预积分形式
预积分量是利用传感器数据积分得到的观测量。它和真实值即差一个噪声量!
① 定义
预积分量:将一段时间内的 IMU
数据直接积分起来就得到了预积分量。
VINS
中定义,注意加速度和角速度都是IMU坐标系,展开后会带上噪声与偏置。
α
b
i
b
j
=
∫
∫
t
∈
[
i
,
j
]
(
q
b
i
b
t
a
b
t
)
δ
t
2
β
b
i
b
j
=
∫
t
∈
[
i
,
j
]
(
q
b
i
b
t
a
b
t
)
δ
t
q
b
i
b
j
=
∫
t
∈
[
i
,
j
]
q
b
i
b
t
⊗
[
0
1
2
ω
b
t
]
δ
t
\begin{aligned} &\boldsymbol{\alpha}_{b_{i}b_{j}} \begin{aligned}=\int\int_{t\in[i,j]}(\mathbf{q}_{b_ib_t}\mathbf{a}^{b_t})\delta t^2\end{aligned} \\ &\boldsymbol{\beta}_{b_ib_j} =\int_{t\in[i,j]}(\mathbf{q}_{b_ib_t}\mathbf{a}^{b_t})\delta t \\ &\mathbf{q}_{b_i}b_j =\int_{t\in[i,j]}\mathbf{q}_{b_ib_t}\otimes\begin{bmatrix}0\\\frac12\boldsymbol{\omega}^{b_t}\end{bmatrix}\delta t \end{aligned}
αbibj=∫∫t∈[i,j](qbibtabt)δt2βbibj=∫t∈[i,j](qbibtabt)δtqbibj=∫t∈[i,j]qbibt⊗[021ωbt]δt
高博新书的定义如下(离散,已经噪声分离)
Δ
R
~
i
j
=
∏
k
=
i
j
−
1
Exp
(
(
ω
~
k
−
b
g
,
i
)
Δ
t
)
\Delta\tilde{\boldsymbol{R}}_{ij}=\prod_{k=i}^{j-1}\operatorname{Exp}\left((\tilde{\boldsymbol{\omega}}_k-\boldsymbol{b}_{g,i})\Delta t\right)
ΔR~ij=k=i∏j−1Exp((ω~k−bg,i)Δt)
Δ v ~ i j = ∑ k = i j − 1 Δ R ~ i k ( a ~ k − b a , i ) Δ t . \begin{aligned}\Delta\tilde{\boldsymbol{v}}_{ij}=\sum_{k=i}^{j-1}\Delta\tilde{\boldsymbol{R}}_{ik}(\tilde{\boldsymbol{a}}_k-\boldsymbol{b}_{a,i})\Delta t.\end{aligned} Δv~ij=k=i∑j−1ΔR~ik(a~k−ba,i)Δt.
Δ p ~ i j = ∑ k = i j − 1 [ ( Δ v ~ i k Δ t ) + 1 2 Δ R ~ i k ( a ~ k − b a , i ) Δ t 2 ] . \Delta\tilde{p}_{ij}=\sum_{k=i}^{j-1}\left[(\Delta\tilde{\boldsymbol{v}}_{ik}\Delta t)+\frac{1}{2}\Delta\tilde{\boldsymbol{R}}_{ik}(\tilde{\boldsymbol{a}}_{k}-b_{a,i})\Delta t^{2}\right]. Δp~ij=k=i∑j−1[(Δv~ikΔt)+21ΔR~ik(a~k−ba,i)Δt2].
② 如何推导出预积分定义
就是把旋转进行了一个拆分,后面的项就和状态量无关了!这里也可以推出预积分残差,把非预积分量都移到等式坐标,即左边状态量,右边预积分量。
③ 用预积分表达IMU积分公式
说白了,就是IMU
只取和cam
相同的帧,第i
帧到第j
帧之间的量会由预积分量来表示。
[
p
w
b
j
v
j
w
q
w
b
j
b
j
a
b
j
g
]
=
[
p
w
b
i
+
v
i
w
Δ
t
−
1
2
g
w
Δ
t
2
+
q
w
b
i
α
b
i
b
j
v
i
w
−
g
w
Δ
t
+
q
w
b
i
β
b
i
b
j
q
w
b
i
q
b
i
b
j
b
i
a
b
i
g
]
\begin{bmatrix}\mathbf{p}_{wb_j}\\\mathbf{v}_j^w\\\mathbf{q}_{wb_j}\\\mathbf{b}_j^a\\\mathbf{b}_j^g\end{bmatrix}=\begin{bmatrix}\mathbf{p}_{wb_i}+\mathbf{v}_i^w\Delta t-\frac12\mathbf{g}^w\Delta t^2+\mathbf{q}_{wb_i}\boldsymbol{\alpha}_{b_ib_j}\\\mathbf{v}_i^w-\mathbf{g}^w\Delta t+\mathbf{q}_{wb_i}\boldsymbol{\beta}_{b_ib_j}\\\mathbf{q}_{wb_i}\mathbf{q}_{b_ib_j}\\\mathbf{b}_i^a\\\mathbf{b}_i^g\end{bmatrix}
pwbjvjwqwbjbjabjg
=
pwbi+viwΔt−21gwΔt2+qwbiαbibjviw−gwΔt+qwbiβbibjqwbiqbibjbiabig
④ 预积分误差(残差)
定义:一段时间内 IMU
构建的预积分量作为测量值,对两时刻之间的状态量进行约束。(预积分是通过传感器数据a
和w
积分得到的观测量,状态量pvq
推断的是预测值)
[
r
p
r
q
r
v
r
b
a
r
b
a
]
15
×
1
=
[
q
b
i
w
(
p
w
b
j
−
p
w
b
i
−
v
i
w
Δ
t
+
1
2
g
w
Δ
t
2
)
−
α
b
i
b
j
2
[
q
b
j
b
i
⊗
(
q
b
i
w
⊗
q
w
b
j
)
]
x
y
z
q
b
i
w
(
v
j
w
−
v
i
w
+
g
w
Δ
t
)
−
β
b
i
b
j
b
j
a
−
b
i
a
b
j
g
−
b
i
g
]
\begin{bmatrix}\mathbf{r}_p\\\mathbf{r}_q\\\mathbf{r}_v\\\mathbf{r}_{ba}\\\mathbf{r}_{ba}\end{bmatrix}_{15\times1}=\begin{bmatrix}\mathbf{q}_{b_iw}(\mathbf{p}_{wb_j}-\mathbf{p}_{wb_i}-\mathbf{v}_i^w\Delta t+\frac12\mathbf{g}^w\Delta t^2)-\color{red}{\alpha}_{b_ib_j}\\2[\mathbf{q}_{b_jb_i}\otimes(\mathbf{q}_{b_iw}\otimes\mathbf{q}_{wb_j})]_{xyz}\\\mathbf{q}_{b_iw}(\mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w\Delta t)-\boldsymbol{\beta}_{b_ib_j}\\\mathbf{b}_j^a-\mathbf{b}_i^a\\\mathbf{b}_j^g-\mathbf{b}_i^g\end{bmatrix}
rprqrvrbarba
15×1=
qbiw(pwbj−pwbi−viwΔt+21gwΔt2)−αbibj2[qbjbi⊗(qbiw⊗qwbj)]xyzqbiw(vjw−viw+gwΔt)−βbibjbja−biabjg−big
就像eskf
一样,我们都是认为噪声是属于0均值的高斯分布,所以后面计算的是误差变量协方差,误差变量均值没什么用。
高博新书写的还是很清楚的,传感器数据积分得到的观测量(预积分)
和预测值(状态预测)
之间相差一个噪声量。噪声量原本是存在于预积分式子中的,但通过噪声分离把它分离了出来。
总而言之,预积分看起来很复杂,实际上只是为了避免庞大的计算找了一个相对状态量-预积分
来表示状态。ESKF中因为只是算了一次直接积分,后续就不会再管了,所以不存在计算量问题。本质上都是一样的,只不过基于优化的方法会多次优化进行最小二乘迭代!
⑤ 预积分的离散形式
预积分量:将一段时间内的 IMU
数据直接积分起来就得到了预积分量。所以要搞清楚预积分的本质,两个时间内不参杂状态量的一个积分。
连续形式的定积分转换为离散形式,本质就是下面的一个过程。
α
b
i
b
k
+
1
−
α
b
i
b
k
=
α
b
k
b
k
+
1
\color{red}{\alpha_{b_ib_{k+1}}} - \color{red}{\alpha_{b_ib_{k}}} = \color{red}{\alpha_{b_kb_{k+1}}}
αbibk+1−αbibk=αbkbk+1
1.3 为什么采用预积分
通过观察公式可知,IMU
的直接积分需要依赖与第 k
帧的状态 v
和 R
,当我们在后端进行非线性优化时,需要迭代更新第 k
帧的 状态v
和 R
,这将导致我们需要根据每次迭代后值重新进行积分,这将非常耗时。
那为什么预积分不会造成上面的影响?因为预积分利用了在t
时刻测量的加速度、角速度,我们无法改变,也不会去优化。所以才说,预积分在状态pvq
发生改变后不需要重新积分。所以不要认为a
和w
在变化,预积分也会变化。
1.4 预积分量的误差递推(噪声模型)
写在前面,我们要搞清楚预积分量的误差是什么?噪声又是什么?否则就会逻辑混乱。从1.2中我们已经知道,预积分是一段时间内传感器数据的积分,是观测量;而我们同时利用计算的状态量PVQ可以得到预测值,观测和预测之间存在误差,也就是噪声量。我们这里要递推的误差就是预测-观测
。(如果把预积分看作一种状态量,那么预积分误差以可以看作一种误差状态,这种误差状态可以通过递推来计算)
上面为了方便计算,所以进行噪声分离,使得预积分量和状态量的预测值之间存在一个误差,我们这里的主要目的就是为了对这个误差量进行递推!同时,误差递推中加入了噪声项。
注意,这里类似ESKF,都是利用误差状态求的方差
一个 IMU
数据作为测量值的噪声方差我们能够标定。现在,一段时间内多个 IMU
数据积分形成的预积分量的方差呢?
线性高斯运算如下
要推导预积分量的协方差,我们需要知道 imu
噪声和预积分量之间的线性递推关系
相邻时刻误差的线性传递方程
状态量误差: η i k = [ δ θ i k , δ v i k , δ p i k ] \boldsymbol{\eta}_{ik}=[\delta\boldsymbol{\theta}_{ik},\delta\mathbf{v}_{ik},\delta\mathbf{p}_{ik}] ηik=[δθik,δvik,δpik]
测量噪声: n k = [ n k g , n k a ] \mathbf{n}_k=[\mathbf{n}_k^g,\mathbf{n}_k^a] nk=[nkg,nka]-高斯白噪声
η i k = F k − 1 η i k − 1 + G k − 1 n k − 1 \boldsymbol{\eta}_{ik}=\mathbf{F}_{k-1}\boldsymbol{\eta}_{ik-1}+\mathbf{G}_{k-1}\mathbf{n}_{k-1} ηik=Fk−1ηik−1+Gk−1nk−1
协方差矩阵可以通过递推计算得到,其中
Σ i k = F k − 1 Σ i k − 1 F k − 1 ⊤ + G k − 1 Σ n G k − 1 ⊤ \mathbf{\Sigma}_{ik}=\mathbf{F}_{k-1}\mathbf{\Sigma}_{ik-1}\mathbf{F}_{k-1}^\top+\mathbf{G}_{k-1}\mathbf{\Sigma_n}\mathbf{G}_{k-1}^\top Σik=Fk−1Σik−1Fk−1⊤+Gk−1ΣnGk−1⊤
① 基于一阶泰勒展开的误差递推方程
② 基于误差随时间变化的递推方程
对比两种方法可知
F
=
I
+
A
Δ
t
,
G
=
B
Δ
t
\mathbf{F}=\mathbf{I}+\mathbf{A}\Delta t,\textbf{ G}=\mathbf{B}\Delta t
F=I+AΔt, G=BΔt
实际上两种方法都是非常类似的,在ESKF
里面,通过连续误差状态方程的系统矩阵A
进行泰勒展开,将其转为离散时间下状态状态转移矩阵!
Φ
(
t
+
Δ
t
,
t
)
=
exp
(
A
c
Δ
t
)
=
I
6
×
6
+
A
c
Δ
t
+
1
2
!
A
c
2
Δ
t
2
+
…
\begin{aligned} \Phi(t+\Delta t,t)& =\exp\left(\mathbf{A}_{c}\Delta t\right) \\ &=\mathbf{I}_{6\times6}+\mathbf{A}_{c}\Delta t+\frac{1}{2!}\mathbf{A}_{c}^{2}\Delta t^{2}+\ldots \end{aligned}
Φ(t+Δt,t)=exp(AcΔt)=I6×6+AcΔt+2!1Ac2Δt2+…
③ 预积分误差传递的形式
注意,我们这里的误差状态是指预积分的误差状态,不是PVQ
。具体推导见崔华坤的论文解析
连续时间下
离散时间下
1.4 零偏更新
理论上来讲,如果IMU
零偏发生了变化,预积分就应该重新计算,因为预积分的每一步都用到了 i
时刻的 IMU
零偏。但是实际操作过程中,我们也可以选用一种取巧的做法:假定预积分观测是随零偏线性变化的
Δ
R
~
i
j
(
b
g
,
i
+
δ
b
g
,
i
)
=
Δ
R
~
i
j
(
b
g
,
i
)
E
x
p
(
∂
Δ
R
~
i
j
∂
b
g
,
i
δ
b
g
,
i
)
,
Δ
v
~
i
j
(
b
g
,
i
+
δ
b
g
,
i
,
b
a
,
i
+
δ
b
a
,
i
)
=
Δ
v
~
i
j
(
b
g
,
i
,
b
a
,
i
)
+
∂
Δ
v
~
i
j
∂
b
g
,
i
δ
b
g
,
i
+
∂
Δ
v
~
i
j
∂
b
a
,
i
δ
b
a
,
i
,
Δ
p
~
i
j
(
b
g
,
i
+
δ
b
g
,
i
,
b
a
,
i
+
δ
b
a
,
i
)
=
Δ
p
~
i
j
(
b
g
,
i
,
b
a
,
i
)
+
∂
Δ
p
~
i
j
∂
b
g
,
i
δ
b
g
,
i
+
∂
Δ
p
~
i
j
∂
b
a
,
i
δ
b
a
,
i
.
\begin{gathered} \Delta\tilde{\boldsymbol{R}}_{ij}(\boldsymbol{b}_{g,i}+\delta\boldsymbol{b}_{g,i}) =\Delta\tilde{\boldsymbol{R}}_{ij}(\boldsymbol{b}_{g,i})\mathrm{Exp}\left(\frac{\partial\Delta\tilde{\boldsymbol{R}}_{ij}}{\partial\boldsymbol{b}_{g,i}}\delta\boldsymbol{b}_{g,i}\right), \\ \begin{aligned}\Delta\tilde{\boldsymbol{v}}_{ij}(\boldsymbol{b}_{g,i}+\delta\boldsymbol{b}_{g,i},\boldsymbol{b}_{a,i}+\delta\boldsymbol{b}_{a,i})\end{aligned} =\Delta\tilde{\boldsymbol{v}}_{ij}(\boldsymbol{b}_{g,i},\boldsymbol{b}_{a,i})+\frac{\partial\Delta\tilde{\boldsymbol{v}}_{ij}}{\partial\boldsymbol{b}_{g,i}}\delta\boldsymbol{b}_{g,i}+\frac{\partial\Delta\tilde{\boldsymbol{v}}_{ij}}{\partial\boldsymbol{b}_{a,i}}\delta\boldsymbol{b}_{a,i}, \\ \begin{aligned}\Delta\tilde{\boldsymbol{p}}_{ij}(\boldsymbol{b}_{g,i}+\delta\boldsymbol{b}_{g,i},\boldsymbol{b}_{a,i}+\delta\boldsymbol{b}_{a,i})\end{aligned} =\Delta\tilde{\boldsymbol{p}}_{ij}(\boldsymbol{b}_{g,i},\boldsymbol{b}_{a,i})+\frac{\partial\Delta\tilde{\boldsymbol{p}}_{ij}}{\partial\boldsymbol{b}_{g,i}}\delta\boldsymbol{b}_{g,i}+\frac{\partial\Delta\tilde{\boldsymbol{p}}_{ij}}{\partial\boldsymbol{b}_{a,i}}\delta\boldsymbol{b}_{a,i}. \end{gathered}
ΔR~ij(bg,i+δbg,i)=ΔR~ij(bg,i)Exp(∂bg,i∂ΔR~ijδbg,i),Δv~ij(bg,i+δbg,i,ba,i+δba,i)=Δv~ij(bg,i,ba,i)+∂bg,i∂Δv~ijδbg,i+∂ba,i∂Δv~ijδba,i,Δp~ij(bg,i+δbg,i,ba,i+δba,i)=Δp~ij(bg,i,ba,i)+∂bg,i∂Δp~ijδbg,i+∂ba,i∂Δp~ijδba,i.
相当于只要每一次计算了预积分对偏置的雅可比,利用泰勒这种展开进行近似即可。
2 VIO残差函数的构建
2.1 VIO系统的状态量
一般来讲,优化的是与相机保持同步的IMU数据,区间内的IMU数据会被积分累计。
为了节约计算量采用滑动窗口形式的 Bundle Adjustment
, 在 i
时刻,滑动窗口内待优化的系统状态量定义如下:
下面N
表示了滑动窗口中的关键帧数量,对应位姿;M
表示被滑动窗口所有关键帧观测到的路标点数量,对应地图点。
x
i
\mathbf{x}_i
xi表示了IMU在惯性坐标系(世界坐标系)中的位置、速度、姿态、以及IMU
坐标系中的加速度和角速度偏置。
X
=
[
x
n
,
x
n
+
1
,
.
.
.
,
x
n
+
N
,
λ
m
,
λ
m
+
1
,
.
.
.
,
λ
m
+
M
]
x
i
=
[
p
w
b
i
,
q
w
b
i
,
v
i
w
,
b
a
b
i
,
b
g
b
i
]
⊤
,
i
∈
[
n
,
n
+
N
]
\begin{aligned}\mathcal{X}&=[\mathbf{x}_n,\mathbf{x}_{n+1},...,\mathbf{x}_{n+N},\lambda_m,\lambda_{m+1},...,\lambda_{m+M}]\\\mathbf{x}_i&=\Big[\mathbf{p}_{wb_i},\mathbf{q}_{wb_i},\mathbf{v}_i^w,\mathbf{b}_a^{b_i},\mathbf{b}_g^{b_i}\Big]^\top,i\in[n,n+N]\end{aligned}
Xxi=[xn,xn+1,...,xn+N,λm,λm+1,...,λm+M]=[pwbi,qwbi,viw,babi,bgbi]⊤,i∈[n,n+N]
2.2 目标函数
三个残差项即误差项分别为边缘化的先验信息、IMU 测量残差、视觉的重投影残差。三种残差都是用马氏距离表示。
min X ρ ( ∥ r p − J p X ∥ Σ p 2 ) ⏟ prior + ∑ i ∈ B ρ ( ∥ r b ( z b i b i + 1 , X ) ∥ Σ b i b i + 1 2 ) ⏟ IMU error + ∑ ( i , j ) ∈ F ρ ( ∥ r f ( z f j c i , X ) ∥ Σ f j c i 2 ) ⏟ image error \begin{aligned}\min_{\mathcal{X}}\underbrace{\rho\left(\|\mathbf{r}_p-\mathbf{J}_p\mathcal{X}\|_{\Sigma_p}^2\right)}_{\text{prior}} + \underbrace { \sum _ { i \in B }\rho\left(\|\mathbf{r}_b(\mathbf{z}_{b_ib_{i+1}},\mathcal{X})\|_{\Sigma_{b_ib_i+1}}^2\right)}_{\text{IMU error}}\\ + \underbrace { \sum _ { ( i , j ) \in F }\rho\left(\left\|\mathbf{r}_f(\mathbf{z}_{\mathbf{f}_j}^{c_i},\mathcal{X})\right\|_{\Sigma_{\mathbf{f}_j}^{c_i}}^2\right)}_{\text{image error}}\end{aligned} Xminprior ρ(∥rp−JpX∥Σp2)+IMU error i∈B∑ρ(∥rb(zbibi+1,X)∥Σbibi+12)+image error (i,j)∈F∑ρ( rf(zfjci,X) Σfjci2)
套入上面最小二乘,以IMU残差为例,X即优化变量,这里就是那5个状态
min δ X ∥ r B ( z ^ b k + 1 b k , X + Δ X ) ∥ P b k + 1 b k 2 = min δ X ∥ r B ( z ^ b k + 1 b k , X ) + J b k + 1 b k Δ X ∥ P b k + 1 b k 2 \min_{\delta X}\left\|r_B\left(\hat{z}_{b_{k+1}}^{b_k},X+\Delta X\right)\right\|_{P_{b_{k+1}}^{b_k}}^2=\min_{\delta X}\left\|r_B\left(\hat{z}_{b_{k+1}}^{b_k},X\right)+J_{b_{k+1}}^{b_k}\Delta X\right\|_{P_{b_{k+1}}^{b_k}}^2 δXmin rB(z^bk+1bk,X+ΔX) Pbk+1bk2=δXmin rB(z^bk+1bk,X)+Jbk+1bkΔX Pbk+1bk2
其中,
J
b
k
+
1
b
k
J_{bk+1}^{bk}
Jbk+1bk是误差项
r
B
r_{B}
rB关于所有状态向量(即优化变量)X 的 Jacobian
,将上式展开并令关于∆X
的导数为 0
,可以得到增量∆X
的计算公式:
J
b
k
+
1
b
k
T
P
b
k
+
1
b
k
−
1
J
b
k
+
1
b
k
Δ
X
=
−
J
b
k
+
1
b
k
T
P
b
k
+
1
b
k
−
1
r
B
\begin{matrix}{J_{b_{k+1}}^{b_{k}}}^T{P_{b_{k+1}}^{b_{k}}}^{-1}J_{b_{k+1}}^{b_{k}}\Delta X=-\begin{matrix}{J_{b_{k+1}}^{b_{k}}}^T{P_{b_{k+1}}^{b_{k}}}^{-1}r_{B}\end{matrix}\end{matrix}
Jbk+1bkTPbk+1bk−1Jbk+1bkΔX=−Jbk+1bkTPbk+1bk−1rB
整体目标函数的整体增量方程可写成