VI-SLAM系统对比

news2024/12/23 1:56:51

任何类型的相机对运动物体,视线遮挡,光照剧烈变化等恶劣情况下都不够鲁棒,而惯性测量单元(IMU)对环境基本没有要求,并且IMU可以提供高频的位姿估计,视觉一般只能提供低频的位姿。依据视觉与IMU的特点,视觉与IMU融合的SLAM系统逐渐受到广泛关注,已成为SLAM系统的研究热点。视觉与IMU融合的SLAM系统,称之为VI-SLAM系统,本博客针对目前主流的VI-SLAM进行对比。

文章目录

    • 一、单目VI-SLAM系统
      • 1、ORB-SLAM2
        • (1)系统流程
        • (2)主要模块
        • (3)优点
        • (4)缺点
      • 2、LSD-SLAM
        • (1)系统流程
        • (2)主要模块:
        • (3)优点:
        • (4)缺点:
      • 3、SVO
        • (1)系统流程
        • (2)主要模块:
        • (3)优点:
        • (4)缺点:
    • 二、双目/RGB-D VSLAM
      • 1、RTAB-MAP(RGB-D/双目)
        • (1)系统流程
        • (2)主要模块:
        • (3)优点:
        • (4)缺点:
      • 2、RGBD-SLAM-V2
        • (1)系统流程
        • (2)主要模块:
        • (3)优点:
        • (4)缺点:
      • 3、Elastic Fusion
        • (1)系统流程
        • (2)主要模块:
        • (3)优点:
        • (4)缺点:
    • 三、VSLAM+IMU(VIO)方案
      • 1、VIORB-SLAM2(单目+IMU)
      • 2、VINS-MONO(单目)
        • (1)系统流程
        • (2)主要模块:
        • (3)优点
        • (4)缺点
      • 3、VINS-FUSION(双目)
      • 4、ORB-SLAM3(单目/双目+IMU)
        • (1)系统流程
        • (2)主要模块
        • (3)优点
        • (4)缺点

一、单目VI-SLAM系统

1、ORB-SLAM2

(1)系统流程

在这里插入图片描述

(2)主要模块

  • 前端:系统特征提取、相机的位姿预测或重定位、判断新的关键帧等跟踪部分
  • 后端:局部建图、回环检测以及全局BA模块,此处的局部地图是主要负责关键帧的插入,以及对临近地图点进行处理以生成新的地图点,随后使用局部捆集调整(LocalBA)对新生成的地图点进行优化,最后再选择和删除部分关键帧,并将其输入到下一个模块
  • 回环检测:处理和优化从局部建图模块中输入的关键帧,该模块分别采用词袋模型和Sim3算法进行回环检测和相似变换,最后用全局优化对地图进行更新

(3)优点

  • 采用三线程结构,有非常好的跟踪和建图效果,能够保证轨迹与地图的全局一致性。
  • 对特征点提取及匹配方案进行优化,如提取均匀分布特征点、循环优化减少Outlier,这使得ORB-SLAM的鲁棒性很高;
  • 受车辆、行人等动态物体的影响大。

(4)缺点

  • 基于特征点,每次跟踪位姿都要提取匹配特征点,较为耗时
  • 系统较为精细庞大,三线程结构对搭载平台要求较高,目前多在PC运行
  • 只能建稀疏特征点地图,无法提供导航避障功能,只能提供定位

2、LSD-SLAM

(1)系统流程

在这里插入图片描述

(2)主要模块:

  • 前端跟踪:用之前一帧的位姿作为初始值,直接法求解跟踪获得每一新帧相对于当前关键帧的se(3);
  • 深度图估计:如果新帧跟关键帧变化较小,就通过small-baseline stereo comparison方法更新- 关键帧深度图;若变化较大就创建新关键帧,此新关键帧通过与最近的关键帧匹配来初始化。
  • 地图优化:跟踪两两邻近关键帧间的sim(3),作为下一步全局优化的edge;位姿图优化+闭环检测(用特征点的词袋方法)+尺度漂移检测

(3)优点:

  • 可在 CPU 上实现半稠密场景的重建;
  • 考虑了像素梯度与直接法的关系,以及像素梯度与极线方向在深度估计中的角度关系;使深度估计精度有了较大提高;
  • 用sim3作全局优化,可以减小尺度漂移,并可实现尺度可视化。

(4)缺点:

  • 对相机内参和曝光非常敏感,并且在相机快速运动时容易丢失。
  • 回环检测时还是得用特征点,不是单纯的直接法SLAM。

