开源视觉salm算法介绍

当前的开源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-MAPRGB-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等,都是研究者感兴趣并发力的地方。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记(27):Python网络编程并发编程-GIL与多线程

立即学习:https://edu.csdn.net/course/play/24458/296444?utm_sourceblogtoedu GIL与多线程 1.须知: 1)cpu主要是为了提升计算性能,增加CPU提升计算性能; 2)每一个CPU一旦遇到阻塞状态都会处于等待状态&#xff0c…

J0ker的CISSP之路:复习-Access Control(3)

本文同时发表在:[url]http://netsecurity.51cto.com/art/200801/63649.htm[/url] 在《J0ker的CISSP之路》系列的上一篇文章里,J0ker给大家介绍了访问控制CBK里面一些常见的破坏信息资产保密性的威胁类型,那么什么类型的威胁会破坏信息资产的完…

最优化课堂笔记01: 第一章 最优化的基本概念

第一章 最优化的基本概念 1.最优化求解的数学模型建立 2.例题(考试第一大题:数学模型建立) 解析:优化变量、目标函数(一般取最小化)、约束条件 注意: 1)约束条件一般形式为&#…

EIGRP非等价负载均衡

1、等价负载均衡 当到达目的地有多条路径时,而有多条路径的metric值一样,这时就可以做等价负载均衡,让数据包均衡转发,不过要看该路由器的转发方式,如果是快速转发方式,这种方式无用(本地产生的…

ubuntu100%快速安装搜狗输入法

1、进入搜狗官方网站,下载最新版本的for ubuntu输入法deb安装包 2、下载完成以后,进入下载好的文件目录,在空白处点击鼠标右键,打开终端 在终端窗口输入如下的指令开始安装搜狗拼音输入法。 #sudo dpkg -i sogoupinyin_2.2.0.01…

最优化课堂笔记02:第二章 线性规划

第二章 线性规划(重点:单纯形法) 1.线性规划问题及其模型(重点:标准形式) 题型:是否为标准形式?不是的话化为标准形式! 1)问题的提出 提出问题&#xff1…

客户端是选择Java Swing还是C# Winform

登录 | 注册 mentat的专栏 目录视图摘要视图订阅【专家问答】韦玮:Python基础编程实战专题 【知识库】Swift资源大集合 【公告】博客新皮肤上线啦 快来领福利:C币、机械键盘 客户端是选择Java Swing还是C# Winform 标签: swi…

学习笔记(28):Python网络编程并发编程-死锁与递归锁

立即学习:https://edu.csdn.net/course/play/24458/296445?utm_sourceblogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只能被获得(acquire)一次,要想再次获得必须释放后才能获得 1)死锁情况…

VScode 快速更改编码格式

1、view下的 Cmmand Palette 下的Change file Encoding simplifiled chinese GB2312

iostat

r/s: 每秒读取的请求数。 w/s: 每秒写入的请求数。 Avgqu-sz: 平均I/O队列长度 Await:平均每次设备I/O操作的等待时间(毫秒) Svctm:平均每次设置I/O操作的服务时间(毫秒),Svctm越接近Await则说明等待时间少 %util:表示设备的繁忙程度,80%表示设备设备已经…

学习笔记(29):Python网络编程并发编程-信号量

立即学习:https://edu.csdn.net/course/play/24458/296446?utm_sourceblogtoedu 信号量(了解):也是一把锁semaphore 1. from threading import Thread,Semaphore,currentThread import time#定义信号量(3把锁) sm Semaphore(3)def task()…

Ajax基础2

什么是服务器 网页浏览过程的分析 如何配置自己的服务器程序(AMP) 什么是Ajax 无刷新数据读取 异步,同步 Ajax基础(2) 使用Ajax 基础请求显示txt的文件 字符集编码 缓存,阻止缓存 动态数据,请求js或(json&a…

学习笔记(30):Python网络编程并发编程-Event事件

立即学习:https://edu.csdn.net/course/play/24458/296447?utm_sourceblogtoedu threading.Event事件 1.概念及功能:主要是完成线程之间的通信,将另一个线程的运行状态通知给另一个线程 2.使用场景: 1)客户端运行时等待服务器启…

vs2012 与 win7 不兼容的问题

我用的是win7 64位系统,所以安装位置那里是“C:\Program Files (x86)”,多了个(x86)。 百度搜索到园子里的师兄给的解决办法http://www.cnblogs.com/mumuliang/archive/2013/08/20/3270628.html 装这个补丁: Update for Microsoft Visual Stu…

Scrum方法论(四)

本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/1358371,如需转载请自行联系原作者

学习笔记(32):Python网络编程并发编程-线程queue

立即学习:https://edu.csdn.net/course/play/24458/296449?utm_sourceblogtoedu 线程queue 一:Queue先进先出 1.queue.Queue(n):创建一个最大容量为n的队列 2.queue.Queue(n).put():添加元素 3.queue.Queue(n).get():取元素 4.put()和get(),默认阻塞状态为True&am…

gulp配置实现修改js、css、html自动刷新

写在前面: 本配置支持es6、less、react 1.首先 给出初始的目录结构 给出执行gulp后的目录结构 给出执行gulp --p后的目录结构 2.package.json里是一个写入。文件描述了npm包的相关配置信息(作者、简介、包依赖等)和所需模块。 {"name&qu…

作为程序员之正则表达式

目录 正则表达式基础语法标准字符集合自定义的字符集合多行、单行模式高级语法选择符和分组反向引用预搜索/零宽断言例子匹配邮箱正则表达式 基础语法 标准字符集合 \D 和[^\d]意思一样,就是与 \d 相反 REG意义\ddigital表示 0 到 9 之间任意的一个数字\wworld表示任…

javascript 的dateObj.getTime() 在为C#的获取方式

publicstringGetTime() { Int64 retval 0; DateTime st newDateTime(1970, 1, 1); TimeSpan t (DateTime.Now.ToUniversalTime() -st); retval (Int64)(t.TotalMilliseconds 0.5); returnretval.ToString(); } 在Net中的实际测试代码 MSScriptControl.Scri…

Jmeter服务器监控插件使用

Jmeter服务器监控插件使用 Jmeter-Plugins支持CPU、Memory、Swap、Disk和Network的监控,在测试过程中更加方便进行结果收集和统计分析。 一、准备工作: 1、下载Jmeter-Plugins插件,下载Server端ServerAgent插件; 2、解压Jmeter-Pl…