VINS论文解读与代码详解目录
Vins-mono是香港科技大学开源的一个VIO算法,用紧耦合的方法,通过单目+IMU恢复出尺度,效果非常棒。
VINS的功能模块可包括五个部分:数据预处理、初始化、后端非线性优化、闭环检测及闭环优化。代码中主要开启了四个线程,分别是:前端图像跟踪、后端非线性优化(其中初始化和IMU预积分在这个线程中)、闭环检测、闭环优化。
1 图像和IMU预处理
- 图像:提取图像Harris角点,金字塔光流跟踪相邻帧,RANSAC去除异常点,最后将跟踪到的特征点push到图像队列中,并通知后端进行处理。
- IMU:1)IMU积分,得到PVQ 位置、速度、旋转,2)计算在后端优化中将用到的相邻帧的预积分增量,3)计算预积分误差的Jacobian矩阵和协方差。
2 初始化
- SFM纯视觉估计滑动窗所有帧的位姿和3D路标点逆深度
- SFM与IMU预积分松耦合,对齐求解初始化参数。
3 后端滑动窗口优化
将视觉约束、IMU约束和闭环约束放在一个大的目标函数中进行非线性优化,求解滑动窗内所有帧的PVQ、bias
4 闭环检测和优化
DBow进行闭环检测,检测成功后重定位,最后对整个相机轨迹进行闭环优化。
- VINS-mono 论文解读(IMU预积分+Marg边缘化)
- VINS-Mono 代码详细解读——视觉跟踪 feature_tracker
- VINS-Mono 代码详细解读——IMU预积分 + Estimator_node.cpp
- VINS-Mono 代码详细解读——初始化1:视觉SFM详解 Estimator类+feature_manager类
- VINS-Mono 代码详细解读——初始化2:视觉惯性松耦合初始化
- VINS-Mono 代码详细解读——基于滑动窗口的紧耦合后端非线性优化
- VINS-Mono 代码详细解读——回环检测与重定位
- VINS-Mono 代码详细解读——四自由度位姿图优化
- 实操:用imu_utils标定IMU,之后用于kalibr中相机和IMU的联合标定
代码的文件目录
1、ar_demo:一个ar应用demo
2、benchmark_publisher:接收并发布数据集的基准值
3、camera_model
calib:相机参数标定
camera_models:各种相机模型类
chessboard:检测棋盘格
gpl
sparse_graph
intrinsic_calib.cc:相机标定模块main函数
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:帮助文档、Bow字典、Brief模板文件
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 Manii
VIO-Doc——崔华坤
VINS-mono详细解读 by 极品巧克力