[SLAM] 01. "Simultaneous Localization and Mapping"

本篇带你认识SLAM,形成客观的认识和体系

一、通过行业招聘初步了解SLAM

发信人: leecty (Terry), 信区: ParttimeJobPost
标 题: 创业公司招SLAM 算法工程师
发信站: 水木社区 (Thu Jun 16 19:18:24 2016), 站内

我们是一家年轻的初创公司,核心团队来自清华大学和中科院。依托强大的视觉SLAM算法,我们深入投身到机器人,虚拟现实,增强现实等前沿产业。

招聘:
视觉SLAM 算法工程师 (可以兼职/实习)

要求:
1. 熟悉SVO,SFM,ORB SLAM,LSD SLAM,PTSAM等算法,或至少熟悉用过其中任一方面
2. 专业:自动化,计算机,数学(熟悉运筹优化,数值计算等)
3. 熟悉C ,C++,Matlab
4. 最好熟悉Linux

联系方式: ......@126.com

待遇:
工资不能保证是行业的最高水平,当我们能保证:
1. 和目前行业最领先的人一起,在最前沿的领域成长
2. 丰厚的期权。享受创业的成果。优秀的实习生和正常招聘获得期权股票途径一致,只要你是牛人。


二、牛逼哄哄的SLAM技术 即将颠覆哪些领域?

机器人在未知环境中,要实现智能化的四大任务:

  • 定位(Localization),
  • 建图(Mapping),
  • 路径规划(Navigation),
  • 控制技术(Controlling)

而这四个问题中的前三个,SLAM都扮演了最核心的功能。

2013年的Course : Cyrill Stachniss


三、ICCV研讨会:实时SLAM的未来以及深度学习与SLAM的比较

第一部分:为什么 SLAM 很重要?

SLAM 是卷积神经网络和深度学习的补充:

  • SLAM 关注于几何问题
  • 深度学习是感知(识别)问题的大师。

如果你想要一个能走到你的冰箱面前而不撞到墙壁的机器人,那就使用 SLAM。

如果你想要一个能识别冰箱中的物品的机器人,那就使用卷积神经网络。

SLAM 是 SfM(运动恢复结构:Structure from Motion)的一种实时版本。

视觉 SLAM 或基于视觉的 SLAM 是 SLAM 的一种仅使用摄像头的变体,放弃了昂贵的激光传感器 和 惯性测量单元(IMU)。

  • 单眼 SLAM(Monocular SLAM)仅使用单个摄像头,
  • 非单眼 SLAM(non-monocular SLAM)通常使用一个预校准的固定基线的立体相机套件。

SLAM 是计算机视觉领域所谓的「几何方法(Geometric Method)」最好案例。

事实上,卡内基梅隆大学(CMU)的机器人研究所将研究生水平的计算机视觉课程分成了一个「基于学习的视觉方法」和一个单独的「基于几何的视觉方法」课程。

From: CMU course list

16-822 Geometry Based Methods in Computer Vision

16-824 Learning-based Methods in Vision

[SLAM] 01. "Simultaneous Localization and Mapping"

1.运动恢复结构 Sfm vs 视觉 SLAM

运动恢复结构(SfM)和 SLAM 所解决的问题非常相似,但 SfM 传统上是以离线形式进行的,而 SLAM 则已经慢慢走向了低功耗/实时/单 RGB 相机的运行模式。

今天许多运动恢复结构方面的专家都在为世界上一些最大的科技公司,帮助打造更好的地图。如果没有关于多视图几何(multiple-view geometry)、SfM 和 SLAM 的丰富知识,像谷歌地图这种成功的地图产品根本就不可能出现。

典型的 SfM 问题遵循:

给定一个单个室外结构(如大剧场/大体育馆)的大型照片集合,构建该结构的 3D 模型并确定每个相机的姿势。这个照片集合以离线形式处理,而且大型结构重建所需时间从几小时到几天不等。

流行的 SfM 相关的软件库:

    • Bundler:一个开源的运动恢复结构工具包

    • Libceres:一个非线性最小二乘极小化工具(对束调整(bundle adjustment)问题很有用)

    • Andrew Zisserman 的多视图几何 MATLAB 函数

