TurtleBot3在ROS2 humble中的仿真解析之建图: SLAM操作与代码讲解(之一:操作过程)

本文主要基于激光雷达的非实时建图cartographer方案,进行代码级深入分析,手把手带领大家搞懂cartographer算法、以及cartographer和cartographer_ros主要程序代码,将从建图的小白摇身变为cartographer高手。

搞懂本文的内容,你需要:

1. 完成基于ROS2的turtlebot3代码级安装

2. 完成下载cartographer和cartographer_ros代码

通过前面几篇文章的代码级深入讲解,我们基本完成了turtlebot3仿真的机器人建模、环境建模、环境感知以及机器人自身智控的学习,同时也熟悉了ROS2中强大的可视化工具:rviz,和仿真工具:gazebo。相关的博文如下:

(30条消息) 基于Ubuntu22.04在ROS2 Humble中编译turtlebot3遇到的坑_数据绿洲的博客-CSDN博客

(30条消息) TurtleBot3在ROS2 humble中的仿真解析之Fake Node_数据绿洲的博客-CSDN博客

(30条消息) TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控_数据绿洲的博客-CSDN博客

至此,在ROS2中我们可以使机器人能够实现自身的闭环控制:感知-预测-控制。但是这些控制智能只是实现了简单的即时智能控制,且属于比较低端的智能。要使机器人实现更加高级的智能,必须引入知识。譬如,自动驾驶就需要机器人具有地图知识,只有有了地图知识,再配合以即时控制的环境感知、反应能力,机器人才能具有像自动驾驶这样的高级智能:感知-预测-决策-规划-控制。

机器人也可以通过智能的方式学习得到其周围环境的地图,这就是机器人建图SLAM。

本文首先将介绍turtlebot3建图所需的命令:仿真环境搭建,建图算法(cartographer)的启动,以及远程键盘遥控端启动。

然后对建图算法从代码级深入解析。建图过程其实是和定位是相辅相成的,故建图通常使用SLAM(Simultaneous Localization And Mapping)算法。SLAM算法根据使用的算法不同大致又分为两类,实时类和非实时类,实时类建图定位算法通常对传感器采集到的局部实时环境数据使用贝叶斯滤波算法(如扩展卡尔曼滤波器,粒子滤波器,高斯滤波器等)计算出机器人实时位置,进而生成地图,而非实时算法则是根据传感器采集到的所有数据进行事后优化处理得到地图的过程,当下比较流行的非实时类算法是cartographer算法。SLAM算法根据采集数据的所使用的传感器不同,又分为基于激光雷达建图,基于相机建图等。

最后展示建图的效果。

我们将以操作过程、建图结果为入口,着重深入浅出地讲解cartographer的算法及其本质,结合程序代码将cartographer提供的各项功能和服务融汇贯通。

由于篇幅的关系,该博文又分为一系列的几个子博文。

本文是其中第一个,主要介绍建图命令,和建图结果。

下一篇将介绍cartographer建图的部署代码:turtlebot3_cartographer,其中包括cartographer_node节点和rviz节点。主要介绍cartographer_node节点组成,核心对象为cartographer_ros中的Node对象和cartographer中的Map_Builder对象.

(41条消息) TurtleBot3在ROS2 humble中的仿真解析之建图: SLAM操作与代码讲解(之二:部署代码解析)_数据绿洲的博客-CSDN博客

一: 建图命令

1. 仿真环境搭建命令

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

2. 创建遥控键盘命令

ros2 run turtlebot3_teleop teleop_keyboard

3. 启动cartographer建图算法

ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True

二: 构建完成地图效果

通过控制键盘控制器驾驶turtlebot3机器人在需要建图的整个空间行走,以便机器人上的激光雷达LiDAR可以扫描到空间的每个角落。cartographer可以从激光雷达传感器发布的/scan话题中收集到所有的测距数据,进而通过图优化算法生成完整的二维平面或三维空间地图(turtlebot3机器人使用的是二维地图)。

1. 生成的地图

Turtlebot3使用的是二维平面图,生成的图如下图所示。它是一幅占位格栅地图,图中白色部分表示没有占用,无障碍物;黑色部分表示已被占用,有障碍物;灰色表示不确定,没有扫描数据。

TurtleBot3在ROS2 humble中的仿真解析之建图: SLAM操作与代码讲解(之一:操作过程)_第1张图片

2. 存储地图

保存地图需要用到nav2_map_server软件包中的map_saver_cli节点功能,如下所示。

ros2 run nav2_map_server map_saver_cli -f ~/map

上述命名会在用户根目录(你也可以指定其他目录)生成名为“map”的地图,地图由两个不同后缀的文件组成.pgm和.yaml,其中yaml文件是元数据文件,pgm文件是地图图像文件。

yaml元数据文件格式如下所示:

TurtleBot3在ROS2 humble中的仿真解析之建图: SLAM操作与代码讲解(之一:操作过程)_第2张图片

其中包含地图文件名、模式、分辨率、地图原点、是否反转以及占用格栅地图的置信边界等信息。

图像文件是pgm格式,可以用支持pgm格式的图像编辑器进行编辑。

你可能感兴趣的:(机器人,自动驾驶,人工智能)