视觉惯性里程计Visual–Inertial Odometry(VIO)概述
周围很多朋友开始做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-based和optimization-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)概述的更多相关文章
- Monocular Visual-Inertial Odometry单目视觉惯性里程计
Monocular Visual-Inertial Odometry:https://www.qualcomm.com/invention/research 单目视觉-惯性里程计 INDOOR POS ...
- 论文阅读——Visual inertial odometry using coupled nonlinear optimization
简介:论文提出一种新的视觉里程计算法,其直接利用带噪声的IMU数据和视觉特征位置来优化相机位姿.不同于对IMU和视觉数据运行分离的滤波器,这种算法将它们纳入联合的非线性优化框架中.视觉特征的透视重投影 ...
- (3)视觉里程计 Visual Odometry
首先分析include头文件下的slamBase.h文件 # pragma once // 各种头文件 // C++标准库 #include <fstream> #include < ...
- Trifo-VIO:Roubst and Efficient Stero Visual Inertial Odometry using Points and Lines论文笔记
这是2018-IROS上的一篇文章,亮点是作者提出了Lines特征的VIO方案,还有就是提出一个新颖的回环检测,不是用传统的基于优化的方法或者BA,另外作者还发布了一个新的用于VIO的数据集.亮点主要 ...
- 第三篇 视觉里程计(VO)的初始化过程以及openvslam中的相关实现详解
视觉里程计(Visual Odometry, VO),通过使用相机提供的连续帧图像信息(以及局部地图,先不考虑)来估计相邻帧的相机运动,将这些相对运行转换为以第一帧为参考的位姿信息,就得到了相机载体( ...
- SLAM——视觉里程计(一)feature
从现在开始下面两篇文章来介绍SLAM中的视觉里程计(Visual Odometry).这个是我们正式进入SLAM工程的第一步,而之前介绍的更多的是一些基础理论.视觉里程计完成的事情是视觉里程计VO的目 ...
- 关于视觉里程计以及VI融合的相关研究(长期更新)
1. svo 源码:https://github.com/uzh-rpg/rpg_svo 国内对齐文章源码的研究: (1)冯斌: 对其代码重写 https://github.com/yueying/O ...
- SLAM入门之视觉里程计(2):相机模型(内参数,外参数)
相机成像的过程实际是将真实的三维空间中的三维点映射到成像平面(二维空间)过程,可以简单的使用小孔成像模型来描述该过程,以了解成像过程中三维空间到二位图像空间的变换过程. 本文包含两部分内容,首先介绍小 ...
- SLAM入门之视觉里程计(5):单应矩阵
在之前的博文OpenCV,计算两幅图像的单应矩阵,介绍调用OpenCV中的函数,通过4对对应的点的坐标计算两个图像之间单应矩阵\(H\),然后调用射影变换函数,将一幅图像变换到另一幅图像的视角中.当时 ...
随机推荐
- 新概念 Lesson 4 Are you a teacher
打招呼用语: Good morning, Good afternoon,Good evening Nice to meet you. How do you do? She is French. 她是法 ...
- (GoRails )使用Vue.js制作拖拉list功能(v1-4) gem 'acts_as_list'(自动排列顺序)
系列视频: use Vue.js to build the drag and drop support for the list themselves the cards that are under ...
- IE6不兼容postion:fixed已解决
将要设置postion:fixed的元素的css中添加以下代码: //如果想要是头部悬停,则以下代码即可. .customService{ position: fixed;bottom: ...
- hdu5253 MST
连接的管道 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Oracle11g温习-第一章 3、ORACLE逻辑结构
2013年4月27日 星期六 10:27 Oracle逻辑结构的相关数据字典: 记录各个表空间的详细信息. SYS @ prod > select tablespace_name,status ...
- 014PHP文件处理——文件指针控制fseek rewind ftell feof fpassthru
<?php /** * 文件指针控制fseek rewind ftell feof fpassthru */ //feof()判断文件读取是否超出文件长度 /*$file = fopen('a. ...
- 小程序数组型图片自适应效果的实现(交流QQ群:604788754)
//本例代码如有问题,请加群,下载今日日期文件,测试.(如对本例有疑问,也可加群咨询群主) WXML: <view class="imgbox"> <block ...
- hdu3874
题解: 和上一题基本相同 插入的时候变一下数值 具体看http://www.cnblogs.com/xuanyiming/p/7921926.html 代码: #include<cstdio&g ...
- windows 自动copy远程服务器文件
net use h: \\123.45.67.000\T1dbbackup 123456/user:administrator ------远程服务器IP123.45.67.000 .T1dbbac ...
- Vue.js 源码学习笔记 -- 分析前准备1 -- vue三大利器
主体 实例方法归类: 先看个作者推荐, 清晰易懂的 23232 简易编译器 重点: 最简单的订阅者模式 // Observer class Observer { constructor (d ...