一、安装依赖项及创建工作空间
sudo apt-get install libsdl1.2-dev
sudo apt install libsdl-image1.2-dev
-
主目录新建catkin_ws工作空间文件夹,在catkin_ws中新建src功能包文件夹
//进入src文件下载gmapping源码
cd ~/catkin_ws/src/
二、下载源码
一共需要下载五个功能包,第五个功能包geometry2需要手动下载(手动选择melodic版本下载,默认为noetic版本,会导致编译出错),移动至src路径下。(点击Code下载压缩包)
源码下载太慢,可以直接使用以下链接进行下载:
下载后,解压将五个文件夹复制到创建的工作空间src的文件夹下
三、编译工作空间
cd ~/catkin_ws
catkin_make
编译完成后后添加环境变量
//在主目录下打开.bashrc文件(该文件为隐藏文件,按ctrl+h可出现)
//最后一行加上下面路径
source devel/setup.bash
四、下载数据集跑例程
4.1 数据集下载
4.2 测试
打开第一个终端
roscore
重新打开一个终端,设置为读取仿真时间,即让系统知道现在要运行的是数据集
rosparam set use_sim_time true
在数据集文件夹下打开终端,然后查看一下话题
rostopic list
在数据集所在文件夹下打开新终端,读取base_scan话题,这个不开的话,不能在rviz里边读取话题里的信息,就看不到地图
rosrun gmapping slam_gmapping scan:=base_scan
在数据集所在文件夹下新开终端,对数据集进行play,如果需要运行其他数据集,就修改数据集名字
rosbag play --clock basic_localization_stage_indexed.bag
新建终端打开rviz
rviz
如果以上均正确,则rviz里边的Global Status:ok前边会显示绿色的√,如果为红色错误或黄色警告,可能就是base_scan那步运行有错误。然后选择add,选择by topic,选择map。
然后就可以看到在一点点建图了
将创建好的地图进行保存,打开新的终端;
//新建终端输入,保存的地图在主目录下,名为mymap
rosrun map_server map_saver -f mymap
.pgm是一个图像文件
.yaml文件
参考的博文:
ubuntu 18.04 Melodic下载gmapping源码并编译运行数据集建图_马微微?!的博客-CSDN博客_gmapping数据集
五、非源码安装的方法
sudo apt-get install ros-melodic-gmapping #根据您ROS的版本,自行更改即可
要想知道安装包安装在哪里,可以使用下面的命令:
关于gmapping 算法功能包中的话题和服务如下图所示:
从上图可以看出,gmapping需要订阅机器人关节变换话题/tf和激光雷达扫描数据话题/scan,将会发布栅格地图话题/map。
关于/tf又分为两个部分,gmapping功能包中的TF变换如下图所示:
六、Gammping原理解析
Gmapping是基于滤波SLAM框架的常用开源SLAM算法。基于RBpf粒子滤波算法,即将定位和建图过程分离,先进行定位再进行建图。在RBpf算法上做了两个主要的改进:改进提议分布和选择性重采样;
Gmapping有效利用了车轮里程计信息,这也是Gmapping对激光雷达频率要求低的原因:里程计可以提供机器人的位姿先验。而Hector和Cartographer的设计初衷不是为了解决平面移动机器人定位和建图,Hector主要用于救灾等地面不平坦的情况,因此无法使用里程计。而Cartographer是用于手持激光雷达完成SLAM过程,也就没有里程计可以用