Skip to content

在真实 TurtleBot 3 上导航

本教程介绍如何在真实的 TurtleBot 3 上使用 ROS 2 Nav2 进行控制和导航。 开始之前,建议先阅读快速入门,尤其是初次接触 ROS 和 Nav2 的用户。

完成本教程大约需要 1 小时,具体取决于你对 ROS 和机器人的熟悉程度,以及所使用的操作系统。

需要先安装 Nav2 和 TurtleBot3。 如尚未安装,请参照快速入门中的步骤操作。

可通过以下命令安装 TurtleBot3 软件,也可从 TurtleBot3 仓库 获取:

首先,加载 ROS 2 安装目录的环境变量:

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

然后安装 TurtleBot3 软件包:

Terminal window
sudo apt install ros-$ROS_DISTRO-turtlebot3 ros-$ROS_DISTRO-turtlebot3-msgs ros-$ROS_DISTRO-turtlebot3-bringup

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

  • source /opt/ros/<ros2-distro>/setup.bash
  • export TURTLEBOT3_MODEL=waffle

启动机器人接口:

ros2 launch turtlebot3_bringup robot.launch.py use_sim_time:=False

导航前需要一张环境地图,可使用已有的地图,也可通过 SLAM 实时建图。

如需了解如何在 Nav2 中结合 SLAM 使用,请参考教程:边建图边导航(SLAM)。

所需文件:

  • your-map.map
  • your-map.yaml

<your_map>.yaml 是提供给 Nav2 的地图配置文件。 该文件包含地图分辨率、障碍物与自由空间的阈值,以及地图文件路径等信息,需确保这些参数正确无误。 关于 map.yaml 的更多信息,请参考这里。

启动 Nav2。若设置 autostart:=False,则需在 RViz 中点击启动按钮来初始化节点。 确保 use_sim_time 设置为 False,以使用系统时间而非 Gazebo 的仿真时间。

ros2 launch nav2_bringup bringup_launch.py use_sim_time:=False autostart:=False map:=/path/to/your-map.yaml

注意:请将 /path/to/your-map.yaml 替换为 your-map.yaml 文件的实际路径。

使用预先定义的配置文件启动 RViz。

ros2 run rviz2 rviz2 -d $(ros2 pkg prefix nav2_bringup)/share/nav2_bringup/rviz/nav2_default_view.rviz

启动后,RViz 中央应显示 TurtleBot 3 的模型轮廓。 若 auto_start 参数设置为 false,请点击左下角的启动按钮,地图随后将出现在 RViz 中。

rviz_after_launch_view

rviz_slam_map_view

首先,确认机器人在实际房间中的位置,并在地图上找到对应点。

在 RViz 中设置机器人的初始位姿:点击 2D Pose Estimate 按钮,然后在地图上点击机器人所在的位置。 绿色箭头指示的方向即为 TurtleBot 的朝向。

Set initial pose in RViz

设置完成后,TurtleBot 的 3D 模型会移动到该位置。 初始位姿的估计允许小幅误差。

在地图上为 TurtleBot 选定一个目标位置。 可用 Nav2 Goal 或 GoalTool 按钮向 TurtleBot 3 发送目标位置和朝向。

注意:Nav2 Goal 按钮通过 ROS 2 Action 发送目标,而 GoalTool 将目标发布到话题。

Send goal pose in RViz

设定目标位姿后,Nav2 会规划一条全局路径,并驱动机器人沿地图导航。

Robot navigating in RViz

此时可以看到 TurtleBot 3 在房间中朝目标位置移动,参见下方视频。