近十年的VI-SLAM算法综述与发展

2023-05-16

本文主要总结一下这几年工作中遇到过以及改进过相关VIO算法

1.背景介绍

一个完整的 SLAM(simultaneous localization and mapping) 框架包括传感器数据、 前端、 后端、 回环检测与建图,如图1所示,其中,前端将传感器的数据抽象成适用于估计的模型,回环检测判断机器人是否经过已知的位置.而后端接受不同时刻前端测量的位姿和回环检测的信息并对它们进行优化,从而得到全局一致的轨迹。建图则是根据状态估计得到的轨迹建立与任务要求相对应的地图。通常,仅含有前端和局部后端的框架被称为里程计,而带有回环检测和全局后端的完整框架被称为 SLAM.

                                                                                                                                                                                                                                 图1 SLAM经典框架

近十年来,SLAM 及其相关技术的研究取得了快速进展,研究的重点从开始的激光雷达到相机和IMU,与此同时,芯片和MEMS器件的也取得快速发展,算力得到的极大提高,相机和IMU 等传感器实现了高精度化、小型化和低成本化.这使得SLAM技术在移动端能够实时的运用。而视觉传感器因其体积小、 成本低和易于进行硬件设置而获得了广泛的关注,大量基于视觉传感器的 SLAM 方法被提出,但纯视觉 SLAM 方法存在无法在图像纹理少的区域工作、快速运动时图像模糊等问题;而IMU可测量角速度和加速度,其功能可以与相机进行互补,并且在融合之后能够得到更加完善的SLAM 系统。采用相机和 IMU 的 SLAM 方法被称为视觉惯性 SLAM(visual-inertial SLAM,VI-SLAM),只含有很小的漂移。本文主要介绍VI-SLAM,对激光和纯视觉SLAM不重点介绍。目前VI-SLAM数据融合的的方法分为两类:紧耦合和松耦合,具体见图2,其中,紧耦合是指把 IMU 的状态与相机的状态合并在一起进行位姿估计.松耦合是指相机和 IMU 分别进行自身的位姿估计,然后对它们的估计结果进行融合。

                                                                                                                                                                                                                           图2 紧耦合和松耦合的示意图

而VI-SLAM根据后端优化方法的不同,分为基于滤波和基于优化 2 类方法,在滤波方法中,传统的 EKF(扩展卡尔曼滤波器) 、UKF(无迹卡尔曼滤波器)、改进的 MSCKF(多状态约束卡尔曼滤波器) 和OpenVins都取得了一定的成果。现阶段基于优化的方法则慢慢占据了主流。

2. 基于优化的方案

基于优化的方法主要依靠图像处理技术进行特征提取和图像匹配,而 IMU 数据则被视为先验项或者正则化项.自 PTAM(parallel tracking and map-ping) 之后,批量非线性优化方法一般都分为2 个线程:跟踪和建图.在跟踪线程,通过各种特征检测器从图像中提取 3 维空间中的点、线或其他路标特征.然后,针对检测到的所有特征,在 2 个图像之间定义重投影误差.之后用该误差建立优化的代价函数,以便找到特征或地标的坐标,即光束平差法(bundle adjustment,BA)  .在建图线程,地图中特征和路标的坐标被用于定义 2 幅图像之间的重投影误差,然后再次应用优化算法来发现移动机器人位姿的变化.将优化问题分成 2 个并行线程的目的是使跟踪部分实时响应图像数据,以便快速获得跟踪结果.而地图的优化没有必要实时计算,可以放在后端缓慢运行.基于优化的方法通常使用g 2 o  、Ceres  、GTSAM  等非线性优化库实现优化.

基于优化的方法有两种类型,一种是含有局部优化(LBA)和全局优化(GBA),一种是只有全局优化(GBA)

LBA通过设定固定的窗口,将在这个窗口内的系统状态进行估计,同时边缘化旧的状态维持实时优化窗口。相比于滤波方法,基于优化的方法精度更高,因为它们可以对过去的测量结果重新进行线性化处理,同时在优化时可以设置鲁棒核函数来剔除一些异常值。从而提高精度;但是缺点是,边缘化旧的一帧时带来了稠密的先验信息,这在一定程度上降低了效率,针对这个问题,一些文献 中提出了为了稀疏性而放弃某些测量的方法.此外,由于采用了边缘化的方法,LBA方法具有与部分滤波方法相似的问题,如一致性,线性化误差的累积等。

苏 黎 世 联 邦 理 工 学 院 ASL 实 验 室 Leutenegger 等 提 出 了 OKVIS(open keyframe-based visual-inertial SLAM);利用基于关键帧的滑动窗口进行批量非线性优化,先于滑动窗口的关键帧被边缘化,不用来进行估计.系统前端使用多尺度 Harris 特征检测器 来提取特征,然后在其基础上计算 BRISK(binary robust invariant scalable keypoint)描述子,以便在帧与帧之间进行数据关联.如图 3 所示

                                                                                                                                                                             图3 视觉 SLAM 问题与视觉惯性 SLAM 问题的状态变量和测量值的对比图