3、SVO

(1)系统流程

在这里插入图片描述

(2)主要模块:

  • 前端跟踪:和上一帧通过光流法跟踪,求位姿初始值,然后通过局部地图在图像上的投影用直接法优化位姿;通过平移量判断是否创建新关键帧,创建关键帧后均匀提取新特征点;
  • 深度滤波(地图优化):每次跟踪完后,获得帧间位姿,然后三角化获得点云深度,然后基于均值——高斯滤波器对逆深度进行融合,以优化地图。

(3)优点:

  • 特征点与直接法的混合使用,使得它速度极快,在低端计算平台上也能达到实时性,而在 PC 平台上则可以达到 100 多帧每秒的速度;
    框架简单,迁移容易。

(4)缺点:

  • 在单目初始化时,使用了分解 H 矩阵而不是传统的 F 或 E 矩阵的方式,这需要假设特征点位于平面上;
  • 目标应用平台为无人机的俯视相机,细节是围绕这个应用设计的,使得它在平视相机中表现不佳:如在关键帧选择时,使用了平移量作为确定新的关键帧的策略,而没有考虑旋转量;
  • 为了速度和轻量化,舍弃了后端优化和回环检测部分,也基本没有建图功能。

二、双目/RGB-D VSLAM

1、RTAB-MAP(RGB-D/双目)

(1)系统流程

(2)主要模块:

VO模块:提取GFTT/BRIEF特征,并进行帧间光流追踪,通过RANSC PnP方法获得位姿初始值;再通过帧与局部地图点特征匹配,用BA方法更新位姿。
循环回环检测:ROS中的STM节点从图像中提取视觉特征(SIFT, SURF, ORB 等), 然后将其量化成"视觉词袋",创建定位点;每次检测相似帧时都是由WM从LTM中选择可能性大的定位点(每个定位点都有权重,权重随着被访问次数增加而增加)来进行比对,以优化运行速度;
后端优化:g2o/GTSAM(位姿图或因子图)优化。
建图:可以建2D/3D占据栅格图/八叉树图/点云图。

(3)优点:

适用于长期和大规模环境在线建图的要求;
里程计鲁棒性较好,且低漂移;
提供相应软件包,地图生成开发实用且简便。

(4)缺点:

方案偏向于商品化,二次开发难

2、RGBD-SLAM-V2

(1)系统流程

(2)主要模块:

前端:从每一帧的RGB提取特征,计算描述子,RANSAC ICP计算两帧之间的运动估计,并提出了一个EMM(环境测量模型)判断运动估计是否可以接受;
后端优化:也是词袋检测,然后G2O位姿图优化;
建图:可建立八叉树地图。

(3)优点:

二次开发较容易

(4)缺点:

实时性相对较差,相机要慢速运动

3、Elastic Fusion

(1)系统流程

(2)主要模块:

前端:从每一帧的RGB提取特征,计算描述子,RANSAC ICP计算两帧之间的运动估计,并提出了一个EMM(环境测量模型)判断运动估计是否可以接受;
后端优化:也是词袋检测,然后G2O位姿图优化;
建图:可建立八叉树地图。

(3)优点:

二次开发较容易

(4)缺点:

实时性相对较差,相机要慢速运动

三、VSLAM+IMU(VIO)方案

1、VIORB-SLAM2(单目+IMU)

工作原理:在ORB-SLAM2上改进而来
前端:继承ORB-SLAM2,都采用orb特征点,通过特征匹配结合局部地图估计运动;
后端:
优点:精度高,较为成熟
缺点:由于单目+特征匹配,鲁棒性较低

2、VINS-MONO(单目)

(1)系统流程

(2)主要模块:

预处理:图像特征光流跟踪;IMU数据预积分;
初始化:纯视觉Sfm初始化;Sfm与IMU积分的松耦合;
局部BA联合优化和重定位:基于滑动窗口的非线性优化实现紧耦合;
回环检测与全局位姿图优化:四自由度位姿图优化。

(3)优点

用紧耦合方法实现的,通过单目+IMU恢复出尺度;
采用光流跟踪,跟踪鲁棒性较好,可实用与快速场景;
估计精度较高。

(4)缺点

系统较为复杂,闭环检测对精度影响大;

3、VINS-FUSION(双目)

