作者I Mega_Li

编辑I 3D视觉开发者社区

文章目录

  • 一、SLAM的引入
    • 1.1定义
    • 1.2开发背景
  • 二、视觉SLAM
    • 2.1 经典视觉SLAM框架
    • 2.2视觉SLAM方案的分类
    • 2.3 开源视觉SLAM方案汇总
  • 三、视觉SLAM设备选型
    • 3.1 设备选型的重要性
    • 3.2 设备类型选择

一、SLAM的引入

1.1定义

SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建”。它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器主要为相机,那就称为“视觉 SLAM”。

1.2开发背景

图1-1 SLAM中建图的分类与作用

引入SLAM的主要目的如下:

1)建图

使用SLAM可在传感器具有良好表现的环境下建立精度较高的全局地图,建立好的地图会为后面的定位、导航等功能提供服务。

2)定位

视觉SLAM中可通过帧间数据匹配计算相机的相对变换,对应的就是机器人的位姿信息,不过该计算结果中存在累计误差的影响;利用SLAM建立的全局地图,通过相机采集到的环境信息与地图进行匹配可以减小累积误差的影响,获得更加精准的机器人位姿。

3)导航

如果我们建立的地图中包含了“哪些地方可以通过,哪些地方不能通过”的信息,那么我们可以以此实现机器人在地图中从某一起点到某一终点的路径规划与跟踪,并能够对地图中固定障碍物实现避障。但这对我们能够建立的地图有要求,需要是“稠密”地图。

二、视觉SLAM

2.1 经典视觉SLAM框架

SLAM至今已历经三十多年的研究,这里给出经典视觉SLAM框架,这个框架本身及其包含的算法已经基本定型,并且已经在许多视觉程序库和机器人程序库中提供。

图2-1 经典视觉SLAM框架

我们把整个视觉 SLAM 流程分为以下几步:

1)传感器信息读取,在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。

2)视觉里程计 (Visual Odometry, VO),视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子,VO 又称为前端(Front End)。

3)后端优化(Optimization),后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后,又称为后端(Back End)。

4)回环检测(Loop Closing),回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。

5)建图(Mapping),它根据估计的轨迹,建立与任务要求对应的地图。

某些使用场合中,我们只截取SLAM的部分功能应用到实际场景中。举例来说只使用VO部分我们可以得到连续的相机相对运动信息,虽然该运动信息存在累计误差,但应用中对此要求不高甚至不做要求,譬如VR头显中计算头显设备运动时的位姿。

不过一般在机器人应用场景中,个人认为建图功能也是不可或缺的。因为前端包括后端优化得到的运动信息始终包含累积误差,该累积误差在SLAM中只能通过回环检测(机器人回到某一处曾经经过的地方且系统识别出来)或者与事先建立好的具有较高精度的全局地图匹配来消除。但是机器人在实际运动中,不能保证全局路径一定会有重叠处,也就是说在SLAM计算中很可能出现不存在回环的情况,此时累积误差只能通过与全局地图匹配来消除,因此SLAM的建图功能也不可或缺。

图2-2 回环检测消除累积误差

这一点在VINS开源项目(香港科技大学团队基于单目+IMU开发的开源SLAM方案)中的测试视频(见“视频/VINS/[Open Source] VINS-Mono_ Monocular Visual-Inertial System in EuRoC MAV Dataset (MH_05 V1_03).mp4”)中也有体现。在回环检测前,SLAM计算得到的位姿与真实位姿之间已经产生了很大的偏差,如图2-3所示;该偏差只有在相机回到了曾经经过的地方且SLAM成功执行了回环检测后才得到了消除,如图2-4所示。

图2-3 未进行回环检测前的位姿累积误差
图2-4 回环检测消除累计误差

2.2视觉SLAM方案的分类

视觉SLAM方案可按照传感器的不同(单目、双目、RGBD、与IMU的组合等)、前端方法的不同(主要分为直接法和特征点法)、后端优化方案的不同(滤波或者非线性优化)、生成地图形式的不同(稀疏地图、稠密地图等)具有不同的划分。这里主要以传感器的不同对slam方案进行简单的介绍。

1)单目slam

只使用一个摄像头采集信息,在尺度完成初始化的情况下(即相机初始阶段进行了一段位移且确定了该段位移的实际大小作为参考),能够完成连续图像间相机位姿的计算与建图。优点在于设备简单,成本低。缺点在于存在尺度漂移现象;图像的深度信息只能通过三角测量计算得到,对环境适应性差;在相机位移较小时计算误差较大,建图精度不高。

2)双目slam

