您当前的位置: 首页 > 

暂无认证

  • 0浏览

    0关注

    99463博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

发布时间:2020-05-12 07:00:00 ,浏览量:0

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

编辑:3D视觉工坊

链接:https://www.zhihu.com/question/35186064

本文仅作为学术分享,如果有侵权,会删文处理

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

作者:bobin

https://www.zhihu.com/question/35186064/answer/145219653

还是说视觉slam吧。

先说视觉这块,首先射影几何的一些内容相机模型,单视几何,双视几何和多视几何。这些内容可以在Multiple View Geometry in Computer Vision这本书中找到。英文版的,另外中科院的吴福朝编著的“计算机视觉中的数学方法”也很好,涵盖了上述了MVG in CV book中的大部分内容,强烈安利。

然后是一些视觉特征,这方面就是一些特征,描述子,匹配相关等。见SIFT,ORB、BRISK、SURF等文章。

数学方面首先是三维空间的刚体运动,参考《机器人学(第2版)》 蔡自兴https://www.amazon.cn/机器人学-蔡自兴/dp/B002SMDN0W

关于优化,SLAM中的优化方法十分基本,参考高斯牛顿,LM,结合稀疏线性代数。其实用的时候会使用一种g2o的图优化库或者ceres。参考文章 g2o: A General Framework for Graph Optimization http://ais.informatik.uni-freiburg.de/publications/papers/kuemmerle11icra.pdf

