VINS-MONO

Paper Reading of VINS-MONO

Introdunction of VINS-MONO

目前,仅仅使用一个单目相机的视觉系统在计算视觉领域得到了非常广泛的应用,其具有以下特点

  • 规格小
  • 成本低
  • 安装方便
  • 但是,单目系统在视觉估计方面存在深度缺失的问题

一个叫做IMU(Inertial-Measurement Unit)辅助工具在单目视觉系统得到了非常广泛地应用

  • 融合系统的名字:Visual-Inertial System(VINS)
  • IMU的优势:
    • 能够显著提升运动跟踪效率
    • 能够在视觉跟踪丢失(由于光照改变(illumination change)、纹理特征不明显(texture-less area)、运动模糊(motion blur))的时候,填补丢失这部分的运动估计

However,对于这个VINS系统还存在着很多的缺点

  • VINS不能够从一个静止的条件下启动,而是需要从一个未知移动状态开始
  • 在系统初始化时,VINS也面临着高度非线性等问题
  • IMU和Camera的相对外参标定也是一个需要解决的问题

为了解决上面这些问题,VINS-MONO就诞生了,一个鲁棒、通用的单目visual-inertial状态估计器。同时这个系统在处理数据方面是全程tightly-coupled,而且在imu-camera外参标定以及imu去漂移这两方面都是在线实现的。

Overview of VINS-MONO

上面这个就是VINS-MONO的整个系统框架,我们按照顺序来梳理一遍

  1. Sect. IV Measurement Preprocessing 数据的预处理
  2. Sect. V Initialization 数据的初始化
  3. Sect. VI and VII Local VIO with Relocalization数据紧耦合与回环重定位
  4. Sect VIII Global Pose Graph Optimization图优化去除漂移

在正式开始介绍之前,还需要一些符号和定义的声明

\begin{equation} \begin{cases} ( \cdot )^{w} \space is \space the \space world \space frame. \\ ( \cdot )^{b} \space is \space the \space body \space frame. (also \space IMU \space frame)\\ ( \cdot )^{c} \space is \space the \space camera \space frame. \\ Rotation \space matrics \space \textbf{R} \space and \space Hamilton \space quaternions \space \textbf{q} \space both \space represent \space rotation.\\ \textbf{q}_w^b \space and \space \textbf{p}_w^b \space are \space rotation \space and \space translation \space from \space \textbf {body} \space \textbf{frame} \space to \space \textbf{world} \space \textbf{frame}. \end{cases} \end{equation}

Measurement Preprocessing of VINS-MONO

Vision Processing Front-end(前端视觉处理)

这里使用到了KLT稀疏光流算法(KLT sparse optical flow algorithm)取提取特征点features,在提取特征时还用到了下面的一些操作

  • 每张图片所有特征中提取100-300个corner fearures

  • 这些corner features使得特征点在图像中处于一个均匀分布的状态(uniform feature distribution)

    • 多说一句,上面这个uniform distribution的实现是通过设定两个相邻feature的最小sparation of pixels去实现(因为是光流,所以这个就是保证features不扎堆的意思)
  • 通过RANSAC算法去除一些外点features(outliers),这一步在论文中是通过匹配两幅图之间的Fundamental Matrix利用点到极线的距离进行筛选的(我记得OpenCV里面的那个findfundamental函数里面就自带ransac)

  • 还要筛选Keyframe,会遵循两个准则(citeria)

    1. 利用平均视差(average parallax),对当前keyframe和最新得到的keyframe在计算平均视差,如果超出了设定的阈值,就会丢弃当前的keyframe,并且把最新的这个keyframe作为当前keyframe(current frame)

      这种方法有一个问题,就是当仅旋转运动发生时,无法估计相机的F矩阵,从而导致features等无法获取,这里论文中说到用一个IMU短时积分(short-time integration)的方式相机的rotation

      注意,这里获取的rotation和translation都是用来筛选keyframe的,也就是说这个rotation、translation的好坏并不会影响系统的定位精度,充其量就是选了一个suboptimal(次优的)keyframe,无伤大雅

    2. 利用跟踪质量(Tracking Quality)评价当前这个image,当跟踪光流点的数量降低到一定阈值的时候,再不更新keyframe就会发生tracking loss的事件啦!因此为了防止这个事情发生,当跟踪点主动降低到一定程度,我们就以这个时刻的image为一个新的keyframe,重新计算optical flow,开启新的tracking。

IMU Pre-integration(IMU预整合?)

等待更新ing。。。