vSLAM研究综述:2010-2016

2023-05-16

作为vSLAM领域小白,学习完《视觉SLAM十四讲》后,抱着学习的心态研究了论文Visual SLAM algorithms: a survey from 2010 to 2016,作为入门的第一步,会有很多地方不太准确,希望指正:

摘要:

SLAM(同时定位与建图)是一种在未知环境中估计传感器运动和重建结构的技术,特别的,vSLAM(视觉slam)只采用图像信息进行定位与建图,它作为一种基础技术被广泛广泛应在了计算机视觉,增强现实,机器人等领域。本文旨在对近年来vSLAM进行分类和总结(尤其是2010-2016)。

1 介绍

一般来说,vSLAM比基于其他传感器的SLAM更难,因为与通常使用的360°激光传感相比,摄像机只能从有限的视野中获得较少的视觉输入。根据这些输入,需要不断地估计摄像机的姿态,同时重建未知环境的三维结构。早在2000年,关于单目vSLAM的研究是基于对特征点的跟踪和建图的,这种方法被称作特征点法;为了克服缺少纹理或者缺少特征点的环境,一种不需要检测特征点、直接用整幅图像进行跟踪和映射的vSLAM算法被提出,这种方法被称为直接法;随着低成本RGB-D传感器(如microsoftkinect)的出现,基于单眼图像和深度的vSLAM算法逐渐被应用。因此,本文介绍将针对三种方法进行介绍。

2 vSLAM的组成

2.1 基础模块
SLAM的框架一般包括1 初始化 2 跟踪 3 建图
进行vSLAM之前,需要在未知环境中定义一个特定的坐标系来进行摄像机的位姿估计和三维重建。因此,在初始化时,首先要建立全局坐标系,并选取一部分环境作为初始地图。初始化后,通过跟踪和建图来不断估计摄像机的姿态:在跟踪过程中,通过跟踪图片里的地图,来估计图像相对于地图的摄像机姿态,在这里,首先从图像中的特征匹配或特征跟踪获得图像与地图之间的2D-3D对应关系,然后,通过求解PnP问题计算出像机的姿态。在建图过程中,当相机观察到未知区域时,通过计算环境的三维结构来扩展地图。
2.2 附加模块
根据应用目的不同,两个模块被添加:1 重定位 2 全局地图优化
当由于摄像机快速运动或某些干扰而导致跟踪失败时,需要重新定位。在这种情况下,有必要通过再次计算相机在地图中的姿势,这一过程被称为“重定位”。另一个模块是全局地图优化,由于摄像机运动的距离,所创建的地图通常包含累积估计误差,为了抑制误差,需要对整个地图信息的一致性的检验与优化,得到了更加准确的检验。当相机再次移动到同一位置时,便可得到一圈的累积误差,此约束条件便可以通过优化来抑制误差。
闭环是一种获取参考信息的技术。在闭环中,首先通过匹配当前图像和先前获取的图像来搜索闭环,如果检测到回路,则意味着相机捕捉到先前观察到的视图之一,在这种情况下,可以估计相机移动期间发生的累积误差。注意,闭环检测可以通过使用与重新定位技术来完成。

3 最新技术

vSLAM、视觉里程计(VO)和实施运动恢复结构(SFM)是在未知环境中预先设计的图像运动和三维结构。下面,我们将解释它们之间的关系。视觉里程计(VO)里程计是利用编码器等传感器来估计传感器位置的顺序变化,以获取传感器的相对运动。基于相机的里程计成为视觉里程计。一般来说vSLAM=VO+global map optimization,VO是vSLAM中的三个基础模块。运动恢复结构(SFM)运动恢复结构是通过一系列图片还原世界模型,与vSLAM的区别在于:SFM是离线处理数据,而SLAM是实施定位与建图。

4 基于特征的方法

