设置

在本指南的这一部分中,我们将讨论您的机器人如何利用不同的规划器和控制器算法来完成导航任务。我们将根据您的机器人类型和环境讨论一些可用的算法插件。

计划器和控制器服务器

导航算法是通过在ROS动作服务器上运行的插件在Nav2中实现的,这些插件包括计划器、控制器和行为服务器等。在本节中,我们将讨论规划器和控制器服务器,它们是导航堆栈的核心。这些服务器可以实现一个或多个算法插件,每个插件都有针对特定动作或机器人状态量身定制的配置。本指南将重点介绍基于机器人类型和机器人部署环境的不同算法。本指南不包括行为、平滑器等,因为这些算法取决于应用程序,而不是硬件/环境,以提供通用建议。

规划器服务器负责实施计算机器人路径的算法。例如,可以配置一个插件来计算两个相对较近位置之间的简单最短路径,而另一个插件则计算覆盖整个机器人环境的位置的路径。

控制器服务器生成机器人在其本地环境中完成任务所需的适当控制工作。这些任务包括但不限于:遵循规划器服务器生成的路径、避开沿此路径的动态障碍物,甚至在对接站充电。

如前所述,规划器和控制器服务器托管一个或多个插件的地图,其中某个插件将用于特定的环境、场景或任务。例如,控制器服务器可以有一个插件,用于在长走廊中遵循路径以保持在过道中间,然后是另一个插件,用于在拥挤的地方避开动态障碍物。可以通过导航系统或应用服务器的行为树来选择根据机器人的任务执行哪种规划算法。

See also

有关导航服务器的更深入讨论,我们建议查看导航概念类别下的“导航服务器<https://docs.nav2.org/concepts/index.html#navigation-servers>”部分。

选择算法插件

在本节中,我们将讨论规划器和控制器服务器的一些可用算法插件。我们还将讨论每种算法的用途,以及建议将它们用于哪种类型的机器人。最后,我们将展示一些示例 yaml 配置,其中指定了要用于每个服务器的插件。

Note

The algorithm plugins you can use are not limited to the ones mentioned in this section. You may create custom plugins as well and new plugins are added to Nav2 regularly. For tutorials on how to write your own plugins, please see Writing a New Planner Plugin and Writing a New Controller Plugin. The list of all available Nav2 plugins and their descriptions can be found in Navigation Plugins Section.

您可以使用的算法插件不仅限于本节中提到的插件。您也可以创建自定义插件,并且会定期向 Nav2 添加新插件。有关如何编写自己的插件的教程,请参阅 Writing a New Planner PluginWriting a New Controller Plugin 。所有可用的 Nav2 插件及其描述的列表可在 Navigation Plugins Section 中找到。

规划服务器

规划器服务器的算法插件使用由不同传感器捕获的环境表示来查找机器人的路径。其中一些算法通过搜索环境的网格空间来运行,而其他算法则在考虑路径可行性的同时扩展机器人的可能状态。

如上所述,规划器服务器可以利用在网格空间上工作的插件,例如“NavFn 规划器”、 Smac Planner 2DTheta Star PlannerNavFn Planner NavFn planner 是一个使用 Dijkstra 或 A* 的导航功能规划器。接下来, Smac 2D planner 使用 4 个或 8 个连通邻域实现 2D A* 算法,具有更平滑和多分辨率查询。最后, Smac 2D planner 是 Theta* 的一种实现,使用任一视线来创建非离散定向的路径段。

使用在网格空间上工作的算法时,您可能会遇到的一个问题是,无法保证可以为任何类型的机器人生成可行驶路径。例如,无法保证 NavFn Planner 可以在狭小空间中为非圆形机器人规划可行路径,因为它使用机器人的圆形足迹(通过近似机器人的最大横截面半径)并检查每个成本地图网格单元的碰撞。此外,这些算法也不适用于阿克曼机器人和腿式机器人,因为它们具有转弯限制。话虽如此,这些插件最适合用于可以向任何方向行驶或在原地安全旋转的机器人,例如**圆形差速器和圆形全向**机器人。

另一个规划器插件是 Smac Hybrid-A* 规划器,它支持**任意形状的阿克曼机器人和腿式机器人**。它是一种高度优化且完全可重构的 Hybrid-A* 实现,支持 Dubin 和 Reeds-Shepp 运动模型。该算法扩展了机器人的候选路径,同时考虑了机器人的最小转弯半径约束和机器人的全覆盖面积以避免碰撞。因此,该插件适用于需要全覆盖面积碰撞检查的任意形状机器人。它也可以用于必须小心导航以免在高速下翻转、打滑或倾倒负载的高速机器人。

