SLAM实操入门(五):无里程计仅使用激光雷达建图(GMapping算法)


前言

前文我们已经安装了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查看。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴恩达亲传弟子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值