当前位置:文档之家› SLAM

SLAM

1.SLAM算法框架
SLAM算法的核心分为三个步骤:
1.预处理。

例如,对激光雷达原始数据所优化,剔除一些有问题的数据,或者进行滤波。

2.匹配。

也就是说把当前这一个局部环境的点云数据在已经建立地图上寻找到对应的位置。

3.地图融合。

将这一轮来自激光雷达的新数据拼接到原始地图当中,最终完成地图的更新。

细化来说,主要包含以下模块:
•sensor data process
•Visual Odometry,前端优化/定位,针对视觉SLAM
•Backend(Optimization),后端/全局优化,例如GraphSLAM,Cartographer里的SPA •Mapping,常见有Matrix and Topologic map两种形式,各有优缺
•Loop cloure detection,回环检测,进一步减少累计误差
一个基本的基于激光雷达的SLAM系统流程如图1所示。

系统需要的采集信息包含激光雷达扫描信息和里程计信息(或者是IMU)。

然后利用卡尔曼滤波(EKF)等方法融合激光雷达扫描信息和里程计信息,得到环境地图。

常用的基于激光雷达的SLAM算法有Gmapping,hector SLAM,Cartographer。

图1Laser SLAM流程图
2.Cartographer算法
Cartographer,中文直译为建图者,是Google开源的一个ROS系统支持的2D和3D SLAM 库。

开发人员可以用这个库实现二维和三维定位及制图功能。

其SLAM算法结合了来自多个传感器(比如,LIDAR、IMU和摄像头)的数据,同步计算传感器的位置并绘制传感器周围的环境。

开源Cartographer还搭配有开源机器人操作系统(ROS),使得该技术库更易于
部署到机器人、无人驾驶、无人机等系统。

2.1Cartographer算法原理
Cartographer的主要内容包含融合多传感器数据的局部submap创建和用于闭环检测的scan match策略的实现,系统框架如图4所示。

闭环检测是用来消除局部构图过程中产生的累积误差。

用于闭环检测的基本单元是submap。

一个submap是由一定数量的laser scan构成。

将一个laser scan插入其对应的submap时,会基于submap已有的laser scan及其它传感器数据估计其在该submap中的最佳位置。

submap的创建在短时间内的误差累积被认为是足够小的。

然而随着时间推移,越来越多的submap被创建后,submap间的误差累积则会越来越大。

因此需要通过闭环检测适当的优化这些submap的位姿进而消除这些累积误差,这就将问题转化成一个位姿优化问题。

当一个submap的构建完成时,也就是不会再有新的laser scan插入到该submap时,该submap就会加入到闭环检测中。

闭环检测会考虑所有的已完成创建的submap。

当一个新的laser scan加入到地图中时,如果该laser scan的估计位姿与地图中某个submap的某个laser scan的位姿比较接近的话,那么通过某种scan match策略就会找到该闭环。

Cartographer中的scan match策略通过在新加入地图的laser scan的估计位姿附近取一个窗口,进而在该窗口内寻找该laser scan的一个可能的匹配,如果找到了一个足够好的匹配,则会将该匹配的闭环约束加入到位姿优化问题中。

图2Cartographer算法框架
2.2Cartographer库函数
Cartographer是一个独立的C++函数库。

同时,如果想要快速搭建SLAM系统,Google 也提供了ROS封装好的算法包。

Getting start with ROS
刚开始接触SLAM时,即使对算法原理非常熟悉,但编写复杂代码仍然是非常费劲的。

相比从一砖一瓦建筑大厦,不如通过充分利用现成的算法包,建立SLAM系统,快速实现SLAM功能。

通过使用Cartographer_ROS算法包,可以站在一个较高的视角上认识SLAM 的工作过程。

下载链接请见https://google-cartographer-ros.readthedocs.io/en/latest/。

Getting start without ROS
如果想要了解详细的算法代码,或是改进算法原理,可以使用Cartographer的C++库函。

有关码解读文档,可参见https://google-cartographer.readthedocs.io/en/latest/index.html。

另外,关于算法的介绍可参考论文:W.Hess,D.Kohler,H.Rapp,and D.Andor,Real-Time Loop Closure in2D LIDAR SLAM,in Robotics and Automation(ICRA),2016IEEE International Conference on.IEEE,2016.pp.1271–1278.
Cartographer ROS for TurtleBots
如果是在TurtleBots上搭建SLAM系统,Cartographer团队也提供了Cartographer SLAM for TurtleBots via Cartographer ROS,可参见https://google-cartographer-ros-for-turtlebots.readthedocs.io/en/latest/)。

Cartographer_Turtlebot 提供了很多资源,包含kobuki,kinect,hokuyo等,十分方便调用,通过熟悉这一套系统框架,
能够极大地减少代码工程量。

相关主题