在此类方法中,位姿优化的过程中主要有滤波器和非线性优化两种。首先介绍两种slam系统
4.1 MonoSLAM(单目)
MonoSLAM最早产生于2003年,其,它主要有两部分组成:
1.通过拍摄已知物体进行初始化
2.通过EKF(卡尔曼滤波器)同时估计相机运动与环境
MonoSLAM的弊端在于随着环境的增大,其计算压力会越来越大,很难实现实时计算。
4.2 PTAM(单目)
PTAM将跟踪和定位两个功能放在两个线程里运行,很大程度上缓解了计算压力,所以效果更好的非线性优化(一般为BA)被运用到了系统之中。它由四部分组成:
1.通过五点法进行初始化
2.通过匹配图像与地图实现相机位姿估计
3.特征点的坐标通过三角测量得到,然后通过BA优化
4.跟踪过程通过基于随机树的搜索恢复
基于BA的PTAM要比基于EKF的MonoSLAM的定位精度更高,而且由于才用了双线程,运行效率更高。
4.3 ORB-SLAM(单目)
ORB-SLAM是最完整的基于特征的单目视觉slam系统,它拓展了PTAM,系统分三个线程运行效率更高,且包含了BA优化、基于视觉的回环检测、7自由度位姿优化等功能。此外,ORB-SLAM已经被扩展了双目和RGB-D版本。
在这里插入图片描述

5 直接法

直接法也成为无特征法,一般来说,直接法采用图像一致性作为误差测量方法,而基于特征的方法中,采用几何一致性作为误差测量方法。下面是几个基于直接法的slam系统。
5.1 DTAM(双目)
DTAM通过比较输入图片和从地图映射图片的对比实现跟踪功能。包含下面三个部分:
1通过双目测量实现初始化
2通过从重建的地图生成合成视图来估计摄像机的运动
3利用多基线立体模型估计每个像素的深度信息,然后考虑空间连续性对其进行优化
5.2 LSD-SLAM
LSD-SLAM的核心思想来源于半稠密建模的视觉里程计(VO)。在该方法中,重建目标仅限于具有强度梯度的区域,这也意味着忽略无纹理区域,因为很难从图像中准确估计深度信息。它包含四个部分:
1.随机初始化每个像素的值
2.通过从重建的地图生成合成视图,与输入图像对比来估计摄像机的运动
3.仅重建梯度大的的区域
4.采用7自由度重构图的几何一致性优化方法
5.3**SVO **
semi-direct VO(SVO),它的跟踪采用特征点匹配,建图采用直接法,可以理解稀疏的DTAM和LSD-SLAM.
在这里插入图片描述

6 RGB-D vSLAM

随着消费级的相机的出现,RGB-D相机机也逐渐用于vSLAM算法中。
6.1 与单目相机的区别
相比于单目slam,RGB-D slam的坐标系统的尺寸是已知的,但是缺点也很明显:1.因为其发射的红外信号会受到室外光线的干扰,所以一般适用于室内环境,2.测量范围只有1-4米。
6.2 运动融合(KinectFusion)
在KinectFusion中,通过对比体素空间中的深度地图获得环境的3D结构,然后通过ICP算法估计相机的移动。在GPU加速下KinectFusion可以实时运行。
6.3 SLAM++
在这种算法中,提前将多个物体注册在数据库中,然后在算法运行过程中识别这些物体,识别后的物体会替代3D物体点云以缩减数据量并简化地图。

7 存在的问题

在实际的环境中,vslam仍然需要面对很多困难:纯旋转问题,地图初始化,相机内参估计,坐标尺寸
7.1 纯旋转
手持型设备很容易出现纯旋转的运动,此时单目视觉slam很难找出相邻照片之间差距(RGB-D slam不存在这种问题)。解决方案有多种:1.使用homography跟踪纯旋转运动,同时使用6位姿估计相机跟踪其他相机运动。2.根据相机运动使用两种3D点的格式,用3D point表示可以观察到明显差异的点,用3D rays表示不能观察到明显差异的点,在跟踪的过程中3D rays点与特征点的距离会作为误差参与到相机运动估计中。
7.2 地图初始化
地图初始化对于后续精准的位姿估计来说非常重要,为了获得准确的初始化地图需要很宽的基线,对于新手来说并不友好。

7.3 估计相机内参
单目slam已经假定知道了相机内参,所以需要提前对相机进行标定。matlab和opencv有相关的工具箱或者函数。
7.4 坐标尺寸
单目相机无法测量物体的准确尺寸,也就是缺少一个维度。有学者用人的手或者脸去确定一个绝对的全局坐标尺寸,有人每个人的身形都是不一样的,所以这种方法并不准确。此外,可以利用加速度计,陀螺仪等其他传感器的获得尺寸信息。

8 总结

