Foxy to Galactic

从 ROS 2 Foxy 迁移到 Galactic 后,我们增加了一些稳定性改进,但在此我们不会特别介绍。

ComputePathToPose BT-node 接口更改

已添加“start”输入端口,以选择性地允许请求从“start”到“goal”的路径,而不是从机器人的当前位置到“goal”。

有关更多信息,请参阅:ref:bt_compute_path_to_pose_action

ComputePathToPose 操作接口更改

  • 目标姿势字段“pose”已更改为“goal”。

  • 添加了 PoseStamped 字段“start”。

  • 添加了 bool 字段“use_start”。

添加了这两个附加字段,以便在“use_start”为真时,允许请求从“start”到“goal”的路径,而不是从机器人的当前位置到“goal”。Planner Server 也进行了相应的更改。

备份 BT 节点接口更改

“backup_dist”和“backup_speed”输入端口都应为正值,分别表示向后行驶的距离和机器人向后行驶的速度。

备份恢复接口更改

备份恢复目标中的“speed”应为正值,表示向后行驶的速度。

备份恢复目标中的“target.x”应为正值,表示向后行驶的距离。 在两种情况下,负值都会被默默地反转。

FollowPath goal_checker_id 属性

例如:对于某些特定的导航运动,您可以使用比通常运动中使用的默认目标检查器更精确的目标检查器。

<FollowPath path="{path}" controller_id="FollowPath" goal_checker_id="precise_goal_checker" server_name="FollowPath" server_timeout="10"/>
  • 以前使用 goal_checker_plugin 参数来声明 controller_server goal_checker 的做法现已过时并被删除。

  • controller_server 参数现在支持声明映射到唯一标识符名称的目标检查器列表 goal_checker_plugins,例如分别用于控制器和规划器插件的 FollowPathGridBased

  • 当在 controller_server 参数配置中定义多个检查器时,必须指定所选目标检查器。如果在 controller_server 中仅配置了一个 goal_checker,则即使未指定 goal_checker,也会默认选择它。

下面显示了 controller_server 节点的 goal_checker 配置示例。

controller_server:
  ros__parameters:
      goal_checker_plugins: ["general_goal_checker", "precise_goal_checker"]
      precise_goal_checker:
          plugin: "nav2_controller::SimpleGoalChecker"
          xy_goal_tolerance: 0.25
         yaw_goal_tolerance: 0.25
      general_goal_checker:
          plugin: "nav2_controller::SimpleGoalChecker"
          xy_goal_tolerance: 0.25

Groot 支持

现在可以使用 Groot 实时监控和编辑行为树。 还包括通过新目标请求动态切换 bt-xml。 这一切都是在不破坏任何 API 的情况下完成的。 默认情况下启用。

新插件

nav2_waypoint_follower 有一个动作服务器,它接收要跟踪的航点列表并按顺序跟踪它们。在某些情况下,我们可能希望机器人在到达这些航点时执行某些任务/行为。为了执行此类任务,通用插件接口 WaypointTaskExecutor 已添加到 nav2_core。 用户可以从此接口继承以实现自己的插件,以便在航点到达时根据需要执行更具体的任务。

nav2_waypoint_follower 中包含几个示例实现。 WaitAtWaypointPhotoAtWaypoint 附加功能包含在 nav2_waypoint_follower 中,作为运行时可加载插件。WaitAtWaypoint 仅允许机器人在到达航点时暂停指定的时间(以毫秒为单位)。

虽然 PhotoAtWaypoint 在到达航点时拍照并将拍摄的照片保存到指定目录,但拍摄照片的格式也可以通过参数配置。

支持所有主要图像格式,例如 pngjpegjpg 等,默认格式为 png

通过 nav2_bringup/params/nav2_param.yaml 加载此类型的插件,方法是指定插件的名称、类型及其使用的参数。

waypoint_follower:
  ros__parameters:
    loop_rate: 20
    stop_on_failure: false
    waypoint_task_executor_plugin: "wait_at_waypoint"
      wait_at_waypoint:
        plugin: "nav2_waypoint_follower::WaitAtWaypoint"
        enabled: True
        waypoint_pause_duration: 0

Original GitHub tickets:

成本地图过滤器

Galactic 中出现了一个与空间相关对象交互的新概念,称为“成本地图过滤器”(有关此概念的更多信息,请参阅:ref:concepts 页面)。成本地图过滤器充当成本地图插件,应用于普通插件上方的单独成本地图。为了制作过滤的成本地图并改变机器人在注释区域中的行为,过滤器插件会读取来自过滤器掩码的数据。然后,这些数据被线性转换为过滤空间​​中的特征图。它可以是某个区域的通行能力、以米/秒为单位的最大速度限制、机器人所需的方向(以度为单位)或其他任何内容。插件的算法会使用转换后的特征图以及地图/成本地图、传感器数据和当前机器人位置,对生成的成本地图和机器人的行为进行必要的更新。

