Navigation 2 是什么
Nav2 是 ROS 导航 的综合控制服务,类似人类的小脑控制人类的行走及身体平衡,Nav2
针对移动和地面机器人提供支持的自动驾驶车辆的相同类型的技术,经过优化和改造。该项目旨在找到一种安全的方法,使移动机器人能够在多种类型的环境和机器人运动学类别中完成复杂的任务。它不仅可以从
A 点移动到 B 点,而且可以具有中间姿势,并代表其他类型的任务,例如对象跟踪、完整的覆盖导航等。
官方Navigation 2 服务架构图
下图将让您初步了解 Nav2 的结构。注意:每个服务器中可以有多个用于控制器、规划器和恢复的插件,并具有匹配的 BT 插件。这可用于创建上下文导航行为
主要实现功能:
它提供感知、规划、控制、定位、可视化等功能,以构建高度可靠的自主系统。这将完成来自传感器数据的环境建模、动态路径规划、计算电机速度、避开障碍物、表示语义区域和对象以及构建更高级别的机器人行为。
Nav2 使用行为树通过编排许多独立的模块化服务器来创建定制的智能导航行为。任务服务器可用于计算路径、控制工作、恢复或任何其他与导航相关的任务。这些单独的服务器通过 ROS 接口(例如操作服务器或服务)与行为树 (BT) 进行通信。机器人可以利用潜在的许多不同的行为树来允许机器人执行许多类型的独特任务。
Nav2 的预期输入是符合 REP-105 的 TF 转换、地图源(如果使用静态成本地图层)、BT XML 文件以及任何相关传感器数据源。然后,它将为完整或非完整机器人的电机提供有效的速度命令以供其遵循。目前,我们支持所有主要的机器人类型:完整型、差速驱动型、腿式和阿克曼(类似汽车)基本类型!我们通过圆形和任意形状的机器人为它们提供独特的支持,以进行 SE2 碰撞检查。
它具有以下工具:
-
加载、服务和存储地图(地图服务器)
-
在地图上定位机器人 (AMCL)
-
围绕障碍物规划从 A 到 B 的路径 (Nav2 Planner)
-
控制机器人沿着路径行驶(Nav2 控制器)
-
平滑路径计划更加连续和可行(Nav2 Smoother)
-
将传感器数据转换为世界地图表示(Nav2 Costmap 2D)
-
使用行为树(Nav2 行为树和 BT Navigator)构建复杂的机器人行为
-
计算发生故障时的恢复行为(Nav2 恢复)
-
遵循连续航路点(Nav2 航路点跟随器)
-
管理服务器的生命周期和监视程序 (Nav2 Lifecycle Manager)
-
用于启用您自己的自定义算法和行为的插件(Nav2 Core)
-
监控原始传感器数据以了解即将发生的碰撞或危险情况(碰撞监视器)
-
Python3 API 以 pythonic 方式与 Nav2 交互(Simple Commander)
-
输出速度更平滑,以保证命令的动态可行性(速度平滑器)
安装 Nav2 二进制文件以及在 Gazebo 模拟器中导航模拟 Turtlebot 3 的过程
安装
前提:已经安装好了ros2 ,我这边装的是humble, ros2-distro 换成自己的安装版本
使用操作系统的包管理器安装 Nav2 包:
sudo apt install ros-<ros2-distro>-navigation2
sudo apt install ros-<ros2-distro>-nav2-bringup
安装 Turtlebot 3 软件包(简陋和较旧的):
sudo apt install ros-<ros2-distro>-turtlebot3-gazebo
运行示例
在 GUI 中启动终端
设置关键环境变量:
source /opt/ros/<ros2-distro>/setup.bash
export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/<ros2-distro>/share/turtlebot3_gazebo/models
在同一终端中,运行:
ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False
此启动文件将在世界范围内启动带有 AMCL 定位器的 Nav2 turtlebot3_world。它还将启动机器人状态发布器来提供转换、带有 Turtlebot3 URDF 的 Gazebo 实例和 RVIZ。
如果一切正常启动,您将看到 RViz 和 Gazebo GUI,如下所示:
如果没有自动启动,请单击 RViz 左下角的“启动”按钮。这将导致 Nav2 更改为活动状态。它应该改变外观以显示地图。
导航
启动后,机器人最初不知道自己在哪里。默认情况下,Nav2 等待您为其提供大致的起始位置。查看机器人在 Gazebo 世界中的位置,并在地图上找到该位置。通过单击 RViz 中的“2D Pose Estimate”按钮设置初始姿势,然后向下单击该位置的地图。您可以通过向下单击向前拖动来设置方向。
如果到目前为止您使用的是默认设置,则机器人应该大致如下所示。
如果您没有找到完全正确的位置,那也没关系。Nav2 将在导航时优化位置。如果您愿意,也可以单击“2D Pose Estimate”按钮并重试。
设置初始姿势后,变换树将完成,并且 Nav2 将完全激活并准备就绪。您现在应该看到机器人和粒子云。
接下来,单击“Nav2 Goal”按钮并选择目的地。这将调用 BT 导航器通过操作服务器到达该目标。您可以通过所示的 Nav2 rviz 插件暂停(取消)或重置操作。
到达目的后
参考地址:https://navigation.ros.org/