本文介绍了10-16年内各种vSLAM算法,最基础的slam算法包括初始化、相机运动、3D环境估计、全局优化和重定位。最近,单目slam中关于直接法的研究越来越多,此外随着RGB-D相机的推广,RGB-D vSLAM是一个热门的研究内容。为了更好的比较不同算法的特点,表格中列出了对比结果,读者可以根据应用场景的特点选择合适的算法。本文着重研究了基于视觉的slam,很多学者将数据与惯性测量单元结合,克服了单目尺寸问题,取得了很好地效果,多出传感器融合slam也是很好地研究方向。(ORB-SLAM3的imu+视觉就取得了超好的效果)
在这里插入图片描述

连接:
1 https://github.com/raulmur/ORB_SLAM2.
2 https://get.google.com/tango/.
3 https://structure.io/.
4 https://developer.vuforia.com/.
5 http://trakmark.net.
6 http://www.cvlibs.net/datasets/kitti/.
7 https://github.com/CVfAR/ATAM.
8 https://github.com/UZ-SLAMLab/ORB_SLAM3

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

vSLAM研究综述:2010-2016 的相关文章

  • 德国大陆ARS408系列毫米波雷达数据解析

    本人已完成对该型号系列毫米波雷达的解析工作 xff0c 有需求请私信联系
  • nmap使用详解

    nmap介绍 nmap xff08 Network Mapper xff09 是一款开源免费的针对大型网络的端口扫描工具 xff0c nmap可以检测目标主机是否在线 主机端口开放情况 检测主机运行的服务类型及版本信息 检测操作系统与设备类
  • OLED屏幕花屏的原因(I2C+DMA)

    OLED屏幕在通电后花屏 xff0c 呈雪花状 在网上查询原因 xff0c 开始了尝试 xff1a 1 可能是由于杜邦线的问题 xff0c 可能接触不良导致 xff0c 但更换了杜邦线依然花屏 2 可能是OLED屏幕问题 因为经常在工作 x
  • 竞赛保研(自动化专业)

    一 感谢 从大三的五月份一直到9 28号推免结束 xff0c 最终也是保研到了梦校 xff0c 还好我坚持到了最后一刻 感谢父母 xff0c 感谢远方的她 xff0c 感谢老师 xff0c 感谢实验室的平台 xff0c 也要感谢每一位一起拼
  • 随机森林的简单学习记录

    随机森林小记 这里采用的随机森林的库选择sklearn库 1 首先是导入数据 xff1a path span class token operator 61 span span class token string 34 D Epilept
  • Linux的c++环境配置与cmake的使用

    Ubuntu18 04安装 虚拟机安装 虚拟机软件版本 xff1a VMware Workstation 16 Pro 版本号 xff1a Ubuntu18 04 安装参考 xff1a http t csdn cn P71XR 虚拟机分辨率
  • 用KDevelop来编辑与编译ROS文件

    新建一个ROS工程 xff1a 首先在工作目录下打开终端 xff0c 创建一个src目录 xff0c 放置源代码 xff08 系统要求 xff09 xff0c 并将当前目录切换到src目录中 xff1a mkdir src cd src s
  • 自制三维激光扫描建模

    看图片就是我做的东西 xff0c 很炫酷是不是 好吧 xff0c 开玩笑 xff0c 这是电影普罗米修斯的截图 当初看这个电影的时候就感觉这东西好眩酷 xff0c 我能不能做出来 最近借着帮做毕业设计的机会我也做了一个 就是这个丑丑的东西啦
  • ICE C++ Hello World

    ICE C 43 43 Hello World实例教程 1 概述 本文演示了如何编写一个最简单的C 43 43 ICE Internet Communications Engine 应用程序 xff0c 包括必要环境的安装 该应用程序包含客
  • 华为工作的感悟

    参考 xff1a http www openlab net cn forums thread 1002986 1 p10035795 北邮北 xff0c 清华硕 xff0c 一年两个月的华为生活总结 xff0c 算了 xff0c 贴出来了
  • MRCP 媒体资源控制协议

    媒体资源控制协议 xff08 Media Resource Control Protocol MRCP xff09 是一种通讯协议 xff0c 用于语音服务器向客户端提供各种语音服务 如语音识别和语音合成 MRCP并不定义会话连接 xff0
  • matlab(1):使用matlab处理excel数据进行画图

    目录 0 说明 1 直接使用xlsread读取出错 2 解决办法 3 绘图 0 说明 Excel数据示例 xff08 number filter radius 0 8 3 csv xff09 xff0c 一共99行数据 xff08 4列 x
  • Hadoop中VIntWritable编码方式解析

    最近因为实验室的云计算项目 xff0c 开始学习Hadoop xff0c 有时间就记录一下自己在学习过程中的一些小收获吧 Hadoop权威指南 在序列化这一节有个例子程序 xff0c 叫做TextPair xff0c 代码略长 xff0c
  • MapReduce中的二次排序

    在MapReduce操作时 xff0c 我们知道传递的 lt key value gt 会按照key的大小进行排序 xff0c 最后输出的结果是按照key排过序的 有的时候我们在key排序的基础上 xff0c 对value也进行排序 这种需
  • 基于哈夫曼编码的文件压缩解压

    这个程序是研一上学期的课程大作业 当时 xff0c 跨专业的我只有一点 C 语言和数据结构基础 xff0c 为此 xff0c 我查阅了不少资料 xff0c 再加上自己的思考和分析 xff0c 实现后不断调试 测试和完善 xff0c 耗时一周
  • 2020-12-29 Matlab自动化控制-Adrc自抗扰控制参数调节

    Matlab自动化控制 Adrc自抗扰控制参数调节 上篇参看 xff1a https blog csdn net qingfengxd1 article details 111830762 以最简单的线性组合方法 xff08 1 xff09
  • 单级倒立摆的神经网络控制

    倒立摆系统是一种典型的多变量 非线性 强耦合模型 xff0c 它作为一种被控对象 xff0c 用来检验控制理论的可行性和控制的稳定性 人工神经网络由于具有信息的分布存储 并行处理以及自学习能力等优点 xff0c 在信息处理 模式识别 智能控
  • 基于串级 PID 控制算法的四旋翼无人机控制系统设计与实现

    1 内容简介 略 489 可以交流 咨询 答疑 2 内容说明 无人机 xff0c 英文名称UAV C Unmanned Aerial Vehicle xff0c 是一种特殊的飞行器 xff0c 可以按照预先设定的轨迹进行各种运动 xff0c
  • matlab simulink四旋翼无人机模糊PID控制姿态

    1 内容简介 略 532 可以交流 咨询 答疑 2 内容说明 四旋翼无人机控制灵活 安全性能较高 xff0c 能够实现空中悬停 翻滚 任意角度横 向飞行 xff0c 常常替代人们从事高空危险作业 xff0c 给我们的生活与工作带来了很多便利
  • 深度学习基础

    深度学习介绍 深度学习与机器学习的区别 xff1a 机器学习的特征工程步骤是要靠手动完成的 xff0c 而且需要大量的领域专业知识 深度学习不需要更多的特征处理 只需要进行图片的输入 xff0c 进入神经网络后 xff0c 输出结果 深度学