2.视觉 SLAM vs 自动驾驶

研讨会的组织者之一 Andrew Davison 表示,尽管自动驾驶汽车是 SLAM 最重要的应用之一,但用于自动化载具的 SLAM 应该有其自己的研究轨道。(而且正如我们所见,研讨会的展示者中没有一个谈到了自动驾驶汽车。)在接下来的许多年里,独立于任何一个「圣杯级」的应用而继续在研究的角度上研究 SLAM 是有意义的。

尽管在自动化载具方面存在着太多的系统级细节和技巧,但研究级的 SLAM 系统所需的不过是一个网络摄像头、算法知识和一点辛劳而已。

视觉 SLAM 作为一个研究课题对数以千计的博士生的早期阶段要友好得多,他们将首先需要好几年的使用 SLAM 的实验室经验,然后才能开始考虑无人驾驶汽车等昂贵的机器人平台。

第二部分:实时 SLAM 的未来

你也许不知道 Andrew 是谁,他是伦敦帝国学院独一无二的 Andrew Davison 教授

他最知名的成就是其 2003 年的 MonoSLAM 系统,他是第一个展示如何在单个「单眼」摄像头上构建 SLAM 系统的人,而那时候其他所有人都还认为打造 SLAM 系统需要一个立体的「双眼」摄像头套件。

最近,他的研究成果已经对戴森(Dyson)等公司的发展轨迹和他们的机器人系统的能力产生了影响(如全新的 Dyson360)

在 Davidson 的研讨会介绍演讲中,他讨论了一些过去 10-15 年里科研界所打造的典范系统:

    • MonoSLAM

    • PTAM

    • FAB-MAP

    • DTAM

    • KinectFusion

1. Davison vs Horn:机器人视觉的下一篇章

Davison 还提到他正在写一本关于机器人视觉的新书,这对计算机视觉、机器人和人工智能领域的研究者来说应该是一个激动人心的好消息。

上一本机器人视觉的书是由 B.K. Horn 写的(出版于 1986 年),现在也到该更新的时候了。

尽管我很乐意阅读一本重在机器人视觉原理的巨著,但我个人希望该书关注的是机器人视觉的实用算法,就像

Hartley 和 Zissermann 的杰作《Multiple View Geometry(多视图几何)》

Thrun、Burgard 和 Fox 所著的《Probabilistic Robotics(概率机器人学)》那样。

一本关于视觉 SLAM 问题的「食谱」将会受到所有严肃的视觉研究者欢迎。

... ...

第三部分:深度学习 vs SLAM

SLAM 小组讨论真是乐趣无穷。

在我们进入重要的「深度学习 vs SLAM」讨论之前,我应该说明每一位研讨会展示者都同意:

语义对构建更大更好的 SLAM 系统是必需的。

关于未来的方向,这里有很多有趣的小对话。在争论中,Marc Pollefeys(一位知名的 SfM 和多视角几何研究者)提醒所有人「机器人是 SLAM 的一个杀手级应用」,并建议我们保持对「大奖」的关注。这令人非常惊讶,因为 SLAM 传统上是适用于机器人问题的,但过去几十年机器人并没有什么成功(谷歌机器人?),导致 SLAM 的关注重点从机器人转移到了大规模地图构建(包括谷歌地图)和增强现实上。研讨会上没人谈论过机器人。

1.将语义信息集成到 SLAM 中

人们对将语义整合到今天最出色的 SLAM 系统中有很大兴趣。当涉及语义时, SLAM 社区不幸地卡在了视觉词袋(bags-of-visual-words)的世界里,而在如何将语义信息整合进他们的系统上没有什么新想法。在语义一端,我们现在已经看到 CVPR/ICCV/ECCV 上冒出了很多实时语义分割演示(基于卷积神经网络);在我看来,SLAM 需要深度学习,而深度学习也一样需要 SLAM。

2.「端到端学习(end-to-end learning)会主宰 SLAM 吗?」

在 SLAM 研讨会小组讨论结束时,Zeeshan Zia 博士提出了一个震惊所有人的问题,并引发了一场充满能量的讨论,令人难忘。

