我手写了个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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RAID 磁盘阵列 详解[通俗易懂]

    RAID 磁盘阵列 详解[通俗易懂]RAID,Redundant Arrays of Independent Disks的简称,独立磁盘冗余阵列,简称磁盘阵列。 磁盘阵列其实也分为软阵列 (Software Raid)和硬阵列 (Hardware Raid) 两种.  软阵列:即通过软件程序并由计算机的 CPU提供运行能力所成. 由于软件程式不是一个完整系统故只能提供最基本的 RAID容错功能. 其他如热备用硬盘的设置,

    2022年6月9日
    59
  • linux抓包命令到文件,Linux下抓包命令tcpdump详解「建议收藏」

    linux抓包命令到文件,Linux下抓包命令tcpdump详解「建议收藏」tcpdump是一个命令行实用程序,可用于捕获和检查进出系统的网络流量。它是网络管理员中用于排除网络问题和安全测试的最常用工具。尽管名称如此,使用tcpdump,您也可以捕获非TCP流量,例如UDP,ARP或ICMP。捕获的数据包可以写入文件或标准输出。tcpdump命令最强大的功能之一是它能够使用过滤器并仅捕获要分析的数据。在本文中,我们将介绍如何在Linux中使用tcpdump命令的基础…

    2022年8月20日
    10
  • Dell服务器IPMI工具远程唤醒开机

    Dell服务器IPMI工具远程唤醒开机DELL服务器不像台式机那样可以在BIOS里面设置自动的开机的时间,这也给客户的远程管理造成困扰,下面的文章可以帮助大家解决这个问题。1. 客户端上需要有ipmish.exe文件2. 启动服务器,使用Ctrl+E进入IPMI Server Management Configuration 3. 设置IPMI Server Management Configuration(1).设置 …

    2022年6月2日
    158
  • getopt函数[通俗易懂]

    getopt函数[通俗易懂]getopt函数函数说明getopt–解析命令的可选项getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下:对短选项的解析:cmd[-a][-b]对短选项及短选项的参数解析:cmd[-aa_argument][-bb_argument]选项a的参数也是可选的情况解析:cmd[-a[a_argument]]函数原型#include&…

    2022年6月11日
    40
  • 教师工龄怎么算?教师工龄和教龄的区别_教师辞职前的教龄算工龄吗

    教师工龄怎么算?教师工龄和教龄的区别_教师辞职前的教龄算工龄吗一、工龄和教龄的区别:一。工龄和教龄的概念。工龄:是指职工自与单位建立劳动关系起,以工资收入为主要来源或全部来源的工作时间,可分为一般工龄和本企业工龄。教龄:是指教师从事教学工作连续累计时

    2022年8月2日
    5
  • 硬核!高频Linux命令大总结,建议收藏~

    硬核!高频Linux命令大总结,建议收藏~前言记得不久前跟大家大分享了一波个人在平时日常工作、学习、开发、写文字、做视频等过程中,一些好用高效的在线工具和网站,并且把自己的浏览器收藏夹书签离线文件都导出给大家了。很多小伙伴后台反馈还不错,说书签一导入后,很多工具确实挺好用,主要省了很多找资源和整理的时间。今天继续分享,最近花了不少时间把平时开发过程中常用的一些Linux系统命令给做了一个大整理,形成一个常用高频Linux速查备忘录。有了它,还怕Linux操作系统常用操作和命令记不住么?接下来直接上菜吧。注:本文GitHubhtt

    2022年5月8日
    34

发表回复

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

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