Eloquent 到 Foxy

从 ROS 2 Eloquent 迁移到 Foxy 后,我们增加了许多稳定性改进,但在此不会特别介绍。 不过,我们会特别提到终端噪音的减少。 TF2 转换超时错误和启动时的警告已基本被删除或限制,以便更易于处理。 此外,在 costmap 2d 中解决了消息过滤器填满导致消息被丢弃的问题。

一般

生命周期管理器被分成 2 个独特的生命周期管理器。 它们是“navigation_lifecycle_manager”和“localization_lifecycle_manager”。 这为每个进程提供了自己的管理器,允许用户在不影响导航的情况下在 SLAM 和定位之间切换。 它还减少了“nav2_bringup”中的冗余代码。

生命周期管理器现在还包含与每个生命周期服务器的“Bond”连接。 这意味着如果服务器崩溃或退出,生命周期管理器将不断检查并向下转换其生命周期节点以确保安全。 这在运行时充当看门狗,以补充生命周期管理器从活动状态向上和向下转换。请参阅`此 PR 了解详情 <https://github.com/ros-planning/navigation2/pull/1894>`_。

添加了对 BT 导航器的修复,以消除由于异步问题而导致其崩溃的罕见问题。 因此,为每个导航请求创建行为树,而不是重置现有树。 创建此树将增加少量延迟。 将在下一个版本之前考虑减少此延迟的建议。

服务器更新

所有插件服务器(控制器、规划器、恢复)现在都支持使用多个插件。 这可以通过加载插件映射、将插件名称映射到其预期用例来完成。 每个服务器定义一个参数,其中可以定义要加载的插件的名称列表。

Server Name

Plugin Parameter

Controller Server

progress_checker_plugin

Controller Server

goal_checker_plugin

Controller Server

controller_plugins

Planner Server

planner_plugins

Recovery Server

recovery_plugins

Costmap Node

plugins

对于服务器插件列表中定义的每个名称,必须使用插件命名空间中的“plugin”参数来定义要映射到特定名称的插件类型。 插件参数列表中的每个名称都应定义“plugin”参数。

示例:“controller_server”定义参数“controller_plugins”,其中可以定义插件名称列表:

controller_server:
  ros__parameters:
    controller_plugins: ["FollowPath", "DynamicFollowPath"]
    FollowPath:
      plugin: "dwb_core/DWBLocalPlanner"
      max_vel_x: 0.26
    DynamicFollowPath:
      plugin: "teb_local_planner/TEBLocalPlanner"
      max_vel_x: 0.5

FollowPath 控制器的类型为 dwb_local_planner/DWBLocalPlanner,而 DynamicFollowPath 的类型为 teb_local_planner/TEBLocalPlanner

每个插件将在其命名空间中加载参数,例如 FollowPath.max_vel_x,而不是在服务器命名空间中全局加载。

这将允许具有不同参数的多个相同类型的插件,并减少冲突的参数名称。

DWB 包含新参数作为相对于 ROS 1 更新的更新,``有关更多信息,请参阅此处 <https://github.com/ros-planning/navigation2/pull/1501>`_。

此外,控制器和规划器接口已更新,在初始化时包含 std::string name 参数。

这被添加到接口中,以允许插件知道它应该在其中加载其参数的命名空间。

例如控制器要找到参数“FollowPath.max_vel_x”,必须为其指定名称“FollowPath”才能获取此参数。 所有插件都需要在其给定名称的命名空间中查找参数。

新插件

添加了许多新的行为树节点。 这些行为树节点现在是 BT 插件,可使用行为树 cpp v3 在运行时动态加载。 默认行为树已升级,以停止恢复行为并在导航目标被抢占时触发重新规划。 请参阅“nav2_behavior_tree”获取完整列表,或参阅 :ref:“plugins”获取当前行为树插件列表及其说明。 这些插件在“nav2_bt_navigator”中设置为默认插件,但可能会被“bt_plugins”参数覆盖以包含您的特定插件。

原始 GitHub 票证:

地图服务器重做

map_saver 被重做并分为 2 个部分:CLI 和服务器。 CLI 部分是一个命令行工具,它监听传入的地图主题,将地图一次性保存到文件中并完成其工作。此部分几乎保持不变:CLI 可执行文件从 map_saver 重命名为 map_saver_cli,但功能没有改变。 服务器是新部分。它在后台旋转,可用于通过 save_map 服务连续保存地图。通过每个服务请求,它尝试监听传入的地图主题,从中接收消息并将获得的地图写入文件。

map_server 被大大简化和清理。OccGridLoaderMapServer 类合并,因为它旨在在可预见的未来仅与一种 OccupancyGrid 类型的消息一起工作。

Map Server 现在有了新的 map_io 动态库。所有保存/加载 OccupancyGrid 消息的函数都从 map_servermap_saver 移到了这里。即使 Map Server 节点未启动,也可以从外部 ROS 2 代码的任何部分轻松调用这些函数。

map_loader 已从 nav2_util 中完全删除。其所有功能已存在于 map_io 中。请在您的代码中使用它。

有关更多信息,请参阅 ``原始 GitHub 票证 <https://github.com/ros-planning/navigation2/issues/1010>`_ 和 ``Map Server README <https://github.com/ros-planning/navigation2/blob/main/nav2_map_server/README.md>`_。

新的粒子过滤消息

添加了用于粒子云的新粒子过滤消息,以包括粒子权重及其姿势。 nav2_msgs/Particle 定义粒子云中具有姿势和权重的单个粒子。 nav2_msgs/ParticleCloud 定义一组粒子,每个粒子都有一个姿势和一个权重。

AMCL 现在将其粒子云发布为 nav2_msgs/ParticleCloud 而不是 geometry_msgs/PoseArray

有关更多信息,请参见此处。

在每个导航操作中选择行为树

NavigateToPose 操作现在允许在操作请求中选择 bt_navigator 将使用的行为树,通过 string behavior_tree 字段执行导航操作。此字段表示将用于执行操作的 xml 文件的绝对路径。如果未指定文件,将此字段留空,则将使用 default_bt_xml_filename 参数 中指定的默认行为树。

此功能已在 ticket #1780 中讨论,并在 pull request #1784 中执行。

FollowPoint 功能

已添加新的行为树 followpoint.xml。此行为树使机器人跟随动态生成的点,与目标保持一定距离。这可用于移动目标跟随动作。

此功能已在 ticket #1660 中讨论,并在 pull request #1859 中执行。

新的 Costmap 层

范围传感器 costmap 尚未移植到 navigation2 作为 nav2_costmap_2d::RangeSensorLayer"。它使用与 ROS1 层相同的概率模型以及大部分相同的接口。有关参数的文档已添加到 docs/parameters 和 docs.nav2.org 下的“配置指南”下。