内容来自知乎,「3DCV」整理,如有侵权请联系删除
https://www.zhihu.com/question/35186064
作者:
紫薯萝卜
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是必不可少的工具。
早点上手肯定没得错。
三、进阶