当前的开源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 |
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方案的更多相关文章
- 开源SLAM
GitHub 上优秀的开源SLAM repo (更新中):https://www.jianshu.com/p/464ca0d0c254 当前的开源SLAM方案:https://www.cnblogs. ...
- 83 项开源视觉 SLAM 方案够你用了吗?
作者:吴艳敏 来源:83 项开源视觉 SLAM 方案够你用了吗? 前言 1. 本文由知乎作者小吴同学同步发布于https://zhuanlan.zhihu.com/p/115599978/并持续更新. ...
- Google开源SLAM软件cartographer中使用的UKF滤波器解析
在Google开源SLAM软件cartographer中,相对<SLAM for dummies>使用了更为复杂.性能更好的Scan匹配与UKF算法,这里简单介绍下cartographer ...
- 文档在线预览开源实现方案一:OpenOffice + SwfTools + FlexPaper
在文档在线预览方面,项目组之前使用的是Microsoft office web apps, 由于该方案需要按照微软License付费,项目经理要我预研一个文档在线预览的开源实现方案.仔细钻入该需求发现 ...
- GitHub 上优秀的开源SLAM repo (更新中)
GitHub 上优秀的开源SLAM repo (更新中) 欢迎 watch/star/fork 我们的 GitHub 仓库: Awesome-SLAM, 或者follow 项目的主页:Awesome- ...
- 即插即用,基于阿里云Ganos快速构建云上开源GIS方案
对于轻量级GIS应用,选择具备时空能力的云上数据库再搭配开源GIS软件,能够快速构建稳定.廉价.实用的GIS解决方案.Ganos是阿里云自研时空基础设施(PaaS层)的核心引擎,该引擎整合了云上异构计 ...
- 文档在线预览开源实现方案三:OpenOffice + PDFRenderer + js
之前的方案无法很好地解决异构平台及不同浏览器的兼容性问题,如方案一需要客户端浏览器支持flash而移动端浏览器无法支持这点,虽然移动端浏览器支持方案二,但是一些老版本的IE浏览器无法支持,例如IE8就 ...
- 文档在线预览开源实现方案二:OpenOffice + pdf.js
文档在线预览的另一种实现方式采用的技术栈是OpenOffice + pdf.js, office文档转换为pdf的工作依然由OpenOffice的服务来完成,pdf生成后我们不再将其转换为其他文件而是 ...
- 部分开源gis 方案的比较
3.1MapServer和GeoServer的总体对比 功能上:MapServer弱于GeoServer,QGIS要强于UDIG. 效率上:Mapserver对WMS(Web Map service) ...
随机推荐
- 10:处理 json
json 通用的数据类型, 所有的语言都认识.json 是字符串.key-value 必须使用双引号1. loads() 和 dumps() 的使用 json.loads() 将 json 字符串转换 ...
- 1.ECS(CentOS7)主机名修改命令
命令:hostnamectl 使用--help参数查看hostnamectl里面每个参数对应的含义: [root@localhost ~]# hostnamectl --help Query or c ...
- splunk + docker-compose 实现自定义 index
splunk是一款非常优秀的运维管理平台.Splunk 是机器数据的引擎.使用 Splunk 可收集.索引和利用所有应用程序.服务器和设备生成的快速移动型计算机数据 . 使用 Splunking 处理 ...
- python抽象方法
1.抽象方法的概念 之前我们定义一个基类的时候,如果要求子类必须重写父类中的某一个方法,可以这样做: 定义一个名为Pizza的基类,让其get_radius方法必须被子类继承 class Pizza( ...
- ArcGIS 10安装及破解
1.下载 ArcGIS 10 安装程序及破解文件后面提供电驴的下载地址(可以使用迅雷.QQ旋风等下载工具下载),下载文件是一个光盘镜像文件:? ArcGIS_Desktop10_122519.iso. ...
- 利用python操作redis-cluster
In [8]: def redis_cluster(): ...: redis_nodes = [{'host':'192.168.100.60','port':7000}, ...: {'host' ...
- 关于池化(pooling)理解!!!
网上看到一个池化的解释是: 为了描述大的图像,可以对不同位置的特征进行聚合统计,如计算平均值或者是最大值,即mean-pooling和max-pooling 我的想法是,图像做卷积以后,将图像信息(特 ...
- Delphi 语言
自1995年Borland公司发布Delphi 1.0以来,Delphi受到很多开发者的亲睐,到1999年发布Delphi5,Delphi以其开发快捷.控件丰富.易于上手等优势吸引了众多的开发者,用户 ...
- 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...
- linux下面设置密码失效参考
chage -E 2005-12-31 user1 设置用户口令的失效期限