我手写了个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)
上一篇 2022年6月29日 下午4:16
下一篇 2022年6月29日 下午4:36


相关推荐

  • 软件测试中根据测试用例设计的方法,测试用例设计方法有哪些?举例说明[通俗易懂]

    软件测试中根据测试用例设计的方法,测试用例设计方法有哪些?举例说明[通俗易懂]众所周知,测试用例是编制的一组测试输入、执行条件及预期结果,专门为的是某个特殊目标,即测试某个程序路径,或是核实是否满足某个特定的需求。一般来讲,常用的测试用例设计方法有五种,分别是:正交实验法、边界值分析法、等价类划分法、判定表法、错误推测法。当然测试用例的设计方法不止这些,下面只是通过举例说明着重讲讲这常用的五种方法。一、正交实验法用语言描述正交实验法会很抽象难懂,简单说,就是在各因素互相独立…

    2022年6月29日
    24
  • pip安装scrapy失败_scrapy框架运行

    pip安装scrapy失败_scrapy框架运行错误如图所示,running setup.py install for Twisted…..errorTwisted依赖库安装报错,重新下载手动安装一下下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs注意:看下安装的python是什么版本,我安装的python 3.9.0,就下载cp39,64位的下载安装的版本不对,就会报:Twisted-20.3.0-cp38-cp38-win_amd64.whl is not a support…

    2022年8月19日
    10
  • 大数据框架综述

    大数据框架综述一 什么是大数据大数据 IT 行业术语 是指无法在一定时间范围内用常规软件工具进行捕捉 管理和处理的数据集合 由数据组成的集合 是需要新处理模式才能具有更强的决策力 洞察发现力和流程优化能力的海量 高增长率和多样化的信息资产 它具有以下特征 1 海量的数据规模 随着信息技术的高速发展 数据开始爆发性增长 存储单位从过去的 GB 到 TB 乃至现在的 PB EB 级别 2 快速的数据流转 大数据的产生

    2026年3月17日
    2
  • 我看AutoEventWireup

    我看AutoEventWireup这句代码是自动生成的,在代码的第一句,那么你理解这个意思吗?   下面,着重说一下AutoEventWireup。大家可能不太注意这个,系统自动生成的一般我们情况下不用考虑,下面我们通过一个例子看一下这到底是什么?   如下是一个简单的计算机例子,三个Textbox控件,两个Label,一个Button组成。在这里我们的AutoEventWireup的值为True。

    2022年5月28日
    32
  • Oracle修改用户密码过期时间「建议收藏」

    Oracle修改用户密码过期时间「建议收藏」部署的Web应用突然无法登录系统,后台尝试重新启动看能不能恢复,发现启动时在数据库连接池部分报错,怀疑无法连接数据库。使用的是oracle数据库,通过plsql发现也无法连接,从报错可以看出应该是用户密码过期了,因此需要要修改用户密码。通过sysdba身份登录,修改用户密码:alteruserusernameidentifiedbypassword;为了避免密码再次过期,打算设…

    2022年7月28日
    9
  • Java实现数组反转的几种方法

    Java实现数组反转的几种方法Java实现数组反转的几种方法要求:首先创建一个长度是5的数组,并填充随机数。对这个数组实现反转效果方法一:/***方法一:使用临时数组*/@Testpublicvoidmethod1(){int[]array=newint[5];System.out.println(“【方法一】:…

    2022年5月3日
    93

发表回复

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

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