周围很多朋友开始做vio了,之前在知乎上也和胖爷讨论过这个问题,本文主要来自于知乎的讨论。

来自https://www.zhihu.com/question/53571648/answer/137726592

个人理解错误的地方还请不吝赐教,转载请标明出处,内容如有改动更新,请看原博:http://www.cnblogs.com/hitcm/,如有任何问题,feel free to contact me at robotsming@gmail.com

如有问题,请及时反馈给我,博客会持续更新

1.基本概述与分类

       按照Davide Scaramuzza的分类方法,首先分成filter-basedoptimization-based的两个大类,这也和一般SLAM系统的分类方法类似。

       按照是否把图像特征信息加入状态向量来进行分类,可以分为松耦合(loosely-coupled,下面的losely是笔误)和紧耦合(tightly-coupled)。

       这是两种独立的分类方法,首先看是基于滤波还是优化的,然后进一步根据状态向量中是否加入了图像的特征信息来判断松紧耦合。

        VIO主要尝试的是融合Viusal和IMU的信息,因此后面的论述中也就主要考虑这两种数据。

2.Filter-based

利用滤波的方法进行多传感器的数据融合是一个很正常的套路。

按照是否把图像特征信息加入特征向量来进行分类,可以分为紧耦合和松耦合。

2.1紧耦合

紧耦合需要把图像feature进入到特征向量去,因此整个系统状态向量的维数会非常高,因此也就需要很高的计算量。比较经典的算法是MSCKF,ROVIO。

2.2紧耦合举例-msckf

以比较经典的msckf为例,据说这也是谷歌tango里面的算法,这要感觉Mingyang Li师兄在MSCKF的不懈工作。

在传统的EKF-SLAM框架中,特征点的信息会加入到特征向量和协方差矩阵里,这种方法的缺点是特征点的信息会给一个初始深度和初始协方差,如果不正确的话,极容易导致后面不收敛,出现inconsistent的情况。

Msckf维护一个pose的FIFO,按照时间顺序排列,可以称为滑动窗口,一个特征点在滑动窗口的几个位姿都被观察到的话,就会在这几个位姿间建立约束,从而进行KF的更新。

2.3松耦合

而松耦合的方法则简单的多,避免把图像的feature加入状态向量,而是把图像当成一个black box,计算vo处理之后才和imu数据进行融合

Ethz的Stephen Weiss在这方面做了很多的研究,他的ssf和msf都是这方面比较优秀的开源算法,有兴趣的读者可以参考他的博士论文。

2.4松耦合举例-ssf

代码在https://github.com/ethz-asl/ethzasl_sensor_fusion

滤波器的状态向量是24维,如下,相较于紧耦合的方法会精简很多。

Ssf_core主要处理state的数据,里面有预测和更新两个过程。

Ssf_update则处理另外一个传感器的数据,主要完成测量的过程。

3.optimization-based

       随着研究的不断进步和计算平台性能的不断提升,optimization-based的方法在slam得到应用,很快也就在VIO中得到应用,紧耦合中比较经典的是okvis,松耦合的工作不多。

3.1松耦合举例

        这方面的工作不多,而且效果显然是没有紧耦合好的。大佬Gabe Sibley在iros2016的一篇文章《Inertial Aided Dense & Semi-Dense Methods for Robust Direct Visual Odometry》提到了这个方法。简单来说就是把vo计算产生的位姿变换添加到imu的优化框架里面去。

3.2紧耦合举例-okvis

     代码在https://github.com/ethz-asl/okvis

       上图左边是纯视觉的odemorty,右边是视觉IMU融合的odemorty结构, 这个核心在于Frame通过IMU进行了联合, 但是IMU自身测量有一个随机游走的偏置, 所以每一次测量又通过这个偏置联合在了一起, 形成了右边那个结构,对于这个新的结构, 我们需要建立一个统一的损失函数进行联合优化

