我手写了个SLAM算法!
1、前言
前一段时间看过我文章的都知道,我打算写一个SLAM源码阅读的文章,然后,我就去读了Gmapping的源码,感受良多,不足的地方是源码太乱了,阅读起来真的不香。于是就有了这篇文章,在我仔细阅读之后,我在源码的结构基础之上,进行大刀阔斧的删减和更改之后得到一个易于阅读的建图算法功能包,极大的降低了代码量,极大的提升了阅读体验。在这里将该算法功能包分享给大家,希望需要的朋友,善待它。
之前文章链接:不可错过的gmapping算法使用与详细解释
ps:为什么是gmapping呢?因为他相对简单呗,直观容易理解,个人感觉,先吃透个简单的比较好。
2、gmapping源代码和修改后的代码的对比
2.1、文件数量的对比:
gmapping开源代码的文件树如下图:非常多且乱
my_slam_gmapping代码的文件树如下图:
2.2、文件大小对比:
gmapping开源代码的文件占 872kb 空间。
my_slam_gmapping代码的文件仅占 148kb 的空间,仅为原本代码的 1/6 左右大小。
2.3、建图效果对比:
主板使用的是TX2(Ubuntu 16.04),激光雷达是RPLIDAR A2M8(10HZ),相同的环境,相同的参数,同一台车。
gmapping算法功能包建图效果如下图:
my_slam_gmapping算法功能包建图效果如下图:
两个算法功能包参数设置一致,效果几乎无差别,说明我写的算法功能包,在效果上还是可以替代gmapping源码的。
这样的话,大家不就拥有了一套自己能轻松读懂,并且可以在实际场景中使用,而且也容易对算法进行修改了,岂不美哉!
3、如何使用该算法功能包
3.1、my_slam_gmapping功能介绍
my_slam_gmapping算法功能包除了图片中划掉的发布机器人姿态分布熵的topic之外,其他功能还是gmapping算法一致。
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、代码文件说明
4.2、代码中各种对象的说明
4.3、代码运行流程
核心代码运行流程:
5、代码获取方式
在公众号:小白学移动机器人,发送:手写SLAM算法,即可获得下载链接。
此次分享是我对该代码修改的第一版,删减的并不是非常非常彻底,但是核心代码已经完全进行了删减和修改,并且对核心代码进行了详细的中文注释。之后的分享考虑将激光雷达运动畸变去除模块,直接加到该算法中,并算法进行彻底修改和优化。
考虑到,过多的注释可能会影响阅读体验,此次分享也有核心代码未注释版的算法功能包。
本人水平有限,难免出现对代码理解不到位甚至是理解错误的地方,欢迎指出,欢迎交流,私信小编或者加我微信都可以。
如果你感觉,你真的喜欢我的文章与分享,喜欢解读源码,关注请加我微信,我新建了一个关于移动机器人技术的微信群,我邀你入群。
以往链接,点击访问。
上一篇:占据栅格地图构建(Occupancy Grid Map)
下一篇:详解2D激光雷达运动畸变去除
系列文章:从零搭建ROS机器人
如果你感觉,我的文章比较适合你,关注我,点个赞,给你不一样的惊喜。
我手写了个SLAM算法!相关推荐
- 手写字体的fisher算法识别
代表了一些投影的方法 最佳W值的确定: 最佳w值的确定实际上就是对Fisher准则函数求取其达极大值时的. 对于这个问题可以采用拉格朗日乘子算法解决,保持分母为一非零常数c的条件下,求其分子项的极大值 ...
- python识别数字程序_python实现识别手写数字 python图像识别算法
写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且因为在编写的过程中,把前面的一些逻辑也修改了一些,将其变得更 ...
- svm手写数字识别_KNN 算法实战篇如何识别手写数字
上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数据集是一个用于图像处理的数据集,这些数据描绘了 [0, 9] 的数字,我们可以用KNN 算 ...
- python手写数字识别实验报告_python实现识别手写数字 python图像识别算法
写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且因为在编写的过程中,把前面的一些逻辑也修改了一些,将其变得更 ...
- 手写数字识别——KNN算法的应用
项目说明 训练之后,即可识别手写数字图片如下(我用windows自带的画板画的,可能有点丑,见谅): 等等 数据集下载 链接:https://pan.baidu.com/s/1wWAuZxWUUhlC ...
- 手写系列之手写LM(Levenberg–Marquardt)算法(基于eigen)
紧接上次的手写高斯牛顿,今天顺便将LM算法也进行了手写实现,并且自己基于eigen的高斯牛顿进行了对比,可以很明显的看到,LM的算法收敛更快,精度也略胜一筹,这次高博的书不够用了,参考网上伪代码进行实 ...
- 【算法入门】用Python手写五大经典排序算法,看完这篇终于懂了!
算法作为程序员的必修课,是每位程序员必须掌握的基础.作为Python忠实爱好者,本篇将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种算法各自的优缺点和应用点.相信我,耐心看 ...
- 用Python手写五大经典排序算法,看完这篇终于懂了!
算法作为程序员的必修课,是每位程序员必须掌握的基础.作为Python忠实爱好者,本篇东哥将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种算法各自的优缺点和应用点.相信我,耐 ...
- python 安卓app按钮数字识别_Python 手写数字识别-knn算法应用
knn算法代码: from numpy import * import operator import os def img2vector(filename): """ ...
最新文章
- 网络编程常见问题总结
- elasticsearch常见属性单词解释
- python线程状态_Python线程
- python矩阵计算_PYTHON 矩阵运算
- 中国国民休闲状况调查(2020)
- sort和qsort函数的用法
- plt的纵坐标的百分号显示
- 计算机应用基础问答题,计算机应用基础问答题
- Codeforces Round #121 (Div. 1) A. Dynasty Puzzles DP
- 20个基本电路图讲解_12v太阳能充电电路图大全
- delphi控件属性大全-详解-简介
- checkbox属性checked=checked已有,但却不显示打勾的解决办法
- web安全day11:进一步学习windows域的gpo
- 【GIS导论】实验二 数据采集
- bat脚本 时间处理 获取时间差
- 一次历时两周的实习生笔试
- 三边测距定位算法详解
- angular 易犯错误
- [buuctf][Zer0pts2020]easy strcmp
- Python手册(Machine Learning)--statsmodels(Regression)
热门文章
- Visual C++程序设计——MFC整理笔记
- 如何使用JavaScript实现纯前端读取和导出excel文件
- sts安装CheckStyle
- oracle停监听服务,ORACLE监听服务启动后又停止了的解决
- 大智慧c语言编程,大智慧分析家 c语言 编程接口
- 16g电脑内存有什么好处_开车播放车载音乐 选择车载U盘有什么好处?
- 修改手机为单/双IMEI号
- 论“取势、明道、优术”的趋势
- [转帖]Linux - NetworkManager网络管理工具
- arm-linux移植zmodem命令lrz,lsz