使用双目相机采集信息,双目相机可以通过立体视觉原理计算得到像素深度,这样就不存在单目slam中深度未知的情况。优点在于对环境的适应性要高于单目slam,且能够计算得到像素真实深度;缺点在于像素深度计算量较大,一般通过FPGA或者GPU加速实现实时计算输出。

3)RGBD SLAM

RGBD相机是指能够同时输出RGB图像和对应的深度图的相机,其测量像素深度不再通过耗时的被动双目匹配计算,而是通过激光散斑增加图像纹理加速计算或者硬件测量(结构光、TOF等)实现。因此它可以看做减小了计算量的双目SLAM,但是RGBD相机普遍在室外表现效果不佳,更多用于室内环境。

4)近年来有学者提出单目/双目+IMU的slam方案,其中IMU主要起到的作用包括:

(1)解决单目slam的初始化尺度问题

(2)追踪中提供较好的初始位姿

(3)提供重力方向

(4)提供一个时间误差项以供优化。理

论上来说IMU提供了冗余的运动信息,通过数据融合可以得到更加精确的运动估计。

从实现难度上来看:单目SLAM>双目SLAM>RGBD SLAM。

2.3 开源视觉SLAM方案汇总

目前比较流行的开源视觉SLAM方案如表2-1所示:

表2-1 开源SLAM方案汇总

方案名称 传感器形式 地址
MonoSLAM 单目 https://github.com/hanmekim/SceneLib2
PTAM 单目 http://www.robots.ox.ac.uk/~gk/PTAM/
ORB-SLAM2 单目/双目/RGBD https://github.com/raulmur/ORB_SLAM2
LSD-SLAM 单目为主 http://vision.in.tum.de/research/vslam/lsdslam
SVO 单目 https://github.com/uzh-rpg/rpg_svo
DTAM RGB-D https://github.com/anuranbaka/OpenDTAM
DVO RGB-D https://github.com/tum-vision/dvo_slam
DSO 单目 https://github.com/JakobEngel/dso
RTAB-MAP 双目/RGB-D https://github.com/introlab/rtabmap
RGBD-SLAM-V2 RGB-D https://github.com/felixendres/rgbdslam_v2
Elastic Fusion RGB-D https://github.com/mp3guy/ElasticFusion
OKVIS 多目+IMU https://github.com/ethz-asl/okvis
ROVIO 单目+IMU https://github.com/ethz-asl/rovio
VINS 单目+IMU https://github.com/HKUST-Aerial-Robotics/VINS-Mono

三、视觉SLAM设备选型

3.1 设备选型的重要性

说了这么多,终于到了设备选型这一部分。设备选型的重要性不言而喻,毕竟“好模型架不住坏数据”,SLAM模型建立得再好,如果设备采集的数据本身误差过大,计算结果必定也不够理想。先以VINS项目为例,根据论文内容他们的设备型号和具体信息如下。

相机模块:单目相机,型号为MatrixVision的mvBlueFOX-MLC200w,具有全局快门;cmos型号为MT9V034,单色,分辨率为752X480,帧率20Hz

IMU:该模块使用的是大疆的集成飞控模块A3的内置IMU模块,芯片型号为ADXL278和ADXRS290(都为工业级IMU芯片);可以确定A3内置对IMU的校准去躁等处理算法。

图3-1 VINS中设备型号

由此看来VINS选用的硬件是具有一定要求的,其采集数据的精度也对SLAM算法最终的效果产生正向作用。所以如果我们选用了精度没那么高的消费级IMU配合单目相机采集数据时,VINS的输出结果就不一定能够达到论文中的精度了。

3.2 设备类型选择

我们的项目中工作环境为室外,对传感器选型提出了较高要求。以RGBD相机为例,很多基于结构光或者TOF方案的深度摄像头在室外表现不佳,主要原因是室外自然光的影响。个人初步倾向于选用双目或者RGBD(双目某些情况下可视为RGBD)+IMU的方案,主要理由如下:

1)双目/RGBD+IMU的硬件,可在此基础上尝试基于单目/双目/RGBD/单目+IMU/双目+IMU等多种开源SLAM方案;反之单目+IMU的设备对开源方案的限制较大(只能是单目/单目+IMU)。

2)单目SLAM在建图方面,尤其是深度估计方面,对场景适应性不好且精度较差。双目/RGBD因为可以计算得到深度,在建图方面相对具有优势,更容易建立“稠密”地图。

3)SLAM定位实现中,基于单目的方案其计算量也要比基于双目/RGBD要大,且因为引入了三角测量部分,对于环境适应性较差。

所以在选型方面,我们主要聚焦在双目/RGBD类型;同时为了加快开发进程,若选择能够提供开发SDK等工具的厂家,则可以省去对于相机的标定、数据同步等开发工作。