工作原理: VINS-FUSION是VINS-MONO的进化版,共有四个版本:单目+imu;纯双目;双目+imu;双目+imu+GPS;最主要的版本就是-双目+imu+GPS,对比于VINS Mono,主要增加了global_fusion包,用来融合GPS以及视觉IMU定位的结果。
优点:
可以静止进行初始化;
尺度信息不一定完全依靠IMU(有双目),不会造成尺度不可关的情况;
鲁棒性上,双目明显优于单目。
缺点:由于视觉误匹配等各种原因,双目的精度会比单目差一点。

4、ORB-SLAM3(单目/双目+IMU)

(1)系统流程

在这里插入图片描述

(2)主要模块

相比于ORB-SLAM2加入了ATLAS成为了多地图系统;加入IMU可以进化为VIO-slam;

前端TRACKING:根据当前的active地图,实时地跟踪最新一帧的位置,利用最小化重投影误差的方式实现位姿的最大后验估计MAP。决定新一帧是否作为关键帧加入地图也是在这个线程中完成的。跟踪线程接受IMU、Frame输入,IMU 被预积分处理,而Frame被提取ORB特征,跟踪方法与2代类似。
局部建图优化:active地图加入新关键帧,在添加关键帧的时候,重复的关键点被移除。VI-Bundle Adjustment优化当前被插入帧前后窗口地图。
闭环检测:还是基于词袋法,将关键帧和整个Atlas地图集关键帧进行比较;找到相似后利用时间+几何一致性检验;
地图融合:关键帧和整个Atlas地图集关键帧进行比较,如果检测到两关键帧是同一地点,分为两种情况:若被召回帧是当前的active地图中的一部分,则需要进行loop correction回环矫正,在回环矫正之后,在另一个线程中进行,全局位姿图进行BA优化,整体的地图一致性得到了提升;若被召回帧是属于一个non-active的map,两个地图则会被合并成一个地图并将大地图设置为当前的active地图。

(3)优点

由于加入多地图概念,相比于ORB-SLAM2鲁棒性更强,在跟踪定位失败后,可以继续建立新图,并在回环检测召回时可以进行地图缝合;
加入IMU鲁棒性有了很大提高;
提供多种相机模型。

(4)缺点

初始化时,使用视觉与IMU独立初始化再进行联合初始化,初始化速度较慢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前后端实现导出导入功能

目录 导出 1.后端代码 (1)相关依赖 (2)自定义实体类 (3)写一个查询方法list (4)写导出接口 2.前端代码 3.效果示例 导入 1.后端代码 (1)写导入接口 …

在SpringBoot中对es集群的基本操作

在创建SpringBoot项目之前要先把上一篇文档搭建的集群打开,然后再创建SpringBoot项目,不会创建的可以访问这里 快速创建SpringBoot项目 提前准备: 1.导入pom依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starte…

23西安电子科技大学光电工程学院851考研录取情况

01、光电工程学院各个方向 02、23光电工程学院一志愿考研录取情况总览、平均分 PS&#xff1a;在23年&#xff0c;西电物理与光电工程学院拆分为两个院&#xff0c;分别是&#xff1a;物理学院和光电工程学院。其中物理学院改考602高等数学872普通物理&#xff0c;光电学院专业…

六、盒子模型

盒子模型 1、元素分类 1、元素分类 行内元素&#xff08;内联元素&#xff09;inline 从左向右&#xff0c;从上到下&#xff0c;依次显示 一个挨着挨一个 以下属性无效&#xff1a;width、height、maring、pading 行内元素内部无法嵌套块级元素 行内元素列表 a strong span …

leetcode 160.链表相交

⭐️ 往期相关文章 &#x1f4ab;链接1&#xff1a;链表分割 &#x1f4ab;链接2&#xff1a;链表中倒数第k个结点(快慢指针问题) &#x1f4ab;链接3&#xff1a;leetcode 876.链表的中间结点(快慢指针问题) &#x1f4ab;链接4&#xff1a;leetcode 206.反转链表 &#x1f4…

Servlet 的常用 API + 综合运用【表白墙】

前言 小亭子正在努力的学习编程&#xff0c;接下来将开启JavaEE的学习~~ 分享的文章都是学习的笔记和感悟&#xff0c;如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话&#xff0c;烦请点赞关注支持一波, 感激不尽~~ 目录 前言 一、HttpServlet Servlet 的生…

医学图像分割的全卷积transformer

文章目录 The Fully Convolutional Transformer for Medical Image Segmentation摘要本文方法实验结果 The Fully Convolutional Transformer for Medical Image Segmentation 摘要 我们提出了一种新的Transformer &#xff0c;能够分割不同模式的医学图像。医学图像分析的细…

