Direct sparse visual-inertial odometry using dynamic marginalization
VI-DSO主要做了什么事:
- 一种新的初始化策略,包括尺度和重力方向,并在初始化后联合优化。(什么新的策略?)
- 我们引入“动态边缘化”作为一种技术,自适应地使用边缘化策略。(何为自适应?)
首先,通过最小化energy function,估计位姿和深度。由光度误差项和惯性误差项组成。
算法分两个线程并行运行: - 对每一帧都执行粗跟踪,并使用直接图像对齐结合惯性误差项来估计最近一帧的姿态。
- 当创建一个新的关键帧时,我们执行一个可视化的惯性束调整,如优化,以估计所有活跃关键帧的位姿。
note:与【22】不同,在初始化视觉惯性系统之前并不等待固定的时间,而是共同优化了包括尺度在内的所有参数。因为惯性测量从一开始就被使用。(为什么之前会等待固定的时间?)
【22】R. Mur-Artal and J. D. Tard´os, “Visual-inertial monocular slam with map reuse,” IEEE Robot. and Autom. Lett., vol. 2, no. 2, 2017.
一、光度误差
理解这个光度误差公式真的很重要!什么是光度误差?在直接法中,假设一个空间点在各个视角下,成像的灰度是不变的。在不同视角下得到的误差越小,相机位姿越准确。
二、惯性误差
首先,imu预积分,非线性动力学模型参考的是《Direct Visual-Inertial Odometry with Stereo Cameras》
然后,预积分得到 imu在两帧图像i和j之间的旋转角,速度和位置。就可以得到第j帧图像的预测状态,协方差矩阵。
对应的误差函数:
i和j两帧的真实值与预测值之间的惯性误差 包括a和w。
三、初始化 前端
初始化尺度和重力方向,为什么要观察重力方向呢? 是因为,知道了准确的重力方向也就知道了这时系统的姿态。
作者将尺度(和重力方向)作为视觉惯性系统中的一个参数,并将它们与其他值,如姿态和几何形状一起进行优化。这意味着可以用任意的尺度进行初始化,而不是等到它被可观察到。初始化各种参数如下:
- 使用与DSO相同的视觉初始化,它计算两帧之间的粗略姿态估计以及几个点的近似深度。它们被归一化了,所以平均深度为1。
- 初始重力方向是通过平均多达40个加速度计的测量值来计算的,即使在高加速度的情况下,也能产生一个足够好的估计值。(初始化imu的姿态)
- 用零来初始化速度和imu偏差,尺度为1.0。
- 所有这些参数都在BA过程中进行联合优化。
note:从DSO frame到metric frame (尺度恢复后的坐标系)的变换 Tm_d
光度误差总是在DSOframe中进行评估,独立与尺度和重力方向
惯性误差使用metric frame
四、尺度感知的视觉惯性优化 后端
后端优化了一个滑动窗口中几个关键帧的姿态p、imu偏差b和速度v。
下图显示了该问题的因子图。为了避免imu预积分的误差太大,确保连续两个连续关键帧之间的时间不大于0.5秒。作者说,我们的算法的一个重要特性是,优化后的姿态不是在度量框架中表示,而是在DSO框架中表示。这意味着它们并不依赖于环境的规模。 (不太理解,意思是实时出来的是没有尺度恢复的位姿吗,那么优化后的位姿还有什么用)
-
非线性优化,高斯牛顿法;
-
使用舒尔-补体的边缘化:为了在一个合理的时间框架内计算高斯-牛顿更新,我们对较老的关键帧执行部分边缘化。这意味着与这个关键帧对应的所有变量(姿态、偏差、速度和仿射照明参数)都使用Schur补体被边缘化。下图显示了边缘化如何改变因子图。视觉因素的边缘化与dso中一样,通过删除影响系统稀疏性的残余项,并首先边缘化关键帧中的所有点,然后边缘化关键帧本身。
3.动态边缘化。主要思想是同时保持多个边缘化先验,当尺度估计离边缘化之前的线性化点太远时,重置我们目前使用的先验。