点击上方“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天内无条件退款

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

学习SLAM需要哪些预备知识?相关推荐

  1. IP地址和子网划分学习笔记之《预备知识:进制计数》

    一.序:IP地址和子网划分学习笔记开篇 只要记住你的名字,不管你在世界的哪个地方,我一定会去见你. --新海诚 电影<你的名字> 在我们的日常生活中,每个人的名字对应一个唯一的身(敏)份( ...

  2. 学习数据结构的一些预备知识

    数据结构概述 狭义:数据结构是专门研究数据存储问题 数据的存储包含两方面:个体的存储+个体关系的存储 广义:数据结构既包括数据的存储也包含数据的操作 对存储数据的操作就是算法 算法: 狭义:算法是和数 ...

  3. 【金阳光测试】Android自动化 -- 学习历程:自动化预备知识上下

    章节:自动化基础篇--自动化预备知识上&&下 网易云课堂: 上:http://study.163.com/course/courseLearn.htm?courseId=712011# ...

  4. 学习Identity Server 4的预备知识

    我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去.这里需要使用identity server 4 做单点登陆.下面就简单学习一下相关的预备知识. ...

  5. 学习一个新领域的知识的最佳方法和最快时间各是什么?

    Liu Cao ,「学习方法」是个伪命题 玉某人.冷峻.淡之 等人赞同 有个TED演讲简直是为这个问题量身订做的. The first 20 hours-How to learn Anything. ...

  6. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ

    开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...

  7. react学习预备知识_在10分钟内学习React基础知识

    react学习预备知识 If you want to learn the basics of React in the time it takes you to drink a cup of coff ...

  8. 【李沐:动手学深度学习pytorch版】第2章:预备知识

    第2章 预备知识 2.1 数据操作 2.1.1 入门 导入的是torch而不是pytorch import torch 一个数叫标量 一个轴叫向量 两个轴叫矩阵 arange # 生成行向量 x = ...

  9. 学习四驱飞行器 ,MPU6050的预备知识与概要

    最近在学习四轴飞行器,记录一篇关于MPU6050的相关知识 . 相关资料可以查找野火STM32F103霸道的文档资料. 一.预备知识 1.姿态 在飞行器中,飞行姿态是非常重要的.以飞机自身的中心建立坐 ...

最新文章

  1. 李宏毅深度学习作业二
  2. 【PAT笔记】数学问题——素数和质因数
  3. poj2154 Color ——Polya定理
  4. python关于文件的编程题_《Python编程》源代码文件
  5. 屏占比更高!16英寸Macbook Pro再曝光
  6. python工资一般多少西安-python西安薪资
  7. 快速将 gif 图转成 jpg 图片
  8. word打不开服务器无响应,word文档打开后未响应怎么办 word打开后一直未响应
  9. idou老师教你学istio :基于角色的访问控制
  10. java 回调机制分为:异步回调 同步回调
  11. 企业并购方式及并购操作流程
  12. 伽卡他卡使用教程_【伽卡他卡电子教室教师端介绍】伽卡他卡电子教室教师端特色_伽卡他卡电子教室教师端说明-最笨下载...
  13. 张一鸣应该接过张近东的枪
  14. 天猫直通车的相关定义
  15. 优秀开源项目(持续更新)
  16. nfs linux 权限不够,nfs Permission denied 的一种情况
  17. Input框,禁止输入中文
  18. 《口算大作战 概念版》功能规格说明书
  19. 海信linux系统信息,海信公交车数据采集系统   调试信息
  20. 用dnsmasq 实现DNS劫持

热门文章

  1. Entity Framework 5中遇到的 mysql tinyint(1) 转换为 bool 的问题 (我用的是VS2013中的EF5版本)...
  2. 一个KindEditor的插件[myFocus]
  3. IT-标准化-系列-7.使用VPC+VNC管理虚拟机
  4. 一、JVM及Java体系结构
  5. Leangoo团队敏捷开发实现过程
  6. 高可用 Prometheus 架构实践中的踩坑集锦
  7. 这本书,让我秒懂了微服务架构
  8. 源码级深挖AQS队列同步器
  9. 这个算法网站,强推。
  10. Redis 核心篇:唯快不破的秘密