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
被大大简化和清理。OccGridLoader
与 MapServer
类合并,因为它旨在在可预见的未来仅与一种 OccupancyGrid
类型的消息一起工作。
Map Server 现在有了新的 map_io
动态库。所有保存/加载 OccupancyGrid
消息的函数都从 map_server
和 map_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 下的“配置指南”下。