学习SLAM需要哪些预备知识?
点击上方“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需要哪些预备知识?相关推荐
- IP地址和子网划分学习笔记之《预备知识:进制计数》
一.序:IP地址和子网划分学习笔记开篇 只要记住你的名字,不管你在世界的哪个地方,我一定会去见你. --新海诚 电影<你的名字> 在我们的日常生活中,每个人的名字对应一个唯一的身(敏)份( ...
- 学习数据结构的一些预备知识
数据结构概述 狭义:数据结构是专门研究数据存储问题 数据的存储包含两方面:个体的存储+个体关系的存储 广义:数据结构既包括数据的存储也包含数据的操作 对存储数据的操作就是算法 算法: 狭义:算法是和数 ...
- 【金阳光测试】Android自动化 -- 学习历程:自动化预备知识上下
章节:自动化基础篇--自动化预备知识上&&下 网易云课堂: 上:http://study.163.com/course/courseLearn.htm?courseId=712011# ...
- 学习Identity Server 4的预备知识
我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去.这里需要使用identity server 4 做单点登陆.下面就简单学习一下相关的预备知识. ...
- 学习一个新领域的知识的最佳方法和最快时间各是什么?
Liu Cao ,「学习方法」是个伪命题 玉某人.冷峻.淡之 等人赞同 有个TED演讲简直是为这个问题量身订做的. The first 20 hours-How to learn Anything. ...
- (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ
开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...
- 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 ...
- 【李沐:动手学深度学习pytorch版】第2章:预备知识
第2章 预备知识 2.1 数据操作 2.1.1 入门 导入的是torch而不是pytorch import torch 一个数叫标量 一个轴叫向量 两个轴叫矩阵 arange # 生成行向量 x = ...
- 学习四驱飞行器 ,MPU6050的预备知识与概要
最近在学习四轴飞行器,记录一篇关于MPU6050的相关知识 . 相关资料可以查找野火STM32F103霸道的文档资料. 一.预备知识 1.姿态 在飞行器中,飞行姿态是非常重要的.以飞机自身的中心建立坐 ...
最新文章
- 李宏毅深度学习作业二
- 【PAT笔记】数学问题——素数和质因数
- poj2154 Color ——Polya定理
- python关于文件的编程题_《Python编程》源代码文件
- 屏占比更高!16英寸Macbook Pro再曝光
- python工资一般多少西安-python西安薪资
- 快速将 gif 图转成 jpg 图片
- word打不开服务器无响应,word文档打开后未响应怎么办 word打开后一直未响应
- idou老师教你学istio :基于角色的访问控制
- java 回调机制分为:异步回调 同步回调
- 企业并购方式及并购操作流程
- 伽卡他卡使用教程_【伽卡他卡电子教室教师端介绍】伽卡他卡电子教室教师端特色_伽卡他卡电子教室教师端说明-最笨下载...
- 张一鸣应该接过张近东的枪
- 天猫直通车的相关定义
- 优秀开源项目(持续更新)
- nfs linux 权限不够,nfs Permission denied 的一种情况
- Input框,禁止输入中文
- 《口算大作战 概念版》功能规格说明书
- 海信linux系统信息,海信公交车数据采集系统 调试信息
- 用dnsmasq 实现DNS劫持
热门文章
- Entity Framework 5中遇到的 mysql tinyint(1) 转换为 bool 的问题 (我用的是VS2013中的EF5版本)...
- 一个KindEditor的插件[myFocus]
- IT-标准化-系列-7.使用VPC+VNC管理虚拟机
- 一、JVM及Java体系结构
- Leangoo团队敏捷开发实现过程
- 高可用 Prometheus 架构实践中的踩坑集锦
- 这本书,让我秒懂了微服务架构
- 源码级深挖AQS队列同步器
- 这个算法网站,强推。
- Redis 核心篇:唯快不破的秘密