香港科技大学飞行机器人实验室提出的 VINS-Mono(monocular visual-inertial system)方法类似于 OKVIS,是一种基于非线性优化的 VI-SLAM方法. VINS-Mono 方法为这类框架引入了几个全新的功能,其完整系统包括观测值预处理、 初始化、 局部视觉惯性联合优化、全局图优化和回环检测 5 个部分,如图 4 所示. 前端提取 Harris 特征点 ,并采用 LK(Lucas-Kanade)光流(opticalflow)法跟踪相邻帧.光流法是一种描述像素随时间在图像之间运动的方法.LK 光流法计算部分像素,在 SLAM 中用于跟踪特征点的位置.VINS-Mono 方法只计算特征点,不计算描述子,同时使用光流法跟踪特征点的运动. 这样就减少了计算和匹配描述子的时间和资源,只需要计算光流.在初始化部分,作者使用了一种松耦合的传感器融合初始化程序,称为动态初始化,先用图像信息构建SFM,后面结合IMU信息,进行在线VIO标定。使得系统可以在优化之前从任意初始状态引入估计器。同时采用预积分的处理方法处理IMU信息,得到两帧之间的IMU相对运动,而不是随着某一时刻位姿改变而要重新处理IMU信息,减少计算量。系统采用与 OKVIS相似的基于滑动窗口的紧耦合位姿估计方法,并且加入了基于DBoW2(bag of binary words 2)的回环检测线程,使系统具有重定位功能,而全局优化则采用4Dof优化

                                                                                                                                                                                                                      图4 VINS-Mono 的完整框架

香港科技大学飞行机器人实验室随后又推出了 VINS-Mobile 和 VINS-Fusion . VINS-Mobile 在 iOS 设备上运行,并为增强现实(AR)应用程序提供本地化服务.VINS-Mobile 对 VINS-Mono 框架作了许多轻量化处理,并采用了一种基于小滑动窗口的联合优化方案.VINS-Fusion 在完善 VINS 框架的同时,提供了 4 个不同硬件的版本,包括单目 IMU、 双目 IMU、 纯双目和双目 IMU 与GPS 松耦合。

百度 AR 技术小组提出的 ICE-BA(incremental,consistent and efficient bundle adjustment) 沿 用了 OKVIS 以及 VINS-Mono 这一类框架.前端提取Harris 特征点 并采用 LK 光流法  跟踪相邻帧,与 VINS-Mono 相似.后端则是论文中提出的增量式 BA,主要分为 3 个部分:局部 BA(LBA)、全局 BA(GBA) 以及相对边缘化(Relative-Marginalization),前两者采用增量式方法提升了后端速度,后者保证了LBA 和GBA 的一致性.其中,G BA 在建立增量方程时,对系统已经计算过且不变的状态向量不进行计算.因为即使重新计算,精度也不会有太大的改善.对于LBA 来说,由于几乎每个点都被滑动窗口里面所有帧看到,因此即使只重新线性化一部分点,也会带来较大的改动.因此在LBA 这个部分,系统中采用了一个更高效的针对局部 BA 的后端设计.这个方法把长期跟踪的特征点分成很多短期跟踪段,这样每次重新计算特征点的时候,重新线性化的区域减小,从而提高了效率.见图5;对于滑窗系统,往往都有边缘化这一步,把有些本应该出了滑动窗口的信息以另一种形式存储下来.但是当有GBA 存在时,边缘化的效果未必会有很大的提升,反而可能会下降.ICE-BA 中改进了边缘化方法,保持了边缘化和全局 BA 的一致性,见图6。但在测试的时候,去掉相对边缘化有些数据集效果会更好。

                                                                                                                                                                                                            图5 ICE-BA特征点子轨迹的划分

                                                                                                                                                                                                                 图6 ICE-BA局部和全局优化网络框架

由于 VI-SLAM 系统实现了优异的效果,一些著名的视觉 SLAM 系统 相继推出了自己系统的 VI 版本 ,VI-ORB SLAM  就是其中最有代表性的系统之一。在这里首先介绍纯视觉ORB-SLAM ,其首次使用 3 个线程:实时跟踪特征点的线程、局部建图的优化线程(co-visibility graph)和全局回环检测与优化线程(essential graph),来完成 SLAM.跟踪线程对每幅图像提取 ORB 特征点,并与最近的关键帧比较,计算特征点位置并估计位姿.局部 BA 线程求解更精细的相机位姿和特征点空间位置.全局回环检测线程采用 DBoW2  对全局的地图与关键帧进行回环检测,消除累积误差. ORB-SLAM 的三线程结构取得了优异的跟踪和建图效果,保证了移动机器人轨迹与地图的全局一致性,该算法框架在开源数据集测试的结果是效果最好的开源代码。VI-ORB SLAM 改进自 ORB-SLAM2  ,作者引入 IMU 尝试解决在快速运动时丢失特征点的问题. VI ORB-SLAM 分别对 3 个线程作了修改,用以融合 IMU 信息.在跟踪线程,基于重投影误差和 IMU 预积分,建立帧与帧之间的约束关系来构造代价函数,从而得到当前帧位姿的最优估计.在局部建图线程,有了新的关键帧之后,将会对前 N 个关键帧进行优化,当前的关键帧(第 N + 1帧)将固定不变,提供 IMU 预积分约束. 如图 7所示,P、v、b 分别为优化的位姿、IMU 速度与偏差.在全局回环检测线程,由于 IMU 提供了尺度信息,因此全局优化将从 7 个自由度下降到 6 个自由度。全局位姿优化将忽略 IMU 信息,因此不再优化速度和偏差,当完成全局位姿优化后,再根据矫正后的位姿对速度进行矫正。

                                                                                                                                                                                                       图7 ORB-SLAM 与 VI ORB-SLAM 的局部 BA 比较

