/***********************************************************************************************************

.....从前,一种叫WALL-E的小机器人被送往地球清除垃圾,但WALL-E并不适合地球的环境,大批量地来也大批量地坏,最后只剩下WALL Tang还在日复一日的按照程序收拾废品。就这么过了几百年,仅存的WALL Tang还在垃圾堆里淘到不少人造宝贝,它也开始有了自我意识,懂得什么是孤独。有一天一艘飞船突然降落,一个女机器人Candy来到地球执行搜寻任务,捡垃圾的机器人“爱”上了Candy,自此他决定跟随Candy远离地球。然而,以前WALL Tang的两只眼睛是两个固定的RGB相机,通过视觉算法(SFM)自动计算垃圾和自己的距离。这几年来,因为老化问题,它有一只眼睛已经看不见东西了,庆幸的是,它从垃圾堆里面捡到一种叫做深度相机的东西,它可以通过机构光,TOF或者激光扫描的方式直接计算自己和前面东西的位置。 就这样为了更好的适应这对新的眼睛实现私奔计划,WALL TANG潜心研究,志在用一只RGB眼睛和一只深度(depth)眼睛来进行高精度定位,搞清楚自己到底在哪,自己旁边都有神马,自己怎么走出去。

多年以后,当WALL TANG站在多普拉多星球俯视地球上堆积如山的垃圾堆的时候,才知道这种定位技术叫做机器人定位与制图(SLAM)技术,自此,WALL TANG走上了教书育人的道路,势必要把这项技术发扬传承。那么接下来就让WALL TANG 讲讲RGB-D SLAM 涉及到的硬件和关键吧。

*********************************************************************************************************/

1) 硬件部分

目前用在SLAM上的Sensor主要分两大类,激光雷达(单线阵,多线阵), RGB相机(单目,双目,多目)(这一部分就不详细介绍了),另一类为近年来新兴的RGB-D传感器(如微软的Kinect,Primer Sense的Structure Sensor),通过价格低廉,实时,以及可接受的量测精度打入室内建模市场, 其深度相机主要是以结构光原理进行成像,通常具有激光投射器、光学衍射元件(DOE)、红外摄像头三大核心器件。它可以同时产生RGB图像和深度图像,如下图所示,工作机制和视频流类似,以每秒30帧的速度收集数据。下图中是Primer sense 的strucutre sensor相机,它的doe是由两部分组成的,一个是扩散片,一个是衍射片。先通过扩散成一个区域的随机散斑,然后复制成九份,投射到了被摄物体上。根据红外摄像头捕捉到的红外散斑,PS1080这个芯片就可以快速解算出各个点的深度信息。

有了深度图和RGB图像之后呢,,SLAM算法就需要工作了,由于RGB-D传感器实际上将结合了三维结构和二维图像结合在一起,所以与传统的只通过激光点云或者只通过RGB图像序列进行SLAM有所不同,但其思路以及涉及到的关键技术都大同小异。

1) 关键技术部分

  (1)深度数据模型

  RGB-D的一大优势在于每一帧获取的RGB图像和深度图像能够逐像素匹配在一起,针对深度图像上的每一个像素,都可以获取到它对应的深度值,然而,RGB-D相机的量测范围有限,其数据量测精度和量测距离有关,一般只有3-4米以下的深度数据可用于室内建模。下图为量测距离与量测精度图表。

  通过图像的像素坐标可通过以下公式来获取对应的三维坐标:

  其中,Xc,Yc,Zc是获取的地面坐标,u’和v’是像素坐标,D是从深度图像中获取的深度值(一般都有一个scale,D=D'/Scale),fxD和fyD是图像的焦距

  (2)特征点探测

  特征点探测和匹配有多种方法,最常用的属SIFT算子,1999年提出,2004年完善,David G.Lowe提出

  a.SIFT:1999年提出,2004年完善,David G.Lowe提出

  b.FAST(Features from Accelerated Tegment Test):2006年,Edward Rosten ,Tom

  优缺点:计算速度快,只计算了灰度信息

  c.SURF(Speed UpRobust Feature):2006年,Bay等提出的

  优缺点:由sift改进而来,比sift快,多幅图片时鲁棒性好。

  d.CenSurE(Center SurroundExtremas for Realtime Feature Detection and Matching)

  比较:文章提出了新的方法,并与已有特征点检测进行比较,比较时用到的算子:Harris,FAST,SIFT,SURF.方法:1. 计算当特征点是800时,对于不同的序列,特征点的可重复性。2. 计算最小的欧式距离值,对比距离区间点的个数,画折线图。3. 计算不同搜索范围下,当特征点个数是800时,每种特征点检测的可以匹配成功的百分比。4.使用the visual odometry(VO)评估每种算法的表现。5.比较了每种算法所用的时间。

  e.  BRISK(Binary Robust invariant scalable keypoints) :2011年,Leutenegger,S等提出

  优缺点:是对FAST算法的改进

  具体的算法实现大家可以去官网直接下载对应的库文件,笔者使用的是最常规的SIFT算法,由于RGB-D图像数量较多,最好使用SIFT-GPU,可通过GPU对特征提取进行加速。

  (3)回环检测 (大回环,随机回环,局部回环)+ appearance-based navigation(新技术)

   回环检测的作用主要是去除Drift Error, 就好比一个人蒙着眼睛,如果让你一直走直线,实际情况是,随着你走的距离越长,产生的偏差越大,可能完全变成一条曲线,这时候就需要去有人提醒你你要往右边多走一点还是往左边都走一点。

    1)大回环:也叫全局回环检测,进行大回环检测需要知道我们什么时候回到起点,一般在进行三维测图时我们规定一个起始位置,最后结束测图的时候会重新回来,一般这个时候,就用起始数据帧与终止数据帧进行回环检测,得到对应的约束,如全局回环图所示,为三维测图时获取的首尾图像,在回环框架图中,‘e14,1’,‘e14,2’就是全局回环检测得到的边界约束。

                                      全局回环

    2)随机回环:随机回环即是在当前关键帧时,与前面所有的关键帧进行随机匹配,可以随机选择5个或者10个关键帧进行匹配,得到对应的边界约束,下面回环检测框架图中短虚线表示的就是随机回环检测到的边界约束,e4,8

    3)局部回环:局部回环是最常用的回环检测方法,实际上是在当前数据帧位置下,做一个缓冲区,如下图局部回环检测,得到相邻的关键帧索引,然后将当前数据帧与缓冲区内所有的关键帧一一进行匹配,得到对应的边界约束,回环检测框架图中adjacent edge即是局部回环检测得到的边界约束。

                                      局部回环检测

                                  回环检测框架

    以上三种回环检测可以应对大部分场景,但有些情况下我们并不知道什么时候会重新回到相同的位置,随机回环和全局回环需要在一定的知识引导的情况下才能得到对应的边界约束,随意常规来说局部回环是不管在任何场景中都可以用来有效减少drift error。 近些年出现了一种appearance-based navigation(新技术)的新技术,输入所有的图像之后,可以得到图像之间相似性关系,进而可以很容易判断出是否回到同一个位置。

