当前的开源SLAM方案

开源方案 传感器形式 地址链接
MonoSLAM 单目 https://github.com/hanmekim/SceneLib2 
PTAM 单目  http://www.robots.ox.ac.uk/~gk/PTAM/
ORB-SLAM  单目为主 http://webdiis.unizar.es/~raulmur/orbslam/
ORB-SLAM2 单目 https://github.com/raulmur/ORB_SLAM2
LSD-SLAM 单目为主

http://vision.in.tum.de/research/vslam/lsdslam

https://github.com/tum-vision/lsd_slam

 SVO 单目  https://github.com/uzh-rpg/rpg_svo 
 RTAB-MAP RGB-D/双目 https://github.com/introlab/rtabmap 
 OKVIS 多目+IMU  https://github.com/ethz-asl/okvis 
ROVIO 单目+IMU  https://github.com/ethz-asl/rovio

【1】2007---MonoSLAM  (单目-滤波)

背景:说到视觉SLAM,很多研究者第一个想到的就是A.J.Davison的单目SLAM工作,他2007年提出的MonoSLAM是第一个实时的单目视觉SLAM系统。

  • Davison, A. J., et al. "MonoSLAM: real-time single camera SLAM. " IEEE Transactions on Pattern Analysis & Machine Intelligence29.6(2007):1052.
  • Davison, Andrew J. "Real-Time Simultaneous Localisation and Mapping with a Single Camera." IEEE International Conference on Computer Vision IEEE Computer Society, 2003:1403.

特点:扩展卡尔曼滤波为后端,追踪前端非常稀疏的特征点。

意义:之前的SLAM系统基本不能在线运行,只能靠机器人携带相机采集数据,再离线的定位和建图。

现在看来,应用场景窄,已经停止对其开发。

【2】2007---PTAM  (单目 -非线性优化)

背景:2007年,Klein等人提出了PTAM (Parallel Tracking and Mapping)

  • Murray, Dw, and G. Klein. "Parallel tracking and mapping for small AR workspaces." (2007):1-10.

意义:实现了跟踪与建图过程的并行化;第一个使用非线性优化,而不是使用传统的滤波器作为后端的方案。引入了关键帧机制,不必精细的处理每幅图像,而是把几个关键图像串起来,然后优化其轨迹和地图,在PTAM之后,视觉SLAM转向以非线性优化为主导的后端。

PTAM同时是一个增强现实软件,演示了炫酷的AR效果。根据PTAM估计的相机位姿,我们可以在一个虚拟的平面上放置虚拟物体,看起来就跟真实的场景中一样。

【3】2015---ORB-SLAM  (单目为主-特征点-图优化)

背景:ORB-SLAM 是PTAM的继承者中非常有名的一位。提出于2015年,是现代SLAM系统中做得非常完善的系统之一。

  • Mur-Artal, Raúl, J. M. M. Montiel, and J. D. Tardós. "ORB-SLAM: A Versatile and Accurate Monocular SLAM System." IEEE Transactions on Robotics 31.5(2015):1147-1163.

优点:(1)支持单目、双目、RGB-D三种模式;

(2)整个系统围绕ORB特征进行计算,包括视觉里程计与回环检测ORB字典。ORB特征不像SURF或SIFT费时,可在CPU上实时计算;相比Harris等简单角点特征,又具有良好的旋转和缩放不变性;ORB提供描述子,使在大范围运动时能够回环检测和重定位。

(3)ORB的回环检测是它的亮点,优秀的回环检测算法保证了ORB-SLAM有效的防止累计误差,并且在丢失后还能迅速找回。为此,ORB-SLAM在运行前需要加载一个很大的ORB字典文件。

(4)ORB创新使用了3个线程完成了SLAM:实时跟踪特征点的Tracking线程,局部Bundle Adjustment的优化线程(俗称小图),全局Pose Graph的回环检测与线性优化(俗称大图。)

Tracking线程:对每幅新来的图像提取ORB特征点,并与最近的关键帧进行比较,计算特征点的位置并粗略的估计相机位姿。

小图线程:求解一个Bundle Adjustment问题,包括局部空间内的特征点与相机位姿,负责求解更精细的相机位姿与特征点空间位置。前面的这两个线程完成了比较好的视觉里程计。

大图线程:对全局的地图与关键帧进行回环检测,消除累积误差。由于全局中地图点太多了,所以优化不包括地图点,只有相机位姿组成的位姿图。   【可详细了解:http://www.cnblogs.com/Jessica-jie/p/7281944.html】

