使用因子图表示,节点表示状态,边表示约束,通常形式为:
z i j = h i j ( x i , x j ) + n i j (1) \mathbf{z}_{i j}=\mathbf{h}_{i j}\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)+\mathbf{n}_{i j} \tag1 zij=hij(xi,xj)+nij(1)
其中 h i j {\bf h}_{ij} hij是状态到测量的映射, n i j {\bf n}_{ij} nij是零均值白噪声
n i j ∼ N ( 0 , Λ i j − 1 ) (2) \mathbf{n}_{i j} \sim \mathcal{N}\left(\mathbf{0}, \mathbf{\Lambda}_{i j}^{-1}\right) \tag2 nij∼N(0,Λij−1)(2)
这就变成了MLE问题:
x ^ = arg min x ∑ ( i , j ) ∈ supp ( z ) ∥ z i j − h i j ( x i , x j ) ∥ Λ i j 2 (3) \hat{\mathbf{x}}=\arg \min _{\mathbf{x}} \sum_{(i, j) \in \operatorname{supp}(\mathbf{z})}\left\|\mathbf{z}_{i j}-\mathbf{h}_{i j}\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)\right\|_{\Lambda_{i j}}^{2} \tag3 x^=argxmin(i,j)∈supp(z)∑∥zij−hij(xi,xj)∥Λij2(3)
然后就是使用马氏距离,利用迭代的方式求解这个问题。但是由于地图的增长,节点和边增加,变得耗费计算资源。
为了减少代价,使用马尔科夫毯的概念,将节点分为以下几个类别:
x = [ x m T x b T x r T ] T (4) \mathbf{x}=\left[ \begin{array}{lll}{\mathbf{x}_{m}^{T}} & {\mathbf{x}_{b}^{T}} & {\mathbf{x}_{r}^{T}}\end{array}\right]^{T} \tag{4} x=[xmTxbTxrT]T(4)
其中, x m {\bf x}_m xm表示要边缘化掉的节点, x b {\bf x}_b xb表示马尔科夫毯中与边缘化节点直接相连的节点, x r {\bf x}_r xr表示这个图中剩余的节点。
将观测划分为:
{ z b , z r } = { z m , z c , z r } (5) \left\{\mathbf{z}_{b}, \mathbf{z}_{r}\right\}=\left\{\mathbf{z}_{m}, \mathbf{z}_{c}, \mathbf{z}_{r}\right\} \tag5 {zb,zr}={zm,zc,zr}(5)
其中 z m {\bf z}_m zm是直接约束 x m {\bf x}_m xm的测量, z b {\bf z}_b zb表示马尔科夫毯中所有的约束, z c {\bf z}_c zc表示马尔科夫毯中除了 z m {\bf z}_m zm其他的约束, z r {\bf z}_r zr表示剩下的约束。
举例,Fig1:
x m = x 1 x b = [ x 0 T , x 2 T , x 3 T ] T x r = x 4 z m = { z 01 , z 12 , z 13 } z c = { z 0 , z 03 , z 23 } z r = { z 04 , z 34 } (6) \begin{aligned} \mathbf{x}_{m}&=\mathbf{x}_{1}\\ \mathbf{x}_{b}&=\left[\mathbf{x}_{0}^{T}, \mathbf{x}_{2}^{T}, \mathbf{x}_{3}^{T}\right]^{T}\\ \mathbf{x}_{r}&=\mathbf{x}_{4} \\ \mathbf{z}_{m}&=\left\{\mathbf{z}_{01}, \mathbf{z}_{12}, \mathbf{z}_{13}\right\}\\ \mathbf{z}_{c}&=\left\{\mathbf{z}_{0}, \mathbf{z}_{03}, \mathbf{z}_{23}\right\}\\ \mathbf{z}_{r}&=\left\{\mathbf{z}_{04}, \mathbf{z}_{34}\right\} \end{aligned} \tag{6} xmxbxrzmzczr=x1=[x0T,x2T,x3T]T=x4={z01,z12,z13}={z0,z03,z23}={z04,z34}(6)
边缘化之后的节点会产生一个先验约束 x b {\bf x}_b xb
p ( x b ∣ z m ) = ∫ x m p ( x b , x m ∣ z m ) d x m = : N ( x ^ b , Λ t − 1 ) (7) p\left(\mathbf{x}_{b} | \mathbf{z}_{m}\right)=\int_{\mathbf{x}_{m}} p\left(\mathbf{x}_{b}, \mathbf{x}_{m} | \mathbf{z}_{m}\right) \mathrm{d} \mathbf{x}_{m}=: \mathcal{N}\left(\hat{\mathbf{x}}_{b}, \mathbf{\Lambda}_{t}^{-1}\right) \tag{7} p(xb∣zm)=∫xmp(xb,xm∣zm)dxm=:N(x^b,Λt−1)(7)
边缘化之后,除了由于线性化导致的误差外,所有的信息都在 z m {\bf z}_m zm中,没有损失。
为了得到公式(7)的分布参数( mean and covariance),求解一个最大后验问题:
max p ( x b ∣ z m ) = ∫ x m max p ( x b , x m ∣ z m ) d x m (8) \max p\left(\mathbf{x}_{b} | \mathbf{z}_{m}\right)=\int_{\mathbf{x}_{m}}\max p\left(\mathbf{x}_{b}, \mathbf{x}_{m} | \mathbf{z}_{m}\right) \mathrm{d} \mathbf{x}_{m} \tag8 maxp(xb∣zm)=∫xmmaxp(xb,xm∣zm)dxm(8)
对于 x b , x m {\bf x}_b, {\bf x}_m xb,xm一般没有先验信息,在马尔科夫毯上求解下面的 local MLE 问题:
{ x ^ b , x ^ m } = arg max x b , x m p ( z m ∣ x b , x m ) = arg min x b , x m ∑ ( i , j ) ∈ supp ( z m ) ∥ z i j − h i j ( x i , x j ) ∥ Λ i j 2 (9) {\left\{\hat{\mathbf{x}}_{b}, \hat{\mathbf{x}}_{m}\right\}=\arg \max _{\mathbf{x}_{b}, \mathbf{x}_{m}} p\left(\mathbf{z}_{m} | \mathbf{x}_{b}, \mathbf{x}_{m}\right)=} \\ {\arg \min _{\mathbf{x}_{b}, \mathbf{x}_{m}} \sum_{(i, j) \in \operatorname{supp}\left(\mathbf{z}_{m}\right)}\left\|\mathbf{z}_{i j}-\mathbf{h}_{i j}\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)\right\|_{\Lambda_{i j}}^{2}} \tag{9} {x^b,x^m}=argxb,xmmaxp(zm∣xb,xm)=argxb,xmmin(i,j)∈supp(zm)∑∥zij−hij(xi,xj)∥Λij2(9)
公式(9)最终得到的信息矩阵为
Λ = ∑ ( i , j ) ∈ supp ( z m ) H i j ⊤ Λ i j H i j = : [ Λ m m Λ m b Λ b m Λ b b ] (10) \Lambda=\sum_{(i, j) \in \operatorname{supp}\left(\mathbf{z}_{m}\right)} \mathbf{H}_{i j}^{\top} \mathbf{\Lambda}_{i j} \mathbf{H}_{i j}=: \left[ \begin{array}{cc}{\boldsymbol{\Lambda}_{m m}} & {\boldsymbol{\Lambda}_{m b}} \\ {\boldsymbol{\Lambda}_{b m}} & {\boldsymbol{\Lambda}_{b b}}\end{array}\right] \tag{10} Λ=(i,j)∈supp(zm)∑Hij⊤ΛijHij=:[ΛmmΛbmΛmbΛbb](10)
对其进行边缘化得到信息矩阵:
Λ t = Λ b b − Λ b m Λ m m − 1 Λ b m ⊤ (11) \mathbf{\Lambda}_{t}=\mathbf{\Lambda}_{b b}-\boldsymbol{\Lambda}_{b m} \mathbf{\Lambda}_{m m}^{-1} \mathbf{\Lambda}_{b m}^{\top} \tag{11} Λt=Λbb−ΛbmΛmm−1Λbm⊤(11)
先验信息确定之后,MLE 问题就可以转化为最小二乘问题:
x ^ = arg min x ∥ x ^ b − x b ∥ Λ t 2 + ∑ ( i , j ) ∈ supp ( z r , z c ) ∥ z i j − h i j ( x i , x j ) ∥ Λ i j 2 (12) \hat{\mathbf{x}}=\arg \min _{\mathbf{x}}\left\|\hat{\mathbf{x}}_{b}-\mathbf{x}_{b}\right\|_{\Lambda_{t}}^{2}+\sum_{(i, j) \in \operatorname{supp}\left(\mathbf{z}_{r}, \mathbf{z}_{c}\right)}\left\|\mathbf{z}_{i j}-\mathbf{h}_{i j}\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)\right\|_{\Lambda_{i j}}^{2} \tag{12} x^=argxmin∥x^b−xb∥Λt2+(i,j)∈supp(zr,zc)∑∥zij−hij(xi,xj)∥Λij2(12)
到这为止的理解:可以分为两步考虑
*Lemma 4.1:*如果公式(10)中测量方程雅克比,以及公式(11)中的信息矩阵是 local MLE 估计的结果。那么公式(12)是原来边缘化结果的二阶最优近似。
对Lemma 4.1的证明:
可以将节点划分为:
c ( x ) = c m ( x m , x b ) + c r ( x b , x r ) (13) c(\mathbf{x})=c_{m}\left(\mathbf{x}_{m}, \mathbf{x}_{b}\right)+c_{r}\left(\mathbf{x}_{b}, \mathbf{x}_{r}\right) \tag{13} c(x)=cm(xm,xb)+cr(xb,xr)(13)
因此有:
min x c ( x ) = min x b , x r ( min x m c ( x m , x b , x n ) ) = min x b , x r ( c r ( x b , x r ) + min x m c m ( x m , x b ) ) (14) \min _{\mathbf{x}} c(\mathbf{x})=\min _{\mathbf{x}_{b}, \mathbf{x}_{r}}\left(\min _{\mathbf{x}_{m}} c\left(\mathbf{x}_{m}, \mathbf{x}_{b}, \mathbf{x}_{n}\right)\right)=\min _{\mathbf{x}_{b}, \mathbf{x}_{r}}\left(c_{r}\left(\mathbf{x}_{b}, \mathbf{x}_{r}\right)+\min _{\mathbf{x}_{m}} c_{m}\left(\mathbf{x}_{m}, \mathbf{x}_{b}\right)\right) \tag{14} xminc(x)=xb,xrmin(xmminc(xm,xb,xn))=xb,xrmin(cr(xb,xr)+xmmincm(xm,xb))(14)
将 c m c_m cm进行二阶展开得到:
c m ≃ c m ( x ^ m , x ^ b ) + g T [ x m − x ^ m x b − x ^ b ] + 1 2 [ x m − x ^ m x b − x ^ b ] T Λ [ x m − x ^ m x b − x ^ b ] (15) c_{m} \simeq c_{m}\left(\hat{\mathbf{x}}_{m}, \hat{\mathbf{x}}_{b}\right)+\mathbf{g}^{T} \left[ \begin{array}{c}{\mathbf{x}_{m}-\hat{\mathbf{x}}_{m}} \\ {\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}}\end{array}\right]+\frac{1}{2} \left[ \begin{array}{c}{\mathbf{x}_{m}-\hat{\mathbf{x}}_{m}} \\ {\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}}\end{array}\right]^{T} \boldsymbol{\Lambda} \left[ \begin{array}{c}{\mathbf{x}_{m}-\hat{\mathbf{x}}_{m}} \\ {\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}}\end{array}\right] \tag{15} cm≃cm(x^m,x^b)+gT[xm−x^mxb−x^b]+21[xm−x^mxb−x^b]TΛ[xm−x^mxb−x^b](15)
其中 g = [ g m m g m b ] \mathbf{g}=\left[ \begin{array}{c}{\mathbf{g}_{m m}} \\ {\mathbf{g}_{m b}}\end{array}\right] g=[gmmgmb], Λ = [ Λ m m Λ m b Λ b m Λ b b ] \boldsymbol{\Lambda}=\left[ \begin{array}{ll}{\boldsymbol{\Lambda}_{m m}} & {\boldsymbol{\Lambda}_{m b}} \\ {\boldsymbol{\Lambda}_{b m}} & {\boldsymbol{\Lambda}_{b b}}\end{array}\right] Λ=[ΛmmΛbmΛmbΛbb],线性化点是 [ x ^ m , x ^ b ] [\hat{\bf x}_m, \hat{\bf x}_b] [x^m,x^b]。对公式(15)求关于 x m {\bf x}_m xm的最小值得到:
x m = x ^ m − Λ m m − 1 ( g m m + Λ m b ( x b − x ^ b ) ) (16) \mathbf{x}_{m}=\hat{\mathbf{x}}_{m}-\boldsymbol{\Lambda}_{m m}^{-1}\left(\mathbf{g}_{m m}+\mathbf{\Lambda}_{m b}\left(\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}\right)\right) \tag{16} xm=x^m−Λmm−1(gmm+Λmb(xb−x^b))(16)
把公式(16)带入公式(15)得到,使用二次函数最低点公式:
min x m c m ( x m , x b ) ≃ ζ + g t T ( x b − x ^ b ) + 1 2 ( x b − x ^ b ) T Λ t ( x b − x ^ b ) (17) \min _{\mathbf{x}_{m}} c_{m}\left(\mathbf{x}_{m}, \mathbf{x}_{b}\right) \simeq \zeta+\mathbf{g}_{t}^{T}\left(\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}\right)+\frac{1}{2}\left(\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}\right)^{T} \boldsymbol{\Lambda}_{t}\left(\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}\right) \tag{17} xmmincm(xm,xb)≃ζ+gtT(xb−x^b)+21(xb−x^b)TΛt(xb−x^b)(17)
其中 ζ \zeta ζ是常数项,其中:
g t = g m b − Λ b m Λ m m − 1 g m m Λ t = Λ b b − Λ b m Λ m m − 1 Λ m b (18) \begin{aligned} \mathbf{g}_{t} &=\mathbf{g}_{m b}-\boldsymbol{\Lambda}_{b m} \mathbf{\Lambda}_{m m}^{-1} \mathbf{g}_{m m} \\ \mathbf{\Lambda}_{t} &=\mathbf{\Lambda}_{b b}-\mathbf{\Lambda}_{b m} \mathbf{\Lambda}_{m m}^{-1} \mathbf{\Lambda}_{m b} \end{aligned} \tag{18} gtΛt=gmb−ΛbmΛmm−1gmm=Λbb−ΛbmΛmm−1Λmb(18)
将公式(17)代入公式(14)之中就可以得到,与原问题等价的:
c r ′ ( x b , x r ) = g t T ( x b − x ^ b ) + 1 2 ( x b − x ^ b ) T Λ t ( x b − x ^ b ) + 1 2 ∑ ( i , j ) ∈ supp ( z r , z c ) ∥ z i j − h i j ( x i , x j ) ∥ Λ i j 2 (19) \begin{aligned} c_{r}^{\prime}\left(\mathbf{x}_{b}, \mathbf{x}_{r}\right) &=\mathbf{g}_{t}^{T}\left(\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}\right)+\frac{1}{2}\left(\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}\right)^{T} \mathbf{\Lambda}_{t}\left(\mathbf{x}_{b}-\hat{\mathbf{x}}_{b}\right) \\ &+\frac{1}{2} \sum_{(i, j) \in \operatorname{supp}\left(\mathbf{z}_{r}, \mathbf{z}_{c}\right)}\left\|\mathbf{z}_{i j}-\mathbf{h}_{i j}\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)\right\|_{\Lambda_{i j}}^{2} \end{aligned} \tag{19} cr′(xb,xr)=gtT(xb−x^b)+21(xb−x^b)TΛt(xb−x^b)+21(i,j)∈supp(zr,zc)∑∥zij−hij(xi,xj)∥Λij2(19)
如果线性展开点是局部最小值,这样公式(19)的一阶梯度项就消失了,因为极值点处的导数为0!因此这也公式(19)就变成了公式(12)。得证。
马尔科夫毯的测量提供的只是关于节点的相关信息,如果想得到全局状态估计,局部 MLE 问题即公式(9)是缺少约束的。为了得到完全约束,我们把相对状态估计进行重新参数化,如同得到先验一样。就是把MLE问题转移到某个节点的参考帧上进行计算。
如图Fig1所示,我们就是把该问题公式(9)转换到为相对于节点 x 0 {\rm x}_0 x0的局部参考帧上:
{ 0 x ^ i } i = 1 3 = arg max { 0 x i } i = 1 3 p ( z m ∣ 0 x 1 , 0 x 2 , 0 x 3 ) (20) \left\{^{0} \hat{\mathbf{x}}_{i}\right\}_{i=1}^{3}=\arg \max _{\left\{^{0} \mathbf{x}_{i}\right\}_{i=1}^{3}} p\left(\left.\mathbf{z}_{m}\right|^{0} \mathbf{x}_{1},^{0} \mathbf{x}_{2},^{0} \mathbf{x}_{3}\right) \tag{20} {0x^i}i=13=arg{0xi}i=13maxp(zm∣0x1,0x2,0x3)(20)
边缘化掉 x 1 {\rm x}_1 x1之后,这部分以公式(21)的形式对公式(12)的第一项有贡献。
∥ [ 0 x ^ 2 0 x ^ 3 ] − [ x 2 ⊖ x 0 x 3 ⊖ x 0 ] ∥ 0 Λ t 2 (21) \left\|\left[ \begin{array}{c}{^0 \hat{\mathbf{x}}_{2}} \\ {^0 \hat{\mathbf{x}}_{3}}\end{array}\right]-\left[ \begin{array}{cc}{\mathbf{x}_{2}} {\ominus \mathbf{x}_{0}} \\ {\mathbf{x}_{3}} {\ominus \mathbf{x}_{0}}\end{array}\right]\right\|^{2}_{^{0}\Lambda_t}\tag{21} ∥∥∥∥[0x^20x^3]−[x2⊖x0x3⊖x0]∥∥∥∥0Λt2(21)
也就是从global变换到了local帧。这个测量就是在local帧上线性化,global上非线性化。
GLC方法中将参考帧转移到任意一个节点,使用的是节点的全局估计,根据Lemma4.1
,说明这个不是最优的近似,导致了不一致的结果。NFR 使用局部线性化点,通过固定节点的估计找到全局帧下局部线性化点。
注意的是,边缘化子图的选择只使用与被边缘化节点直接相连的因子(约束)就可以,不需要 z b {\rm z}_b zb,但是GLC和NFR为了边缘化过程有更好的稀疏性,包含了这些节点,并且在后续的优化中不进行重新的线性化。
在代码中注意,这几种的处理方式!!
边缘化破坏了稀疏性,提出了在线的稀疏拓扑求解,使用稀疏因子代替稠密测量。
使用 l 1 \mathcal l 1 l1正则化KLD来求解稀疏信息矩阵。使用的是局部,转移到参考帧的信息矩阵 L Λ t ^L\Lambda _t LΛt。
推断测量增加到具有非零条目的节点间,另外局部先验测量也被增加到每个节点。如下图
稀疏因子不仅要符合稀疏拓扑,还要和原局部目标信息一致。
推断因子有以下形式:
z ˘ i j = h ˘ i j ( x i , x j ) + n ˘ i j (22) \breve{\mathbf{z}}_{i j}=\breve{\mathbf{h}}_{i j}\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)+\breve{\mathbf{n}}_{i j} \tag{22} z˘ij=h˘ij(xi,xj)+n˘ij(22)
其中噪声的信息矩阵需要确定。
首先,构建公式(22)的期望值和相应的雅克比,使用 L x ^ ^L\hat {\bf x} Lx^作为线性化点。即
z ˘ ^ i j = h ˘ i j ( L x ^ i , L x ^ j ) , a n d H ˘ i j = ∂ h ˘ i j ∂ x ∣ x = L x ^ (23) \hat{\breve {\bf z}}_{ij} = \breve{\bf h}_{ij}(^L\hat{\rm x}_i, ^L\hat{\rm x}_j),\ \text and \ \breve {\bf H}_{ij}=\frac{\partial \breve{\bf h}_{ij}}{\partial {\bf x}}|_{{\bf x}=^L\hat{\bf x}}\tag{23} z˘^ij=h˘ij(Lx^i,Lx^j), and H˘ij=∂x∂h˘ij∣x=Lx^(23)
我们希望新的测量不比原因子包含额外的信息,是一致的。使用最小化KLD来求解。使得稀疏化之后,不会变得过度自信(协方差变小)。
边缘化之后推迟稀疏化,先边缘化再稀疏化。
总结,首先在马尔科夫毯上进行局部相对优化,并计算边缘分布。然后进行边的稀疏化,找到新的稀疏因子代替稠密的内部因子。
滑窗的方式在计算量和精度进行了折中,在边缘化之后如何对丢弃状态的不确定性进行建模是精度的关键。标准边缘化导致了不一致性,同一状态的不同估计被用来了计算雅克比矩阵。这导致了把不是测量实际提供的信息计算出来的状态空间方向加入到了状态中,就是沿着不可观测方向前进了。这进而导致了估计的协方差被错误估计,变得不一致,精度不准确。
提出一种方法,保证计算雅克比时,只有一种估计被利用。
一致性: A recursive estimator is termed consistent when the state estimation errors are zero mean, and their covariance equals the one reported by the estimator
相机相对于全局参考帧的姿态:
c i = [ q C i p C i ] (24) \mathbf{c}_{i}=\left[ \begin{array}{c}{\mathbf{q}_{C_{i}}} \\ {\mathbf{p}_{C_{i}}}\end{array}\right] \tag{24} ci=[qCipCi](24)
观测模型:
z i j = h ( C ( q C i ) ( p L j − p C i ) ) + n i j (25) \mathbf{z}_{i j}=\mathbf{h}\left(\mathbf{C}\left(\mathbf{q}_{C_{i}}\right)\left(\mathbf{p}_{L_{j}}-\mathbf{p}_{C_{i}}\right)\right)+\mathbf{n}_{i j} \tag{25} zij=h(C(qCi)(pLj−pCi))+nij(25)
其中 n i j ∼ N ( 0 2 × 1 , R i j ) \mathbf{n}_{i j} \sim \mathcal{N}\left(\mathbf{0}_{2 \times 1}, \mathbf{R}_{i j}\right) nij∼N(02×1,Rij).
优化的概率密度函数为:
p ( x k ∣ z 0 : k ) = p ( x k ) ∏ ( i , j ) ∈ S a ( k ) p ( z i j ∣ c i , p L j ) (26) p\left(\mathbf{x}_{k} | \mathbf{z}_{0 : k}\right)=p\left(\mathbf{x}_{k}\right) \prod_{(i, j) \in \mathcal{S}_{a}(k)} p\left(\mathbf{z}_{i j} | \mathbf{c}_{i}, \mathbf{p}_{L_{j}}\right) \tag{26} p(xk∣z0:k)=p(xk)(i,j)∈Sa(k)∏p(zij∣ci,pLj)(26)
其中 p ( x k ) p({\bf x }_k) p(xk)是状态先验信息的,例如第一帧添加全局尺度信息。建模为: f ( x k ) ∼ N ( f ^ , R p ) \mathbf{f}\left(\mathbf{x}_{k}\right) \sim \mathcal{N}\left(\hat{\mathbf{f}}, \mathbf{R}_{p}\right) f(xk)∼N(f^,Rp)
公式(26)变成最小化cost function
c ( x k ) = 1 2 ∥ f ( x k ) − f ^ ∥ R p + 1 2 ∑ ( i , j ) ∈ S a ( k ) ∥ z i j − h ( c i , p L j ) ∥ R i j (27) c\left(\mathbf{x}_{k}\right)=\frac{1}{2}\left\|\mathbf{f}\left(\mathbf{x}_{k}\right)-\hat{\mathbf{f}}\right\|_{\mathbf{R}_{p}}+\frac{1}{2} \sum_{(i, j) \in \mathcal{S}_{a}(k)}\left\|\mathbf{z}_{i j}-\mathbf{h}\left(\mathbf{c}_{i}, \mathbf{p}_{L_{j}}\right)\right\|_{\mathbf{R}_{i j}} \tag{27} c(xk)=21∥∥∥f(xk)−f^∥∥∥Rp+21(i,j)∈Sa(k)∑∥∥zij−h(ci,pLj)∥∥Rij(27)
求解:
A ( ℓ ) Δ x ( ℓ ) = − b ( ℓ ) (28) \mathbf{A}^{(\ell)} \Delta \mathbf{x}^{(\ell)}=-\mathbf{b}^{(\ell)} \tag{28} A(ℓ)Δx(ℓ)=−b(ℓ)(28)
其中
A ( ℓ ) = F T R p − 1 F + ∑ ( i , j ) ∈ S a ( k ) H i j ( ℓ ) T R i j − 1 H i j ( ℓ ) (29) \mathbf{A}^{(\ell)}=\mathbf{F}^{T} \mathbf{R}_{p}^{-1} \mathbf{F}+\sum_{(i, j) \in \mathcal{S}_{a}(k)} \mathbf{H}_{i j}^{(\ell) T} \mathbf{R}_{i j}^{-1} \mathbf{H}_{i j}^{(\ell)}\tag{29} A(ℓ)=FTRp−1F+(i,j)∈Sa(k)∑Hij(ℓ)TRij−1Hij(ℓ)(29)
b ( ℓ ) = F T R p − 1 ( f ( x k ( ℓ ) ) − f ^ ) − ∑ ( i , j ) ∈ S a ( k ) H i j ( ℓ ) T R i j − 1 ( z i j − h ( c i ( ℓ ) , p L j ( ℓ ) ) ) (30) \mathbf{b}^{(\ell)}=\mathbf{F}^{T} \mathbf{R}_{p}^{-1}\left(\mathbf{f}\left(\mathbf{x}_{k}^{(\ell)}\right)-\hat{\mathbf{f}}\right)-\sum_{(i, j) \in S_{a}(k)} \mathbf{H}_{i j}^{(\ell) T} \mathbf{R}_{i j}^{-1}\left(\mathbf{z}_{i j}-\mathbf{h}\left(\mathbf{c}_{i}^{(\ell)}, \mathbf{p}_{L_{j}}^{(\ell)}\right)\right) \tag{30} b(ℓ)=FTRp−1(f(xk(ℓ))−f^)−(i,j)∈Sa(k)∑Hij(ℓ)TRij−1(zij−h(ci(ℓ),pLj(ℓ)))(30)
雅克比矩阵为
H i j ( ℓ ) = [ 0 . . . H L i j ( x k ( ℓ ) ) . . . H C i j ( x k ( ℓ ) ) . . . 0 ] (31) {\bf H}^{(\ell)}_{ij}=\left[ \begin{array}{c} 0 &... &{\bf H}_{L_{ij}}({\bf x^{(\ell)}_k}) &... &{\bf H}_{C_{ij}}({\bf x^{(\ell)}_k}) &... & 0 \end{array}\right]\tag{31} Hij(ℓ)=[0...HLij(xk(ℓ))...HCij(xk(ℓ))...0](31)
其中对相机位姿和点位置的雅克比:
H C i j ( x k ) = Γ i j C ( q C i ) [ ⌊ ( p L j − p C i ) × ⌋ C T ( q C i ) − I 3 ] H L i j ( x k ) = Γ i j C ( q C i ) Γ i j = ∂ h ( p ) ∂ p ∣ p = C ( q C i ) ( p L j − p C i ) (32) \begin{aligned} \mathbf{H}_{C_{i j}}\left(\mathbf{x}_{k}\right)&=\mathbf{\Gamma}_{i j} \mathbf{C}\left(\mathbf{q}_{C_{i}}\right)\left[\left\lfloor\left(\mathbf{p}_{L_{j}}-\mathbf{p}_{C_{i}}\right) \times\right\rfloor \mathbf{C}^{T}\left(\mathbf{q}_{C_{i}}\right) \quad-\mathbf{I}_{3}\right] \\ \mathbf{H}_{L_{i j}}\left(\mathbf{x}_{k}\right)&=\mathbf{\Gamma}_{i j} \mathbf{C}\left(\mathbf{q}_{C_{i}}\right) \\ \mathbf{\Gamma}_{i j}&=\left.\frac{\partial \mathbf{h}(\mathbf{p})}{\partial \mathbf{p}}\right|_{\mathbf{p}=\mathbf{C}\left(\mathbf{q}_{C_{i}}\right)\left(\mathbf{p}_{L_{j}}-\mathbf{p}_{C_{i}}\right)} \end{aligned} \tag{32} HCij(xk)HLij(xk)Γij=ΓijC(qCi)[⌊(pLj−pCi)×⌋CT(qCi)−I3]=ΓijC(qCi)=∂p∂h(p)∣∣∣∣p=C(qCi)(pLj−pCi)(32)
这里求导需要会,使用了 ( R p ) ∧ = R p ∧ R T (Rp)^\wedge =Rp^\wedge R^T (Rp)∧=Rp∧RT
要边缘化的旧的状态:
x m = { c 0 , … , c m − 1 , p L 1 , … , p L q } (33) \mathbf{x}_{\mathbf{m}}=\left\{\mathbf{c}_{0}, \dots, \mathbf{c}_{m-1}, \mathbf{p}_{L_{1}}, \dots, \mathbf{p}_{L_{q}}\right\} \tag{33} xm={c0,…,cm−1,pL1,…,pLq}(33)
滑窗中的活动状态:
x r = { c m , … , c k , p L q + 1 , ⋯ , p L n } (34) \mathbf{x}_{\mathbf{r}}=\left\{\mathbf{c}_{m}, \dots, \mathbf{c}_{k}, \mathbf{p}_{L_{q+1}}, \cdots, \mathbf{p}_{L_{n}}\right\} \tag{34} xr={cm,…,ck,pLq+1,⋯,pLn}(34)
边缘化:
b p ( k ) = b m r ( k ) − A r m ( k ) A m m ( k ) − 1 b m m ( k ) (35) \mathbf{b}_{\mathbf{p}}(k)=\mathbf{b}_{\mathbf{m} \mathbf{r}}(k)-\mathbf{A}_{\mathbf{r m}}(k) \mathbf{A}_{\mathbf{m} \mathbf{m}}(k)^{-1} \mathbf{b}_{\mathbf{m} \mathbf{m}}(k) \tag{35} bp(k)=bmr(k)−Arm(k)Amm(k)−1bmm(k)(35)
A p ( k ) = A r r ( k ) − A r m ( k ) A m m ( k ) − 1 A m r ( k ) (36) \mathbf{A}_{\mathbf{p}}(k)=\mathbf{A}_{\mathbf{r r}}(k)-\mathbf{A}_{\mathbf{r m}}(k) \mathbf{A}_{\mathbf{m} \mathbf{m}}(k)^{-1} \mathbf{A}_{\mathbf{m} \mathbf{r}}(k) \tag{36} Ap(k)=Arr(k)−Arm(k)Amm(k)−1Amr(k)(36)
这里
b m ( k ) = [ b m m ( k ) b m r ( k ) ] = F T R p − 1 ( f ( x ^ k ( k ) ) − f ^ ) − ∑ ( i , j ) ∈ S m H i j T ( k ) R i j − 1 ( z i j − h ( c ^ i ( k ) , p ^ L j ( k ) ) ) (37) \begin{aligned} \mathbf{b}_{\mathbf{m}}(k) &=\left[ \begin{array}{c}{\mathbf{b}_{\mathbf{m m}}(k)} \\ {\mathbf{b}_{\mathbf{m r}}(k)}\end{array}\right] \\=& \mathbf{F}^{T} \mathbf{R}_{p}^{-1}\left(\mathbf{f}\left(\hat{\mathbf{x}}_{k}(k)\right)-\hat{\mathbf{f}}\right) \\ &-\sum_{(i, j) \in \mathcal{S}_{m}} \mathbf{H}_{i j}^{T}(k) \mathbf{R}_{i j}^{-1}\left(\mathbf{z}_{i j}-\mathbf{h}\left(\hat{\mathbf{c}}_{i}(k), \hat{\mathbf{p}}_{L_{j}}(k)\right)\right) \end{aligned} \tag{37} bm(k)==[bmm(k)bmr(k)]FTRp−1(f(x^k(k))−f^)−(i,j)∈Sm∑HijT(k)Rij−1(zij−h(c^i(k),p^Lj(k)))(37)
A m ( k ) = [ A m m ( k ) A mr ( k ) A r m ( k ) A r r ( k ) ] = F T R p − 1 F + ∑ ( i , j ) ∈ S m H i j ( k ) R i j − 1 H i j ( k ) (38) \begin{aligned} \mathbf{A}_{\mathbf{m}}(k) &=\left[ \begin{array}{cc}{\mathbf{A}_{\mathbf{m} \mathbf{m}}(k)} & {\mathbf{A}_{\operatorname{mr}}(k)} \\ {\mathbf{A}_{\mathbf{r m}}(k)} & {\mathbf{A}_{\mathbf{r r}}(k)}\end{array}\right] \\ &=\mathbf{F}^{T} \mathbf{R}_{p}^{-1} \mathbf{F}+\sum_{(i, j) \in \mathcal{S}_{m}} \mathbf{H}_{i j}(k) \mathbf{R}_{i j}^{-1} \mathbf{H}_{i j}(k) \end{aligned} \tag{38} Am(k)=[Amm(k)Arm(k)Amr(k)Arr(k)]=FTRp−1F+(i,j)∈Sm∑Hij(k)Rij−1Hij(k)(38)
注意上面的矩阵都是针对要被边缘化的状态 S m \mathcal S_m Sm,因为有共视关系所以有 r r r状态。
A p ( k ) {\bf A_p}(k) Ap(k)代表了提供给估计 x r {\bf x_r} xr的所有先验和被抛弃的测量信息。
之后继续运行到 k ′ k' k′时刻,包含了 x r , x n \bf x_r, x_n xr,xn状态,进行优化第 ℓ \ell ℓ次迭代:
b ( ℓ ) = Π r T b p ( k ) + Π r T A p ( k ) ( x r ( ℓ ) − x ^ r ( k ) ) − ∑ ( i , j ) ∈ S a ( k ′ ) H i j ( ℓ ) T R i j − 1 ( z i j − h ( c i ( ℓ ) , p L j ( ℓ ) ) ) (39) {\mathbf{b}^{(\ell)}=\mathbf{\Pi}_{\mathbf{r}}^{T} \mathbf{b}_{\mathbf{p}}(k)+\mathbf{\Pi}_{\mathbf{r}}^{T} \mathbf{A}_{\mathbf{p}}(k)\left(\mathbf{x}_{\mathbf{r}}^{(\ell)}-\hat{\mathbf{x}}_{\mathbf{r}}(k)\right)} \\ {-\sum_{(i, j) \in \mathcal{S}_{a}\left(k^{\prime}\right)} \mathbf{H}_{i j}^{(\ell) T} \mathbf{R}_{i j}^{-1}\left(\mathbf{z}_{i j}-\mathbf{h}\left(\mathbf{c}_{i}^{(\ell)}, \mathbf{p}_{L_{j}}^{(\ell)}\right)\right)} \tag{39} b(ℓ)=ΠrTbp(k)+ΠrTAp(k)(xr(ℓ)−x^r(k))−(i,j)∈Sa(k′)∑Hij(ℓ)TRij−1(zij−h(ci(ℓ),pLj(ℓ)))(39)
A ( ℓ ) = Π r T A p ( k ) Π r + ∑ ( i , j ) ∈ S a ( k ′ ) H i j ( ℓ ) T R i j − 1 H i j ( ℓ ) (40) \mathbf{A}^{(\ell)}=\Pi_{\mathbf{r}}^{T} \mathbf{A}_{\mathbf{p}}(k) \Pi_{\mathbf{r}}+\sum_{(i, j) \in \mathcal{S}_{a}\left(k^{\prime}\right)} \mathbf{H}_{i j}^{(\ell) T} \mathbf{R}_{i j}^{-1} \mathbf{H}_{i j}^{(\ell)} \tag{40} A(ℓ)=ΠrTAp(k)Πr+(i,j)∈Sa(k′)∑Hij(ℓ)TRij−1Hij(ℓ)(40)
公式(39)(40)优化的就是状态 x r , x n \bf x_r, x_n xr,xn,其中 Π r = [ I dim x r 0 ] \boldsymbol{\Pi}_{\mathbf{r}}=\left[\mathbf{I}_{\operatorname{dim} \mathbf{x}_{\mathbf{r}}} \mathbf{0}\right] Πr=[Idimxr0]
然后重复之前的边缘化步骤。
证明了特征测量的信息矩阵的秩错误的增加了。
普通的BA中在 [ 0 , k ′ ] [0,k'] [0,k′]内的信息矩阵
J b a ( k ′ ) = ∑ ( i , j ) ∈ S H i j T ( k ′ ) R i j − 1 H i j ( k ′ ) (41) \mathbf{J}_{\mathrm{ba}}\left(k^{\prime}\right)=\sum_{(i, j) \in \mathcal{S}} \mathbf{H}_{i j}^{T}\left(k^{\prime}\right) \mathbf{R}_{i j}^{-1} \mathbf{H}_{i j}\left(k^{\prime}\right) \tag{41} Jba(k′)=(i,j)∈S∑HijT(k′)Rij−1Hij(k′)(41)
这里的雅克比线性展开点在 K ′ K' K′
滑窗算法中的信息矩阵,要包含与公式(41)相同的项,使用相同的测量。
J mar ( k ′ ) = ∑ ( i , j ) ∈ S m H i j T ( k ) R i j − 1 H i j ( k ) + ∑ ( i , j ) ∈ S a ( k ′ ) H i j T ( k ′ ) R i j − 1 H i j ( k ′ ) (42) \mathbf{J}_{\operatorname{mar}}\left(k^{\prime}\right)=\sum_{(i, j) \in \mathcal{S}_{m}} \mathbf{H}_{i j}^{T}(k) \mathbf{R}_{i j}^{-1} \mathbf{H}_{i j}(k)+\sum_{(i, j) \in \mathcal{S}_{a}\left(k^{\prime}\right)} \mathbf{H}_{i j}^{T}\left(k^{\prime}\right) \mathbf{R}_{i j}^{-1} \mathbf{H}_{i j}\left(k^{\prime}\right) \tag{42} Jmar(k′)=(i,j)∈Sm∑HijT(k)Rij−1Hij(k)+(i,j)∈Sa(k′)∑HijT(k′)Rij−1Hij(k′)(42)
这里的雅克比线性展开点,前半部分在 k k k,后半部分在 k ′ k' k′。这两个不同状态使得某些可以消去的项变得不行。因此两个矩阵的秩变得不一样。
rank ( J mar ( k ′ ) ) = rank ( J b a ( k ′ ) ) + 3 (43) \operatorname{rank}\left(\mathbf{J}_{\operatorname{mar}}\left(k^{\prime}\right)\right)=\operatorname{rank}\left(\mathbf{J}_{\mathrm{ba}}\left(k^{\prime}\right)\right)+3 \tag{43} rank(Jmar(k′))=rank(Jba(k′))+3(43)
这使得信息矩阵包含了更多的信息(沿着状态空间的更多方向),因此低估了状态的不确定性。使得该问题变得不一致且是次优的。其它方式的边缘化也有这个问题。
公式(43)证明,参考论文2中的3.1使用双目作为例子。
正常的零空间(不可观的状态)是6 个维度,是全局旋转和全局平移。但是边缘化发生后,零空间缺少了3个维度,是全局的角度。这使得全局方向变得可观。
出现这个问题的主要原因是,在测量雅克比中出现了两个不同的某些状态估计。特别是某些边缘化掉的测量和当前剩余状态 x r \bf x_r xr相连。例如,相机位姿在边缘化后留在了滑窗中,但是其观测的某个点在 k k k时刻被边缘化掉。这样它的信息矩阵就会出现在公式(36)中,而当我们在 k ′ k' k′时刻对该相机位姿进行优化使用的是 k ′ k' k′的状态计算雅克比。
为了解决这个问题,只能改变用于计算雅克比的状态估计。**在当前状态和边缘化状态相连时,使用边缘化时刻的状态来计算后面的雅克比。**这样保证了信息矩阵只有一个状态。注意,旧的状态只用来计算雅克比。
诚然,这样导致了线性展开的误差,因此使用时还是要保证在较好的状态下。
比较有意思的一个公式:
rank ( A B ) = rank ( B ) − dim ( N ( A ) ⋂ R ( B ) ) (44) \operatorname{rank}(\mathbf{A B})=\operatorname{rank}(\mathbf{B})-\operatorname{dim}(\mathcal{N}(\mathbf{A}) \bigcap \mathcal{R}(\mathbf{B})) \tag{44} rank(AB)=rank(B)−dim(N(A)⋂R(B))(44)
对应的信息矩阵变化为:
第1个矩阵是原始矩阵,对应第一张因子图。将要边缘化的相机状态移动到左上角之后,将其边缘化,对应着第二张因子图。矩阵有2变3了,可以发现它使得矩阵变得稠密了,有3行都出现fill-in了。之后边缘化掉点m1,对应第三张因子图。矩阵由3变成4了。通过这次变换,发现矩阵没有变得稠密。
因此,边缘化要尽量边缘化掉那些不被其它帧观测到的点,观测到的点不边缘化或者直接丢弃。那么问题来了,没观测到的点提供的先验信息不就很少了吗?
利用这张图3可以对公式(42)进行解释,第一个是原始的两个非线性函数组成的能量函数图,深蓝色部分是他的零空间。第二三个是在两个不同的展开点分别进行线性展开。最后加在一起得到第四个,发现原来的零空间变小了,不确定变得确定了,不可观变得可观了。和之前的解释一样。
高斯推断中边缘概率求解,可以发现,是先对协方差矩阵进行LDU分解,然后再求逆的。
而对于SLAM中的边缘化,从公式(11)(36)都可以看出来是直接对信息矩阵进行的分解消元,也就是先求逆再分解。结果是不一样的。它们都使用了舒尔补,具体有啥不同呢,还得再研究。
参考PRML的2.3.1和2.3.2可以明显的发现,边缘化和求条件概率是不一样的!!!
再说一句,边缘化是把另一个变量当做变量积分掉,求条件概率是把另一个变量当做常数忽略掉。
Decoupled, Consistent Node Removal and Edge Sparsification for Graph-based SLAM ↩︎
Consistency Analysis for Sliding-Window Visual Odometry ↩︎ ↩︎
https://blog.csdn.net/heyijia0327/article/details/52822104 ↩︎