写在前面

首先打个广告。SLAM研究者交流QQ群:254787961。欢迎各路大神和小白前来交流。

看了前面三篇博文之后,是不是有同学要问:博主你扯了那么多有用没用的东西,能不能再给力一点,拿出一个我们能实际上手玩玩的东西啊?没错,接下来我们就带着大家,实际地跑一下视觉SLAM里的那些经典程序,给大家一个直观的印象——因此博文就叫"视觉SLAM实战"啦。这些程序包括:

  • RGBD SLAM V2
  • SVO
  • KinectFusion
  • Orb-SLAM

  如果你有什么建议,可以发我的邮件或来群里交流。当然,我是边跑边写博客,而不是一口气调通再稀里哗啦写的。所以呢,最后跑的程序可能会和现在的计划有些出入啦。好了,废话不多说,先来介绍下实验器材。

实验器材

1.  硬件

  说好的SLAM,没有机器人怎么行?老板,先给我来三份!

这种机器人是Turtlebot的一个改装版本:Viewbot。Turtlebot的详情请参见:http://wiki.ros.org/Robots/TurtleBot/。Viewbot是上海物景公司做的改装版本,包括可以装些额外的传感器,以及把原来的黑色底板变成透明底板什么的,用起来和turtlebot大同小异,价格1W+。为了避免做广告的嫌疑我就不放链接了。用这个机器人的好处,是ROS有直接对应的包,不用你自己写。一句话即可打开传感器读数据,再一句话就可遥控它,方便省事。

机器人的主要部件就是它的底座和上头的Kinect啦。座子自带惯导,可以估计自己的位置;Kinect么,大家都知道了,不多讲。事实上今天要跑的rgbd-slam-v2不需要座子,只要一台kinect就能动起来。我们用不着那么多机器人,只用一个就行啦(就是贴了标签那台)。

2. 软件

  软件方面只需一台笔记,放在机器上跑程序。我用的是一台华硕的ubuntu,装了mac主题包真是山寨气十足啊:

具体的软件配置后面会细说。

3.  环境

  环境嘛就是我的实验室,这个也不细说了。

SLAM程序

RGB-D-SLAM-V2程序是由F. Endres大大写的。论文见[1]。为什么首先选这个程序呢?因为它的原理在我们前面的博客中介绍过了。它是一个基于深度相机、Pose graph (图优化)的程序,后端用的是g2o。另一方面,它的代码直接兼容 ROS hydro版,基本不用配置就可以运行,非常方便。下面我们一步步地教大家运行这个程序:

  1. 从作者主页下载源代码。链接:http://felixendres.github.io/rgbdslam_v2/ 点击右侧的tar.gz或zip下载至本地。
  2. 下载完成后解压,得到一个包,里面好多文件呀:

不着急,先从README看起:"RGBDSLAMv2 is based on the ROS project, OpenCV, PCL, OctoMap, SiftGPU and more – thanks!" 你还在等什么?装装装!好在这些东西在Ubuntu下安装,就是几句话搞定的事。

ROS hydro安装指南: http://wiki.ros.org/cn/hydro/Installation/Ubuntu (加ppa源后直接安装)

Linux OpenCV安装指南:http://blog.sciencenet.cn/blog-571755-694742.html (从源代码编译)

PCL:http://www.pointclouds.org/downloads/linux.html (加ppa后安装)

后面几个嘛,装不装就看心情了,即使没有装,rgbd-slam-v2也能运行起来。

  3. 装完之后,看"Installation from scratch"一栏,基本照着做一遍即可。作者把命令都给出来了,我就不贴了。装完之后,rgbdslam就在你的ros包里啦。

  4. 把机器人的Kinect usb口插进电脑,运行 roslaunch rgbdslam openni+rgbdslam.launch,就能看到一个漂亮的界面了。

可以看出作者真的挺用心,居然做了UI。像我这样的懒人绝对不可能做UI的……不谈这些,底下的两个图就是Kinect当前采到的彩色图与深度图,而上面则是3D在线点云图(可以用鼠标转视角)。现在,程序还在待机状态,敲下Enter会采集单帧数据,而敲下空白键则会连续采集。

此外,程序的参数可以在openni+rgbdslam.launch文件中调整。例如特征点类型呀(支持SIFT,SURF,ORB,SIFTGPU),最大特征数量等等。

运行程序

  现在,我们连上Turtlebot的遥控端:

  roslaunch turtlebot_bringup minimal.launch (启动底座)

  roslaunch turtlebot_teleop keyboard_teleop.launch (启动遥控)

  按下rgbd-slam-v2的空白键,让机器人四处走起来。UI的状态栏会显示程序的运行状态,我看到过的有 正在提取特征、加入新Frame,等等。如果它成功匹配上,上图的点云就会更新,并且会跟着机器人转动。

我让小车在实验室的一个角上转了几圈。它把中间放置的一堆箱子(实际上是垃圾)都扫出来了。当你觉得满意后,再按下Space键,停止程序。然后从菜单中选出需要保存的东西:机器人的轨迹,最终点云图,等等。轨迹是一个txt文件,而点云图则一个pcd,在安装PCL之后调用pcl_viewer即可查看。