(5)ORB围绕特征点进行了不少优化。

缺点:由于整个 SLAM系统采用特征点进行计算,对每幅图像都计算一遍ORB特征,是非常耗时的;ORB-SLAM的三线程结构给CPU带来了较大的负担;ORB-SLAM的建图为稀疏矩阵点,目前还没有开放存储和读取地图后重新定位的功能,稀疏特征点地图只能满足我们对定位的需求,而无法提供导航、避障、交互等功能。

【4】2014---LSD-SLAM [Large Scale Direct monocular SLAM]    (单目-直接法)         http://www.sohu.com/a/166136329_715754

背景:是J.Engle等人于2014年提出的SLAM工作,标志着单目直接法在SLAM中的成功应用。其核心贡献是将直接法应用到半稠密的单目SLAM中,不需要计算特征点,还能构建半稠密地图。(半稠密:估计梯度明显的像素位置)

  • Engel, Jakob, T. Schöps, and D. Cremers. "LSD-SLAM: Large-Scale Direct Monocular SLAM." 8690(2014):834-849.
  • Engel, Jakob, and D. Cremers. "Semi-dense Visual Odometry for a Monocular Camera." IEEE International Conference on Computer VisionIEEE Computer Society, 2013:1449-1456.

优点:(1)LSD-SLAM的直接法是针对像素进行的。

(2)LSD-SLAM在CPU上实现了半稠密场景的重建,这在之前的方案中很少见。基于特征点的方法只能是稀疏的,而进行稠密重建的方案大多要使用RGB-D传感器,或者使用GPU构建稠密地图。

(3)LSD-SLAM的半稠密追踪使用了一些精妙的手段保证追踪的实时性与稳定性。例如,LSD-SLAM既不是利用单个像素,也不是利用图像块,而是在极线上等距取5个点,度量其SSD;在深度估计时,LSD-SLAM首先用随机数初始化深度,在估计完后又把深度均值归一化,以调整尺度;在度量深度不确定时,不仅考虑三角化的几何关系,而且考虑了极限与深度的夹角,归纳成一个光度不确定性项;关键帧之间的约束使用了相似变换群,在后端优化中可以将不同尺度的场景考虑进来,减小了尺度漂移现象。

半稠密地图建模了灰度图中有明显梯度的部分,显示在地图上,很大一部分都是物体的边缘或表面上带纹理的部分。LSD-SLAM对它们进行跟踪并建立关键帧,最后优化得到这样的地图,看起来比稀疏的地图具有更多的信息,但又不像稠密地图那样拥有完整的表面。

缺点:由于LSD-SLAM使用了直接法进行跟踪,所以它既有直接法的优点(对特征缺失区域不敏感),也继承了直接法的缺点。例如,LSD-SLAM对相机内参和曝光非常敏感,并且在相机快速运动时容易丢失。在回环检测部分,由于目前没有基于直接法的回环检测方式,因此LSD-SLAM必须依赖于特征点方法进行回环检测,尚未完全摆脱特征点的计算。

【5】2014---SVO[Semi-direct Visual Odoemtry]  (单目-半直接法)

背景:是Forster等人于2014年提出的一种基于稀疏直接法(半直接法)的视觉里程计。特征点法与直接法混用---SVO跟踪了一些关键点(角点,没有描述子),然后直接法那样,根据关键点周围的信息(4*4的小块进行块匹配)估计相机的运动及其位置。

  • Forster, Christian, M. Pizzoli, and D. Scaramuzza. "SVO: Fast semi-direct monocular visual odometry." IEEE International Conference on Robotics and Automation IEEE, 2014:15-22.

优点:相比其他方案,最大的优点就是速度快。由于使用稀疏的直接法,既不用费力去计算描述子,也不必处理稠密和半稠密那么多信息,因此在低端计算平台上也能达到实时性,适用于无人机。SVO的另一创新之处:提出了深度滤波器概念,并推导了基于均匀-高斯混合分布的深度滤波器。SVO将这种滤波器用于关键点的位置估计,并使用了逆深度作为参数化形式,使之能更好的计算特征点位置。

开源版的SVO代码清晰易读,适合读者作为第一个SLAM实例进行分析。但它也存在一些问题:

(1)由于目标应用平台为无人机的俯视相机,其视野内的物体主要是地面,而且相机的运动主要是水平和上下移动,SVO的许多细节是围绕这个应用设计的,这使得它在平视相机中表现不佳。

