文章目录
前言
前文我们已经安装了turtlebot3并运行了自带的SLAM仿真例程,完成了地图的建立与路径规划前往目标位置的任务,并首次完成了对激光雷达的启动与可视化,本文开始介绍使用自己的激光雷达如何通过GMapping算法建图。 前文链接如下1 Gmapping算法
Gmapping算法又名Grid Mapping算法,是一种基于RBpf粒子滤波算法,即将定位和建图过程分离,先进行定位再进行建图。通过占有格栅(网格)的地图构建算法,在目前的市场中有着很多成功部署并应用的示例,如扫地机器人、服务机器人等。
-
占有格栅构建地图的好处
如果对连续的环境进行计算,对计算了要求非常高,Gmapping通过将周围环境划分为网格,根据它的状态进行地图构建,可以大量较少运算压力。 -
占有格栅,怎么占?
地图按一定尺寸被划分为一个一个网格,每个网格一共有三种状态:
(1)占有
(2)空闲
(3)未知
该算法通过激光雷达对周围环境进行扫描,对检测范围内的网格根据占有概率将其判定为占有
或空闲
,通过机器人的移动对未知
网格进行探索,直到地图建立完成。 -
为什么不用里程计也可以建图?
里程计是SLAM中非常重要的信息输入,可以让机器人知道自己在什么地方;
而通过下文中的laser_scan_matcher库,依靠PLICP(点对线迭代最近点)扫描匹配算法进行自身定位,但精度不高(如果不是手上只有个雷达可以玩…)。
2 laser_scan_matcher库
laser_scan_matcher是ROS中常用的激光扫描匹配器
代码库
它是一种基于PLICP(点对线迭代最近点)扫描匹配算法的增量式激光扫描匹配器,使用 Andrea Censi 的规范扫描匹配器 (CSM) 实现。
更多关于这个库的内容可以到ROS Wiki相关介绍进行了解
本文只介绍如何使用其进行建图
2.1 安装laser_scan_matcher库
进入工程目录
cd catkin_tutlebot3/src
下载laser_scan_matcher库
git clone https://github.com.cnpmjs.org/ccny-ros-pkg/scan_tools.git
将文件夹中除了laser_scan_matcher
外的文件全部删除(只使用它)
返回catkin_tutlebot3
目录并编译
cd catkin_turtlebot3
编译工程
catkin_make
编译过程中可能出现以下报错:
根据报错描述可知,这是因为缺少csm包,使用以下命令进行安装
sudo apt install ros-noetic-csm
我的Ubuntu版本是noetic,大家在安装scm的过程中将noetic
替换成自己的ROS版本名
重新进行编译后成功
2.2 修改demo_gmapping.launch文件
demo_gmapping.launch位于目录catkin_turtlebot3/src/scan_tools/laser_scan_matcher/demo
中
右键选择demo_gmapping.launch
使用其他程序打开,选择文本编辑器(如果没有IDE的话)
- 将true改为false
<param name="/use_sim_time" value="false"/>
- 添加坐标系参数
<param name="base_frame" value = "base_link"/>
<param name="use_odom" value="false"/>
<param name="publy_pose" value = "true"/>
<param name="publy_tf" value="true"/>
- 添加机器人、世界、地图3个坐标系
<param name="base_frame" value="/base_link"/>
<param name="odom_frame" value="/odom" />
<param name="map_frame" value="/map" />
保存退出
3 使用Gmapping进行建图
返回catkin_turtlebot3
目录重新编译
cd catkin_turtlebot3
catkin_make
运行roscore
roscore
打开新终端,启动雷达(配置方法见上一章)
roslaunch delta_lidar delta_lidar.launch
打开新终端,启动demo_gmapping.launch
roslaunch laser_scan_matcher demo_gmapping.launch
成功
可以通过以下命令查看三个坐标的tf转换树
rosrun rqt_tf_tree rqt_tf_tree
可以通过以下命令查看ROS中的节点构成图
rqt_graph
完成建图后如下(高举过头顶版)
总结
本文介绍了使用激光雷达delta 2A进行建图,简单对Gmapping算法进行了介绍,对laser_scan_matcher库进行了介绍和调用。
更多ros相关内容可以在ROS.Wiki查看。