深蓝学院《BASALT源码解析》王鹏老师
1.Batch Bundle adjustment
其中L代表路标3D点,T imu位姿(旋转+平移),v IMU速度,b IMU bias(加速度+角速度)。
红色方块代表视觉的重投影因子,一个视觉的重投影因子把L和两帧联系到一起。
绿色方块代表IMU因子,每个IMU因子会把前后两帧的IMU速度和T还有上一帧bias联系一起,构成约束。
黄色方块代表bias因子,把前后两帧bias构成软约束,认为前后帧bias不会发生突变。
而在VINS中,将IMU因子和bias因子合并构成一个15(9+6)维的IMU因子。
即:
[
Δ
P
Δ
R
Δ
V
−
−
−
Δ
b
a
Δ
b
g
]
\left[ \begin{array}{c} \Delta P\\ \Delta R\\ \Delta V\\ ---\\ \Delta ba\\ \Delta bg \end{array} \right]
⎣⎢⎢⎢⎢⎢⎢⎡ΔPΔRΔV−−−ΔbaΔbg⎦⎥⎥⎥⎥⎥⎥⎤
随着相机运动,滑窗内IMU因子越来越多,且3D点被不断创建,导致优化变量越来越多,难以保证实时性。但在机器人运动的过程中,我们更主要关注的是机器人的当前位姿,而不是历史位姿,因为当前位姿信息对于路径规划等更加重要。
所以引出了接下来的滑动窗口优化。
2.Fixed-lag Smoothing(Slide Window Optimization)
如果需要只关注当前信息,就需要剔除一些变量。在IMU构建的约束是时序信息,并不像ORB中的图优化。因此便不能随意剔除帧和IMU信息,会打破时序性。就像在VINS中的边缘化,每次只能边缘化掉最老帧和次新帧。
在边缘化最老帧时,其实这些最老帧已经被多次优化,那么假设它的状态变量T、v、b已经被很好的估计,因此不需要再参与优化,且与当前帧所构建的视觉约束也较弱,或者就没有约束,可以直接被剔除掉。在ORB中就是这样做的,只优化局部的滑窗,
但是如果直接剔除掉最老帧,则失去了先验信息,那么此时如果整体旋转和平移,是不会影响到相对约束的。也就是零空间问题。
除非对当前窗口第一帧添加先验,但是会损失大量信息,因此常用的办法是采用概率的方式,将边缘化的状态变量变成剩余变量的后验概率,建立剩余变量之间相对约束关系。这样便可以提升实时性,也能保证系统的精度。