在2020年,ORB-SLAM3开源,其第一个能够执行视觉、视觉惯性和多地图重用的系统,相比于ORB-SLAM2,ORB-SLAM3新增元素有以下面这几个: 

1. 单、双目的vo/vio slam系统,并支持鱼眼相机。

2. 地图复用,拥有合并地图的功能。

3. 高召回的地点识别(占用较低的计算资源换得高召回与精度)

4. 不限制相机模型,只需提供投影,反投影及Jacobian方程(程序里提供了针孔与鱼眼模型)

其主要的创新点分为:

1.“完全”基于最大后验估计MAP的VI-SLAM ,无论在初始化阶段还是运行阶段,都采用了MAP进行状态估计,因此ORB-SLAM3在室内外、大小场景中鲁棒性很好,且精确度是其他方法的2~5倍; 如文中所讲,本文的IMU和视觉的组合系统是extremely robust的。

2.多地图系统,当定位丢失即lost时,ORB-SLAM3会自动建立一个新的小地图,并在revisit两张地图上的同一地点的时候进行地图的seamlessly merge,因此,这一算法能够使用不仅仅几帧之前的信息,而是运用了全局的信息,能够在bundle adjustment中利用视差较大的帧来增加BA求解的准确性(因为当视察较小时,求解不准确,且优化容易进入局部极值)。这种方法里对同一特征的观测可能在时间上的间隔较大,因为我们对其上一次的观测甚至可能出现在之前一张小地图中(中间过程里lost了至少一次)。

其系统框架如图8

                                                                                                                                                                                                                      图8 ORB-SLAM3系统框架

在这里简单介绍一下iSAM,iSAM是增量式图优化,该算法可简单的理解为iSAM可以自适应的判断当前测量是否影响某个历史状态,从而判断是否要计算更新,从而能够减少不必要的计算;在2012年,iSAM2 用贝叶斯树+在线启发式排序重新解决iSAM问题,后端部分原理相似与ICE-BA相似,都是增量式BA,该技术是GBA的一项突破,利用因子图来保持稀疏性,并仅识别和更新受新度量影响的变量的一小部分。使用贝叶斯树数据结构来获得有效的变量排序,从而最大程度地减少了计算时间.由于新的测量结果只对估计值的局部产生影响,通过分析受影响的区域,可以减少一些没必要的计算,加速优化流程。

基 于 优 化 的 方 法 是 目 前 VI-SLAM 领 域 以 及SLAM 相关领域的热点之一,非线性优化方法实现了相较于滤波方法更精确的状态估计效果.但由于计算资源有限,目前的方法往往以牺牲一部分精度和路标点为代价换取系统的实时性.新型的优化器以及并行计算方法的出现有望进一步减少对计算资源的占用,但大范围在线系统的实时性仍然是一个有待解决的问题。

3. 基于滤波的方案

不同滤波方法的分类如图 9 所示,卡尔曼滤波器作为一种解决状态估计问题的经典模型,主要存在 2 个问题 .首先,它要求时序和测量方程是线性的,这个问题可以由 EKF 和 UKF 解决.其次,卡尔曼滤波器假设后验分布是单峰分布的,而且需要通过均值和协方差来表达,因此,它针对物体的位姿只能有一个假设,并不能保证关于状态的多个假设,这个问题可以由粒子滤波器(particle filter,PF) 解决.

                                                                                                                                                                                                                       图9 SLAM 中不同滤波方法的分类

一个完整的 EKF 框架包括预测步骤和更新步骤.对于基于滤波的 VI-SLAM 方法,惯性传感器能够提供 3 轴的加速度和角速度,用于计算 3 维刚体运动的动态模型并在预测步骤中进行预测。相机能够提供在特征和移动机器人之间的角度和距离测量结果,并在更新步骤中更新预测结果。

早期的 SLAM 工作主要是基于扩展卡尔曼滤波器,由 Smith 等基于早期的工作实现.Jones 等将 EKF 框架引入 VI-SLAM 系统.该系统实现了将状态和参数作为在线程序的一部分进行估计,并用 EKF 框架进行了有效实现.Kelly 等将 UKF 框架引入 VI-SLAM 系统. 该方法能够在线、随时校准更新位姿,比如正在进行的导航或建图任务。