你应该看看小组成员们脸上的表情。那就像是将一个深度学习的火球投向一群几何学家。他们的面部表情表达出了他们的困惑、愤怒和厌恶。他们想:「你怎么敢质疑我们?」正是在这些稍纵即逝的时刻,我们才能真正体会到大会的体验。

Zia 的问题基本上是:「在构建今天的 SLAM 系统时,端到端学习很快就将取代大部分人工劳动吗?

Zia 的问题非常重要,因为端到端的可训练系统已经慢慢进入到了很多高级的计算机问题中,相信 SLAM 会是一个例外是没有道理的。有好几位展示者都指出当前的 SLAM 系统过于依赖几何,以至于让完全基于深度学习的 SLAM 系统看起来不合理了——我们应该使用学习技术得到更好的点描述,而不要管几何。「你可以使用深度学习做一个计算器,并不意味你应该这么做。」

尽管许多小组讨论发言人都使用了有些肯定的「不行」回应,但让人惊讶的是,却是 Newcombe 声援了深度学习和 SLAM 联姻的可能。

[SLAM] 01. "Simultaneous Localization and Mapping"

Research Manager Oculus Research, Surreal Vision Co-Founder, Affiliate Assistant Professor.

3.Newcombe 的提议:使用 SLAM 助力深度学习

尽管 Newcombe 在深度学习可能如何帮助 SLAM 上没有提供很多证据或想法,但他却为 SLAM 如何可能为深度学习提供帮助给出了一条清晰的路径。

想想看我们使用大规模 SLAM 已经构建出的地图以及这些系统所提供的对应(correspondence)——这难道不是一个构建能帮助深度学习的万亿级图像到图像「相关」数据集的清晰路径吗?其基本思路是:

今天的 SLAM 系统是大规模的「对应引擎」,可以用来生成大规模数据集,而这正是深度卷积神经网络所需要的。

结语

这次 ICCV 大会上主流的工作(重在机器学习)和本次实时 SLAM 研讨会所呈现出现的工作(重在束调整等几何方法)之间存在相当大的脱节。主流的计算机视觉社区在过去十年内已经见证了多次小型变革(如:Dalal-Triggs、DPM、ImageNet、ConvNets、R-CNN),而今天的 SLAM 系统和它们八年前的样子并没有很大的不同。Kinect 传感器可能是 SLAM 领域唯一的最大的彻底变革的技术,但基础算法仍旧保持着原样。


四、2015深度学习回顾:ConvNet、Caffe、Torch及其他

研究生过去常常避开了关于Yann LeCun的笑话,Yann LeCun坚持认为机器学习在将来的某一天会做特征设计阶段的工作。现在似乎是这种情况,当你坚持认为“手工特征设计”将省掉一天时间的时候,整个视觉社区都会忽略你。Yann LeCun做了一个主题报告,并给了它一个有趣的标题:“深度学习怎么了?”,这表明了卷积神经网络(也叫CNNs或ConvNets)存在于CVPR的任何角落。

过去在CVPR很难发表ConvNet(卷积神经网络)研究论文,而现在如果你没有对ConvNet做一个基本的比较的话,很难得到一篇CVPR文献。得到一个很酷的新问题了么?哦,你没有试一下基于ConvNet的基本方法么?很好,这说明为什么没人关心了。

还有很多事情等着视觉科学家去做,一个扎实的数学上的正式教育比其他任何都要重要。我们过去是使用梯度下降来训练,现在也是如此。就好比我们过去喝咖啡,现在也喝咖啡一样。其本质上,其实还是数学。

非常清楚的是:通过卷积神经网络语言来铸造你的计算机视觉问题,你将打败所有用手做计算机视觉的人。我认为Yann LeCun(深度学习之父其中之一)就是一个现代的笛卡尔,只是因为我认为开创性的工作是指日可待。他的ConvNets思想框架就像是一个必备的坐标系统——我们可能不知道目的地像什么,但我们现在知道如何来绘制一张地图。

在CVPR上,我们既有Torch教程也有Caffe教程。我参加了DIY深度学习的教程,这是一个充满Caffe的屋子——在会议开始的5分钟前,站在房子里的参会人员只有像我这样的懒虫。

