Foxy到Galactic

从ROS 2 Foxy迁移到Galactic,我们添加了许多稳定性改进,这里不会具体说明。

ComputePathToPose BT节点接口更改

新增了``start``输入端口,可选择性地请求从``start``到``goal``的路径,而不是从机器人的当前位置到``goal``的路径。

有关详细信息,请参见:ComputePathToPose(计算路径到位姿)

ComputePathToPose Action接口变更

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

  • 新增了PoseStamped字段``start``。

  • 已添加了布尔字段``use_start``。

这两个附加字段可选择性地在``use_start``为true时,允许请求从``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``映射到唯一标识符名称的列表,类似于控制器和规划器插件的``FollowPath``和``GridBased``的情况。

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

下面显示了控制器服务器节点的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 具有一个动作服务器,接收一个要按顺序跟随的路径点列表。在某些情况下,我们可能希望机器人在到达这些路径点时执行某些任务/行为。为了执行这些任务,已经在 nav2_core 中添加了一个通用插件接口 WaypointTaskExecutor。用户可以从该接口继承,以实现自己的插件,以满足其特定需求下路径点到达时执行更具体任务的需要。

nav2_waypoint_follower``中包含了几个示例实现。``WaitAtWaypoint``和``PhotoAtWaypoint``插件包含在``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

原始的 GitHub 问题:

代价地图过滤器

Galactic引入了一个与空间相关对象进行交互的新概念,称为"Costmap Filters"(成本地图过滤器)(有关该概念的更多信息可在:ref:`concepts`页面找到)。Costmap过滤器作为成本地图插件,应用于一个独立于常规插件的单独成本地图上。为了创建一个经过过滤的成本地图并在标注区域改变机器人的行为,过滤器插件读取来自过滤器掩码的数据。然后,这些数据被线性转换为过滤空间中的特征图。这可以是区域的可通过性、最大速度限制(以米/秒为单位)、机器人期望的方向(以度为单位)或其他任何内容。转换后的特征图与地图/成本地图、传感器数据和当前机器人位置一起用于插件算法中,以对结果成本地图和机器人行为进行必要的更新。

从架构上看,代价地图过滤器由``CostmapFilter``类组成,它是一个基本类,集成了大部分常见的过滤器插件特性:

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

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

  • 行业中的首选车道。此插件由``KeepoutFilter``(有关详细信息,请参见`对应PR的讨论 <https://github.com/ros-planning/navigation2/issues/1522>`_)覆盖。

每个代价地图过滤器订阅过滤器信息主题(由`Costmap Filter Info Publisher Server <https://github.com/ros-planning/navigation2/tree/main/nav2_map_server/src/costmap_filter_info>`_发布),该主题包含加载的代价地图过滤器和过滤器掩码主题所需的所有信息。``SpeedFilter``还发布最大速度限制的 消息,用于控制器强制机器人不超过给定的限制。

可以在`此处 <https://github.com/ros-planning/navigation2/tree/main/doc/design/CostmapFilters_design.pdf>`_ 找到这个概念的高级设计。有关代价图滤波器的功能正在`票号#1263 <https://github.com/ros-planning/navigation2/issues/1263>`_进行讨论,并由`PR#1882 <https://github.com/ros-planning/navigation2/pull/1882>`_ 执行。以下教程:使用禁止区域进行导航带速度限制的导航 将帮助您轻松了解 KeepoutFilterSpeedFilter 的功能。

SmacPlanner

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

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

SmacPlanner 完全实现了 Practical Search Techniques in Path Planning for Autonomous Driving 中提出的 Hybrid-A* 路径规划器,包括混合搜索、CG平滑、解析扩展和启发式函数。

ThetaStarPlanner

添加了一个新的包,nav2_theta_star_planner,其中包含4或8个连通的Theta*实现,适用于2D地图。

该软件包实现了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中,ROS 1中使用``current_``表示一个代价地图层是否仍处于启用状态并且正在主动处理数据。只有在传感器的预期更新速率未达到时,它才会变为``false``,因此它变得过时或没有消息。它作为一种故障安全机制,以防导航传感器停止发布。

在galactic版本中,这将保持不变,但它还将增加额外的功能。当由于清除或其他导航恢复而重置代价地图时,现在将其设置为``false``。这会阻止机器人在代价地图至少在重置后更新一次之前创建计划或控制。这样我们可以确保我们永远不会使用完全空的代价地图创建路径或控制,从而避免可能导致碰撞的情况,因为清除代价地图后立即请求运行算法。