(2)SVO为了速度和轻量化,舍弃了后端优化和回环检测部分,也基本没有建图功能。这意味着SVO的位姿估计必然存在累积误差,而且丢失后不太容易进行重定位(因为没有描述子用来回环检测)。

【6】RTAB-MAP    RGB-D传感器上的SLAM方案

背景:RTAB-MAP (Real Time Appearance-Based Mapping)是RGB-D SLAM中比较经典的方案。它实现了RGB-D SLAM中所以应该有的东西:基于特征的视觉里程计、基于词袋的回环检测、后端的位姿图优化,以及点云和三角网格地图。RTAB-MAP支持一些常见的RGB-D和双目传感器,像kinect、Xtion等,且提供实时的定位和建图功能。不过由于集成度较高,更适合作为SLAM应用而非研究。

  • Labbé, Mathieu, and F. Michaud. "Online global loop closure detection for large-scale multi-session graph-based SLAM." Ieee/rsj International Conference on Intelligent Robots and Systems IEEE, 2014:2661-2666.

优点:相比于单目和双目,RGB-D SLAM的原理要简单很多,而且能在CPU上实时建立稠密的地图。

扩展:  

【1】 OKVIS---提出了一种紧耦合、基于非线性优化的IMU与多目视觉的实时融合方法,属于VIO(Visual Inertial Odometry),通过视觉融合IMU做里程计。

http://blog.csdn.net/fuxingyin/article/details/53368649---okvis理论

http://blog.csdn.net/fuxingyin/article/details/53428523---okvis代码

  • Stefan L, Simon L, Michael B and Roland S . "Keyframe-based visual-inertial odometry using nonlinear optimization." International Journal of Robotics Research34.3(2015):314-334.

【2】ROVIO---紧耦合、提出了一种基于EKF的IMU与单目视觉的融合方法;基于图像块的滤波实现的VIO。

http://www.cnblogs.com/shhu1993/p/7003670.html

  • Bloesch Michael, et al. "Robust visual inertial odometry using a direct EKF-based approach." Ieee/rsj International Conference on Intelligent Robots and Systems IEEE, 2015:298-304.

未来的SLAM话题:

SLAM将来的发展趋势有两大类:一是朝轻量级、小型化方向发展,让SLAM能够在嵌入式或手机等小型设备上良好运行,然后考虑以它为底层的应用。另一方面是,利用高性能计算设备,实现精密的三维重建、场景理解等功能。在这些应用中我们的目的是完美的重建场景,由于可以利用GPU,所以这个方向和深度学习有结合点。

【1】视觉+惯性导航SLAM

惯性传感器(IMU)能够测量传感器本体的角速度和加速度,被认为与相机传感器有明显的互补性。

(1)IMU虽然可以测得角速度和加速度,但是这些都存在明显的漂移,使得积分两次得到的位姿数据非常不可靠。但是,对于短时间内的快速运动,IMU能提供一些较好的估计,这正是相机的弱点。当相机运动过快时,相机会出现运动模糊,或者两帧之间重叠区域太少以至于无法进行特征匹配,所以纯视觉的SLAM很怕快速运动。有了IMU,即使在相机无效的那段时间内,我们也能保持一个较好的位姿估计。

(2)相比于IMU,相机数据基本不会有飘移,相机数据可以有效的估计并修正IMU读数中的飘移。

(3)当图像发生变化时,本质上我们没法知道是相机自身发生了运动,还是外界条件发生了变化,所以纯视觉SLAM难以处理动态的障碍物。而IMU能感受到自身的运动信息,某种程度上减轻动态物体的影响。

虽然说起来比较简单,但是无论在理论还是实践上VIO(Visual Inertial Odometry)都是相当复杂的。目前VIO框架定位两大类:松耦合---IMU和相机分别进行自身的运动估计,然后对其位姿估计进行融合;紧耦合---把IMU的状态和相机状态合并在一起,共同构建运动方程和观测方程,然后进行状态估计。紧耦合理论可分为基于滤波和基于优化两个方向。滤波方面---MSCKF(Multi-State Constraint KF);优化方面---尽管在纯视觉SLAM中优化方案占了主流,但在VIO中由于IMU的数据频率非常高,对状态优化需要的计算量就更大了,因此目前处于滤波和优化并存的阶段。

【2】语义SLAM

SLAM与深度学习技术结合。(语义分割是深度学习图像处理方面的有一个发展方向,与目标检测很相似)

【3】除此之外,基于线/面特征的SLAM、动态场景下的SLAM、多机器人的SLAM等,都是研究者感兴趣并发力的地方。