版权声明:本文仅做学术分享,未经授权请勿二次传播,版权归原作者所有,若涉及侵权内容请联系删文。

3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。

点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~

也可移步微信关注官方公众号 3D视觉开发者社区 ,获取更多干货知识哦!

视觉SLAM开源方案汇总及设备选型建议相关推荐

  1. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析

    来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...

  2. 视觉SLAM总结——视觉SLAM面试题汇总

    视觉SLAM总结--视觉SLAM面试题汇总 视觉SLAM总结--视觉SLAM面试题汇总 1. SIFT和SUFT的区别 2. 相似变换.仿射变换.射影变换的区别 3. Homography.Essen ...

  3. 60项基于深度学习的SLAM顶会开源方案汇总(上篇)

    点击进入->3D视觉工坊学习交流群 0. 笔者个人体会 深度学习结合SLAM是近年来很热门的研究方向,也因此诞生了很多开源方案.笔者最近在阅读SLAM综述论文"A Survey on ...

  4. 语义SLAM开源代码汇总

    作者丨Moonkissu@知乎 来源丨https://zhuanlan.zhihu.com/p/64825421 编辑丨3D视觉工坊 之前做的深度学习闭环检测 这方面,最近想了解下语义这方面,于是总结 ...

  5. 视觉SLAM面试题汇总(三)

    北京某自动驾驶公司: 1. 点云的聚类:求法向量:多个点集,求点集的法向量: 2. LM算法里面lamda的作用: 3. KD-Tree 4. 描述子距离的匹配的方法?除了暴力匹配还有什么方法?(提示 ...

  6. slam特征点深度 svd_【干货】视觉SLAM面试题汇总(第二部分)

    小伙伴们大家好!上期我们已经放送了第一部分slam面试题库接下来就是第二部分福利时间啦~ 26. 除了RANSAC之外,还有什么鲁棒估计的方法? 27. 3D地图点是怎么存储的?表达方式? 28. 给 ...

  7. 如何从零开始系统化学习视觉SLAM?

    由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...

  8. 激光slam与视觉slam

    文章目录 介绍 前端差异 后端优化 回环检测 视觉/激光优劣势对比 开源算法 视觉slam开源算法 激光slam开源算法 其他开源代码地址参考 知识点 激光雷达的参数定义 深度摄像头会不会取代雷达 结 ...

  9. 2022最新SLAM面试题汇总(持续更新中)

    目前机器人SLAM问题是一个非常值得研究的方向,在未知环境中,首先要通过SLAM技术获得环境的地图,然后才能进行导航.这个方向是近几年比较新的研究方向,相关的机器人公司以及研究机器人的大厂也很需要SL ...

最新文章

  1. java在主程序修改函数输出,Java通过JNI调用CUDA
  2. g11 android 4.4,HTC G11 Incredible S 稳定流畅Android4.0.4华丽体验Sense4.1 省电耐用
  3. 政府工作报告:让更多科研人员可以“十年磨一剑”
  4. 算法系列之图--DFS
  5. 3种更新vCenter Server Appliance 6.5的方法
  6. 关于ArcGIS动态图层空间内栅格数据,JS前端显示颜色不正确的解决方案
  7. MEMCACHE分布式算法(PHP)
  8. hive-2.3.3安装指北
  9. MYSQL中TRUNCATE和DELETE的区别
  10. 疯狂的程序员 31-40
  11. 基于Web的代码编辑器 Ace的使用
  12. Java获取本机外网ip地址的方法
  13. yudian温控表a1温度怎么补偿_厦门宇电yudian温控表AI-516/516P型人工智能温度调节器控制器-恩莱自动化官网...
  14. c语言中数的表示 叙述正确,关于C语言中数的表示,以下叙述正确的是(
  15. 网络电话除了打电话还能用来做什么?
  16. 织梦CMS建站入门学习(一)
  17. 宣武医院:让物联网为智慧医疗添翼
  18. Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群
  19. 微机原理与接口技术——A.微型计算机基础(4)
  20. 抗混叠滤波器 - 差分输入ADC的前端抗混叠RC滤波器设计实现

热门文章

  1. ossec支持mysql数据库_开源入侵检测工具ossec安装配置(HIDS)
  2. MySQL提权——udf提权
  3. 文本选择毒战:我的过度阐释
  4. 教程丨手把手教你做数据挖掘 !(附教程数据源)
  5. 网页在线 运行 html 代码
  6. 微博运营怎么做才能吸引更多的粉丝?
  7. 简单总结协程Coroutine及Yield常见用法
  8. vue + echarts 之饼形图
  9. Windows BitLocker驱动器加密
  10. BitLocker解锁之后加锁