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

来源/知乎 立党。机器人内参编辑整理。

一、首先搬出宝典书


  首先搬出宝典:Multiple View Geometry in Computer Vision[http://www.robots.ox.ac.uk/~vgg/hzbook/]。这本书基本涵盖了Vision-based SLAM这个领域的全部理论基础!读多少遍都不算多!另外建议配合Berkeley的课件学习。这本书书后附录也可以一并读完,包括附带bundle adjustment最基本的levenberg marquardt方法,newton方法等。


二、基础理论Sparse Matrix


  只要是SLAM问题就要涉及optimization,就要用到各种least square算法。所以另一个基础理论是Sparse Matrix,这是大型稀疏矩阵处理的一般办法。可以参考Dr. Tim Davis的课件:Tim Davis [http://faculty.cse.tamu.edu/davis/welcome.html],他的主页里有全部的课程视频和Project。针对SLAM问题,最常用的least square算法是Sparse Levenberg Marquardt algorithm,这里有一份开源的代码以及具体实现的paper:Sparse Non-Linear Least Squares in C/C++[http://users.ics.forth.gr/~lourakis/sparseLM/] 

三、框架级的工具


  然后是框架级的工具。最常用的机器人框架是ROS ROS.org | Powering the world's robots[http://www.ros.org],可以使用在Windows,Linux和MacOS等操作系统上,里面包含一整套常用的机器人理论的算法和工具的实现。另一个开源工具集是OpenSLAM[https://www.openslam.org/],其中的g2o是目前最流行的graph optimization的实现工具。另外OpenCV也是视觉相关必备的基础工具,Multiple View教材中的常用算法在OpenCV中都有常用的实现。(更新:OpenCV的文档Camera Calibration and 3D Reconstruction[http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html]中,包含SLAM相关的基础理论公式以及C/C++/Python实现的API)


四、夯实C++基础

  

  另外多说一句题外话,因为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[http://research.microsoft.com/en-us/um/people/zhang/])的方法(张正友博士是本领域里少数的具有极其巨大影响力和贡献的华人学者,已成脑残粉嘤嘤嘤)。具体方法和实现,我在这里推荐两个,一个是Caltech工具箱:Camera Calibration Toolbox for Matlab[http://www.vision.caltech.edu/bouguetj/calib_doc/] ,以及相关paper:Camera Calibration Toolbox for Matlab[http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/ref.html]。该方法的另一个实现,是Matlab最新版本内置的Camera Calibration的application,自动导入标定图片并把得到的结果输出给Matlab,更加自动化,更加便捷准确。更多的Camera Model理论知识请参考Multiple View Geometry。


六、RGB-D Camera


  至于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[http://www.mrpt.org/MalagaUrbanDataset],覆盖了城市中汽车驾驶的各种情况(停车,加速,减速,行人,建筑,绿化带等),里面提供了双摄像头,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[http://www.cvlibs.net/datasets/kitti/],也是认可度很广泛的汽车驾驶数据集。


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1 习题说明 • 第 i 节课习题所有材料打包在 Li.zip 中,∀i = 1 . . . 8。 • 习题分为若⼲种:计算类习题,需要读者编程计算⼀个实际问题,我们会附有参考答案以供⾃测。 操作类习题,会指导读者做⼀个具体的实验,给出中间步骤截图或结果。简述类习题则提供阅读材 料,需要读者阅读材料后,回答若⼲问题。 • 每个习题会有⼀定的分值。每次习题分值加和为 10 分。你需要获得 8 分以上才能得到“通过”的评 价。带 ∗ 的习题为附加题,会在总分之外再提供⼀定的分值,所以总和可能超过 10 分。换句话说, 你也可以选择⼀道附加题,跳过⼀道正常题。 • 每道习题的给分由助教评判,简述类习题可能存在⼀定开放性,所以评分也存在主观因素。 • 请利⽤深蓝学院系统提交习题。每次习题我们会记通过与否。提交形式为 word 或 pdf 格式报告, 如有编程习题请提交可编译的源码。 • 为⽅便读者,我通常会准备⼀些阅读材料,放在 books/或 papers/⽬录下。请读者按个⼈需求使⽤ 这些材料。它们多数是从⽹络下载的,如果侵犯到你的权利,请及时告诉我。 • 每个习题会标注⼤致⽤时,但视同学个⼈⽔平可能会有出⼊。 • 习题的完成情况会影响你对本课程内容的掌握程度,请认真、独⽴完成。习题总得分较高的同学将 获得推荐资格。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值