相比之下,Caffe是更受欢迎的,但对于Torch,当谈及到一些深度学习的权威人员时(如+Andrej Karpathy和其他深度思维科学家),一些特定的专家小组似乎从Caffe转移到了Torch。

[SLAM] 01. "Simultaneous Localization and Mapping"

  Caffe是在Berkeley发展起来的,有一些充满活力的社区,与Python结合并且在大学生中似乎相当流行。Trevor Darrell教授甚至找了一些博士后来帮助Caffe发展。如果我再年轻几岁并且刚获得博士学位,那么我一定会申请的。

  Torch并没有跟随Python的潮流,它是基于Lua的。对于解释器没有必要像Matlab或者Python那样,Lua会给你神奇的控制台。Torch被Facebook人工智能研究实验室和位于伦敦的谷歌DeepMind大量使用。对于那些害怕类似于Lua这样新语言的人,在此不用担心——如果你已经涉足Python,JavaScript或者Matlab的话,那么你会感到Lua语言学起来特别“轻松”。

现在,越来越清晰的是:深度学习的未来主要是来自像Caffe或Torch那样有自给自足的软件包,而不是像OpenCV或Matlab那样的处在生死边缘上的全能工具。

当你在OpenCV上分享创作,你最终会分享源代码,但有了深度学习工具包,你最终提供的是你的网络预训练

对于你的计算机视觉管道,你不必再考虑20个“小”算法的组合——你只要考虑你想要的流行网络架构,然后就是数据集

    • 如果你有GPU和庞大的数据,你可以做完整的端到端的训练。
    • 如果你的小数据集或者中等数据集,你可以微调最后几层。你甚至可以在最后一层的顶部训练一个线性分类器,
    • 如果你怕麻烦——那么你要做的只是超越SIFT(尺度不变特征变换算法),HOG(方向梯度直方图 ),GIST(通用搜索树)以及所有在计算机视觉过去二十年里庆祝的算法。

五、学习SLAM需要哪些预备知识?

  1. 首先搬出宝典:Multiple View Geometry in Computer Vision。这本书基本涵盖了Vision-based SLAM这个领域的全部理论基础!读多少遍都不算多!
  2. 另外建议配合Berkeley的课件学习。(更新:这本书书后附录也可以一并读完,包括附带bundle adjustment最基本的levenberg marquardt方法,newton方法等)
  3. 只要是SLAM问题就要涉及optimization,就要用到各种least square算法。所以另一个基础理论是Sparse Matrix,这是大型稀疏矩阵处理的一般办法。可以参考Dr. Tim Davis的课件:Tim Davis ,他的主页里有全部的课程视频和Project。针对SLAM问题,最常用的least square算法是Sparse Levenberg Marquardt algorithm,这里有一份开源的代码以及具体实现的paper:Sparse Non-Linear Least Squares in C/C++
  4. 然后是框架级的工具。最常用的机器人框架ROS ROS.org | Powering the world's robots,可以使用在Windows,Linux和MacOS等操作系统上,里面包含一整套常用的机器人理论的算法和工具的实现。另一个开源工具集OpenSLAM OpenSLAM.org,其中的g2o是目前最流行的graph optimization的实现工具。另外OpenCV也是视觉相关必备的基础工具,Multiple View教材中的常用算法在OpenCV中都有常用的实现。(更新:OpenCV的文档Camera Calibration and 3D Reconstruction 中,包含SLAM相关的基础理论公式以及C/C++/Python实现的API)

另外多说一句题外话,因为 Optimization 和 feature extraction 是SLAM里最核心的两个问题,而这两个问题都是运算量极大的。好的SLAM框架要兼顾速度和精确度。目前大部分Vision或者RGBD的SLAM框架都是用C++来实现完成的以确保运算速度。虽然我个人很欣赏Python,并且Python3也支持SciPy,OpenCV,ROS等重要工具,不过依然有大量的诸如g2o等基础性库在python下无法使用,而且如果要借鉴其他人的代码,最方便的还是在C++中实现。所以如果提问者有志于在这个领域做深入研究,夯实的C++基础是必不可少的。Introduction to Algorithms,以及 @vczh 推荐的C++ Primer等,都是在实际工作前要自己做好的功课。