MSCKF 是 Mourikis 在 2007 年 提 出 的 ,MSCKF 2.0 也在随后由 Mourikis 和 Li 提出 ,是目前许多 VI-SLAM 系统的基础. MSCKF 是一种基于扩展卡尔曼滤波器的 VI-SLAM 框架.在传统EKF 框架中,特征点信息会加入到状态向量和协方差矩阵里,这会加大矩阵维度,增加计算量,如图 10 所示.而MSCKF 则在状态向量里只添加窗口内的相机状态,而忽略特征点,减少计算量。同时系统一般采用IMU静态初始化,系统启动后需要静止一段时间,才能初始化成功,该系统没有回环检测功能。MSCKF 工作的最主要贡献在于推导出一种测量模型,该模型能够表达从多个相机位姿观察到静态特征时出现的几何约束.系统中维护一个位姿的滑动窗口,如果一个特征点在滑动窗口内的几个位姿都被观察到的话就会在这几个位姿间建立约束.这种方法用一个特征点约束多个相机位姿,从而进行 KF 的更新,旧的特征点和滑动窗口之外的相机姿态则被丢弃.近几年,许多基于 MSCKF 的工作相继提出 ,框架整体的精度和鲁棒性得到了不断的提升.

                                                                                                                                                                                                                   图10 MSCKF、EKF-SLAM 的示意图

 苏黎世联邦理工学院无人系统实验室(Autono-mous Systems Lab,ASL)的 Bloesch 等提出了一种基于迭代扩展卡尔曼滤波器(IEKF)的直接法单目视觉惯性里程计,简称 ROVIO(robust visual inertialodometry) 。如图 11所示.该算法将视觉信息和IMU信息进行紧耦合的一种视觉惯性测量单元。数据融合的方法主要是通过迭代卡尔曼滤波来进行的。对于视觉方面的信息,作者主要是通过将路标点在图像中对应的点周围的图像块做为路标点的描述子,从而得到光度误差。然后将光度误差进行变换得到IEKF中的innovation term,进而进行滤波状态的更新。整体的滤波方程的构造是以机器人为中心进行构造的(fully robocentric)——实际上这个robocentric就是以IMU为原点固连在IMU上的坐标系——从而保证能观状态不受不断增长的全局协方差的影响,这样可以减小因非线性而造成的误差。此外,作者还将路标点的空间位置信息拆开成了两项。一项是bearing vector(二维向量),还有一项是distance(这里实际上用的是逆深度)。并在 IMU 预测阶段对路标点进行预测,在视觉更新时对其修正,不像其他框架一般仅在视觉阶段去计算。这样的构造方式可以避免不能观状态量,并且使得初始化没有延迟。由于使用了基于 QR 分解的测量空间缩减方法,并执行每个路标点的更新迭代,因此系统具有较高的效率和准确性.

                                                                                                                                                                                                                                图11 ROVIO 框架的流程图

ARL 实 验 室 随 后 又 推 出 了 Maplab 框 架 ,与 ROVIO 不同的是,Maplab 带有一个完整的 VI-SLAM 系统,具有回环检测和重定位功能.系统由两部分组成,一部分是 ROVIOLI(ROVIO with lo-calization integration),一个在线的视觉惯性全局定位系统,其接收图像与惯性传感器数据作为输入,输出全局的位姿估计,并建立地图.另一部分是离线的 Maplab 控制台,可以让使用者以离线批处理方式在地图上应用各种算法。

在 松 耦 合 方 法 中, Faessler 等使 用 了 一种基于 SVO(semi-direct visual odometry)和 MSF(multi-sensor fusion)的方案.SVO 是一种计算量较小的稀疏直接算法.其通过跟踪 FAST(fromaccelerated segment test) 特征并最小化周围图像块的光度误差来匹配帧间图像,使用非线性最小二乘法来最小化特征中的重投影误差,得到仅由相机估计的位姿。MSF是一种通用的 EKF 框架,用于在位姿估计中融合来自不同传感器的数据.系统将纯视觉 SVO 得到的位姿作为通用位姿传感器的输出提供给 MSF,然后与 IMU 数据融合.由于是一种松耦合框架,位姿的尺度需要近似正确,因而时常要手动初始化。

Open VINS是黄国权老师团队在2019年8月份开源的一套基于MSCKF的VINS算法。主要提供了流形滑动窗口卡尔曼滤波器、在线摄像机内、外标定、摄像机-惯性传感器时间偏移标定、具有不同表示和一致第一估计的SLAM地标(FEJ)处理、用于状态管理的模块化系统、可扩展视觉惯性系统模拟器、用于算法评估的广泛工具箱等功能。其在前端图像信息处理中,结合了EKF-SLAM、MSCKF和Hybird SLAM等算法处理方式,提高了系统的稳定性,在一些开源数据集上其精度可以媲美基于优化的SLAM。该开源代码的主要贡献

1. 提供了一个可拓展、开源的代码库

2. 提供了许多视觉视觉惯性的基础,包括多相机,多IMU,视觉惯性运动对象跟踪,Schmidt-based visual-inertial SLAM,点平面和点线视觉惯性导航等。

