点击上方“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

VIO系列 | 视觉与惯性传感器如何融合?来研读VINS-Mono论文与代码相关推荐

  1. 基于视觉和惯性传感器的移动机器人手遥操作系统

    论文:A Mobile Robot Hand-Arm Teleoperation System by Vision and IMU 相关视频.代码.论文地址:在公众号「3D视觉工坊」,后台回复「视觉和 ...

  2. 盘一盘!实时自动驾驶车辆定位技术都有哪些?(视觉/Lidar/多传感器数据融合)...

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[SLAM]技术交流群 后台回复[车辆定位综述]获取论文! 1摘要 实时.准确和鲁棒的定 ...

  3. 实时自动驾驶车辆定位技术都有哪些?(视觉/Lidar/多传感器数据融合)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨汽车人 来源丨自动驾驶之心 编辑丨3D视觉工坊 点击进入->3D视觉工坊学习交流群 1摘要 ...

  4. 【无人驾驶系列五】GPS及惯性传感器在无人驾驶中的应用

    本文是无人驾驶技术系列的第五篇,着重于GPS以及惯性传感器在无人驾驶中的应用.GPS是当前行车定位不可或缺的技术,但是由于GPS的误差.多路径以及更新频率低等问题,我们不能只依赖于GPS进行定位.而惯 ...

  5. 包含视觉的多传感器融合的方案或者论文

    多传感器融合算法分类: 纯视觉 SLAM 方法存在无法在图像纹理少的区域工作.快速运动时图像模糊等问题:而IMU可测量角速度和加速度,其功能可以与相机进行互补,并且在融合之后能够得到更加完善的SLAM ...

  6. (2016/02/19)多传感器数据融合算法---9轴惯性传感器

    2016年2月18日 传感器的原理 加速度计: 加速度计---我们可以把它想作一个圆球在一个方盒子中. 假定这个盒子不在重力场中或者其他任何会影响球的位置的场中,球处于盒子的正中央. 你可以想象盒子在 ...

  7. 多传感器数据融合算法---9轴惯性传感器

    #传感器的原理 加速度计: 加速度计-我们可以把它想作一个圆球在一个方盒子中. 假定这个盒子不在重力场中或者其他任何会影响球的位置的场中,球处于盒子的正中央. 你可以想象盒子在外太空中,或远在航天飞机 ...

  8. 惯性传感器和姿态融合算法

    稳定云台结构型式:按照云台系统转轴的数量的多少可以分为一轴.二轴.三轴和四轴. 两轴稳定云台应用最为广泛,它有结构简单.相对多轴体积小质量轻.设计成本低廉等特点.但是两轴稳定云台有自身的缺陷.比如当云 ...

  9. GPS及惯性传感器在无人驾驶中的应用

    from: http://geek.csdn.net/news/detail/107057 作者:刘少山,张哲 本文为<程序员>原创文章,未经允许不得转载,更多精彩文章请订阅2016年&l ...

最新文章

  1. 锤子辩论有感——我该如何定义成功
  2. PowerShell_零基础自学课程_8_高级主题:WMI对象和COM组件
  3. 将serversocket 写在按钮事件中连接不上_Java服务器的模型—TCP连接/流量优化
  4. vscode 启用open with live server功能,配置谷歌浏览器chrome
  5. led背光板的作用是什么呢?
  6. 微信撤回服务器有没有,无需任何软件, 告诉你如何查看微信撤回的图片!
  7. 联想服务器能够上固态硬盘吗,拯救我的台式机:Lenovo 联想 固态硬盘 入手记
  8. 初识js-charts和E-charts
  9. Codeforces Round #376 (Div. 2) B. Coupons and Discounts
  10. 处理echarts地图省份坐标重叠的方法
  11. 肇庆学院"菜鸟杯"程序设计竞赛2019(同步赛)(回顾补题)
  12. 我知道的风俗 和我喜欢的节日
  13. 全屋互联网家电领导者云米科技在美IPO募资1.03亿美元
  14. 线程休眠 java_Java线程休眠和线程让步
  15. android 闹钟不响,为什么我写的Android闹钟到时间时却不会响
  16. 微信小程序——拍照、压缩转换base64(不留存照片在本地相册)
  17. 亚马逊佣金计算:各个类目下的佣金比和最低推荐费
  18. sort;uniq;tr命令
  19. HTML <s> 标签
  20. Windows安装使用Openssl创建pks p12证书

热门文章

  1. Impala-shell命令
  2. 7-167 数独简化版
  3. Android-P WindowWindowManager
  4. C语言位运算之有符号数和无符号数
  5. photoshop 切图教程
  6. 计算机审计实验报告第二章,计算机审计实验报告(共5篇).doc
  7. 70个JAVA问答!
  8. goconvey调研及学习
  9. 深度学习之相关硬件知识总结
  10. 计算机关机的方法,电脑关机方式有几种 电脑关机方式介绍【详解】