下面说一些硬件和实验上的知识储备。

首先Vision-based SLAM常用摄像机标定(Camera Calibration)的世界通用简单方法,是张正友博士(Dr. Zhengyou Zhang,主页Zhengyou Zhang's Home Page)的方法(张正友博士是本领域里少数的具有极其巨大影响力和贡献的华人学者,已成脑残粉嘤嘤嘤)。具体方法和实现,我在这里推荐两个,

  • 一个是Caltech工具箱:Camera Calibration Toolbox for Matlab ,以及相关paper:Camera Calibration Toolbox for Matlab
  • 该方法的另一个实现,是Matlab最新版本内置的Camera Calibration的application,自动导入标定图片并把得到的结果输出给Matlab,更加自动化,更加便捷准确。更多的Camera Model理论知识请参考Multiple View Geometry。

至于RGB-D Camera,最常用的采集设备有两种:

一种是Microsoft Kinect,一个生态环境完备的RGBD Camera,可以直接用Visual Studio可Kinect SDK直接开发,也有大量开发好的程序以供借鉴参考,也可以用OpenNI和ROS采集处理,我就不多介绍了,毕竟微软是对程序员最友好的公司没有之一(微软大法好)。

另一个是Google的Project Tango,Google对于这个自家的神器还是很低调的,可以看看宣传片ATAP Project Tango ,绝对酷炫——可惜我们lab刚刚买的那一台,我还没有用过,所以对具体开发不太了解。

另外有几个网上成熟的数据集和测试方法,

  • 一个是Malaga Dataset,一个西班牙的团队采集的Malaga城市数据:The Málaga Stereo and Laser Urban Data Set,覆盖了城市中汽车驾驶的各种情况(停车,加速,减速,行人,建筑,绿化带等),里面提供了双摄像头,Laser,IMU等数据以及GPS的ground truth trajectory。不过该版本因为是在市中心,所以GPS的ground truth并不可靠。
  • 另一个是慕尼黑工业大学Computer Vision Lab的RGB-D dataset https://vision.in.tum.de/data/datasets/rgbd-dataset,里面提供了大量的室内的RGBD数据集,以及非常方便好用的benchmark tools。
  • 第三个是KITTI Dataset:The KITTI Vision Benchmark Suite,也是认可度很广泛的汽车驾驶数据集。

六、SLAM的学习方法

 
SLAM涵盖的东西比较多,分为前端和后端两大块。
  • 前端主要是研究相邻帧的拼接,又叫配准。
    • 根据传感器不一样,有激光点云、图像、RGB-D拼接几种,其中图像配准中又分基于稀疏特征(Sparse)的和稠密(Dense)的两种。
  • 后端主要是研究地图拼接(前端)中累积误差的校正,主流就两种,基于概率学理论的贝叶斯滤波器(EKF,PF)以及基于优化的方法。EKF已经用得很少了,PF也就在2D地图SLAM(Gmapping)中用得多,大多还是用优化的方法在做。
你自己已经说了这块需要的知识,一个是数学,一个是编程。所以入门的话,也从这两块开始弄。

一、数学方面

  • 数学的话,建议楼上说过的Thrun的《probabilistic robotics》,其实不需要全部看完,了解下概率学是如何解决机器人中的问题的,关键学习贝叶斯滤波,也是就是贝叶斯公式在各个问题(定位,SLAM)中的应用。
  • 另外,优化的话,建议先把最小二乘优化中给弄透彻,数学推导要会,因为很多问题,最后都是归结到最小二乘优化,然后就是梯度下降求Jacobian之类的。

二、编程方面
理论的东西是比较无聊的,必须得实战。建议入门先写一发最小二乘优化,可以就做一个简单的直线拟合,不要用Matlab中的优化工具,了解数学推导最后是怎么写到代码里面的。然后,一定要玩好Matlab优化工具包,做实验最方便了。
有了一些基础之后,可以尝试玩一些现有的SLAM包,推荐两个地方,(上述已讲:框架级工具)

  • 一个是www.openslam.org,里面有各种SLAM包,主流的SLAM算法,在这一般都有源码。
  • 另外一个就是ROS了,里面有很多现成的SLAM包,像Gmapping,RGB-D SLAM,上手非常快,甚至你没有任何设备,你也可以利用ROS中的仿真环境(如Gazebo)跑。建议先试试Gmapping,百度上有很多中文教程,一开始跑这些package还是很涨成就感的,可以提高你的兴趣。

如果你是做视觉或者RGB-D,那么OpenCV和PCL是必不可少的工具。早点上手肯定没得错。

三、进阶
大体入门之后,你就需要根据你实验室研究的项目来学习了,看是用激光、相机、还是Kinect来做了,不同传感器的前端算法还是有些差距的。

  • 激光的话一般是ICP,相对简单。
  • 视觉的东西还是比较多的,楼上推荐《Multiview Geometry in Computer Vision》确实很重要,不过,我觉得这同时你还应该了解特征提取、特征描述子、特征匹配这些东西。如果你们实验室做的Dense registration,那你还得学李代数那些东西(高大上啊,神马李群看好多天都看不懂啊!!!)。其实,很多算法都有开源包,你可以去ROS、一些大神博客、牛逼实验室主页中多逛逛。

Next:

博士-半闲居士

视觉slam十四讲学习


七、补充些市场信息

让Android手机能像人类一样感知物理世界,Google发布“Tango”计划 (2014)

Google的ATAP项目组为Tango计划定制了一款5英寸的Android手机,通过该手机上内置的特殊硬件及软件,系统可以追踪设备的整个3D运动过程并且绘制出包含位置、方向等物理数据的地图。就像我们在房屋里走上两次就可以感知到房间的大小、方位一样,当你拿着这款定制的Android手机时,通过这个过程它就能绘制出相应的地图。

当手机能和人那样建立起对真实环境的感知,那么它在功能扩展层面上将会大大加强。在一些和真实环境结合的比较密切的领域,比如导航和游戏,用户体验将得到质的提升。

按照Google的说法,由于目前这款手机内置的算法和API等都还处于比较早期的阶段,所以ATAP项目组也希望能有一些专业开发人员来帮助他们完善产品。于是Google准备将现有的200款原型机发放给多个领域的开发者以期待他们能帮助Google推动这项技术的发展进而创造出非同寻常的用户体验。如果你认为自己符合Google提出的相关条件,那么可以到这里填写申请表。

事实上,在Google的Tango计划之前,微软的Kinect、苹果收购的PrimeSense都能让数字设备获得对真实世界的感知能力。

不过与它们不同的是,Google把这项技术用在了手机上,而这就要求其背后的视觉处理器能足够节能以至于手机电池就能维持它的正常运行。根据TC的消息Movidius公司制造的Myriad 1三维视觉处理芯片确实满足了Google的这一要求,维持Myriad 1的正常运转仅需几百毫瓦特的电力。在 Myriad 1成功突破能耗障碍之后,这类技术终于可以在手机上正常运行,而它自然就成了Tango计划原型机上的核心部件。

ATAP项目组本属于摩托罗拉旗下,但Google并未在此前的交易中将其出售给联想而是将其并入Android团队。Tango项目虽然属于ATAP项目组但并不是Android的一部分,在未来等到技术成熟它也许会和Android进行整合,但至少在今天它们还是分离的。(2014年)

这还是手机吗!联想PHAB 2 Pro、Moto Z发布

Tango技术的AR手机让生活充满魅力

联想与谷歌共同打造出全球首款搭载Tango技术的AR大屏智能手机PHAB 2 Pro采用了6.4英寸2K的超高清屏幕;智能Assertive Display技术,可以根据环境照明与内容的不同对画质进行优化。PHAB 2 Pro(及PHAB 2全系产品)配备了三个麦克风,以及支持清晰4K视频录制的16MP内置摄像头,采用了具有降噪效果的空间采集技术,同时搭载了经过优化的Tango版高通骁龙652八核处理器、4GB内存以及Fluence Pro功能,还有杜比音效采集5.1和杜比全景声回放功能。将于今年9月在全球范围内陆续上市,售价499美元。

Demo: PHAB 2 Pro

 

上一篇:pandas的简单使用


下一篇:荣誉,还是苦逼?| 也议全栈工程师和DevOps