开源代码大致流程如图12

                                                                                                                                                                                                                 图12 openvins算法流程示意图

VI-SLAM框架

耦合方案

初始化

前端

后端

视觉误差

回环

参考文献

MSCKF【1】

紧耦合

静止

FAST+光流

EKF

重投影

[1]

ROVIO【2】

紧耦合

静止

FAST+光流

IEKF

光度

[3]

SVO【3】 +MSF 【4】

松耦合

静止

FAST+光流

EKF

光度

[4]

OKVIS【5】

紧耦合

静止

Harris+BRISK

优化

重投影

[5]

VINS-mono【6】

紧耦合

动态

Harris+光流

优化

重投影

[6]

ICE-BA【7】

紧耦合

静止

Harris+光流

优化

重投影

[7]

VI ORB-SLAM【8】

紧耦合

动态

ORB

优化

重投影

[8]

SVO+GTSAM【9】

紧耦合

静止

FAST+光流

优化

光度

[9]

ORB-SLAM3【11】

紧耦合

动态

ORB

优化

重投影

[10]

OpenVins【10】

紧耦合

静止

FAST+光流

EKF

重投影

[2]

                                                                                                                                                                                                                表1 代表性 VI-SLAM 框架对比

4.滤波方法与优化方法的联系与对比

利用贝叶斯推断可以建立基于滤波和基于优化这 2 类方法之间的联系。基于滤波的方法,位姿的先验分布由内感受型传感器的测量构建,似然分布由外感受型传感器的测量建立,故可以视为最大后验估计(maximum a posteriori,MAP)问题.基于优化的方法,通过迭代找到测量总概率最高的状态,故可视为最大似然估计(maximum likelihood,ML)问题.基于优化的方法,可以通过向传感器的测量值中添加正则化项或先验项,使其由 ML 问题转化为 MAP 问题。如果把 EKF 框架看作是非线性高斯-牛顿法或高斯法的近似,那么它的表现无疑是达不到要求的.主要原因是,EKF 没有迭代至收敛的过程,其雅可比矩阵只计算 1 次,可能会远离所期望的最优估计.但由于 EKF 没有一次性计算所有的雅可比矩阵,EKF 的结果比单次的高斯-牛顿法迭代更精确,它的缺陷只在于没有迭代这个步骤.从优化的角度来看,这是一个显而易见的问题,因为优化是需要最后迭代至收敛的.EKF 使用了马尔可夫假设来实现其递归形式,由于使用了马尔可夫假设,一旦滤波器建立在该假设上就无法摆脱它. 包括IEKF 在内,虽然 IEKF 一次迭代了一个时间步长,但它仍然依赖于马尔可夫假设,而且仅在一个时刻上进行了迭代,并非在整个轨迹上。

本文比较了几种代表性的 VI-SLAM 框架,如表 1 所示.可以看出,目前主流的 VI-SLAM 实现方法以紧耦合的优化方法为主.相较于松耦合的方法,把 IMU 状态与相机状态合并在一起进行状态估计的紧耦合方法具有更高的精度 .而由于基于滤波的方法具有马尔可夫性,无法考虑到某时刻状态与之前所有时刻状态的关系,目前普遍认为在计算资源足够的情况下,基于优化的方法会得到更精确的效果 .但是在计算资源受限,或者移动机器人位姿轨迹比较简单的场合里,基于滤波的方法仍然是一种有效的方式。

5. 展望

5.1 与深度学习结合

构建语义地图、在帧间匹配和回环检测中采用 深 度 学 习 的 方 法 是 目 前 SLAM 的 研 究 热 点 之一 。深度学习方法的引入使移动机器人可以理解周围环境的语义信息。完成一些更复杂的任务.但深度学习方法对于计算资源的需求巨大,在硬件条件较差的嵌入式场景难以使用,需要研究人员进一步地改进网络。

5.2 轻量化

SLAM 本身是为了给上层应用提供自身位姿估计,在实际应用中,研究人员并不希望算法占用太多运算资源.使用者希望 SLAM 框架能够轻量化,不影响移动机器人或者手机移动端所要完成的其他工作.相比于激光 SLAM 等成本高昂的方法,由于 VI-SLAM 系统只使用相机和惯性传感器,在无人机或手持移动设备上良好运行 SLAM 程序成为可能  .通过继续改进算法,现在很多大厂均能够在移动端实现效果良好的定位效果。

5.3 与更多传感器融合

视觉与 IMU 的融合已经在不同的领域取得了较理想的效果,但是当场景特别大时,视觉和 IMU传感器的效果不太理想,这时就需要用到其他传感器.在自动驾驶领域,将激光雷达、 GPS/GNSS(全球卫星导航系统)、相机以及 IMU 等多传感器进行融合已经成为一种趋势,引入激光雷达等传感器会为系统提供更准确的深度信息.但是更多的传感器会带来更复杂的标定与融合方面的问题,有待研究人员加以解决。

5.4 嵌入式系统

