前言:港科大的VINS-Mono作为目前state of the art的开源VIO项目,是研究视觉与IMU融合的必读算法,网上的论文解读与代码实现也非常丰富(感谢!)。为更好地进行学习,本人将在学习之余逐步整理自己对算法的论文和实现的相关解读,欢迎大家一起讨论。
原文:VINS-Mono A Robust and Versatile Monocular Visual-Inertial State Estimator
VINS代码地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono
PS. 本人参考的VINS-Mono是新版本,代码结构有所区别,可以在节点图中看出增加了一个"/pose_graph"节点。
from github:
29 Dec 2017: New features: Add map merge, pose graph reuse, online temporal calibration function, and support rolling shutter camera.
其中 map reuse 可以参考文章:
Relocalization, Global Optimization and Map Merging for Monocular Visual-Inertial SLAM
目录!(不断补充)
VINS-Mono论文翻译
VINS-Mono代码解读——各种数据结构 sensor_msgs measurements
VINS-Mono代码解读——视觉跟踪 feature_trackers
VINS-Mono理论学习——IMU预积分 Pre-integration
VINS-Mono代码解读——状态估计器流程 estimator
VINS-Mono代码解读——视觉惯性联合初始化 initialStructure() visualInitialAlign()
VINS-Mono代码解读——基于滑动窗口的非线性优化 solveOdometry() optimization() slideWindow()
TUM VIO数据集介绍与尝试
VINS介绍:
VINS是一种具有鲁棒性和通用性的单目视觉惯性状态估计器。
该算法主要有以下几个模块:
- 预处理
图像特征光流跟踪
IMU数据预积分 - 初始化
纯视觉Sfm
Sfm与IMU积分的松耦合 - 基于滑动窗口的非线性优化实现紧耦合
- 回环检测与重定位
- 四自由度位姿图优化
rqt_graph
node only
node all
代码的文件目录
1、ar_demo:一个ar应用demo
2、benchmark_publisher:发布数据集中参考值
3、camera_model
calib
camera_models:各种相机模型类
chessboard:检测棋盘格特征点
gpl
sparse_graph
intrinsic_calib.cc:相机校准模块
4、config:系统配置文件存放处
5、feature_trackers:
feature_tracker_node.cpp ROS 节点函数,回调函数
feature_tracker.cpp 图像特征跟踪
6、pose_graph:
keyframe.cpp 关键帧选取
pose_graph.cpp 位姿图优化
pose_graph_node.cpp ROS 节点函数
7、support_files:帮助文档
8、vins_estimator
factor:实现IMU、camera等残差模型
initial:系统初始化,外参标定,SFM
utility:相机可视化,四元数等数据转换
estimator.cpp:紧耦合的VIO状态估计器实现
estimator_node.cpp:ROS 节点函数,回调函数
feature_manager.cpp:特征点管理,三角化,关键帧等
parameters.cpp:读取参数
参考笔记:(不断补充)
VINS技术路线与代码详解 by 五行缺帅wangshuailpp
VINS-Mono 学习笔记 by 童哲航
VINS-Mono 代码解读 by Rain-XIA
VINS-mono详细解读 by 极品巧克力
VINS代码注释:
https://github.com/castiel520/VINS-Mono by castiel520
https://github.com/QingSimon/VINS-Mono-code-annotation by QingSimon