参数中的标准时间单位

为了遵循REP-103中概述的国际单位制,以下节点已经修改为在每个参数中始终使用秒。在每个节点名称下面,您可以看到哪些参数改为使用秒而不是使用毫秒。

  • 生命周期管理器

    • 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 中引入。

  • 障碍物层插件

    • raytrace_min_range 控制射线追踪从代价地图中清除障碍物的最小范围

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

  • voxel_layer 插件

    • raytrace_min_range 控制射线追踪从代价地图中清除障碍物的最小范围

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

障碍物标记参数

障碍物标记已修改,包括一个最小范围参数,用于在代价地图上标记障碍物,以防止由于嘈杂和错误的测量而添加代价地图中的障碍物。此修改与射线追踪参数的更改相关。以下是已重命名的参数、新添加的参数以及它们所属的插件。

  • 障碍物层插件

    • obstacle_min_range 控制障碍物在代价地图上被标记的最小范围

    • obstacle_max_range 控制在代价地图上标记障碍物的最大范围

  • voxel_layer 插件

    • obstacle_min_range 控制障碍物在代价地图上被标记的最小范围

    • obstacle_max_range 控制在代价地图上标记障碍物的最大范围

恢复动作变更

修复了恢复动作 SpinBackUp 的问题,现在如果恢复动作由于潜在碰撞而中止,将正确返回 FAILURE。之前,这些动作错误地始终返回 SUCCESS。对此进行的更改影响了后续的动作客户端,例如默认行为树。这些更改在此 pull request 1855 中引入。

默认行为树变更

默认行为树 (BT) navigate_w_replanning_and_recovery.xml 已更新,允许在恢复过程中进行重新规划。这些更改在此 PR 1855 中引入。此外,由于与更新后的默认行为树相似,另外一个行为树 navigate_w_replanning_and_round_robin_recovery.xml 已被删除。

新的 ClearCostmapExceptRegion 和 ClearCostmapAroundRobot BT 节点

已经实现了ClearEntireCostmap动作节点,但是调用Costmap 2D的ClearCostmapExceptRegion和ClearCostmapAroundRobot BT节点的姐妹服务(local_or_global)_costmap/clear_except_(local_or_global)_costmap和clear_around_(local_or_global)_costmap缺失,现在以类似的方式实现了它们。它们都暴露了一个reset_distance输入端口。有关更多信息,请参阅bt_clear_costmap_except_region_action和bt_clear_entire_costmap_around_robot_action。这些更改已经在此pull request 2204中引入。

新的行为树节点

新增了一个行为树节点,可以在运行时使用行为树cpp v3进行动态加载。请参阅nav2_behavior_tree以获取完整列表,或参阅插件以获取当前行为树插件列表及其描述。这些插件在nav2_bt_navigator中被设置为默认值,但可以通过bt_plugins参数进行覆盖,以包括您特定的插件。

原始的 GitHub 问题:

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

sensor_msgs/PointCloud to sensor_msgs/PointCloud2 Change

由于sensor_msgs/PointCloud被弃用,发布sensor_msgs/PointCloud的主题转换为sensor_msgs/PointCloud2。下面列出了这些主题及其相应的信息。

  • voxel_layer 插件中的 clearing_endpoints 主题属于 nav2_costmap_2d

  • costmap_2d_cloud 节点中的 voxel_marked_cloudvoxel_unknown_cloud 主题,位于 nav2_costmap_2d 包中。

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

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

ControllerServer 新参数 failure_tolerance

Controller Server 添加了一个新参数 failure_tolerance,用于容忍控制器插件的异常而不立即失败。它类似于 ROS(1) Nav 中的 controller_patience。有关描述,请参阅 控制器服务器。这些更改是在这个 pull request 2264 中引入的。

移除了BT XML启动配置

已删除用于设置行为树 XML 文件的 CLI 设置的启动 Python 配置。相反,您应该使用 yaml 文件来设置该值。然而,如果您在较大的部署中有一个与 yaml 文件不一致的 path,您可以在父启动文件中使用 RewrittenYaml 工具,利用 get_shared_package_path() 目录查找器(或者像之前一样使用 Python 3)重新映射默认的 XML 路径。

还删除了地图订阅QoS启动配置,请使用参数文件。此更改在此`pull request 2295 <https://github.com/ros-planning/navigation2/pull/2295>`_中引入。