随机推荐

  • Ubuntu18.04安装ROS Melodic

    1 设置安装源 为了安装ROS Melodic xff0c 首先需要在Ubuntu 18 04 LTS上添加安装源到source list xff0c 方法如下 strong sudo sh c 39 echo 34 deb http pa
  • 嵌入式软件开发笔试面试(五)

    uboot启动流程 uboot是一种启动系统 xff0c 但不属于操作系统 xff0c 内核运行 xff0c uboot结束 启动流程 xff1a 一 汇编阶段 切换到svc模式 为了保证启动稳定 xff0c 关闭看门狗 中断 MMU ca
  • ros(22):catkin_make可以加多线程/多核、catkin_make -j4、catkin_make -j8、catkin_make -j12、catkin_make -j16

    之前以为catkin make 后面不能加多核 多线程 xff0c 现在发现是可以的 xff0c catkin make jn xff08 n为数字 xff09 命令在编译时被拆分为以下两个 xff1a make cmake check b
  • UWB TDOA一维定位解算

    在某些定位场景 xff0c 比如在隧道 走廊等区域 xff0c 需要用到一维解算 xff0c 下面介绍TDOA的长直线解算定位标签位置 xff08 当然也可以用TWR实现一维解算 xff09 定位模型与已知量如下 xff1a 解算不考虑z坐
  • baseflight无头模式原理

    最近探索了baseflight cleanflight源码相关 xff0c 看了源码想分享一下 xff0c baseflight无头模式的原理 baseflight源码可以在github中搜到 xff0c 网址直达 xff1a https
  • cleanflight修改--固件默认飞行模式

    对于我们飞控开发者来说 xff0c 如果每次下完代码后飞行模式modes都要在上位机重新改一次 xff0c 我们肯定会疯掉的 这时候就需要修改固件中默认的飞行模式了 如何下手呢 xff0c 我先从cleanflight飞控的上位机和下位机通
  • 编译mission planner地面站

    编译mp地面站步骤 xff1a 下载最新mp源码 xff1a https github com ArduPilot MissionPlanner 下载最新地面站msi xff08 编译需要引用 xff09 xff1a http firmwa
  • DJI Lightbridge2接收端数据解析

    因为XXXX xff0c 需要对DJI的指令系统做研究 xff0c 首先解析的是 LB2 xff0c 也拆解了七七八八了 xff0c 现在对LB2天空端DBUS口的数据协议进行解析 xff0c 供电子 嵌入式同学进行学习研究 DBUS采用4
  • 室内定位TDOA-UWB实现无线同步的一种方法

    定位中 xff0c 如采用TDOA方式进行坐标解算 xff0c UWB基站间就需要进行时间同步 xff0c 时间同步可以采用有线同步或无线同步 xff1b 找到一篇论文中 xff0c 对无线同步有着巧妙处理 xff0c 特写博客记录一下 U
  • 安装Visual Assit 可在VS2010/VC6.0中使用

    1 1 vs2010中安装 下载Visual Assist X10 6 1823 0 rar破解版 第一步 xff1a 关闭VS2010 第二步 安装 双击安装包中的VA X Setup1823 vsix xff0c 安装 xff1b 第三
  • C++空指针调用类成员函数

    C 43 43 空指针可以调用类成员函数 xff0c 但是 不能调用 类中的 虚函数 我们知道 xff0c 一个对象的指针可以调用它的成员函数和虚函数 xff0c 那么如果一个指向空nullptr的指针 xff0c 能不能调用它的成员函数和
  • MissionPlanner日志保存方法

    闪存日志 目录 闪存日志 日志类型 闪存 VS 数传日志 设置你想要记录的数据 用Mission Planner下载日志 查看内容 详细信息 针对APM Copter 查看KMZ文件 视频教程 日志类型 闪存 VS 数传日志 有两种方法可以
  • Layui的laydate日期组件限制只能选择工作日

    如题 xff0c 在使用Layui的laydate日期组件时 xff0c layui只给我们提供了日期组件的min max配置 xff0c 分别对应最小可选时间和最大可选时间 xff0c 但是如果我们需求是只能选择工作日 xff08 周一至
  • python(5):TypeError: xxx() got an unexpected keyword argument ‘xxx‘

    定义了一个python函数 xff0c 调用时出现报错如下 xff1a Traceback most recent call last File 34 gaussian kernel py 34 line 18 in lt module g
  • 对《Java编程思想》读者的一点建议

    Java 编程思想 这本书在豆瓣的评分高达 9 1 分 xff0c 但我总觉得有点虚高 记得刚上大学那会 xff0c 就在某宝上买了一本影印版的 Java 编程思想 xff0c 但由于初学 Java xff0c 对编程极度缺乏信心 xff0
  • 强烈推荐10本程序员必读的书

    经常有读者私下问我 xff0c 能否推荐几本书 xff0c 以便空闲的时间读一读 于是我跑去自己的书架上筛选了 10 本我最喜欢的书 xff0c 你可以挑选感兴趣的来读一读 01 代码整洁之道 我可以这么肯定地说 xff1a 代码整洁之道
  • 教妹学Java(二十 七):this 关键字的用法

    你好呀 xff0c 我是沉默王二 xff0c xff08 目前是 xff09 CSDN 周排名前十的博客专家 这是 教妹学 Java 专栏的第二十七篇 xff0c 今天我们来谈谈 Java 的 this 关键字 this 关键字有哪些用法
  • PID控制原理

    PID控制原理 PID即 xff1a Proportional xff08 比例 xff09 Integral xff08 积分 xff09 Differential xff08 微分 xff09 的缩写 xff0c PID控制算法是结合比
  • ROS入门:IMU&GPS融合定位实例

    1 声明 xff1a a 本文主要针对IMU amp GPS融合定位仿真环境的搭建过程进行讲解 xff0c 而没有对具体原理的介绍 b 本人作为技术小白 xff0c 完全参考了https zhuanlan zhihu com p 15266
  • vSLAM研究综述:2010-2016

    作为vSLAM领域小白 xff0c 学习完 视觉SLAM十四讲 后 xff0c 抱着学习的心态研究了论文Visual SLAM algorithms a survey from 2010 to 2016 作为入门的第一步 xff0c 会有很