ROS机器人学习(六)--ROS SLAM功能包应用方法

本文最后更新于:2022年5月29日 上午

gmapping功能包介绍

目前来讲是最成熟也是用得最多的一种SLAM功能包。

  • 基于激光雷达

  • Rao-Blackwellized粒子滤波算法

  • 二维栅格地图

  • 需要机器人提供里程计信息

  • OpenSlam开源算法

  • 输出地图话题:

    nav_msga/OccupancyGrid
    V3CsPA.png

安装gmapping

1
sudo apt install ros-kinetic-gmapping

如果之前没有安装move_base,使用以下命令安装:

1
sudo apt install ros-kinetic-move-base

栅格地图取值原理

V3Cy8I.png

Name Description
致命障碍 栅格值为254,障碍与机器人的中心重合,此时机器人必然与障碍物发生碰撞。
内切障碍 栅格值为253,障碍物处于机器人轮廓的内切圆内,此时机器人也必然与障碍物发生碰撞。
外切障碍 栅格值为252~128,障碍物处于机器人的轮廓的外切圆内,此时机器人与障碍物临界接触,不一定发生碰撞。
非自由空间 栅格值为128~0,障碍物附近区域,一旦机器人进入该区域,将有较大概率发生碰撞,属于危险警戒区。机器人应该尽量避免进入。
自由区域 栅格值为0,此处没有障碍物,机器人可以自由通过。
未知区域 栅格值为255,此处还没有探知是否有障碍物,机器人可以前往继续建图。

配置gmapping

1、创建 mbot_navigation 功能包

1
2
catkin_create_pkg mbot_navigation geometry_msgs move_base_msgs roscpp rospy
catkin_make

2、新建启动文件gmapping.launch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<launch>
<arg name="scan_topic" default="scan" />

<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" clear_params="true">
<param name="odom_frame" value="odom"/>
<param name="map_update_interval" value="5.0"/>
<!-- Set maxUrange < actual maximum range of the Laser -->
<param name="maxRange" value="5.0"/>
<param name="maxUrange" value="4.5"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="0.01"/>
<param name="srt" value="0.02"/>
<param name="str" value="0.01"/>
<param name="stt" value="0.02"/>
<param name="linearUpdate" value="0.5"/>
<param name="angularUpdate" value="0.436"/>
<param name="temporalUpdate" value="-1.0"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="80"/>
<param name="xmin" value="-1.0"/>
<param name="ymin" value="-1.0"/>
<param name="xmax" value="1.0"/>
<param name="ymax" value="1.0"/>
<param name="delta" value="0.05"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01"/>
<param name="lasamplerange" value="0.005"/>
<param name="lasamplestep" value="0.005"/>
<remap from="scan" to="$(arg scan_topic)"/>
</node>
</launch>

参数说明参考官网介绍:http://wiki.ros.org/gmapping/

3、新建启动文件gmapping_demo.launch

1
2
3
4
5
6
7
8
<launch>

<include file="$(find mbot_navigation)/launch/gmapping.launch"/>

<!-- 启动rviz -->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find mbot_navigation)/rviz/gmapping.rviz"/>

</launch>

启动gmapping演示

1
2
3
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation gmapping_demo.launch
roslaunch mbot_teleop mbot_teleop.launch

现在可以使用键盘控制机器人模型运动,进行建图。V3C62t.png

保存地图

建图完成后,在 mbot_navigation 功能包 maps 目录下,使用下面命令保存地图:

1
rosrun map_server map_saver -f cloister_gmapping

分别生成一个cloister_gmapping.pgm图像文件和一个cloister_gmapping.yaml配置文件

.pgm图像文件:

KvbpVK.png

可以后续使用软件进行编辑修改,例如:可以添加一堵墙、添加一些障碍物或者去掉一些障碍物等,进行人为修正地图。

.yaml配置文件:V3CBUH.png


ROS机器人学习(六)--ROS SLAM功能包应用方法
https://kevinloongc.github.io/posts/42632.html
作者
Kevin Loongc
发布于
2019年4月28日
许可协议