我手写了个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
在这里插入图片描述

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 禁用LLDP

    禁用LLDP场景:在未回放pcap包的情况下,dpdk探针抓包时,会收到LLDP包(0x88cc,链路层发现协议(LinkLayerDiscoveryProtocol,LLDP)是一种数据链路层协议。)此时,我们可以修改发包服务器的配置,禁用LLDP。方法:以下方法摘抄至[此博客](http://blog.itpub.net/31520497/viewspace-2747053/)因此服务器中所有扩展网卡(X710)、板载网卡和ilo均需要关闭lldp功能,因此需要在服务器测试查找板载lldp关闭的接口

  • linux tomcat自动重启(linux重启服务命令)

    在Linux系统下,重启Tomcat使用命令操作的!首先,进入Tomcat下的bin目录cd/usr/local/tomcat/bin使用Tomcat关闭命令./shutdown.sh查看Tomcat是否以关闭ps-ef|grepjava如果显示以下相似信息,说明Tomcat还没有关闭root1297610Sep01?00:10:22/u…

  • Spark Streaming Join「建议收藏」

    Spark Streaming Join「建议收藏」多数据源Join思路多数据源Join大致有以下三种思路:数据源端Join,如Android/IOS客户端在上报用户行为数据时就获取并带上用户基础信息。计算引擎上Join,如用SparkStreaming、Flink做Join。结果端Join,如用HBase/ES做Join,Join键做Rowkey/_id,各字段分别写入列簇、列或field。三种思路各有优劣,使用时注意…

  • veriloghdl和vhdl比较_强和比较强哪个更强一些

    veriloghdl和vhdl比较_强和比较强哪个更强一些1.列表verilogVHDL`includeLIBRARYIEEEmoduleENTITYarchitectureprocessalwayswire/regsignalassign<==阻塞-组合逻辑<=非阻塞-时序逻辑clk’eventandclk=‘1’posedge

  • rsync备份大量数据_SnapShot能做增量备份吗

    rsync备份大量数据_SnapShot能做增量备份吗文章目录一、rsync简介二、实验过程三、rsync命令四、编译安装包下载一、rsync简介  sync是一个常用的Linux应用程序,用于文件同步。它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。  它名称里面的r指的是remote,rsync其实就是“远程同步”(remotesync)的意思。与其他文件传输工具(如FTP或scp)不同,rsync的最大特点是

    2022年10月13日
  • 三层开发中容易犯的错误(转)

    三层开发中容易犯的错误(转)

发表回复

您的电子邮箱地址不会被公开。

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