(1)RGB-D SLAM系列- 工具篇(硬件+关键技术)

/***********************************************************************************************************
.....从前,一种叫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系列- 工具篇(硬件+关键技术)的更多相关文章
- (2)RGB-D SLAM系列- 工具篇(依赖库及编译)
做了个SLAM的小视频,有兴趣的朋友可以看下 https://youtu.be/z5wDzMZF10Q 1)Library depended 一个完整的SLAM系统包括,数据流获取,数据读取,特征提取 ...
- Caffe学习系列——工具篇:神经网络模型结构可视化
Caffe学习系列——工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py ...
- [Android开发学iOS系列] 工具篇: Xcode使用和快捷键
[Android开发学iOS系列] 工具篇: Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd + N: 新建文件 Option + Cmd + N: 新建文件夹 Cmd + / : 注释 ...
- 微信小程序购物商城系统开发系列-工具篇
微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操作系统.新的生态,未来大部分应用场景都将 ...
- SQL Server调优系列基础篇(子查询运算总结)
前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...
- SQL Server调优系列基础篇 - 子查询运算总结
前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...
- SQL Server 调优系列基础篇 - 子查询运算总结
前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...
- iOS系列 基础篇 07 Action动作和输出口
iOS系列 基础篇 07 Action动作和输出口 目录: 1. 前言及案例说明 2. 什么是动作? 3. 什么是输出口? 4. 实战 5. 结尾 1. 前言及案例说明 上篇内容我们学习了标签和按钮 ...
- 前端工程师技能之photoshop巧用系列第二篇——测量篇
× 目录 [1]测量信息 [2]实战 [3]注意事项 前面的话 前端工程师使用photoshop进行的大量工作实际上是测量.本文是photoshop巧用系列第二篇——测量篇 测量信息 在网页制作中需要 ...
随机推荐
- 第五节:表单标签的用法——value绑定和修饰符
1.表单标签的用法--value绑定和修饰符 value绑定的写法:v-bind:value 或者简写 :value 修饰符: lazy , Number , trim . 用法如: v-model ...
- java生成excel文件
首先下载jexcelapi_2_6_12.tar.gz,解压后将里面的jxl.jar复制到WEB-INF/lib目录下面 String filePath = request.getParameter( ...
- Zookeeper-Zookeeper leader选举
在上一篇文章中我们大致浏览了zookeeper的启动过程,并且提到在Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节.那么什么是leader选举呢?zookeeper为什么 ...
- RHEL6 某业务用户ulimit -a命令找不到
最终确定是shell环境问题,临时改为/bin/bash即可查看. 1.问题现象 # su - jingyu $ id uid=(jingyu) gid=(jingyu) (jingyu) $ uli ...
- 可视化工具solo show-----Processing Prefuse show
继上篇<可视化工具solo show>罗列出一些主要基于Java开发的软件.插件之后,又仔细揣摩了下哪些可以为我所用. 一番端详之后,准备挑出其中Processing和Prefuse两位大 ...
- 在ASPNET中使用JS集锦
(一).确认删除用法: 1. BtnDel.Attributes.Add("onclick","return confirm('"+"确认删除?&qu ...
- Activity onDestroy() 回调缓慢问题分析及完美解决方案
说到Acitivity的onDestroy,对所有的Android开发者都很熟悉,但是不一定都知道里面存在着一些坑,分享给大家,以后踩中的时候可以应急 用Activity的时候,会发现如下问题: 有时 ...
- JS Replace() 全部替换字符的用法
好久不写js了,今早遇到替换字符的,就浪费了点时间,由此,要记录下来.replace()方法:楼主有个字符串,需要替换掉其中的一些字母,如: var test='123helo123boy123hi' ...
- jQuery对象和DOM对象的相关知识
所谓的DOM就是Document Object Model(文档对象模型)的缩写,或许是我水平低的缘故,感觉就是HTML的标记元素嘛,所以作者画了下面的图: 像这样的元素,就是所谓的DOM对象,获取值 ...
- 报告一个IE很奇葩的滚动条问题——百分比计算宽度为浮点数时的滚动条显示异常
起因: 做项目的时候做了一个表格内容超过DIV容器自动横向滚动处理.别的浏览器都正常:但是在IE下面明明表格table和容器DIV宽度一致但是却出现了滚动条.如图 然后本人做实验找了半天原因终于是找到 ...