视觉惯性里程计Visual–Inertial Odometry(VIO)概述的更多相关文章

  1. Monocular Visual-Inertial Odometry单目视觉惯性里程计

    Monocular Visual-Inertial Odometry:https://www.qualcomm.com/invention/research 单目视觉-惯性里程计 INDOOR POS ...

  2. 论文阅读——Visual inertial odometry using coupled nonlinear optimization

    简介:论文提出一种新的视觉里程计算法,其直接利用带噪声的IMU数据和视觉特征位置来优化相机位姿.不同于对IMU和视觉数据运行分离的滤波器,这种算法将它们纳入联合的非线性优化框架中.视觉特征的透视重投影 ...

  3. (3)视觉里程计 Visual Odometry

    首先分析include头文件下的slamBase.h文件 # pragma once // 各种头文件 // C++标准库 #include <fstream> #include < ...

  4. Trifo-VIO:Roubst and Efficient Stero Visual Inertial Odometry using Points and Lines论文笔记

    这是2018-IROS上的一篇文章,亮点是作者提出了Lines特征的VIO方案,还有就是提出一个新颖的回环检测,不是用传统的基于优化的方法或者BA,另外作者还发布了一个新的用于VIO的数据集.亮点主要 ...

  5. 第三篇 视觉里程计(VO)的初始化过程以及openvslam中的相关实现详解

    视觉里程计(Visual Odometry, VO),通过使用相机提供的连续帧图像信息(以及局部地图,先不考虑)来估计相邻帧的相机运动,将这些相对运行转换为以第一帧为参考的位姿信息,就得到了相机载体( ...

  6. SLAM——视觉里程计(一)feature

    从现在开始下面两篇文章来介绍SLAM中的视觉里程计(Visual Odometry).这个是我们正式进入SLAM工程的第一步,而之前介绍的更多的是一些基础理论.视觉里程计完成的事情是视觉里程计VO的目 ...

  7. 关于视觉里程计以及VI融合的相关研究(长期更新)

    1. svo 源码:https://github.com/uzh-rpg/rpg_svo 国内对齐文章源码的研究: (1)冯斌: 对其代码重写 https://github.com/yueying/O ...

  8. SLAM入门之视觉里程计(2):相机模型(内参数,外参数)

    相机成像的过程实际是将真实的三维空间中的三维点映射到成像平面(二维空间)过程,可以简单的使用小孔成像模型来描述该过程,以了解成像过程中三维空间到二位图像空间的变换过程. 本文包含两部分内容,首先介绍小 ...

  9. SLAM入门之视觉里程计(5):单应矩阵

    在之前的博文OpenCV,计算两幅图像的单应矩阵,介绍调用OpenCV中的函数,通过4对对应的点的坐标计算两个图像之间单应矩阵\(H\),然后调用射影变换函数,将一幅图像变换到另一幅图像的视角中.当时 ...

随机推荐

  1. Knight Probability in Chessboard

    2018-07-14 09:57:59 问题描述: 问题求解: 本题本质上是个挺模板的题目.本质是一个求最后每个落点的数目,用总的数目来除有所可能生成的可能性.这种计数的问题可以使用动态规划来进行解决 ...

  2. CSS实现和选择器

    CSS实现和选择器 本课内容: 一.实现CSS四种方式 1,每个html标签中都有一个style样式属性,该属性的值就是css代码.(针对一个标签)2,使用style标签的方式. 一般都定义在head ...

  3. 4-1 contag_tag:返回HTMLtag.

    jquery已经过时,做一遍,了解其他知识点. contag_tag(name, content_or_options_with_block = nil, options = nil, &bl ...

  4. 3-15 《元编程》第6章 3-16 hook method

    Code That Writes Code 6.1 Coding your way to the weekend 6.2 Kernel#eval, Binding#eval Binding: Obje ...

  5. Confluence 6 从 Crowd 或 JIRA 应用中切换回使用内部用户管理

    如果你的 Confluence 站点当前使用的是 Crowd 或者 Jira 应用程序管理你的用的话,你可以按照下面的步骤切换使用回内部目录管理你的用户. 如果你的 Confluence 站点只有少量 ...

  6. poj 1182 (带权并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 71361   Accepted: 21131 Description ...

  7. MVC,重写AuthorizeAttribute实现自己的权限验证(一)

    我们要实现下面的效果,某个controller,只允许某几个角色访问(admin,user,document controller) [MyAuthorize(Roles = "Admin, ...

  8. 跟我一起学习ASP.NET 4.5 MVC4.0(五)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  9. 在mvc中弹出提示框

    在传统的WebForm中,我们要弹出一个alert提示框非常简单,只要在页面中输出alert即可,比如输出: Response.Write("<script >alrer('我是 ...

  10. Vue面试题整理

    1:什么是MVVM MVVM是是Model-View-ViewModel的缩写,Model代表数据模型,定义数据操作的业务逻辑,View代表视图层,负责将数据模型渲染到页面上,ViewModel通过双 ...