(1)RGB-D SLAM系列- 工具篇(硬件+关键技术)的更多相关文章

  1. (2)RGB-D SLAM系列- 工具篇(依赖库及编译)

    做了个SLAM的小视频,有兴趣的朋友可以看下 https://youtu.be/z5wDzMZF10Q 1)Library depended 一个完整的SLAM系统包括,数据流获取,数据读取,特征提取 ...

  2. Caffe学习系列——工具篇:神经网络模型结构可视化

    Caffe学习系列——工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py ...

  3. [Android开发学iOS系列] 工具篇: Xcode使用和快捷键

    [Android开发学iOS系列] 工具篇: Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd + N: 新建文件 Option + Cmd + N: 新建文件夹 Cmd + / : 注释 ...

  4. 微信小程序购物商城系统开发系列-工具篇

    微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操作系统.新的生态,未来大部分应用场景都将 ...

  5. SQL Server调优系列基础篇(子查询运算总结)

    前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...

  6. SQL Server调优系列基础篇 - 子查询运算总结

    前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...

  7. SQL Server 调优系列基础篇 - 子查询运算总结

    前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...

  8. iOS系列 基础篇 07 Action动作和输出口

    iOS系列 基础篇 07 Action动作和输出口 目录:  1. 前言及案例说明 2. 什么是动作? 3. 什么是输出口? 4. 实战 5. 结尾 1. 前言及案例说明 上篇内容我们学习了标签和按钮 ...

  9. 前端工程师技能之photoshop巧用系列第二篇——测量篇

    × 目录 [1]测量信息 [2]实战 [3]注意事项 前面的话 前端工程师使用photoshop进行的大量工作实际上是测量.本文是photoshop巧用系列第二篇——测量篇 测量信息 在网页制作中需要 ...

随机推荐

  1. 线程池ThreadPoolExecutor、Executors参数详解与源代码分析

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. ThreadPoolExecutor数据成员 Private final Atom ...

  2. HTML5 学习总结(五)——WebSocket与消息推送

    B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链 ...

  3. Floyd算法的理解

  4. java中异常注意的细节2

    class A extends Exception{ A(){ super(); } A(String msg){ super(msg); } } class B extends A{ B(){ su ...

  5. c#用socket异步传输字符串

    再次特别感谢张子阳老师的文章,是我深感益处. 在前一篇文章中可以看到,尽管消息分成了三条单独发送,但是服务端却将后两条合并成了一条.对于这些情况,我们可以这样处理:就好像HTTP协议一样,在实际的请求 ...

  6. 文本框只读属性,disabled不能提交

    设置文本框和文本域只读的时候用到disabled="disabled",结果后台获取不到,后来想起这个不会提交,应该用readonly

  7. SQL Server代理(8/12):使用SQL Server代理外部程序

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQ ...

  8. PHP 中的Closure

    PHP 中的Closure Closure,匿名函数,又称为Anonymous functions,是php5.3的时候引入的.匿名函数就是没有定义名字的函数.这点牢牢记住就能理解匿名函数的定义了. ...

  9. 语义化HTML:ul、ol和dl

    一.语义化元素   1. ul标签 W3C草案: The ul element represents an unordered list of items; that is, a list in wh ...

  10. 我们一起来动手开发一个Orm框架,开源发布

    我们追求的方向 1)高性能. 这也是架构创建的目的之一,已经将它的性能提升到了极致.大家可以自己测试.我可以说其性能是数一数二的.连接地址:Moon洗冤录 2)易用性强 我想,用过Moon.ORM的应 ...