(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
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