【机器学习核心总结】什么是EM(最大期望值算法)

什么是EM(最大期望值算法) 在现实生活中&#xff0c;苹果百分百是苹果&#xff0c;梨百分白是梨。 生活中还有很多事物是概率分布&#xff0c;比如有多少人结了婚&#xff0c;又有多少人有工作&#xff0c; 如果我们想要调查人群中吸大麻者的比例呢&#xff1f;敏感问题很难得…

FOF常用的七种投资策略全解析

从当前市场上的投资策略种类来看&#xff0c;大致有七种&#xff0c;包括核心*卫星投资策略、「杠铃」投资策略、反向投资策略、成本平均策略和时间分散化策略、买入并持有策略、美林投资时钟策略、Alpha/Beta投资策略。 投资策略一:美林投资时钟策略 美林投资时钟投资策略相信…

CAN(2)-GD32

CAN(2)-GD32 GD32中CAN的特征 结构框图 CNA总线的工作模式 睡眠工作模式 初始化工作模式 正常工作模式 CAN通信模式 静默通信模式 回环通信模式 回环静默通信模式

hadoop --- MapReduce

MapReduce定义&#xff1a; MapReduce可以分解为Map (映射) Reduce (规约) &#xff0c; 具体过程&#xff1a; Map : 输入数据集被切分成多个小块&#xff0c;并分配给不同的计算节点进行处理Shuffle and Sort&#xff1a;洗牌和排序&#xff0c;在 Map 阶段结束后&#xf…

CCF-CSP真题《202303-4 星际网络II》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202303-4试题名称&#xff1a;星际网络II时间限制&#xff1a;2.0s内存限制&#xff1a;1.0GB问题描述&#xff1a; 问题描述 随着星际网络的进一步建设和规模的增大&#x…

docker-compose部署BCH节点

BCH gitlab BCH github 1、下载BCH二进制文件 rootiZj6c076dm0c5n5b39lzlxZ:/data/docker-compose/bch# wget https://github.com/bitcoin-cash-node/bitcoin-cash-node/releases/download/v26.1.0/bitcoin-cash-node-26.1.0-x86_64-linux-gnu.tar.gz --2023-07-05 16:30:46--…

攻防世界-web-CAT

题目描述&#xff1a;抓住那只猫。界面如下&#xff1a; 1. 思路分析 界面很简单&#xff0c;只有一个输入框&#xff0c;提示我们输入域名&#xff0c;我们随便输入一个baidu.com 发现这个域名赋值给url参数传递到后台。因此&#xff0c;这里能做文章的地方只有这个url参数&a…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术

第一章 理论基础 1、Earth Engine平台及应用、主要数据资源介绍 2、Earth Engine遥感云重要概念、数据类型与对象等 3、JavaScript与Python遥感云编程比较与选择 4、Python基础&#xff08;语法、数据类型与程序控制结构、函数及类与对象等&#xff09; 5、常用Python软件…

算法与数据结构-栈

文章目录 什么是栈如何实现一个“栈”&#xff1f;定长顺序栈动长链式栈 栈的应用栈在函数调用中的应用栈在表达式求值中的应用栈在括号匹配中的应用 总结 什么是栈 后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的“栈”结构。 就像一摞叠在一起的盘子。我们平时放…

JavaScript中的substring方法和fill方法,使用详细(fill方法获取一天24小时)

简介&#xff1a;JavaScript中的数组方法&#xff0c;可以帮助我们操作数组中的元素&#xff0c;以及对数组进行排序和过滤等操作&#xff1b;最近有用到substring和fill方法&#xff0c;这里来记录一下。 一. substring 方法&#xff1a; substring 方法用于从一个字符串中提…

2. PS基本操作

因为网页美工大部分效果图都是利用PS ( Photoshop )来做的,所以以后我们大部分切图工作都是在PS里面完成 ●文件—>打开&#xff1a;可以打开我们要测量的图片 ●CtrlR : 可以打开标尺&#xff0c;或者视图—>标尺 ●右击标尺&#xff0c;把里面的单位改为像素 ●Ctrl加号…

linux上docker容器运行web应用简单介绍(二)

相关文章&#xff1a; linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客 一、mac 安装及使用docker_docker mac_做测试的喵酱的博客-CSDN博客 Docker 容器使用 | 菜鸟教程 linux应用docker基本使用&#xff08;一&#xff09;_做测试的喵酱的博客-CSDN博客 一、 …

【设计模式】第十七章:状态模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…