分享

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

 quasiceo 2015-12-23

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

本科自动化,深感知识量差距很大,无论是从编程还是数学。
按投票排序 按时间排序

9 个回答

立党,Visual SLAM Researcher

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


只要是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++


然后是框架级的工具。最常用的机器人框架是ROSROS.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 vision.in.tum.de/data/d,里面提供了大量的室内的RGBD数据集,以及非常方便好用的benchmark tools。第三个是KITTI Dataset:The KITTI Vision Benchmark Suite,也是认可度很广泛的汽车驾驶数据集。




原答案链接:去美国读CS博士,方向是机器人导航,视觉方面,推荐一下相关编程方面准备?还有相关算法需要学习哪些? - 立党的回答

光收藏不点赞,bs你们(手动斜眼
收藏 · 没有帮助 · · 作者保留权利
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、一些 大神博客、牛逼实验室主页中多逛逛。
四、学渣只能帮你到这了,再后面就不会了,再往后就得找真大神了。
收藏 · 没有帮助 · · 作者保留权利
庞阿困,别人笑我太疯癫,我夸他人看得准。
@鲁灵犀答主主要说的是基于视觉的bundleadjustment的方法,我倒是觉得如果是入门的话,首推《probabilistic robotics》.私以为这是一本所有做自主移动机器人的都应该好好读的书。作者从运动模型到感知模型,逐步建立了slam的虑波器方法,包括 externed kalmen filter 和particle filter.当然在十一章作者也介绍了图优化的理论。当然啦,急于优化理论做视觉slam,sfm,<multiple view geometry in computer vision>是圣经,不过还需要些计算机视觉的基础知识,特征提取啊,图像金字塔之类的。
放张图片搞个笑。

ps我也做视觉slam。

虑波器方法是最早用来做slam的方法,它讲slam理解成一种估计问题。有系统的理论,适合入门打基础。现在比较就行的是优化方法,做视觉的话,还分为rgbd,stereo,monocular等方案。

推荐 几篇文章:
SimultaneousLocalisationandMapping(SLAM):Part 1
SimultaneousLocalisationandMapping(SLAM):Part 2

这两篇文章主要介绍,slam问题的模型,以及滤波器方法,适合入门

做visual slam的话,推荐visual odometry part 1和part 2
visual odometry 和 visual slam基本是同质的问题,只不过关注的点各有侧重,odometry注重的是当前实时性,slam 注重的是全局的优化。这两篇文章归纳了做odometry(slam)的三种主流的feature-based算法:
1.2D-to-2D correspondences
2.3D-to-3D correspondences
3.2D-to-3D correspondences

其中3最流行,包括07年的ptam,最近的orbslam等。

另外,去年到今年,基于appearance-based的方法也出现了很多令人印象深刻的作品,如Dtam,svo,lsdslam等
收藏 · 没有帮助 · · 作者保留权利
鲁灵犀,浙大数学系,机器学习,计算机视觉
就目前主流的slam实现而言,题主你把multiview geometry in computer vision这本书的前两大部分(单目和双目)仔细读一遍,基本上slam 90%的基础就有了,另外还需要一点角点提取的知识,主要是fast.
收藏 · 没有帮助 ·
Lithium Cray,GPA4.0
田姓名知乎用户、Riemann 等人赞同
楼上提到的CV bible是非常经典的textbook,涵盖了大量SLAM所需的模型。不过要读懂还需要扎实的基础。作为基础知识,我更推荐先学习 differential equations, linear analysis, lie-algebra & lie-group, optimizations, probability models和部分image process相关内容
收藏 · 没有帮助 ·
疯子林生,一个减熵的分子
林洛洛 赞同
最近在看《Multiview Geometry in Computer Vision》。嗯,其实去年做毕设开始接触到这本书的,目前重心转到SLAM上来,又重新拿起来看。只推荐一本书,关于线性代数的,中文名《线性代数应 该这样学》,英文名《Linear Algebra Done Right》,看了一遍中文的,翻译不错,感觉收益很大,因为看完之后再来看MGCV感觉轻松很多。
收藏 · 没有帮助 ·
李彬,机械设计师
你们都是大拿,在下受教育了~~~
收藏 · 没有帮助 ·
刘壮,人生何需久睡,死后自会长眠
第一眼看到LSTM我就知道它要火
收藏 · 没有帮助 ·
张凯霖,ML/DL,CV,VR/AR
受教了。这里我有两个疑问
1 基于特征的和直接配准的,哪个更好呢
2 闭环检测 用图优化,有没有好的论文,我最近看的LUM ELCH,看了两周了,仍是迷糊。
收藏 · 没有帮助 · 我来回答这个问题

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多