我手写了个SLAM算法!「建议收藏」

我手写了个SLAM算法!「建议收藏」我手写了个SLAM算法!点击蓝色按钮,设置星标,第一时间获得文章推送哦1、前言前一段时间看过我文章的都知道,我打算写一个SLAM源码阅读的文章,然后,我就去读了Gmapping的源码,感受良多,不足的地方就是源码太乱了,阅读起来真的不香。于是就有了这篇文章,在我仔细阅读之后,我在源码的结构基础之上,进行大刀阔斧的删减和更改之后得到一个易于阅读的建图算法功能包,极大的降低了代码量,极大的提升了阅读体验。在这里将该算法功能包分享给大家,希望需要的朋友,善待它。之前文章链接:ps:为什么是gmappin

大家好,又见面了,我是你们的朋友全栈君。

1、前言

前一段时间看过我文章的都知道,我打算写一个SLAM源码阅读的文章,然后,我就去读了Gmapping的源码,感受良多,不足的地方是源码太乱了,阅读起来真的不香。于是就有了这篇文章,在我仔细阅读之后,我在源码的结构基础之上,进行大刀阔斧的删减和更改之后得到一个易于阅读的建图算法功能包,极大的降低了代码量,极大的提升了阅读体验。在这里将该算法功能包分享给大家,希望需要的朋友,善待它。

之前文章链接:不可错过的gmapping算法使用与详细解释

ps:为什么是gmapping呢?因为他相对简单呗,直观容易理解,个人感觉,先吃透个简单的比较好。

2、gmapping源代码和修改后的代码的对比

2.1、文件数量的对比:

gmapping开源代码的文件树如下图:非常多且乱

在这里插入图片描述

my_slam_gmapping代码的文件树如下图:

屏幕截图 2020-11-15 18_48_48

2.2、文件大小对比:

gmapping开源代码的文件占 872kb 空间。

my_slam_gmapping代码的文件仅占 148kb 的空间,仅为原本代码的 1/6 左右大小。

2.3、建图效果对比:

主板使用的是TX2(Ubuntu 16.04),激光雷达是RPLIDAR A2M8(10HZ),相同的环境,相同的参数,同一台车。

gmapping算法功能包建图效果如下图:

屏幕截图 2020-11-15 19_07_15

my_slam_gmapping算法功能包建图效果如下图:

屏幕截图 2020-11-15 19_08_16

两个算法功能包参数设置一致,效果几乎无差别,说明我写的算法功能包,在效果上还是可以替代gmapping源码的。

这样的话,大家不就拥有了一套自己能轻松读懂,并且可以在实际场景中使用,而且也容易对算法进行修改了,岂不美哉!

3、如何使用该算法功能包

3.1、my_slam_gmapping功能介绍

my_slam_gmapping算法功能包除了图片中划掉的发布机器人姿态分布熵的topic之外,其他功能还是gmapping算法一致。

1

3.2、my_slam_gmapping使用说明

若ROS 版本为ROS Kinetic,则可以直接将my_slam_gmapping功能包复制到各自工作空间的src文件夹下,然后catkin_make编译,再之后使用roslaunch命令启动功能包,命令如下:

roslaunch my_slam_gmapping my_slam_gmapping.launch

若ROS 版本为其他版本,不可以直接使用,但是可以把该功能包的文件复制到各自的版本中自建的功能包里,自行编译也可行。

其他操作和gmapping算法功能包无差别,这里就不介绍了。

4、my_slam_gmapping代码阅读

以下高清图在分享文件包中有。先仔细看完下面的图,对理解代码十分有好处。

4.1、代码文件说明

my_slam_gmapping

4.2、代码中各种对象的说明

my_slam_gmapping的重要对象gsp_

my_slam_gmapping的重要对象map

4.3、代码运行流程

核心代码运行流程:

2

5、代码获取方式

在公众号:小白学移动机器人,发送:手写SLAM算法,即可获得下载链接。

此次分享是我对该代码修改的第一版,删减的并不是非常非常彻底,但是核心代码已经完全进行了删减和修改,并且对核心代码进行了详细的中文注释。之后的分享考虑将激光雷达运动畸变去除模块,直接加到该算法中,并算法进行彻底修改和优化。