最难的应该算是李群和李代数,这方面可以参考book [state estimation for Robotics](http://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser15.pdf)。当然不想看书的话可以参考https://www.cnblogs.com/gaoxiang12/tag/李代数/

为了看论文的时候能够比较流畅,还应该具备一些概率论的知识,这里推荐http://www.probabilistic-robotics.org/

https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf

话说高翔博士近期完成一本SLAM的入门book,有理论有实践,写的不错,推荐。他包含了上述在视觉slam需要的所有基础知识,真是造福大众啊。详细研读此书,以后读各种论文就不会显得那么吃力了吧。最后列举一些玩slam的一些必备工具和相关资源。

tools

1. ubuntu,  cmake, bash, vim, qt(optional). 2. OpenCV install, read the opencv reference manual and tutorial 3. ros, [install](ROS/Installation - ROS Wiki), [tutorial}(ROS/Tutorials - ROS Wiki). 4. python. 可以使用pycharm,作为IDE. 为什么使用ubuntu?因为大家的代码,全是用linux,而且很多使用ros的,ros一定是要Linux的,同时还要cmake。Ubuntu是比较适合初学Linux的人,非常好用。

somethind about Calibration

1. [opencv camera Calibration](http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html) 2. [matlab camera Calibration toolbox](Camera Calibration Toolbox for Matlab) 3. [svo camera Calibration](uzh-rpg/rpg_svo) 4. [ros wiki camera Calibration](camera_calibration - ROS Wiki) 为什么要标定相机呢,因为slam的模型中假设 相机的内参数是已知的,因此有了这个内参数我们才能正确的初始化slam系统。

slam open sources

1. [svo](uzh-rpg/rpg_svo) 2. [orb slam](raulmur/ORB_SLAM2) 3. [ar_tracker_alvar githun page](sniekum/ar_track_alvar) [ros page](ar_track_alvar - ROS Wiki) 4. [ros ptam](ethzasl_ptam - ROS Wiki),原始代码不支持ros, 这里给出ros版本的代码. 原始[代码](Oxford-PTAM/PTAM-GPL)[网站](Parallel Tracking and Mapping for Small AR Workspaces (PTAM)) 5. DSO JakobEngel/dso

ros books

1. Learning ROS for Robotics Programming 2. 机器人操作系统(ROS)浅析 3.  ros by example http://www.lulu.com/shop/http://www.lulu.com/shop/r-patrick-goebel/ros-by-example-indigo-volume-1/ebook/product-23032353.html

some blogs about ros

1.https://www.guyuehome.com/page/1

SLAM基础学习

1. [Multiple View Geometry in Computer Vision](Multiple View Geometry in Computer Vision)。 2. Sparse Matrix [Sparse Non-Linear Least Squares in C/C++](Sparse Non-Linear Least Squares in C/C++) 3. [openSLAM](https://www.openslam.org/) 4. dataset [tum](RGB-D SLAM Dataset and Benchmark) 5. [PCL](PointCloudLibrary/pcl) 6. [opencv](OpenCV | OpenCV)

推荐阅读的书

1. [Multiple View Geometry in Computer Vision](Multiple View Geometry in Computer Vision) 2. [Probabilistic Robotics](http://www.probabilistic-robotics.org/) [pdf](https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf) 3. [state estimation for Robotics](http://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser15.pdf) 4. [Quaternion kinematics for the error-state KF](http://www.iri.upc.edu/people/jsola/JoanSola/objectes/notes/kinematics.pdf) 5. 凸优化,https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf 6. 线性系统理论,Chi-Tsong Chen: 9780199959570: Amazon.com: Books 7. An Invitation to 3-D Vision,https://www.eecis.udel.edu/~cer/arv/readings/old_mkss.pdf 8. Rigid Body Dynamics,http://authors.library.caltech.edu/25023/1/Housner-HudsonDyn80.pdf。

paper about  vision slam

- Georg Klein and David Murray, "Parallel Tracking and Mapping for Small AR Workspaces", In Proc. International Symposium on Mixed and Augmented Reality (ISMAR'07, Nara). - D. Scaramuzza, F. Fraundorfer, "Visual Odometry: Part I - The First 30 Years and Fundamentals IEEE Robotics and Automation Magazine", Volume 18, issue 4, 2011. - F. Fraundorfer and D. Scaramuzza, "Visual Odometry : Part II: Matching, Robustness, Optimization, and Applications," in IEEE Robotics & Automation Magazine, vol. 19, no. 2, pp. 78-90, June 2012. doi: 10.1109/MRA.2012.2182810 - A Kalman Filter-Based Algorithm for IMU-Camera Calibration Observability Analysis and Performance Evaluation - SVO- Fast Semi-Direct Monocular Visual Odometry - [eth zasl sensor](ethzasl_sensor_fusion - ROS Wiki),  - Stephan Weiss. Vision Based Navigation for Micro Helicopters PhD Thesis, 2012 pdf  - Stephan Weiss, Markus W. Achtelik, Margarita Chli and Roland Siegwart. Versatile Distributed Pose Estimation and Sensor Self-Calibration for Autonomous MAVs. in IEEE International Conference on Robotics and Automation (ICRA), 2012. pdf  - Stephan Weiss, Davide Scaramuzza and Roland Siegwart, Monocular-SLAM–based navigation for autonomous micro helicopters in GPS-denied environments, Journal of Field Robotics (JFR), Vol. 28, No. 6, 2011, 854-874. pdf  - Stephan Weiss and Roland Siegwart. Real-Time Metric State Estimation for Modular Vision-Inertial Systems. in IEEE International Conference on Robotics and Automation (ICRA), 2011. pdf  - Simon Lynen, Markus Achtelik, Stephan Weiss, Margarita Chli and Roland Siegwart, A Robust and Modular Multi-Sensor Fusion Approach Applied to MAV Navigation. in Proc. of the IEEE/RSJ Conference on - - Intelligent Robots and Systems (IROS), 2013. pdf - [orb slam]  - Raúl Mur-Artal, J. M. M. Montiel and Juan D. Tardós. ORB-SLAM: A Versatile and Accurate Monocular SLAM System. IEEE Transactions on Robotics, vol. 31, no. 5, pp. 1147-1163, 2015. (2015 IEEE Transactions on Robotics Best Paper Award). PDF.  - Dorian Gálvez-López and Juan D. Tardós. Bags of Binary Words for Fast Place Recognition in Image Sequences. IEEE Transactions on Robotics, vol. 28, no. 5, pp. 1188-1197, 2012.

最后来张脑图

作者:紫薯萝卜 https://www.zhihu.com/question/35186064/answer/61904775

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、一些大神博客、牛逼实验室主页中多逛逛。 四、学渣只能帮你到这了,再后面就不会了,再往后就得找真大神了。

作者:一只松鼠 https://www.zhihu.com/question/35186064/answer/69699924

不推荐任何大部头书籍作为SLAM学习的开始。在不了解一个领域的时候,我认为深度很重要,否则纸上谈兵。当你了解了这个领域后,我认为广度变得很重要,否则坐井观天。

SLAM涉及知识比较杂,但却是一个系统工程。要学好这个系统,首先应该对组件进行拆分学习,我是做视觉SLAM的,所以我们以视觉SLAM为例介绍。如果再窄一点,我们以基于特征点法的稀疏单目视觉SLAM为例介绍。

第一步,我们需要知道相机模型,比如最简单的针孔相机模型。当知道这个模型后,其他模型可以暂且不管了。

第二步,我们再了解一下特征是什么。利用第三方库怎么提取特征点和描述符,以及怎么做两帧图像间的特征匹配和筛除错误匹配。或者,你不提描述符,不做匹配。学习一下怎么用光流做跟踪也行。这一步,不论你用特征匹配还是光流跟踪,其实都是在不同帧图像找特征点的对应关系。在这个阶段,你不需要知道特征提取的各种算法背后的数学理论。

第三步,我们需要知道根据匹配的结果怎么去恢复相机的Pose,即Rotation(R)和translation(t)以及根据得到的Pose去做三角化建3D点。

前面三个步骤你需要仅仅是一些代码基础(建议c++或者python),一点点OpenCV知识以及一点点线性代数基础。

第四步,我们知道了每一帧图像的Rt以及所建立出来的3D点后怎么去做一个基于重投影误差最小的优化。这个时候需要你需要知道的就多一些了:数学上,涉及非线性优化,所以你得闹懂你的目标函数是什么,待优化变量是哪些。接着,你需要知道用工具怎么去求解这个优化问题,这个时候g2o就闪亮登场了,当然你也可以用ceres。求解这个问题的时候,会涉及到求对Pose和3D点的导数,所以你还需要一点点李代数知识,需要学会利用扰动法或者说叫摄动法去求导数。如果你想用数值求导,当我没说。BTW,一个优秀的SLAM工程师,不仅撸得一手好代码,还推得一手好公式,比如在下,哈哈哈。。。再BTW一下,后面我会写一个专题,暂时标题就叫打死雅可比吧。嗯,接着我们再玩一玩g2o看看怎么定义误差,怎么设置顶点,边,怎么把推出来的雅可比放进去,以及怎么做变量的更新。然后选定一个合适的求解器(例如GN, LM, DogLeg等)进行求解。还是那句话,这个阶段,你不需要知道非线性优化的各种复杂理论,g2o帮你搞定,你需要的是,动手!

第五步,好像没有第五步了,如果有的话,我们可以学习一下利用Pangolin显示一下你建出来的pose和3D点。

好了,当你有了一个基本了解后,让我们深入来撸一撸SLAM,这个阶段,我还是不建议去啃各种数学知识,还是以代码为主,让我们来沉下心来啃啃ORB-SLAM,遇到问题随意百度Google。

如果仅仅只有图像数据,你会发现,你建出来的Pose并不平滑,点也不怎么收敛。为什么?视觉会存在漂移呀,怎么办?多传感器融合!所以,你接着需要继续了解一下IMU是什么,GPS是什么。他们为什么能帮助解决尺度飘飞的问题以及他们自身的缺点是什么。谈到多传感器融合,这个时候你就需要知道两条主线了,一种是基于滤波的算法,例如MSCKF。一种是基于优化的算法,例如ORB-SLAM。如果你的数学代码基础足够好,你可以啃啃MSCKF,但是如果你进去了各种碰壁,我建议你:先尝试一下怎么利用IMU和GPS数据用滤波算法,比如EKF,去生成一个完整的R,t出来。然后再把这个R,t和视觉的R,t想个办法融合一下,得到一个最终的比较好的R,t。我们称这种融合为:松耦合。有了这个基础后,你再来学一下传感器的紧耦合算法,例如MSCKF。

那好,我继续写点。前面说了,前端很多东西都比较简单,后端非线性优化才是挑战。如之前承诺,我要写一个打死雅可比系列,我的目标是把你能找到的那些又臭又长的东西肢解,保证都是干货。例如,你学李代数的时候可能听过BCH近似,但实际项目用过这些公式吗?不要紧,你会看到这些东西怎么被用上的。废话少说,直接来干货:

https://www.cnblogs.com/tchenai/p/9796509.html

https://www.cnblogs.com/tchenai/p/9815621.html

https://www.cnblogs.com/tchenai/p/9815628.html

其中,李群与李代数是一个铺垫基础内容,后面两篇才是你要重点关注的(最近手头工作比较忙,请谅解还没全部更新,大家先看看贴出来的东西)。另外,我也会把一些其他东西放在博客上,例如给公司同事的培训内容。大家有时间可以翻翻,或许能有点用。

推荐阅读:

吐血整理|3D视觉系统化学习路线

那些精贵的3D视觉系统学习资源总结(附书籍、网址与视频教程)

超全的3D视觉数据集汇总

大盘点|6D姿态估计算法汇总(上)

大盘点|6D姿态估计算法汇总(下)

机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划

汇总|3D点云目标检测算法

汇总|3D人脸重建算法

那些年,我们一起刷过的计算机视觉比赛

总结|深度学习实现缺陷检测

深度学习在3-D环境重建中的应用

汇总|医学图像分析领域论文

大盘点|OCR算法汇总

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会(ICRA/IROS/ROBIO/CVPR/ICCV/ECCV等)、顶刊(IJCV/TPAMI/TIP等)、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近1000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

关注
打赏
1655516835
查看更多评论
立即登录/注册

微信扫码登录

0.5091s