1 论文
1.1 OpenVINS: A Research Platform for Visual-Inertial Estimation
Geneva, P., Eckenhoff, K., Lee, W., Yang, Y., & Huang, G. (2020, May). Openvins: A research platform for visual-inertial estimation. In 2020 IEEE International Conference on Robotics and Automation (ICRA) (pp. 4666-4672). IEEE.
1.1.1 主要内容
这篇论文提纲挈领地介绍了OpenVINS库的各个模块主要功能以及一些实验验证的结果。
1.1.2 思考
- 文中实验结果表明:EurocMav V203数据集,双目情况下,openvins加不加 SLAM landmark到状态向量里 效果都差不多;单目情况下加SLAM landmark对精度有明显提升。为什么?
1.1.3 启发
- 要有地图库,包含关键帧和关键帧中高置信度的路标点。
- 普通帧要关联关键帧,减少VIO漂移
- 室外场景下要能融合GPS甚至LiDAR
1.2 MSCKF: A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation
Mourikis, A. I., & Roumeliotis, S. I. (2007, April). A multi-state constraint Kalman filter for vision-aided inertial navigation. In Proceedings 2007 IEEE international conference on robotics and automation (pp. 3565-3572). IEEE.
1.2.1 MSCKF估计过程
A. IMU递推
每次IMU到来时就进行数值积分递推,更新状态和协方差。(或者等到图像到来再一次性计算,S-MSCKF代码里面就是这样实现的)
B. 状态增广
图像帧到来时,利用IMU递推得到的位姿给该图像帧赋初值。
C. 滤波更新
观测模型
更新
更新时刻有两个,一个发生在信息搜集全时,一个发生在信息即将丢失时:
- 当特征点不再被跟踪到时,针对该特征点的约束信息不会再增多,此时会对窗口内所有观测到该特征点的位姿进行一轮更新
- 当达到最大位姿数量时需要丢弃帧,信息即将丢失,此时也会进行更新
2 代码解析
2.1 ov_core
2.1.1 track
track目录下实现了基于KLT光流、基于描述子匹配(、基于ArucoTag)的跟踪方法;并且派生于TrackBase类。后续如要引入诸如SVO等其他跟踪方法也易于拓展。
着重说下基于描述子的匹配:OpenVins中匹配的方式是robust_match(),里面是调用的opencv的KNNMatch,然后再用RANSAC剔除误匹配(Reject with F)。这一方式存在的关键问题是匹配耗时很长,对性能影响显著。可以参考ORBSLAM3中的匹配方式来对其优化,比如左右目匹配可以在极线上搜索,前后帧可以利用运动先验投影匹配。
2.1.2 types
TOD
2.2 ov_msckf
2.2.1 关注 updaterSLAM
和 updaterMSCKF
openvins中不仅仅进行了传统的MSCKF更新(状态向量中不包含路标点),还在updaterSLAM
中进行了包含路标点的估计更新。openvins 中路标点的数量默认设置为 50。理论上加入路标点会提升精度,代价是增加了计算量。但是openvins论文中表明EurocMav V203数据集双目模式下加入路标点到状态向量对精度影响有限。因此,updaterSLAM必要性以及超参数设置需要更多的实际实验来决定。