(SLAM)在制图时导航

概述

本文档解释了如何将Nav2与SLAM配合使用。以下步骤展示了ROS 2用户如何生成占据栅格地图并使用Nav2来移动他们的机器人。本教程适用于仿真和实体机器人,但本文将在实体机器人上完成。

在完成本教程之前,强烈建议您先完成 开始使用,特别是如果您对ROS和Navigation2还不熟悉的话。

在本教程中,我们将使用SLAM工具箱。更多信息可以在`ROSCon关于SLAM工具箱的演讲 <https://vimeo.com/378682207>`_中找到。

要求

您必须安装Navigation2、Turtlebot3和SLAM Toolbox。如果您还没有安装它们,请按照 开始使用 进行安装。

可以通过以下方式安装SLAM工具箱:

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

1- 启动 Navigation2

启动Navigation,但不包括nav2_amcl和nav2_map_server。假设SLAM节点将发布到/map主题,并提供map->odom的变换。

ros2 launch nav2_bringup navigation_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

带 SLAM 的 Navigation2

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