跳到主要内容

5.4.2 Navigation2

功能介绍

Nav2(Navigation2)是 ROS2 中自带的导航框架,旨在寻找一种安全的方式让移动机器人从 A 点移动到 B 点。Nav2 也可以应用于其他机器人导航应用,例如动态点跟踪,在这个过程中需要完成动态路径规划、计算电机速度、避免障碍等。

SLAM 建图介绍了如何运行 SLAM 算法进行建图,本章节介绍如何基于建立的地图使用 Nav2 进行导航。同样使用 Gazebo 在 PC 端创建虚拟环境和小车,使用 Rviz2 设置导航目的地,RDK 运行 Nav2 程序导航。

支持平台

平台运行方式示例功能
RDK X3, RDK X3 ModuleUbuntu 20.04 (Foxy), Ubuntu 22.04 (Humble)PC 端启动仿真环境,并在 RDK 启动导航功能,最后通过 Rviz2 展示导航效果
RDK X5, RDK X5 ModuleUbuntu 22.04 (Humble)PC 端启动仿真环境,并在 RDK 启动导航功能,最后通过 Rviz2 展示导航效果
RDK S100, RDK S100PUbuntu 22.04 (Humble)PC 端启动仿真环境,并在 RDK 启动导航功能,最后通过 Rviz2 展示导航效果

准备工作

RDK 平台

  1. RDK 已烧录好 Ubuntu 系统镜像。

  2. RDK 已成功安装 tros.b。

  3. tros.b 成功安装后,安装 Nav2。

# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/tros/humble/setup.bash
sudo apt update 
sudo apt install ros-${ROS_DISTRO}-navigation2
sudo apt install ros-${ROS_DISTRO}-nav2-bringup
注意

如果 sudo apt update 命令执行失败或报错,请查看常见问题章节的 Q10: apt update 命令执行失败或报错如何处理? 解决。

注意

如果 sudo apt update 命令执行失败或报错,请查看常见问题章节的 Q10: apt update 命令执行失败或报错如何处理? 解决。

注意

如果 sudo apt update 命令执行失败或报错,请查看常见问题章节的 Q6: apt update 命令执行失败或报错如何处理? 解决。

  1. 和 RDK 在同一网段的 PC,PC 已安装 Ubuntu 系统、ROS2 桌面版和仿真环境 Gazebo,数据可视化工具 Rviz2。
source /opt/ros/foxy/setup.bash

Ubuntu 20.04 系统和ROS2 Foxy 桌面版

source /opt/ros/humble/setup.bash

Ubuntu 22.04 系统和ROS2 Humble 桌面版

PC 的 ROS2 安装成功后安装 Gazebo 和 Turtlebot3 相关的功能包,安装方法为:

sudo apt-get install ros-${ROS_DISTRO}-gazebo-*
sudo apt install ros-${ROS_DISTRO}-turtlebot3*
sudo apt install ros-${ROS_DISTRO}-navigation2
sudo apt install ros-${ROS_DISTRO}-nav2-bringup

使用介绍

RDK 平台

本章节介绍如何在 PC 端搭建仿真环境,以及进行导航目的地设置,RDK 运行导航功能,并查看导航效果。

  1. PC 端启动 gazebo 仿真环境
source /opt/ros/foxy/setup.bash
source /opt/ros/humble/setup.bash
export TURTLEBOT3_MODEL=waffle
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
信息

如果启动失败,并且报错 [ERROR] [gzclient-2]: process has died ,请执行命令 source /usr/share/gazebo/setup.sh 后再启动。

仿真环境如下图所示:

Navigation2 示例中 Gazebo 仿真环境启动后的场景
  1. RDK启动导航功能
# 配置tros.b环境
source /opt/tros/setup.bash
ros2 launch nav2_bringup bringup_launch.py use_sim_time:=True map:=/opt/ros/foxy/share/nav2_bringup/maps/turtlebot3_world.yaml
# 配置tros.b环境
source /opt/tros/humble/setup.bash
ros2 launch nav2_bringup bringup_launch.py use_sim_time:=True map:=/opt/ros/humble/share/nav2_bringup/maps/turtlebot3_world.yaml
  1. PC 端启动 Rviz2 工具
# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/ros/humble/setup.bash
ros2 launch nav2_bringup rviz_launch.py

Rviz2 效果如下图:

Navigation2 在 RViz2 中的整体可视化界面

(1) 在 Rviz2 上设置机器人起始位置和方向

Rviz2 启动后,机器人最初不知道它在哪里。默认情况下,Nav2 会等待用户给机器人一个大致的起始位置。查看机器人在 Gazebo 中的位置,并在地图上找到该位置。通过点击 Rviz2 中的"2D Pose Estimate" 按钮,然后通过在地图上机器人预估的位置处点击来设置机器人初始位置 。可以通过向前拖动刚才单击的位置来设置机器人起始的移动方向。如下图所示:

在 RViz2 中使用 2D Pose Estimate 设置机器人初始位姿

一旦设置好了机器人的初始位置,就会完成坐标变换树,同时 Nav2 将会完全激活并准备就绪。这时就可以看到机器人和点云了。

设置初始位姿后 RViz2 显示机器人与点云的就绪状态

(2) Rviz2 设置目的地

点击 "Navigaton2 Goal" 按钮并选择一个目的地。

在 RViz2 中点击 Navigation2 Goal 选择导航目标点

现在就可以看到机器人在移动了。

结果分析

导航效果如下图所示:

Navigation2 导航过程中机器人运动到目标点的效果动图