设置导航插件
在本指南的这一部分中,我们将讨论您的机器人如何利用不同的planner和控制器算法来完成导航任务。我们将根据您的机器人类型和环境讨论一些可用的算法插件。 [校准@首飞]
规划器和控制器服务器 [待校准@1571]
Nav2中的导航算法是通过运行在ROS动作服务器上的插件来实现的 -规划器、控制器和恢复行为服务器 (以及其他服务器)。在本节中,我们将讨论作为导航堆栈核心的规划器和控制器服务器。这些服务器可以执行一个或多个算法插件,每个插件都有自己针对特定动作或机器人状态定制的配置。本指南将重点介绍基于机器人类型和机器人部署环境的不同算法。本指南不包括恢复动作、平滑器等,因为这些依赖于应用而不是硬件/环境,所以无法提供一般性建议。 [校准@首飞]
这个规划服务器负责执行机器人路径规划算法。例如,一个插件可以被配置为计算两个相对近的位置之间的简单最短路径,而另一个插件计算覆盖整个机器人环境的路径。 [校准@首飞]
控制服务器生成适当的控制量以便机器人能基于局部环境完成任务。这些任务包括但不限于: 跟随规划服务器生成的路径,跟线时躲避动态障碍,甚至回充。 [校准@首飞]
如前所述,规划器和控制服务器可以加载一个或多个插件,其中某个特定的插件将用于特定环境、场景或任务。例如,控制服务器可以有一个插件,用于在长长的走廊中沿着一条处于过道中间的路径行走,然后是另一个插件,用于在拥挤的地方躲避动态障碍。根据机器人的任务选择要执行何种规划算法可以通过导航系统或应用服务器的行为树来完成。 [校准@首飞]
参见
更深入探讨导航服务器,建议看看 Navigation Servers 中导航概念部分。 [校准@首飞]
选择算法插件 [待校准@1577]
在本节中,我们将讨论一些规划器和控制服务器中可用的算法插件。我们还会讨论每种算法的目的,以及推荐哪种类型的机器人去使用。最后,我们展示了一些示例yaml配置内容。这些插件配置将被用于每个服务器。 [校准@首飞]
备注
您可以使用的算法插件不限于本节中提到的插件。你也可以创建自定义插件,并且新插件也会定期添加到Nav2。有关如何编写自己的插件的教程,请参阅 写一个新的规划器插件 和 写一个新的控制器插件 。所有可用的Nav2插件列表和它们的描述可以在 Navigation Plugins Section 中找到。 [校准@小鱼]
规划服务器
规划服务器中的算法插件使用不同传感器捕获的环境信息来搜索机器人的路径。这些算法中的一些通过搜索环境栅格来获取路径,然而另外一些在考虑路径可行性的基础上扩展机器人的可能状态。 [校准@首飞]
如前所述,规划服务器可以利用在网格空间上工作的插件,如 NavFn Planner
、 Smac Planner 2D
和 Theta Star Planner
。 NavFn planner 是一个使用Dijkstra或A*算法的导航功能规划器。接下来, Smac 2D planner 实现了用4或8连接的邻节点并具备平滑器和多分辨率特性的2D A*算法。最后, Theta Star planner 是使用任一视线创建非离散定向路径段的 Theta * 的实现( an implementation of Theta* using either line of sight to create non-discretely oriented path segments)。 [校准@首飞]
当使用基于栅格的算法时,您可能会遇到的一个问题是,不能保证可以为任何类型的机器人生成可执行路径。例如,不能保证 NavFn Planner
可以在狭小的空间内为非圆形机器人规划一条可行的路径,因为它使用了机器人的圆形轮廓 (通过近似于机器人最大的交叉截面半径) 并对每个costmap栅格进行干涉检测。此外,这些算法也不适用于阿克曼和腿式机器人,因为它们有转弯约束。也就是说,这些插件最好用于可以向任何方向驱动或在适当位置安全旋转的机器人上,例如**圆形差速器和圆形全向机器人**。 [校准@首飞]
另一个planner插件是 Smac Hybrid-A* planner 支持任意形状阿克曼和腿式机器人。它是一个被高度优化和完全重构的混合A*算法,实现了对Dubin and Reeds-Shepp模型的支持。该算法扩展机器人的可行路径的同时考虑机器人的最小转弯半径约束和机器人的轮廓干涉检测。因此,这个插件适用于需要进行轮廓碰撞检查的任意形状机器人。它也可以用于高速机器人,防止高速导航时倾翻,打滑或负载掉落。 [校准@首飞]
还有 Smac Lattice planner
插件,它是基于State Lattice planner。这个插件通过扩展机器人的状态空间并同时确保路径符合机器人的运动约束。算法可以以最小的配置修改就能支持 ** 差速,全向,阿克曼 **等任何形状大小的底盘。 [校准@首飞]
总结
Plugin Name |
支持的机器人类型 |
---|---|
NavFn规划器 [待校准@1589] |
圆形差速,圆形全向 [校准@首飞] |
Smac2D规划器 [校准@小鱼] |
|
Theta Star Planner [校准@首飞] |
|
Smac混合A* 规划器 [校准@小鱼] |
非圆形或圆形阿克曼,非圆形或圆形腿式 [校准@首飞] |
Smac Lattice Planner [校准@首飞] |
非圆形微速,非圆形全向 [校准@首飞] |
配置示例
planner_server:
ros__parameters:
planner_plugins: ['GridBased']
GridBased:
plugin: 'nav2_navfn_planner/NavfnPlanner'
上面显示了一个规划服务器的示例配置。 planner_plugins
参数接受映射的规划器插件名称列表。对于在 planner_plugins
中定义的每个插件命名空间 (在我们的示例中为 GridBased
),我们指定在 plugin
参数中要加载的插件类型。然后,必须根据要使用的算法在此命名空间中设定其他配置。详情请见 配置指南 。 [校准@首飞]
控制服务器
默认的控制器插件是 DWB controller 。它实现了动态窗口法 (DWA) 算法去为机器人计算控制命令。该控制器利用 Trajectory Generator plugin
生成可行的轨迹。然后这些轨迹被一个或多 Critic plugins``评估 。每一个``Critic plugins``将基于他们的配置情况给予不同的评分。这些 ``Critic plugins
的评分总和将确定轨迹的总分。最佳得分轨迹将确定输出的速度命令。 [校准@首飞]
这个 DWB controller
可用于 ** 圆形或非圆形差速,以及圆形或非圆形的全向机器人**。如果一个 Trajectory Generation plugin
能产生一组考虑机器人最小曲率约束的可能轨迹,它也可以被配置运用到阿克曼和腿式机器人。 [校准@首飞]
另一个控制服务器插件的例子是 TEB controller ,它是一个MPC时间最优控制器。它实现了时间绷带 (TEB) 方法,基于执行时间,障碍物距离和机器人的运动约束来优化机器人的轨迹。该控制器可用于 * 差速,全向,阿克曼,腿 式 * 机器人。 [校准@首飞]
本节最后的例子是 Regulated Pure Pursuit controller (RPP) 。该控制器实现了纯追踪算法。它加入了规则启发式功能来管理碰撞和速度约束。该算法满足服务或工业机器人的需要,可适用于 * * 差速,阿克曼,腿式 * * 机器人。 [校准@首飞]
总结
Plugin Name |
支持的机器人类型 |
任务 |
---|---|---|
DWB控制器 |
差速,全向 [校准@首飞] |
动态避障 [待校准@1607] |
TEB控制器 [待校准@1608] |
差速,全向,阿克曼,腿式 [校准@首飞] |
|
RPP控制器 [待校准@1610] |
差速,阿克曼,腿式 [校准@首飞] |
精确地路径跟踪 [校准@首飞] |
这些算法可用于圆形和非圆机器人。 [校准@首飞]
配置示例
controller_server:
ros__parameters:
controller_plugins: ["FollowPath"]
FollowPath:
plugin: "dwb_core::DWBLocalPlanner"
上面是一个控制服务器的基本示例。控制器插件列表定义 在 controller_plugins
参数。类似规划服务器,每个定义 在 controller_plugins
(例如 FollowPath
) 的命令空间必须定义插件类型,类型名称将在 plugin
参数中使用。其他配置也必须在命令空间内被设定。详情请见 Configuration Guide 。 [校准@小鱼]
备注
这些规划服务器和控制服务器,以及Nav2的其他服务器,是通过ROS2中的生命周期节点来启动的。生命周期节点允许服务器更容易启动和停止。生命周期节点管理将在下一个教程中讨论。 [校准@首飞]
小结 [校准@songhuangong]
在本教程中,我们讨论了Nav2规划器和控制服务器的角色和配置。总结一下,这些服务器维护了一个或多个算法插件,这些插件依据机器人的结构和环境来被选择使用。我们还介绍了一些规划器和控制服务器中可用的插件以便帮助您分析什么插件适用于你的机器人。最后,我们也提供一些简单配置示例以显示这些插件如何在服务器上被实例化。更多配置细节,你可以参考你所选算法插件的配置指南。 [校准@首飞]