从架构上看,costmap 过滤器由 CostmapFilter 类组成,该类是一个基本类,包含其继承的过滤器插件的许多通用功能:

  • KeepoutFilter:禁入/安全区过滤器插件。

  • SpeedFilter:慢速/限速区域过滤器。

  • 行业中的首选车道。此插件由 KeepoutFilter 覆盖(有关更多详细信息,请参阅 相应 PR 中的讨论)。

每个 costmap 过滤器都订阅过滤器信息主题(由 Costmap 过滤器信息发布服务器 发布),其中包含加载 costmap 过滤器和过滤器掩码主题所需的所有信息。 SpeedFilter 还发布了针对控制器的最大速度限制 消息,以强制机器人不会超过给定的限制。

此概念的高级设计可在 此处 中找到。costmap 过滤器的功能正在 ticket #1263 中讨论,并由 PR #1882 执行。以下教程:使用禁区导航限速导航 将有助于轻松参与 KeepoutFilterSpeedFilter 功能。

SmacPlanner

添加了一个新包 nav2_smac_planner,其中包含 4 或 8 个连接的 2D A*,以及 Dubin 和 Reed-shepp 模型混合 A*,具有平滑、多分辨率查询等功能。

nav2_smac_planner 包包含一个优化的模板化 A* 搜索算法,用于为多种类型的机器人平台创建多个基于 A* 的规划器。我们使用 SmacPlanner2D 规划器支持差速驱动和全向驱动机器人,该规划器实现了成本感知的 A* 规划器。我们使用实现 Hybrid-A* 规划器的“SmacPlanner”插件支持汽车、类车和阿克曼车辆。此插件还可用于曲率约束规划,例如在高速规划机器人时,以确保它们不会翻车或失控打滑。

“SmacPlanner”完全实现了“自动驾驶路径规划中的实用搜索技术 <https://ai.stanford.edu/~ddolgov/papers/dolgov_gpp_stair08.pdf>”中提出的 Hybrid-A* 规划器,包括混合搜索、CG 平滑、解析扩展和启发式函数。

ThetaStarPlanner

添加了一个新包“nav2_theta_star_planner”,其中包含 4 或 8 个连接的 2D 地图 Theta* 实现。