别看上面像是打了码一样的,最后出的点云图可是高清无码的:

轨迹方面,用Matlab写个脚本plot一下即可:

可以看到轨迹上出现了断层,实际上是机器人转的比较快,算法跟丢了,然而之后又通过回环检测给找了回来。

评价

最后,总结一下这个实验吧。

Rgbd-slam-v2是14年论文里提到的算法。它整合了SLAM领域里的各种技术:图像特征、回环检测、点云、图优化等等,是一个非常全面且优秀的程序。它的UI做的也很漂亮,你可以在它的源代码上继续开发。作者也提供了数据集供研究者们测试。

缺点:在美观之外,由于要提特征(SIFT很费时)、渲染点云,这些事情是很吃资源的,导致算法实时性不太好。有时你会发现它卡在那儿不动了,不得不等它一小会。机器人如果走的太快,很容易跟丢。于是我的机器人就真的像只乌龟一样慢慢地在地板上爬了……一旦转头快了,轨迹基本就断掉了。此外,程序采集关键帧的频率很高,稍微一会就采出几十个帧,不太适合做长时间的SLAM。最后合出来的点云有300W+个点,我用网格滤波之后才能勉强显示出来。

参考文献

[1]. Endres et al, 3D Mapping with an RGB-D camera, TRO, 2014.

视觉SLAM实战(一):RGB-D SLAM V2的更多相关文章

  1. (转) SLAM系统的研究点介绍 与 Kinect视觉SLAM技术介绍

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     SLAM系统的研究点介绍 本文主要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我 ...

  2. 如何从零开始系统化学习视觉SLAM?

    由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...

  3. 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM

    下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P2 ...

  4. 视觉slam领域经典综述和具体应用场景

    一.经典综述文章 1.  Durrant-Whyte H, Bailey T. Simultaneous localization and mapping: part I[J]. IEEE robot ...

  5. 三维视觉、SLAM方向全球顶尖实验室汇总

    本文作者 任旭倩,公众号:计算机视觉life,编辑成员 欧洲 英国伦敦大学帝国理工学院 Dyson 机器人实验室 http://www.imperial.ac.uk/dyson-robotics-la ...

  6. 视觉SLAM关键方法总结

    点"计算机视觉life"关注,置顶更快接收消息! 最近在做基于激光信息的机器人行人跟踪发现如果单独利用激光信息很难完成机器人对行人的识别.跟踪等功能,因此考虑与视觉融合的方法,这样 ...

  7. 《视觉SLAM十四讲》第2讲

    目录 一 视觉SLAM中的传感器 二 经典视觉SLAM框架 三 SLAM问题的数学表述 注:原创不易,转载请务必注明原作者和出处,感谢支持! 本讲主要内容: (1) 视觉SLAM中的传感器 (2) 经 ...

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

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

  9. 激光SLAM与视觉SLAM的特点

    激光SLAM与视觉SLAM的特点 目前,SLAM技术被广泛运用于机器人.无人机.无人驾驶.AR.VR等领域,依靠传感器可实现机器的自主定位.建图.路径规划等功能.由于传感器不同,SLAM的实现方式也有 ...

随机推荐

  1. TCP之三:TCP/IP协议中backlog参数(队列参数)

    目录: <TCP洪水攻击(SYN Flood)的诊断和处理> <TCP/IP协议中backlog参数> TCP建立连接是要进行三次握手,但是否完成三次握手后,服务器就处理(ac ...

  2. Java堆外内存之一:堆外内存场景介绍(对象池VS堆外内存)

    最近经常有人问我在Java中使用堆外(off heap)内存的好处与用途何在.我想其他面临几样选择的人应该也会对这个答案感兴趣吧. 堆外内存其实并无特别之处.线程栈,应用程序代码,NIO缓存用的都是堆 ...

  3. 1006 Sign In and Sign Out (25)(25 分)思路:普通的时间比较题。。。

    1006 Sign In and Sign Out (25)(25 分) At the beginning of every day, the first person who signs in th ...

  4. combiner中使用状态模式

    mapreduce中的combine过程 hadoop的map过程执行完成后,每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,减少在map和reduce ...

  5. node 通过指令创建一个package.json文件

      描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license ...

  6. 【洛谷】P2434 [SDOI2005]区间(暴力)

    题目描述 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排列 ...

  7. 第六章:Reminders实验:第二部分[Learn Android Studio 汉化教程]

    Learn Android Studio 汉化教程 Reminders Lab: Part 2 This chapter covers capturing user input through the ...

  8. pandas入门学习--------------------------(一)

    使用pandas,首先需要熟悉它的2个主要的数据结构:Series和DataFrame. Series series是一种类似于一维数组的的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关 ...

  9. 2、keys相关命令

    redis的官网http://redis.io是学习redis的重要资源库,所有命令都分门别类的罗列在了这里http://redis.io/commands. 1.数据库选择命令: SELECT in ...

  10. HTTP接口开发专题三(发送http请求,调用http接口的流程)

    一.xml数据格式传输 1)构造xml参数:通过JAXB将java对象转换为xml 2)调用上一篇的http工具类的方法,发送请求到目的接口地址 3)返回的xml字符串结果,用JAXB进行解析成jav ...