激光slam_从零开始搭二维激光SLAM --- 写作计划

本系列文章的目的是从零搭一套二维激光SLAM出来,并对其中的每个模块使用多种方法进行实现,以验证一些算法,以达到学以致用的目的。

当然,肯定是借鉴已有的SLAM算法,完全自己搭的话水平还不够。考虑将 gmapping,hector,karto,cartographer,hdl,loam,lis-sam 这几个SLAM算法中的某个模块抠出来重新实现一下。

目前打算按照如下模块进行文章及代码的编写:

1 前端里程计部分

  • 对比不同品牌的雷达的建图效果,分析雷达数据对建图的影响
  • 从零搭一个scan-to-scan的激光里程计,目前打算分别使用 ICP,NDT,PL-ICP 等算法进行实现
  • 将上述scan-to-scan的激光里程计添加上建图部分,可能分为2种:一种是实时更新地图,保持增量式的地图(gmapping),另一种是实时保存位姿,每隔一段时间从头生成一遍地图(karto)。
  • 将scan-to-scan的激光里程计进行改进,使用scan-to-map(hector与karto)的匹配方式计算激光里程计
  • 对scan-to-map的匹配方式继续进行改进,使用scan-to-submap(cartographer)的匹配方式计算激光里程计
  • 将里程计数据 融合进 激光里程计部分
  • 再将imu数据 融合进 激光里程计部分

激光里程计部分是激光SLAM的重中之重,所以将花费较长的时间进行这一模块的搭建。

当完成了这部分代码的编写,大家将学会了如何使用雷达数据与雷达数据进行匹配,如何使用雷达数据与地图数据进行匹配。

一旦我们学会了这两种匹配,那么我们将掌握激光SLAM的绝大部分内容。因为,回环检测部分与重定位部分的本质,都是如何使用当前雷达数据进行匹配的问题。

2 后端优化部分

  • karto的后端优化
  • lio-sam的后端优化

目前打算通过这两种后端优化的方式进行后端优化部分的实现。

3 回环检测部分

  • 使用ICP算法进行回环检测
  • karto的回环检测
  • cartographer的回环检测

4 基于激光雷达的重定位功能

  • 基于ICP的激光雷达重定位功能

当我们已经有了一张二维栅格地图的时候,想要在这张地图上进行导航,首先要确定机器人当前在栅格地图中的位置,这就是重定位问题。

这个模块将使用ICP算法实现基于激光雷达的重定位功能。

5 其他功能

如果读者们有想要实现的其他功能,在二维激光SLAM方面的,可以在我的公众号中回复,如果建议很好的话我也为这个功能进行实现。

感慨

场子铺的太大了,东西太多了,感觉很有压力。。。

上面的每一个模块可能都需要我看很久的代码才能实现。这么多内容,估计我要花上一年甚至更长的时间才能完成。所以开始写代码以后的文章,将以一周、两周、甚至一个月的频率进行更新。

难度很大,希望自己能够坚持下去。

当真正写完的那一天,我相信,不光是我自己,还有每篇文章都认真看的读者们,都会有非常大的收获。


文章将在 公众号: 从零开始搭SLAM 进行同步更新,欢迎大家关注。同时,也希望您将这个公众号推荐给您身边做激光SLAM的人们,大家共同进步。

激光slam_从零开始搭二维激光SLAM --- 写作计划_第1张图片

你可能感兴趣的:(激光slam)