VIO算法的核心在后端,不管是优化的方法还是滤波的方法,都是靠后端的紧耦合融合获得较高的VIO精度,为了节省计算量一般前端都会做得很简单,基本都是FAST、Harris等角点加LK光流跟踪(S-MSCKF中使用的FAST角点,VINS_MONO中使用的goodFeatureToTrack)。如果计算资源充裕的话,也可以换成ORB、SURF、SIFT等描述子特征,精度应该会有所提升。
这里以S-MSCKF中的双目特征跟踪为例进行介绍,单目特征跟踪步骤很类似,可以参照VINS-MONO中的前端实现。
1. 特征跟踪流程
S-MSCKF前端主要步骤:
- A. 双目特征跟踪
- a) 左图前后帧跟踪:对上一帧左图特征点,在当前帧左图进行跟踪,获得当前帧左图的跟踪特征点
- b) 左右图跟踪:对当前帧左图特征点,在当前帧右图进行跟踪,获得当前帧右图的跟踪特征点
- c) 左右图前后帧RANSAC:分别对左右图,进行前后帧2-points RANSAC,剔除外点。只保留左右目都通过RANSAC的特征点。
- B. 双目特征新增
- a) 提取左图特征:在当前帧左图上,构建mask,已有特征附近不提取,在图像剩下区域提取FAST角点,将新的角点投射到网格中,如果网格中特征点满了则删除该新角点。
- b) 左右图跟踪:对当前帧左图新提取的特征点,在当前帧右图进行跟踪,获得当前帧右图的跟踪特征点
- C. 特征均匀