此包实现了 Theta* 路径规划器的优化版本(特别是“Lazy Theta* P <http://idm-lab.org/bib/abstracts/papers/aaai10b.pdf>”变体),用于为差速驱动和全向机器人规划任意角度的路径,同时还考虑了成本地图成本。此插件适用于您可能希望以更高的速率规划路径但不需要拐角处极其平滑的路径的情况,例如,可以由本地规划器/控制器处理。

RegulatedPurePursuitController

添加了一个新包“nav2_regulated_pure_pursuit_controller”,其中包含 Pure Pursuit 算法的新型变体。 它还包括用于启用 Pure Pursuit 和 Adaptive Pure Pursuit 变体的配置。

此变体专门针对服务/工业机器人的需求。 它通过路径的曲率调节线性速度,以帮助减少盲角高速时的超调,从而使操作更加安全。 它还比目前可用的任何其他 Pure Pursuit 变体更好地遵循路径。 它还具有启发式方法,可以在靠近其他障碍物时减速,以便您可以在附近发生潜在碰撞时自动减慢机器人速度。 它还实现了自适应前瞻点功能,可通过速度缩放,从而在更大范围的平移速度下实现更稳定的行为。

它的作用不止这些,这是一般信息。有关更多信息,请参阅包的 README

Costmap2D current_ 用法

在 costmap2D 中,ROS1 中使用 current_ 来表示 costmap 层是否仍处于启用状态并主动处理数据。只有在传感器的预期更新率未达到要求,因此收到的消息过时或没有消息的情况下,它才会变为“false”。如果导航传感器停止发布,它将充当故障保护。

在银河系中,这将保持转向,但它也会添加额外的功能。当由于清除或其他导航恢复而重置成本地图时,它现在也会设置为“false”。这会阻止机器人创建计划或控制工作,直到重置后至少更新一次成本地图。这使我们能够确保我们永远不会创建具有完全空的成本地图的路径或控制,这可能会导致碰撞,因为清除成本地图然后立即请求运行算法。

参数中的标准时间单位

为了遵循 REP-103 中概述的 SI 单位,下面的“T”节点已修改为在每个参数中一致使用秒。在每个节点名称下,您可以看到哪些参数更改为秒而不是使用毫秒。

  • 生命周期管理器

  • bond_timeout_ms 变为 ``bond_timeout``(以秒为单位)

  • smac 规划器

  • max_planning_time_ms 变为 ``max_planning_time``(以秒为单位)

  • 地图保护程序

  • ``save_map_timeout``(以秒为单位)

光线追踪参数

光线追踪功能已修改为包含最小范围参数,光线追踪从该参数开始清除障碍物,以避免错误地清除离机器人太近的障碍物。 ROS Answers 中提到了这个问题。现有参数 raytrace_range 已重命名为 raytrace_max_range,以反映其影响的功能。重命名的参数及其所属的插件如下所述。这些更改是在此 pull request 中引入的。

  • dysfunction_layer 插件

  • raytrace_min_range 控制光线追踪从 costmap 中清除障碍物的最小范围

  • raytrace_max_range 控制光线追踪从 costmap 中清除障碍物的最大范围

  • voxel_layer 插件

  • raytrace_min_range 控制光线追踪从 costmap 中清除障碍物的最小范围

  • raytrace_max_range 控制光线追踪从 costmap 中清除障碍物的最大范围

障碍物标记参数

障碍物标记已修改,包括一个最小范围参数,从该参数开始在代价地图上标记障碍物,以防止由于噪声和不正确的测量而在代价地图中添加障碍物。此修改与光线追踪参数的变化有关。重命名的参数、新添加的参数及其所属的插件如下。

  • dysfunction_layer 插件

  • obstacle_min_range 控制在 costmap 上标记障碍物的最小范围

  • obstacle_max_range 控制在 costmap 上标记障碍物的最大范围

  • voxel_layer 插件

  • obstacle_min_range 控制在 costmap 上标记障碍物的最小范围

  • obstacle_max_range 控制在 costmap 上标记障碍物的最大范围

恢复操作更改

如果由于潜在碰撞而中止恢复操作,则恢复操作 SpinBackUp 已修改为正确返回 FAILURE。以前,这些操作总是错误地返回 SUCCESS。对此的更改导致下游操作客户端,例如默认行为树。这些更改是在此 pull request 1855 中引入的。

默认行为树更改

默认行为树 (BT) navigate_w_replanning_and_recovery.xml 已更新,以允许在恢复之间重新规划。这些更改是在此 PR 1855 中引入的。此外,由于与更新后的默认 BT 相似,替代 BT navigate_w_replanning_and_round_robin_recovery.xml 已被删除。

新的 ClearCostmapExceptRegion 和 ClearCostmapAroundRobot BT 节点

ClearEntireCostmap 操作节点已实现,但缺少调用 Costmap 2D 姊妹服务“(local_or_global)_costmap/clear_except_(local_or_global)_costmap”和“clear_around_(local_or_global)_costmap”的 ClearCostmapExceptRegion 和 ClearCostmapAroundRobot BT 节点,它们现在以类似的方式实现。它们都公开了一个“reset_distance”输入端口。有关更多信息,请参阅:ref:“bt_clear_costmap_except_region_action”和:ref:“bt_clear_entire_costmap_around_robot_action”。此更改在此“pull request 2204 <https://github.com/ros-planning/navigation2/pull/2204>”中引入。

新的行为树节点

添加了一个新的行为树节点,可使用行为树 cpp v3 在运行时动态加载。 请参阅“nav2_behavior_tree”获取完整列表,或参阅 :ref:“plugins”获取当前的行为树插件列表及其说明。 这些插件在“nav2_bt_navigator”中设置为默认插件,但可以通过“bt_plugins”参数覆盖以包含您的特定插件。

原始 GitHub 票证:

此外,行为树节点经过修改,包含自己的本地执行器,用于旋转动作、主题、服务等,以确保每个行为树节点彼此独立(例如,在一个 BT 节点中旋转不会触发另一个 BT 节点中的回调)。

sensor_msgs/PointCloud 更改为 sensor_msgs/PointCloud2

由于 sensor_msgs/PointCloud 已弃用,发布 sensor_msgs/PointCloud 的主题将转换为 sensor_msgs/PointCloud2。这些主题及其各自信息的详细信息如下所列。

  • nav2_costmap_2d 包的 voxel_layer 插件中的 clearing_endpoints 主题

  • nav2_costmap_2d 包的 costmap_2d_cloud 节点中的 voxel_marked_cloudvoxel_unknown_cloud 主题

  • dwb_core 包的 publisher.cpp 中的 cost_cloud 主题。

这些更改是在 pull request 2263 中引入的。

ControllerServer 新参数 Failure_tolerance

在 Controller Server 中添加了一个新参数 failure_tolerance,用于容忍控制器插件异常而不会立即失败。它类似于 ROS(1) Nav 中的“controller_patience”。有关说明,请参阅 :ref:“configuring_controller_server”。

此更改在此“pull request 2264 <https://github.com/ros-planning/navigation2/pull/2264>”中引入。

删除了 BT XML 启动配置

已删除行为树 XML 文件的 CLI 设置的启动 python 配置。相反,您应该使用 yaml 文件来设置此值。但是,如果您在较大的部署中有一个不一致的 yaml 文件的“路径”,则可以使用父启动文件中的“RewrittenYaml”工具,利用“get_shared_pa​​ckage_path()”目录查找器(或像以前在 python3 中一样)重新映射默认 XML 路径。

地图订阅 QoS 启动配置的使用也被删除,使用参数文件。 此更改在此 pull request 2295 中引入。