小觅智能开学季 | 学习 SLAM 该如何入门?(持续更新)
开学季,又有一批学 SLAM 的童鞋们要入坑了😂,为了方便大家愉快地学习,小觅智能整理了下知乎上 SLAM 领域的活跃问答者 @半闲居士 @毛曙源 @立党 @bobin @太一吾鱼水 @极智嘉科技 的高质量答案供大家参考哟~
0)SLAM 是什么?
SLAM 是同步定位与地图构建 (Simultaneous Localization And Mapping) 的缩写,最早由 Hugh Durrant-Whyte 和 John J.Leonard 提出。SLAM 主要用于解决移动机器人在未知环境中运行时定位导航与地图构建的问题。
SLAM 实际上是一个典型的军转民用的技术,探测器登陆未知环境的星球进行科研研究时,面对复杂的大规模环境,而无法对其进行实时遥控时,必须通过实现同步定位与地图创建才能完成导航任务,例如美国“机遇号”、“勇气号”以及“好奇号”等火星探测器。如果放在当今社会消费级市场来理解的话,扫地机器人没有 SLAM 技术,就无法实现自主移动。
图 | 美国“好奇号”火星探测器1)这个领域的知识是什么样的?
整个 SLAM 大概可以分为前端和后端,前端的功能是根据相邻两帧图像(视觉 SLAM )或者两片点云(激光 SLAM )的匹配与比对,计算出传感器相邻时刻的位置和姿态变化,进而对机器人或者无热车进行定位;根据传感器不一样,分为激光点云、图像、RGB-D 拼接几种,其中图像配准中又分基于稀疏特征 (Sparse) 的和稠密 (Dense) 的两种。后端则主要是对前端出结果进行优化,利用滤波理论或者优化理论,最终得到最优的位姿估计。
2)确定学习方向
SLAM 是一个包含技术点范围很广的应用方向,涉及到计算机视觉,优化方法,3D ….,每项之内又会分成更多的点,如果没有目标去学习很容易迷失其中,因此确定目标是非常重要的!
图 | 日常学习 SLAM 状态3)SLAM 基础理论
一、数学方面
建议阅读 Thrun 的《Probabilistic Robotics》,了解下概率学是如何解决机器人中的问题的。
学习贝叶斯滤波以及贝叶斯公式在各个问题 (定位,SLAM) 中的应用。
针对优化的话,建议学透最小二乘优化和数学推导,因为最后很多问题都归结到最小二乘优化,然后就是梯度下降、求 Jacobian 等。
二、编程方面
优质的 SLAM 框架要兼顾速度和精确度
国外做 SLAM 教学的时候会使用 Matlab 做实验,Python 语言也很不错,Python 3 支持SciPy ,OpenCV,ROS 等重要工具,不过依然有大量的诸如 g2o 等基础性库在 Python下无法使用。目前大部分 Vision 或者 RGBD 的 SLAM 框架都是用 C++ 来时实现完成的以确保运算速度。如果有志于在这个领域做深入研究,夯实的 C++ 基础必不可少。 Introduction to Algorithms,以及 C++ Primer 等,都是不错的书籍。
4)硬件和实验上的知识储备
SLAM 开源资源
SLAM 相关的开源代码,里面包括了视觉 SLAM 和激光 SLAM 的多种 SLAM 方法,大多还附带论文
ROS 系统,目前在机器人领域非常常用,很多研究会在这个社区上公开源代码,这套系统基本是机器人入门必学的系统
KITTI 数据库,涵盖量比较全,数据采集自汽车平台,包含了物体检测、车道检测、SLAM 等相关内容
RGB-D Camera 选择
目前的主流视觉深度传感器方案主要分结构光,Time-of-Flight 和纯双目三类。双目跟结构光一样,都是使用三角测量法根据物体匹配点的视差反算物体距离,只是双目是用自然光,而结构光是用主动光发射特定图案的条纹或散斑。ToF 是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。
曾经红极一时的 Kinect 1,2 代(现已停产)采用的是结构光和 ToF,ToF 和结构光都属于主动光,容易受可见光和物体表面干扰,所以更适合室内和短距离的应用场景。
图 | 「视觉+结构光+惯性导航」融合的双目方案效果更好将双目和结构光的优点结合起来,用双目的相差计算方法加上红外的结构光对黑暗和无纹理的情况作辅助,小觅智能采用了「视觉+结构光+惯性导航」融合的双目结构光深度惯导相机方案,可在无纹理的物体(像是白墙)和全黑情况及室内外条件下使用。
5)推荐阅读的书籍
[Multiple View Geometry in Computer Vision] 这本书基本涵盖了 Vision-based SLAM这个领域的全部理论基础,另外建议配合 Berkeley 的课件学习。(更新:这本书书后附录也可以一并读完,包括附带 bundle adjustment 最基本的 levenberg marquardt 方法,newton 方法等)
[Probabilistic Robotics] 了解概率学是如何解决机器人中的问题的
[state estimation for Robotics] 这本书能够帮你很快建立整套关于状态估计理论的框架,同时在三维运动方面,提供了充分但不那么困难的学习途径
[视觉 SLAM 十四讲] 高翔博士大大深入浅出地将 SLAM 数学模型讲解得生动有趣又条理清晰,实在是 SLAM 入门不二之选(引自豆瓣书评)
[Quaternion kinematics for the error-state KF]
[Convex Optimization 凸优化]
[线性系统理论] Chi-Tsong Chen: 9780199959570: Amazon.com: Books7.
6)推荐的视频
Tim Davis 可以参考他的课件及视频,讲述 Sparse Matrix — 大型稀疏矩阵处理的一般办法。
激光 SLAM 入门视频,by Cyrill Stachniss(链接:https://pan.baidu.com/s/17U9Fr0u31gIKpQfehnnvEw 密码: u5au)
Google 开源的 Cartographer,目前来看还是非常成熟和完善的激光 SLAM 系统,可以作为重点进行学习
深蓝学院最近推出了一系列的 SLAM 课程,如果经济条件允许可以购买观看
7)欢迎点赞和分享👏👏👏
据说知乎有个不成文的规定:只收藏不点赞和分享就是耍流氓!
随手转发到微信朋友圈,让更多的人入坑吧~(不对 ❌ ,应该是高效学习 SLAM ✔️)
关注微信公众号 MYNTAI小觅智能,回复「小觅」,一键保存文中提到的完整资料哦✌🏻~
Ps:全宇宙最可爱的我们在招人,详情可见:小觅智能招聘 | 站在人工智能的风口,迎接机器人的未来