移动机器人通常使用嵌入式设备作为平台的计算硬件,而随着计算能力的大力发展,嵌入式设备的使用频率逐渐增多. 新型 GPU(图形处理器)的出现使得嵌入式系统的性能更加接近 PC 机,但是计算能力仍然有限. 一些嵌入式硬件,例如Jetson Nano、TX1/2 的出现使得研究人员可以在嵌入式系统中使用 GPU,便于移动机器人在恶劣的条件下应用 VI-SLAM 算法.随着一些代表性产品 Google Project Tango、Microsoft Hololens、MagicLeap、Nreal等的应用,VI-SLAM 技术会逐步融入到平常生活之中。

参考文献

[1] Mourikis A I, Roumeliotis S I. A multi-state constraint Kalman filter for vision-aided inertial navigation[C]//IEEE International Conference on Robotics and Automation. Piscataway, USA:IEEE, 2007: 3565-3572.

[2] Geneva P , Eckenhoff K , Lee W , et al. OpenVINS: A Research Platform for Visual-Inertial Estimation[C]// Proc. of the IEEE International Conference on Robotics and Automation. IEEE, 2020.

[3] Bloesch M, Burri M, Omari S, et al. Iterated extended Kalman filter based visual-inertial odometry using direct photometric feedback[J]. International Journal of Robotics Research, 2017,36(10): 1053-1072.

[4] Faessler M, Fontana F, Forster C, et al. Autonomous, visionbased flight and live dense 3D mapping with a quadrotor microaerial vehicle[J]. Journal of Field Robotics, 2016, 33(4): 431-450.

[5] Leutenegger S, Lynen S, Bosse M, et al. Keyframe-based visual-inertial odometry using nonlinear optimization[J]. International Journal of Robotics Research, 2015, 34(3): 314-334.

[6] Qin T, Li P L, Shen S J. VINS-mono: A robust and versatile monocular visual-inertial state estimator[J]. IEEE Transactions on Robotics, 2018, 34(4): 1004-1020.

[7] Liu H M, Chen M Y, Zhang G, et al. ICE-BA: Incremental,consistent and efficient bundle adjustment for visual-inertial SLAM[C]//31 st IEEE/CVF Conference on Computer Vision and Pattern Recognition. Piscataway, USA: IEEE, 2018: 1974-1982

[8] Mur-Artal R, Tardós J D. Visual-inertial monocular SLAM with map reuse[J]. IEEE Robotics and Automation Letters, 2017,2(2): 796-803.

[9] Forster C, Carlone L, Dellaert F, et al. On-manifold preinte-gration for real-time visual-inertial odometry[J]. IEEE Transactions on Robotics, 2017, 33(1): 1-21.

[10]Campos C , Elvira R , Juan J. Gómez Rodríguez, et al. ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM[J]. 2020.

[11] 施俊屹.移动机器人视觉惯性 SLAM 研究进展

开源代码

【1】https://github.com/daniilidis-group/msckf mono

【2】https://github.com/ethz-asl/rovio

【3】http://rpg.ifi.uzh.ch/svo2.html

【4】https://github.com/ethz-asl/ethzasl msf

【5】https://github.com/ethz-asl/okvis ros

【6】https://github.com/HKUST-Aerial-Robotics/VINS-Mono

【7】https://github.com/baidu/ICE-BA

【8】https://github.com/jingpang/LearnVIORB

【9】https://bitbucket.org/gtborg/gtsam/

【10】https://github.com/rpng/open_vins

【11】https://github.com/UZ-SLAMLab/ORB_SLAM3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