考虑到,过多的注释可能会影响阅读体验,此次分享也有核心代码未注释版的算法功能包。

本人水平有限,难免出现对代码理解不到位甚至是理解错误的地方,欢迎指出,欢迎交流,私信小编或者加我微信都可以。

如果你感觉,你真的喜欢我的文章与分享,喜欢解读源码,关注请加我微信,我新建了一个关于移动机器人技术的微信群,我邀你入群。
在这里插入图片描述
以往链接,点击访问。

上一篇:占据栅格地图构建(Occupancy Grid Map)
下一篇:详解2D激光雷达运动畸变去除
系列文章:从零搭建ROS机器人

如果你感觉,我的文章比较适合你,关注我,点个赞,给你不一样的惊喜。

稿定设计导出-20200810-205521
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148046.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 国外免费高速php空间,0fees – 300M国外高速免费PHP空间

    国外免费高速php空间,0fees – 300M国外高速免费PHP空间0fees是美国的免费空间,速度不错,提供300M空间,每月10G流量限制,ftp、web方式上传管理文件,支持PHP5,提供3个MySQL数据库,无限个支持POP3的电子邮箱,可以添加6个二级域名,绑定6个域名,可建6个不同网站,cPanel管理面板。网址:http://www.0fees.net点“OrderNow!”申请。申请很简单,填写用户名、密码、电子邮箱、网站类型、网站语言、验证码,…

    2022年9月21日
  • java softreference_Java引用总结–StrongReference、SoftReference、WeakReference、PhantomReference…[通俗易懂]

    java softreference_Java引用总结–StrongReference、SoftReference、WeakReference、PhantomReference…[通俗易懂]Java引用总结–StrongReference、SoftReference、WeakReference、PhantomReference1Java引用介绍Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为:强引用>软引用>弱引用>虚引用⑴强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃…

    2022年9月8日
  • pycharm的调试功能_安卓调试模式怎么打开

    pycharm的调试功能_安卓调试模式怎么打开Debug调试,是对于学习编程人员来说是一项重要的技能。只有当你学会debug了以后,才可以正确的知道程序的走向流程是如何的,DEBUG是排除程序故障的意思。debug则是通过工具来对代码进行调试,进而一步步找出程序中出现bug的位置,也就是程序中具体错误代码的位置。Pycharm中的debug模式首先,还是用示例说话,我们先写一段简短的代码,来帮助我们完成今天要讲的内容。初学者可能没见过for循环中的下划线‘_’,在Python中是占位符的意思,因…

    2022年8月28日
  • 【Linux】vim的复制粘贴

    【Linux】vim的复制粘贴vim复制粘贴1.选定文本块。使用v进入可视模式,移动光标键选定内容。2.复制的命令是y,即yank(提起),常用的命令如下:y在使用v模式选定了某一块的时候,复制选定块到缓冲区用;yy复制整行(nyy或者yny,复制n行,n为数字);y^复制当前到行头的内容;y$复制当前到行尾的内容;yw复制一个word(nyw或者ynw,复制n个word,n为数字);yG复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾)

    2022年9月16日
  • 工厂供电复习笔记

    工厂供电复习笔记概述什么是电网,电网怎么区分。基本概念熟练掌握。1.2电力系统接线方式和电压等级电压等级每年都考,一些基本的概念。有一张图,给一些相关参数算其他没给的参数。长线短线中性点运行方式相当重要中性点不解地,某一相不解地,为什么还能继续工作。中性点为什么经过消弧线圈接地,进位对地电流超过多少就需要。中性点为什么经小电阻接地。中性点直接接地。TN-C系统外壳带电怎么办TN-S系统TN-C-S系统市电就是这三种系统TN系统,中性线接地,有什么作用:ppt三条TT系统IT系统第二章工

    2022年9月4日
  • java注解拦截_轻松实现java拦截器+自定义注解

    java注解拦截_轻松实现java拦截器+自定义注解本文将用简洁的代码构建一个springboot的拦截器。拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就可以使用。为了方便,之后又引入了注解。目录和概述概述假设需求:访问项目的controller是都要进行”token验证”,除了某些像登录之类的方法。项目结构:TokenInterceptor.java自定义拦截器InterceptorConfig.java添加拦截器进入项目NoN…

    2022年5月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号