还有基于 State Lattice 规划器的 Smac Lattice planner 插件。此插件通过扩展机器人状态空间并确保路径符合机器人的运动学约束来发挥作用。该算法提供最小控制集,使其能够以最少的重新配置支持任何形状和大小的 differential, omnidirectional, and ackermann 车辆。

概括

Plugin Name

Supported Robot Types

NavFn Planner

Circular Differential, Circular Omnidirectional

Smac Planner 2D

Theta Star Planner

Smac Hybrid-A* Planner

Non-circular or Circular Ackermann, Non-circular or Circular Legged

Smac Lattice Planner

Non-circular Differential, Non-circular Omnidirectional

示例配置

planner_server:
  ros__parameters:
    planner_plugins: ['GridBased']
    GridBased:
      plugin: 'nav2_navfn_planner::NavfnPlanner' # In Iron and older versions, "/" was used instead of "::"

上面显示了规划器服务器的示例配置。planner_plugins 参数接受映射的规划器插件名称列表。对于在 planner_plugins 中定义的每个插件命名空间(在我们的示例中为 GridBased),我们在 plugin 参数中指定要加载的插件类型。然后必须根据要使用的算法在此命名空间中指定其他配置。有关更多详细信息,请参阅 Configuration Guide

控制服务器

默认控制器插件是 DWB 控制器。它使用可配置插件实现改进的动态窗口方法 (DWA) 算法来计算机器人的控制命令。该控制器使用 轨迹生成器插件 来生成一组可能的轨迹。然后由一个或多个 Critic 插件 评估这些轨迹,每个插件可能根据其配置方式给出不同的分数。这些 Critic 插件 的分数总和决定了轨迹的总分数。然后,得分最高的轨迹决定了输出命令速度。

DWB 控制器 可用于 圆形或非圆形差速器,以及圆形或非圆形全向 机器人。如果为它提供了一个“轨迹生成插件”,它可以生成一组考虑机器人最小曲率约束的可能轨迹,也可以为**阿克曼机器人和腿式机器人**配置。

控制器服务器插件的下一个示例是 TEB controller ,它是一个 MPC 时间最优控制器。它实现了定时弹性带 (TEB) 方法,该方法根据机器人的执行时间、与障碍物的距离以及相对于机器人运动学约束的可行性来优化机器人的轨迹。该控制器可用于 差速、全向、阿克曼和腿式 机器人。

本节的另一个示例是 Regulated Pure Pursuit controller (RPP) 。该控制器实现了纯追踪算法的变体,并添加了规则启发式函数来管理碰撞和速度约束。此变体的实现是为了满足服务或工业机器人的需求,适用于 差速、阿克曼和腿式 机器人。

最后一个例子是 Vector Pursuit Controller 。它实现了 Vector Pursuit algorithm 并使用螺旋理论计算指令速度。该控制器适用于高速路径跟踪和急转弯或计算资源有限的情况。它可用于 差速、阿克曼和腿式 机器人。

概括

Plugin Name

Supported Robot Types

Task

DWB controller

Differential, Omnidirectional

Dynamic obstacle avoidance

TEB Controller

Differential, Omnidirectional, Ackermann, Legged

RPP controller

Differential, Ackermann, Legged

Exact path following

MPPI controller

Differential, Ackermann, Legged, Omnidirectional

Modern MPC controller

VP controller

Differential, Ackermann, Legged

High speed path tracking

所有这些算法都适用于圆形和非圆形机器人。

示例配置

controller_server:
  ros__parameters:
    controller_plugins: ["FollowPath"]
    FollowPath:
       plugin: "dwb_core::DWBLocalPlanner"

上面显示的是控制器服务器的基本配置示例。控制器插件的映射名称列表在 controller_plugins 参数中定义。与规划器服务器类似,在 controller_plugins 中定义的每个命名空间(在我们的示例中为 FollowPath)都必须在 plugin 参数中定义它将使用的插件类型。还必须为命名空间中的选定算法进行其他配置。有关更多详细信息,请参阅 Configuration Guide

Note

规划器和控制器服务器以及 Nav2 的其他服务器都是通过生命周期节点在 ROS 2 中启动的。生命周期节点可以更轻松地启动和拆卸服务器。生命周期节点管理将在下一个教程中讨论。

结论

在本教程中,我们讨论了 Nav2 的规划器和控制器服务器的角色和配置。总而言之,这些服务器托管一个或多个算法插件的地图,这些插件的选择取决于您的机器人的结构和周围环境。我们还描述了一些可用的规划器和控制器服务器插件,以帮助您确定哪些插件适合您的机器人。最后,我们还提供了一些简单的配置示例来展示如何在服务器上实例化这些插件。您可以参考您将选择的算法插件的配置指南,了解有关其配置参数的更多详细信息。