近十年的VI-SLAM算法综述与发展 的相关文章

  • 树莓派4B+Ubuntu 18.04 LTS + 桌面desktop + ros安装@树莓派4B、Ubuntu、desktop、ros

    树莓派4B 43 Ubuntu 18 04 LTS 43 桌面desktop 43 ros安装 64 树莓派4B Ubuntu desktop ros 久违的一篇博客 xff0c 说实话CSDN的编辑器还是用不太习惯 xff0c 记录一下树
  • 云台控制协议总结(VISCA/PELCOD/PELCOP)

  • error: #20: identifier "TIM_TimeBaseInitTypeDef" is undefined

    如果出现多句错误 xff1a identifier 34 34 is undefined 解决问题方法一 xff1a C C 43 43 include paths 把文件路径添加进去 解决问题方法二 xff1a 在stm32f10x co
  • 使用pyqt5实现键盘(含组合键)鼠标事件响应

    使用pyqt5实现键盘 xff08 含组合键 xff09 鼠标事件响应 使用python3 6 xff0c pyqt5 xff0c 在macOS上测试有效 span class hljs keyword import span sys sp
  • 递归思想刷题总结

    核心思想 我们在调用递归函数的时候 xff0c 把递归函数当做普通函数 xff08 黑箱 xff09 来调用 xff0c 即明白该函数的输入输出是什么 xff0c 而不用管此函数内部在做什么 xff08 千万不要跳进去了 xff0c 你脑袋
  • anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions

    在keil工程下移植代码 xff0c 编译出现了这个问题 xff0c 字面上解决办法有 xff1a 1 打开GNU模式 option gt GNU extensions 2 在代码前加上 pragma anon union 就是代表支持匿名
  • 串口的深入理解

    1 串口是如何发送数据的 xff1f 一般说来 xff0c 串口发送数据是往数据寄存器sbuf填写数据 xff0c 一个字节一个字节的写入 xff0c 如果有串口中断 xff0c 那么发送完一个字节的数据 xff0c 就会进入串口中断一次
  • CMakeLists.txt的简单使用

    Makefile和CMakeLists的关系 环境准备 xff1a 需要安装gcc xff0c g 43 43 xff0c make sudo apt get install gcc g 43 43 sudo apt get isntall
  • .so文件的基本理解,使用。

    一 基本概念 Linux下的 so是基于Linux下的动态链接 其功能和作用类似与windows下 dll文件 代码编译 xff0c 链接 xff0c 最后生成可执行文件 xff1b 这个可执行文件就可看作是一个静态链接 xff0c 因为代
  • jz2440:QT控制LED灯点亮熄灭(11)

    1 LED灯的驱动 xff1a 首先要准备好在驱动文件 xff0c 通过insmod led ko来加载模块 xff0c 然后在QT的代码里面配合调用open xff0c write read函数来点亮 xff0c 关闭LED灯 这一步 x
  • win10下安装ubuntu双系统

    本文章记录自己在Win10系统下安装ubuntu双系统的过程 xff0c 以及注意事项 另一个不错的安装教程 1 下载系统镜像 在官网或清华镜像 xff0c 根据需要的ubuntu版本下载需要的ubuntu镜像文件 这里要注意 xff0c
  • C++ shared_ptr的reset 用法

    include lt iostream gt include lt memory gt class Tmp public Tmp int a Tmp void print a std cout lt lt 34 value 61 34 lt
  • C++ 模板类的继承

    模板类 xff1a template lt typename T gt 说白了就是向之后的内容传递参数类型 xff0c 把T当作一个数据类型传递 xff0c 而在声明一个变量的时候 xff0c 通过base lt xxxx gt pp xx
  • linuxptp源码研究

    目录 1 检查网卡是否支持相应的时间戳 2 linuxptp的目录架构 3 ptp4l的大致流程分析 4 gptp协议对应的sync follow up delay request delay response消息在代码的位置 5 slav
  • xv6---Lab3: page tables

    目录 参考资料 RISC V页表的简化图如下所示 编辑 多级页表 xv6内核页表 3 6 Process Address Space 3 7 Code Sbrk 3 8 Code Exec Print a page table A kern
  • 内存管理---分页机制

    目录 物理内存管理带来的问题 直接映射 一级页表 二级页表 参考 xff1a xff08 C语言内存七 xff09 分页机制究竟是如何实现的 xff1f Smah 博客园 物理内存管理带来的问题 比如4GB的flash 如果应用程序可直接访
  • xv6---Lab4 traps

    参考 xff1a Lab Traps 关于寄存器s0和堆栈 https pdos csail mit edu 6 828 2020 lec l riscv slides pdf RISC V assembly Q 哪些寄存器包含函数的参数
  • stm32F4 hal库之CAN通信的实现

    本文的目的是为了能够实现功能 xff0c 故写的时候比较简略 参考资料 xff1a https blog csdn net u012308586 article details 81001102 正点原子开发手册 目标 xff1a 通过ca
  • 调试sim800L模块

  • 51单片机 串口中断

    1 什么是中断 广义上的中断是指一个过程 xff0c 举个简单的例子 xff0c 打开了电脑 xff0c 你正在放音乐 xff0c 点击了暂停按钮 xff0c 于是歌停了 这就是一个很明显的中断的例子 CPU正在做自己的事情 xff08 放

