开源方案 传感器形式 地址链接
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等,都是研究者感兴趣并发力的地方。

当前的开源SLAM方案的更多相关文章

  1. 开源SLAM

    GitHub 上优秀的开源SLAM repo (更新中):https://www.jianshu.com/p/464ca0d0c254 当前的开源SLAM方案:https://www.cnblogs. ...

  2. 83 项开源视觉 SLAM 方案够你用了吗?

    作者:吴艳敏 来源:83 项开源视觉 SLAM 方案够你用了吗? 前言 1. 本文由知乎作者小吴同学同步发布于https://zhuanlan.zhihu.com/p/115599978/并持续更新. ...

  3. Google开源SLAM软件cartographer中使用的UKF滤波器解析

    在Google开源SLAM软件cartographer中,相对<SLAM for dummies>使用了更为复杂.性能更好的Scan匹配与UKF算法,这里简单介绍下cartographer ...

  4. 文档在线预览开源实现方案一:OpenOffice + SwfTools + FlexPaper

    在文档在线预览方面,项目组之前使用的是Microsoft office web apps, 由于该方案需要按照微软License付费,项目经理要我预研一个文档在线预览的开源实现方案.仔细钻入该需求发现 ...

  5. GitHub 上优秀的开源SLAM repo (更新中)

    GitHub 上优秀的开源SLAM repo (更新中) 欢迎 watch/star/fork 我们的 GitHub 仓库: Awesome-SLAM, 或者follow 项目的主页:Awesome- ...

  6. 即插即用,基于阿里云Ganos快速构建云上开源GIS方案

    对于轻量级GIS应用,选择具备时空能力的云上数据库再搭配开源GIS软件,能够快速构建稳定.廉价.实用的GIS解决方案.Ganos是阿里云自研时空基础设施(PaaS层)的核心引擎,该引擎整合了云上异构计 ...

  7. 文档在线预览开源实现方案三:OpenOffice + PDFRenderer + js

    之前的方案无法很好地解决异构平台及不同浏览器的兼容性问题,如方案一需要客户端浏览器支持flash而移动端浏览器无法支持这点,虽然移动端浏览器支持方案二,但是一些老版本的IE浏览器无法支持,例如IE8就 ...

  8. 文档在线预览开源实现方案二:OpenOffice + pdf.js

    文档在线预览的另一种实现方式采用的技术栈是OpenOffice + pdf.js, office文档转换为pdf的工作依然由OpenOffice的服务来完成,pdf生成后我们不再将其转换为其他文件而是 ...

  9. 部分开源gis 方案的比较

    3.1MapServer和GeoServer的总体对比 功能上:MapServer弱于GeoServer,QGIS要强于UDIG. 效率上:Mapserver对WMS(Web Map service) ...

随机推荐

  1. unity WegGL 调用js

    test.jslib文件,必须放到Assets/Plugins下,这里是:Assets/Plugins/WebGL mergeInto(LibraryManager.library, { Hello: ...

  2. Haskell语言学习笔记(86)字符串格式化与插值

    String 的格式化 Text.Printf 这个模块用来处理字符串格式化. printf :: PrintfType r => String -> r printf 用于格式化字符串, ...

  3. python在DWR框架下的post

    使用requests.post,但一直要在headers中设置相应的Content-Type和Referer # coding=utf-8 import urllib2 import requests ...

  4. 我理解的BFC(块级格式化上下文)

    BFC(Block formatting context) 直译为"块级格式化上下文". BFC它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Bl ...

  5. 局部变量and全局变量

    局部变量 <1>什么是局部变量 如下图所示: <2>小总结 局部变量,就是在函数内部定义的变量 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响 局部变量的作 ...

  6. 学JS的心路历程-Promise(二)

    昨天有说到Promise的创建以及then的用法,今天我们来看错误处理. then onRejected 我们昨天有提到说,then两个函式参数,onFulfilled和onRejected,而onR ...

  7. php mysql 查询判断周几

    $where .= " and (DAYOFWEEK( from_unixtime(`px_time`, '%Y-%m-%d')) = 1)";  //周日从1开始

  8. pyhanlp python 脚本的demo补充

    java demo https://github.com/hankcs/HanLP/tree/master/src/test/java/com/hankcs/demo github python de ...

  9. 径向模糊(Radial Blur)

    [径向模糊(Radial Blur)] 径向模糊,是一种从中心向外呈幅射状的逐渐模糊的效果,在图形处理软件photoshop里面也有这个模糊滤镜.而在游戏中常常用来模拟一些动感的效果,如鬼泣4中的场景 ...

  10. json转换工具类:json<===>list或者对象

    public class JsonTools { /** * POJO 转 JSON */ public static String createJsonString(Object object) { ...