参考高博PPT中的例子。
过程综述:
如上图所示,在t∈[0, k]时刻,滑窗中的状态向量为
X
k
X^k
Xk,包含6个状态量:
ξ
i
,
i
∈
[
1
,
6
]
\xi _i\text{, }i\in \left[ 1,6 \right]
ξi, i∈[1,6]及其对应的观测量。在k时刻,对
X
k
X^k
Xk进行边缘化处理,marg掉在
ξ
1
\xi_1
ξ1及其观测,在
k
′
k^{'}
k′时刻,加入新的观测和状态量
ξ
7
\xi_7
ξ7。
FEJ算法的步骤:
1. marg发生前,优化过的滑窗都包含哪些信息?
在第k时刻,对
X
k
X^k
Xk用最小二乘法优化完以后,要marg掉变量
ξ
1
\xi_1
ξ1,被marg的状态向量即
X
k
X^k
Xk(此处PPT原文为
X
m
X_m
Xm,但按照本人的思维惯性,认为
X
m
X_m
Xm的含义应该表示的是marg完成以后去掉的变量及其对应测量,因此PPT原文中对应的
X
m
X_m
Xm将在下文同改为
X
k
X^k
Xk),剩余的变量
ξ
i
,
i
∈
[
2
,
5
]
\xi _i\text{, }i\in \left[ 2,5 \right]
ξi, i∈[2,5]记为
X
r
X_r
Xr。
marg前,状态量
X
X
X以及对应的测量
S
S
S构建的最小二乘信息矩阵为:
b
(
k
)
=
[
b
m
m
(
k
)
b
m
r
(
k
)
]
=
−
∑
(
i
,
j
)
∈
S
J
i
j
T
(
k
)
Σ
i
j
−
1
r
i
j
(
k
)
b\left( k \right) =\left[ \begin{array}{c} b_{mm}\left( k \right)\\ b_{mr}\left( k \right)\\ \end{array} \right] =-\sum_{\left( i,j \right) \in S}{J_{ij}^{\mathrm{T}}\left( k \right) \varSigma _{ij}^{-1}r_{ij}}\left(k\right)
b(k)=[bmm(k)bmr(k)]=−(i,j)∈S∑JijT(k)Σij−1rij(k)
Λ
(
k
)
=
[
Λ
m
m
(
k
)
Λ
m
r
(
k
)
Λ
r
m
(
k
)
Λ
r
r
(
k
)
]
=
∑
(
i
,
j
)
∈
S
J
i
j
T
(
k
)
Σ
i
j
−
1
J
i
j
(
k
)
\varLambda \left( k \right) =\left[ \begin{matrix} \varLambda _{mm}\left( k \right)& \varLambda _{mr}\left( k \right)\\ \varLambda _{rm}\left( k \right)& \varLambda _{rr}\left( k \right)\\ \end{matrix} \right] =\sum_{\left( i,j \right) \in S}{J_{ij}^{\mathrm{T}}\left( k \right) \varSigma _{ij}^{-1}J_{ij}\left( k \right)}
Λ(k)=[Λmm(k)Λrm(k)Λmr(k)Λrr(k)]=(i,j)∈S∑JijT(k)Σij−1Jij(k)
2. marg发生后,留下的到底是什么信息?
marg发生后,
X
k
X^k
Xk向量中所有的变量以及对应的测量将被丢弃。同时,这部分信息通过marg操作传递给了保留状态量
X
r
X_r
Xr。marg变量的信息跟
ξ
6
\xi_6
ξ6不相关。即
X
k
X^k
Xk→
X
r
X_r
Xr。
注:本人更倾向于转换一词,因为
X
k
X^k
Xk和
X
r
X_r
Xr对应的信息矩阵的维数不同,比如本例中,marg前信息矩阵
Λ
k
(
k
)
\varLambda^k \left( k \right)
Λk(k)的维度为6×6,marg后信息矩阵
Λ
p
(
k
)
\varLambda _p\left( k \right)
Λp(k)的维度4×4,维度不同,无法传递。
b
p
(
k
)
=
b
m
r
(
k
)
−
Λ
r
m
(
k
)
Λ
m
m
−
1
(
k
)
b
m
m
(
k
)
b_p\left( k \right) =b_{mr}\left( k \right) -\varLambda _{rm}\left( k \right) \varLambda _{mm}^{-1}\left( k \right) b_{mm}\left( k \right)
bp(k)=bmr(k)−Λrm(k)Λmm−1(k)bmm(k)
Λ
p
(
k
)
=
Λ
r
r
(
k
)
−
Λ
r
m
(
k
)
Λ
m
m
−
1
(
k
)
Λ
m
r
(
k
)
\varLambda _p\left( k \right) =\varLambda _{rr}\left( k \right) -\varLambda _{rm}\left( k \right) \varLambda _{mm}^{-1}\left( k \right) \varLambda _{mr}\left( k \right)
Λp(k)=Λrr(k)−Λrm(k)Λmm−1(k)Λmr(k)下标p表示prior,即这些信息将构建一个关于
X
r
X_r
Xr的先验信息。
此处先验叫法的理解,marg完成后,滑窗中的状态量减少,后面还要补充新的变量和观测,相对于后面加入的变量和观测,
X
r
X_r
Xr就是新滑窗的先验。
先验
我们可以从
b
p
(
k
)
b_p\left( k \right)
bp(k) 和
Λ
p
(
k
)
\varLambda _p\left( k \right)
Λp(k)中反解除一个残差
r
p
(
k
)
r_p\left(k\right)
rp(k)(如:
r
23
r_{23}
r23,
r
24
r_{24}
r24,
r
34
r_{34}
r34,
r
45
r_{45}
r45,
r
35
r_{35}
r35)和对应的雅克比矩阵
J
p
(
k
)
J_p\left(k\right)
Jp(k),但意义不大。需要注意的是,随着剩余状态量
X
r
(
k
)
X_r\left(k\right)
Xr(k)的后续不断优化变化(因为后面会加入新的变量和观测,组成新的变量关系),残差
r
p
(
k
)
r_p\left(k\right)
rp(k)和
b
p
(
k
)
b_p\left( k \right)
bp(k)也将跟着变化,但雅克比
J
p
(
k
)
J_p\left(k\right)
Jp(k)则固定不变了(原因在下文)。
3. 新测量信息和旧测量信息构建新的系统
第
k
′
k^{'}
k′时刻,加入新的变量
ξ
7
\xi_7
ξ7以及对应的观测(记作
X
n
X_n
Xn),新的残差
r
27
r_{27}
r27和先验信息
b
p
(
k
)
b_p\left( k \right)
bp(k) 、
Λ
p
(
k
)
\varLambda _p\left( k \right)
Λp(k)以及残差
r
56
r_{56}
r56构建新的最小二乘问题,开始新一轮的最小二乘优化:
b
(
k
′
)
=
Π
T
b
p
(
k
)
−
∑
(
i
,
j
)
∈
S
a
(
k
′
)
J
i
j
T
(
k
′
)
Σ
i
j
−
1
r
i
j
(
k
′
)
b\left( k^{'} \right) =\varPi ^{\mathrm{T}}b_p\left( k \right) -\sum_{\left( i,j \right) \in S_a\left( k^{'} \right)}{J_{ij}^{\mathrm{T}}\left( k^{'} \right) \varSigma _{ij}^{-1}r_{ij}}\left( k^{'} \right)
b(k′)=ΠTbp(k)−(i,j)∈Sa(k′)∑JijT(k′)Σij−1rij(k′)
Λ
(
k
′
)
=
Π
T
Λ
p
(
k
)
Π
+
∑
(
i
,
j
)
∈
S
a
(
k
′
)
J
i
j
T
(
k
′
)
Σ
i
j
−
1
J
i
j
(
k
′
)
\varLambda \left( k^{'} \right) =\varPi ^{\mathrm{T}}\varLambda _p\left( k \right) \varPi +\sum_{\left( i,j \right) \in S_a\left( k^{'} \right)}{J_{ij}^{\mathrm{T}}\left( k^{'} \right) \varSigma _{ij}^{-1}J_{ij}\left( k^{'} \right)}
Λ(k′)=ΠTΛp(k)Π+(i,j)∈Sa(k′)∑JijT(k′)Σij−1Jij(k′)
其中
Π
=
[
I
d
i
m
X
r
0
]
\varPi=\left[ \begin{matrix} I_{dimX_r}& 0\\ \end{matrix} \right]
Π=[IdimXr0]用来将矩阵的维度进行扩张。
S
a
S_a
Sa用来表示除被marg掉的测量意外的其他测量,如
r
56
r_{56}
r56、
r
27
r_{27}
r27。
出现的问题:
· 由于marg的变量以及对应的测量
X
k
X^k
Xk已经被丢弃,先验信息
Λ
p
(
k
)
\varLambda _p\left( k \right)
Λp(k)中关于
X
r
X_r
Xr的雅克比
J
p
(
k
)
J_p\left(k\right)
Jp(k)在后续求解中没法更新。
这句话个人理解:
J
p
(
k
)
J_p\left(k\right)
Jp(k)=
r
p
(
k
)
r_p\left(k\right)
rp(k)/
δ
x
\delta x
δx,因为
X
k
X^k
Xk已丢失,其最后一次迭代的
δ
x
\delta x
δx也已不在(当然,
x
x
x是知道的),因此即便残差
r
p
(
k
)
r_p\left(k\right)
rp(k)更新变化,
J
p
(
k
)
J_p\left(k\right)
Jp(k)也无法再更新。
· 但
X
r
X_r
Xr中的部分变量还跟其他残差由联系,如
ξ
2
\xi_2
ξ2、
ξ
5
\xi_5
ξ5。这些残差如
r
27
r_{27}
r27对
ξ
2
\xi_2
ξ2的雅克比会随着
ξ
2
\xi_2
ξ2的迭代更新而不断在最新的线性化点处计算。
这句话个人理解:先验中关于
ξ
2
\xi_2
ξ2、
ξ
5
\xi_5
ξ5的雅克比固定不变,在求解新的最小二乘时,
r
27
r_{27}
r27会对
ξ
2
\xi_2
ξ2进行迭代更新,其雅克比会在最新的线性化点处计算,而该线性化点与marg前
r
12
r_{12}
r12对
ξ
2
\xi_2
ξ2附近的线性化点不同,因此这是矛盾的。
4. 信息矩阵的零空间变化
滑动窗口算法导致的问题
滑动窗口算法和优化的时候,信息矩阵如上式变成了两部分的和,且两部分计算雅克比时线性化点不同。这可能会导致信息矩阵的零空间发生变化,从而在求解时引入错误的信息。
比如:求解单目SLAM 进行Bundle Adjustment 优化时,问题对应的信息矩阵
Λ
(
k
′
)
\varLambda \left( k^{'} \right)
Λ(k′)不满秩,对应的零空间为N, 用高斯牛顿求解时有
Λ
δ
x
=
b
\varLambda \delta x=b
Λδx=b
Λ
δ
x
+
N
δ
x
=
b
\varLambda \delta x+N\delta x=b
Λδx+Nδx=b
即存在多个
δ
x
\delta x
δx使得
N
δ
x
=
0
\boldsymbol{N}\delta x=0
Nδx=0
若增量
δ
x
\delta x
δx在零空间维度下变化,并不会改变我们的残差。这意味着系统可以有多个满足最小化损失函数(残差)的解
x
x
x。
参考文献:
- 高翔、贺一家、崔华坤的手写VIO
- Tue-Cuong Dong-Si and Anastasios I Mourikis. “Consistency analysis for sliding-window visual odometry”. In: 2012 IEEE
International Conference on Robotics and Automation. IEEE. 2012, pp. 5202–5209.