(SLAM)边导航边建图

概述

本文档介绍如何将 Nav2 与 SLAM 结合使用。 以下步骤向 ROS 2 用户展示如何生成占用网格地图并使用 Nav2 移动机器人。 本教程适用于模拟机器人和物理机器人,但将在此针对物理机器人完成。

在完成本教程之前,强烈建议您完成 入门指南,特别是如果您是 ROS 和 Navigation2 的新手。

在本教程中,我们将使用 SLAM Toolbox。更多信息可在 ROSCon talk for SLAM Toolbox 中找到

要求

您必须安装 Navigation2、Turtlebot3 和 SLAM Toolbox。 如果您尚未安装它们,请按照 入门指南 操作。

SLAM Toolbox 可以通过以下方式安装:

sudo apt install ros-<ros2-distro>-slam-toolbox

或者在您的工作区中使用以下方式从源代码构建:

git clone -b <ros2-distro>-devel git@github.com:stevemacenski/slam_toolbox.git

教程步骤

0- 启动机器人接口

在本教程中,我们将使用 turtlebot3。 如果您有另一个机器人,请将其替换为您的机器人特定接口。 通常,这包括 URDF 的机器人状态发布者、模拟或物理机器人接口、控制器、安全节点等。

在本教程中,每当您打开新终端时,请先运行以下命令。

  • source /opt/ros/<ros2-distro>/setup.bash

  • export TURTLEBOT3_MODEL=waffle

启动您的机器人的接口和机器人状态发布者,

ros2 launch turtlebot3_bringup robot.launch.py

2- 启动 SLAM

调出您选择的 SLAM 实现。 确保它提供 map->odom 变换和 /map 主题。 运行 Rviz 并添加您想要可视化的主题,例如 /map、/tf、/laserscan 等。 对于本教程,我们将使用 SLAM Toolbox

ros2 launch slam_toolbox online_async_launch.py

3- 使用 SLAM

通过 RViz 或 ROS 2 CLI 请求目标来移动您的机器人,即:

ros2 topic pub /goal_pose geometry_msgs/PoseStamped "{header: {stamp: {sec: 0}, frame_id: 'map'}, pose: {position: {x: 0.2, y: 0.0, z: 0.0}, orientation: {w: 1.0}}}"

您应该看到地图实时更新!要将此地图保存到文件:

ros2 run nav2_map_server map_saver_cli -f ~/map

Navigation2 with SLAM

4- 入门简化

如果您只对在 turtlebot3 入门沙盒世界中运行 SLAM 感兴趣,我们还提供了一种简单的方法来启用 SLAM 作为启动配置。 您可以继续使用 tb3_simulation_launch.py​​,并将 slam 配置设置为 true,而不是单独启动接口、导航和 SLAM。 我们提供上述说明,假设您想在自己的机器人上运行 SLAM,该机器人将具有单独的模拟/机器人接口和导航启动文件,这些文件组合在 tb3_simulation_launch.py​​ 中,以便于测试。

ros2 launch nav2_bringup tb3_simulation_launch.py slam:=True