点击下方卡片,关注“新机器视觉”公众号
重磅干货,第一时间送达
0 前言
本文介绍使用自己的激光雷达如何通过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库进行了介绍和调用。
版权声明:本文为CSDN博主「吴恩达亲传弟子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/weixin_51015707/article/details/121579571