随机推荐

  • STM32CubeMX应用 -- 定时器输入脉冲计数

    目录 参考链接 一 实现过程 二 STM32CubeMX配置示例 三 C语言示例程序 参考链接 https blog csdn net m0 37845735 article details 105395643 一 实现过程 当选择外部的同
  • 机器人导航dwa(局部避障)分析

    前面部分引用http blog csdn net lqygame article details 72861439 xff08 1 xff09 初始化 xff1a 在move base节点中 xff0c 通过类加载模块载入了BaseLoca
  • 2019年最新VSLAM比较汇总

    2019年最新VSLAM比较汇总 闭源SOFTSOFT2ESOsGAN VOLG SLAMRotRocc 43 GDVOElbrusROCCMonoROCCcv4xv1 sc 开源 xff1a VINS FusionORB SLAM2Ste
  • CMSIS到底是个什么东西

    目录 一 前言 二 CMSIS标准 三 CMSIS文件 1 Include文件 2 Source文件 四 总结 一 前言 使用过ARM单片机的朋友肯定听说过CMSIS xff0c 可以说CMSIS是开启ARM单片机的金钥匙 xff0c 是不
  • TouchGFX介绍

    目录 一 关于TouchGFX 1 TouchGFX是一个图形框架 2 TouchGFX可以减轻CPU负载 3 TouchGFX充分利用了STM32的硬件图形外设 4 TouchGFX创建最佳性能的用户界面 5 TouchGFX可工作于ST
  • rt-thread应用篇(03)---基于STM32F429实现web服务器功能

    目录 参考示例 前言 一 需使用的组件与软件包及其ENV配置 1 文件系统相关组件与软件包 1 1 DFS 框架 1 2 fal 软件包 1 3 SFUD 组件 2 网络通信相关组件和软件包 2 1 SAL组件 2 2 netdev组件 2
  • rt-thread的at组件在freeRTOS上的移植与应用

    目录 一 AT命令 二 rtthread at组件简介 三 移植到freeRTOS 3 1 数据结构 3 2 API 3 3 at client 流程 3 4 串口数据接收处理 3 5 数据缓存 顺序队列 四 使用示例 4 1 串口配置信息
  • rt-thread驱动篇(04)---STM32F429单片机模拟SPI FLASH驱动添加

    目录 一 添加驱动 1 新增模拟SPI驱动文件 drv soft spi c h 2 新增模拟SPI配置文件 soft spi config h 二 向工程添加文件 1 修改 board Kconfig 2 修改 rt thread com
  • RT-Thread实时操作系统简介

    目录 一 概述 二 架构 三 版本选择 四 内核启动流程 五 自动初始化机制 六 内核对象模型 七 I O设备模型 1 框架 2 设备驱动使用序列图 3 设备类型 八 FinSH控制台 九 ENV工具 1 menuconfig 2 Scon
  • Altium Allegro PADS到底该选哪个EDA设计软件

    废话少说 xff0c 就像之前 学好数理化 xff0c 走遍天下都不怕 一样 xff0c 在如今快速发展的电子时代 xff0c 掌握一门电子设计EDA软件工具 xff0c 在职场上真的走遍天下都不怕 哪哪都有可能跟电沾边 xff0c 跟控制
  • QML学习笔记【07】:QML访问复杂组件的子项

    1 访问复杂组件的子项 gt Row Column Grid Flow布局子项或Repeater子项 访问复杂组件的子项 gt Row Column Grid Flow布局子项或Repeater子项 Window width 640 hei
  • tslib-1.4在I.MX6ULL开发板上电容屏不能触摸问题

    一 前言 在采用触摸屏的移动终端中 xff0c 触摸屏性能的调试是个重要问题之一 xff0c 因为电磁噪声的缘故 xff0c 触摸屏容易存在点击不准确 有抖动等问题 Tslib是一个开源的程序 xff0c 能够为触摸屏驱动获得的采样提供诸如
  • C++与QML混合编程

    一 前言 简单来说 xff0c 混合编程就是通过Qml高效便捷的构建UI界面 xff0c 而使用C 43 43 来实现业务逻辑和复杂算法 Qt集成了QML引擎和Qt元对象系统 xff0c 使得QML很容易从C 43 43 中得到扩展 xff
  • 卸载ROS功能包

    步骤方法 xff1a 1 首先卸载包 sudo apt get purge ros indigo 2 然后卸载依赖包 sudo apt get autoremove
  • 要点初见:通过ROS包nmea_navsat_driver读取GPS、北斗定位信息(C/C++)

    先前在树莓派上用C C 43 43 读取过GPS北斗双模定位模块 xff0c 但因为定位模块的若干条定位数据无法立刻读取 xff0c 需要用delay 延迟1到2秒的时间才能把所有定位数据都读取进程序 xff0c 又不想写多线程 xff0c
  • 自动驾驶-使用卡尔曼滤波算法定位和跟踪

    参加过科一的人都知道 xff0c 学车的第一步不是操控车辆而是遵守交规 xff0c 行车礼让 xff0c 确保安全 可见安全驾驶才是行车的第一原则 为了确保安全 xff0c 司机应该观察周围车辆和行人的位置 xff0c 保持安全距离 自动驾
  • ROS使用笔记

    文章目录 1 提取bag中固定topic或者固定时间段数据2 提取pcd数据3 记录数据4 service amp action5 roslaunch文件6 自定义消息7 from raw velodyne packets to velod
  • linux安装Android Studio

    linux安装Android Studio 1 先在https developer android google cn studio hl 61 zh cn下载源码安装包 2 安装64位所需要的库 2 1如果使用的是Ubuntu的话执行以下
  • OpenCV中Mat的初始化与赋值

    1 type数据类型 常量类型的命名规则为 xff1a CV 位数 43 数据类型 43 通道数 关系如下 xff1a C1 C2 C3 C4 CV 8U 0 8 16 24 CV 8S 1 9 17 25 CV 16U 2 10 18 2
  • 近十年的VI-SLAM算法综述与发展

    本文主要总结一下这几年工作中遇到过以及改进过相关VIO算法 1 背景介绍 一个完整的 SLAM simultaneous localization and mapping 框架包括传感器数据 前端 后端 回环检测与建图 xff0c 如图1所