开源视觉salm算法介绍相关推荐

  1. 开源算法介绍「AnimeGANv2」(人脸转化

    目录 效果图: 介绍 使用 最近闲来无事,看到了一个开源的有趣算法,给大家介绍一下! 这个是人脸转化为漫画效果的算法,具体后面会说哦- 效果图: 第一组: 第二组: 第三组: 第四组: 第五组: 怎么 ...

  2. 人脸检测算法_目前最强!开源人脸检测算法:RetinaFace

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  3. java开源图像处理ku_83 项开源视觉 SLAM 方案够你用了吗?

    原标题:83 项开源视觉 SLAM 方案够你用了吗? 公众号:3D视觉工坊 主要关注:3D视觉算法.SLAM.vSLAM.计算机视觉.深度学习.自动驾驶.图像处理以及技术干货分享 运营者和嘉宾介绍:运 ...

  4. 八种常用激光雷达和视觉SLAM算法的评估与比较

    文章:Evaluation and comparison of eight popular Lidar and Visual SLAM algorithms 作者:Bharath Garigipati ...

  5. OpenCV与Open3D等开源视觉库的详细笔记

    开源视觉库,从二维(2D)逐步发展到三维(3D)并已经日益成熟.OpenCV版本为4.1.2+,Open3D版本为0.8+. OpenCV: OpenCV(开源计算机视觉库)是一个开源计算机视觉和机器 ...

  6. RetinaFace最强开源人脸识别算法

    最近这几天,美国国家标准与技术研究院(NIST)公布了全球最权威的人脸识别算法测试(FRVT)的最新结果, 国内知名视觉算法公司格灵深瞳取得了优异成绩:在最具挑战的"非约束性自然环境人脸照片 ...

  7. 拐点检测常用算法介绍

    前言 最近在学习拐点检测的相关问题, 发现 C.Truong 的论文 对拐点检测的整个流程和目前主流的一些算法介绍的比较清楚,所以在这里进行了一些记录以及总结,并且对 Truong 发布的 ruptu ...

  8. VIO主流SOTA算法介绍

    1.概述 VIO(Visual-Inertial Odometry视觉惯性里程计)即结合相机与惯性测量单元IMU实现局部状态如位置.姿态.速度.路标点的最优状态估计.完整的SLAM系统还包括闭环检测( ...

  9. 改进型 clock 页面置换算法实现_ID生成算法雪花算法介绍及实现

    1. SnowFlake 算法介绍 雪花算法是由 Twitter 公司开源的可在分布式系统中产生一个全局唯一 ID 的算法.最初 Twitter 把存储系统从 MySQL 迁移到 Cassandra, ...

最新文章

  1. Windows server 2008 iis7/iis7.5启用父路径的方法
  2. lambda表达式的使用 || Lambda Express 口诀: 拷贝小括号,写死右箭头,落地大括号||default || @FunctionalInterface||静态方法实现
  3. 从并发视角来看智能合约(上)【渡鸦论文系列】
  4. php反转数字_【PHP】php实现数组反转
  5. win7下搭建小程序服务器,技术开发人员告诉你微信小程序怎么做
  6. 函数c语言桶排算法,C语言基本排序算法之桶式排序实例
  7. 美图回应与华为合作:华为没有使用美图的任何影像技术
  8. 对联广告(jQuery)
  9. asp.net 返回表单json数据 辅助类
  10. spring下配置dbcp,c3p0,proxool
  11. STM32 F103 时钟树详解
  12. Editplus 3添加edtool插件文档
  13. 通用文档信息提取模型浅析
  14. Element-UI下拉框select实现拼音搜索
  15. lua 的斗地主逻辑算法
  16. linux的内存available,Linux中available内存的计算
  17. 笔杆网试用---功能篇(一)
  18. serverless-OpenWhisk安装
  19. # Windows下关于安装Geany编辑器过程中的一点小发现(可能对初次安装的人有用)
  20. html5及CSS的学习2

热门文章

  1. vue中config/index.js:配置的详细理解
  2. 操作系统原理之文件系统(第五章)
  3. 新版本微信导致的ios表单bug
  4. springMvc 注解@JsonFormat 日期格式化
  5. YTU 2924: 文件操作--二进制文件读入
  6. JavaScript URL参数读取
  7. 06 事件处理函数绑定与事件对象
  8. iPhone屏幕各种尺寸分辨率(更新至XS)
  9. Python并发编程之concurrent.futures
  10. CCNP精粹系列之十八--路由映射实战二,博主推荐文章