VIO系列 | 您所在的位置:网站首页 › 怎么记mono › VIO系列 |
点击上方“AI算法修炼营”,选择加星标或“置顶” 标题以下,全是干货 一、本系列概述 本系列旨在对前一阶段学习vins-mono开源框架的总结。结合暑假秋招之前报名的深蓝学院的《从零开始手写VIO》课程,本系列文章将从VIO原理以及开源代码分析两部分进行详细介绍。 提升代码能力最好的办法就是从头到尾撸开源框架,这种体验是单纯推导公式体会不到的。 论文地址:https://arxiv.org/pdf/1708.03852.pdf 源代码地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono 为什么要用VIO(视觉惯性里程计)? 1)单纯视觉: 缺点: 尺度不确定性、单目纯旋转无法估计、快速运动易丢失、受图像遮挡运动物体干扰。 优点:不产生漂移、直接测量旋转与平移。 2)单纯IMU: 缺点:零偏导致漂移、低精度IMU积分位姿发散优点:快速响应、可估计绝对尺度、角速度估计准确。 3)结合视觉+IMU:可用视觉弥补IMU的零偏,减少IMU由于零偏导致的发散和累计误差,IMU可为视觉提供快速响应的定位。 融合方案: 松耦合:将 IMU 定位与视觉的位姿直接后处理融合,融合过程对二者本身不产生影响,典型方案为卡尔曼滤波器 紧耦合:融合过程本身会影响视觉和 IMU 中的参数(如 IMU 的零偏和视觉的尺度)典型方案为 MSCKF 和非线性优化。 VINS-Mono贡献: 一个紧耦合、基于优化的单目视觉惯性里程计,具有相机-IMU外部校准和IMU偏置估计。 基于有界滑动窗口迭代进行估计。 基于滑动窗口里的关键帧维持视觉结构,基于关键帧之间的IMU进行预积分维持惯性测量。 鲁棒性:未知状态的初始化、相机和IMU外参数的在线标定、球面不统一重投影误差、回环检测、四自由度位姿图优化(三位置和航向) 二、本系列文章目录 本系列共分为12部分,对应系统的4大部分:图像和IMU预处理、初始化、后端滑动窗口优化、闭环检测和优化。 目录 1 VINS-mono 论文解读(IMU预积分+Marg边缘化) 2 VINS-Mono 代码详细解读——视觉跟踪 feature_tracker 3 VINS-Mono 代码详细解读——Estimator_node.cpp 4 VINS-Mono 代码详细解读——基础储备:IMU预积分的残差、Jacobian和协方差 processIMU()+intergrationBase类+imu_factor.h 5 VINS-Mono 代码详细解读——基础储备:feature_manager.cpp 6 VINS-Mono 代码详细解读——基础储备:外参标定 InitialEXRotation类 7 VINS-Mono 代码详细解读——基础储备:外参标定 InitialEXRotation类 8 VINS-Mono 代码详细解读——初始化2:视觉惯性松耦合初始化 estimator.cpp/visualIntialAlign() 9 VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化 10 VINS-Mono 代码详细解读——基于滑动窗口的紧耦合后端非线性优化 optimization() 11 VINS-Mono 代码详细解读——回环检测与重定位、四自由度位姿图优化 12 实操:用imu_utils标定IMU,之后用于kalibr中相机和IMU的联合标定 三、VINS-Mono框架与代码总览 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进行闭环检测,检测成功后重定位,最后对整个相机轨迹进行闭环优化。 代码的文件目录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:读取参数 四、结语 本系列将主要介绍VIO(视觉惯性里程计)的主要应用,带你从头开始研读VIO中的代表作——VINS-Mono的论文和代码。我相信经过一系列文章的学习之后,我们将加深对多传感器融合算法、视觉里程计等算法的理解。同时,也将为VR、AR等3D应用打下坚实基础。敬请期待!获取VINS-Mono的论文原文,可关注公众号留言或扫描下方个人微信。 参考文献: 1、VINS-Mono论文学习与代码解读——目录与参考 (https://blog.csdn.net/qq_41839222/article/details/85793998) 2、https://blog.csdn.net/wangshuailpp/article/details/78461171 3、https://github.com/StevenCui/VIO-Doc 目标检测系列 秘籍一:模型加速之轻量化网络 秘籍二:非极大值抑制及回归损失优化 秘籍三:多尺度检测 秘籍四:数据增强 秘籍五:解决样本不均衡问题 秘籍六:Anchor-Free 语义分割系列 一篇看完就懂的语义分割综述 最新实例分割综述:从Mask RCNN 到 BlendMask 面试求职系列 决战春招!算法工程师面试问题及资料超详细合集 一起学C++系列 内存分区模型、引用、函数重载 竞赛与工程项目分享系列 如何让笨重的深度学习模型在移动设备上跑起来 基于Pytorch的YOLO目标检测项目工程大合集 点云配准领域全面资料、课程、数据集合集分享 10万奖金天文数据挖掘竞赛!0.95高分Baseline分享 目标检测应用竞赛:铝型材表面瑕疵检测 SLAM系列 视觉SLAM前端:视觉里程计和回环检测 视觉SLAM后端:后端优化和建图模块 视觉SLAM中特征点法开源算法:PTAM、ORB-SLAM 视觉SLAM中直接法开源算法:LSD-SLAM、DSO 视觉注意力机制系列 Non-local模块与Self-attention之间的关系与区别? 视觉注意力机制用于分类网络:SENet、CBAM、SKNet Non-local模块与SENet、CBAM的融合:GCNet、DANet Non-local模块如何改进?来看CCNet、ANN |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |