VINS-Mono-后端优化 (四:边缘化原理)

滑窗中固定只能有11帧,当来了新的帧的时候旧的帧就需要抹掉,但是不能直接把旧的帧的全部信息抹掉,因为旧的帧的经历过11次优化,其地图点中的优化信息是有用,边缘化的操作就是为了只把最旧帧的变量去掉,但是保留其对应的优化信息留在窗口里面,因为那些信息仍然具有约束作用

边缘化舒尔补

VINS-Mono-后端优化 (四:边缘化原理)_第1张图片
VINS-Mono-后端优化 (四:边缘化原理)_第2张图片
在这里插入图片描述
此时公式已经没有 δ x a \delta x_{a} δxa 了,但是保留了 δ x a \delta x_{a} δxa 带来的约束
δ x b \delta x_{b} δxb 左边的矩阵当作新的 H H H,并分解为 J T J J^{T}J JTJ,右边则分解为 J T e J^{T}e JTe

边缘化更详细的讲解看这篇文章 SLAM中的marginalization 和 Schur complement

H 矩阵的构造

由于这个 H H H 矩阵是在ceres中计算的,不会暴露出来,由于这里需要进行边缘化,所以只能自己计算 H H H 矩阵,这基本算是一个手写后端的部分了
有了 H H H 矩阵就可以迭代优化了, H Δ x = g H\Delta x=g HΔx=g

讲一下如何构建这个 H H H 矩阵,现在存在预积分约束和重投影约束,每个约束都存在 H = J T J H=J^{T}J H=JTJ,但是现在需要一个大的 H H H 矩阵

通过把累加的方式构成这个大的矩阵 H = Σ J T J H=\Sigma J^{T}J H=ΣJTJ
J = ∂ e ∂ x J=\frac{\partial e }{\partial x} J=xe

状态向量有, λ \lambda λ 是地图点
VINS-Mono-后端优化 (四:边缘化原理)_第3张图片
就是把每个 J J J都累加起来构成这个大 H H H

J T J J^{T}J JTJ 的形式如这张图
VINS-Mono-后端优化 (四:边缘化原理)_第4张图片
代码中要关注一下是怎么累加的

VINS-Mono-后端优化 (四:边缘化原理)_第5张图片
VINS-Mono-后端优化 (四:边缘化原理)_第6张图片
VINS-Mono-后端优化 (四:边缘化原理)_第7张图片
m m m 是地图点, p p p 是位姿,可以看到 p 1 p1 p1 的量被边缘化掉了,然后对 m 1 m1 m1 p 2 p2 p2 建立了关系,原本 m 1 m1 m1,和 p 2 p2 p2 是没有关系的,边缘化后就建立了约束,关系图可以看下面
VINS-Mono-后端优化 (四:边缘化原理)_第8张图片
这里可以看出,边缘化会带来 fill-in 现象,把原先的稀疏矩阵变成了稠密矩阵,因为会不停地带来额外的约束

VINS中会把地图点也边缘化掉,只剩位姿,速度和零偏这些状态量的约束保留,因为地图点的数量太多了,这样可以减少矩阵的维数

你可能感兴趣的:(VINS系列专栏,自动驾驶,算法,线性代数,slam)