从Humble升级到Iron
从 ROS 2 Humble 版本升级到 Iron 版本,增加了一些稳定性改进,我们在此不会具体讨论。
添加了碰撞监测器。
PR 2982 添加了一个独立于 Nav2 栈运行的新的安全层,确保机器人可以控制与近处障碍物的碰撞,这些障碍物来自不同的传感器(LaserScan、PointCloud、IR、Sonars 等)。有关详细信息,请参见 碰撞监控。它不包含在默认的 nav2_bringup
中的启动电池中。
从 yaml 文件中移除了 use_sim_time。
PR #3131 使得可以在启动文件中为多个节点设置 use_sim_time 参数,而不是通过 yaml 文件逐个设置。如果使用 Nav2 的启动文件,您可以选择从您的 yaml 文件中删除 use_sim_time 参数,并通过启动参数进行设置。
Smac 规划器的运行时加速。
在 PR 3201 中,Smac Planner 框架中的图实现的核心数据结构被更换为使用专门的无序映射实现。这将加快规划器在简单请求上的速度约 10%,并在涉及大量重新哈希的复杂计划上报告高达 30% 的速度提升。
对 Smac 和 Simple 平滑器进行了递归细化。
对于 Simple 和 Smac Planner Smoothers,递归细化次数已在 refinement_num
参数下公开。以前的行为是,如果 do_refinement = True
,则将此参数硬编码为 4
。现在,默认值为 2
,以帮助减少开箱即用时的过度平滑,从而减少与碰撞较近的路径,但可以通过将其更改为 4
来实现旧的行为。
简单指挥官 Python API
PR 3159 和后续的 PR 添加了在 Python3 中的 Costmap API,以接收来自 Nav2 的 OccupancyGrid
消息,并能够在 Python3 中原生处理它们,类似于 C++ 的 Costmap API。它还包括了一个行迭代器和碰撞检测对象,用于在 Python3 中执行足迹或其他碰撞检测。有关详细信息,请参阅 Simple Commander API。
代价地图过滤器
现在成本地图过滤器可以通过调用适当过滤器的 toggle_filter
服务在运行时启用/禁用(PR #3229)。
添加了新的二进制翻转过滤器,允许在敏感区域关闭摄像头,打开前灯/LED灯/其他安全设备,或在机器人位于标记在掩码区域内时切换操作模式(PR #3228)。
Savitzky-Golay平滑器
将新的平滑算法 Savitzky-Golay 平滑器添加到平滑器服务器插件列表中。有关更多详细信息,请参阅配置指南 Savitzky-Golay平滑器。
更改启动文件中map_server节点的地图yaml文件路径。
PR #3174 <https://github.com/ros-planning/navigation2/pull/3174>`_添加了一种设置map_server节点的地图yaml文件路径的方式,可以从yaml文件或使用launch配置参数``map``来设置,优先考虑launch配置参数。``yaml_filename``不再严格要求在``nav2_params.yaml``中存在。
SmootherSelector BT节点
PR #3283 <https://github.com/ros-planning/navigation2/pull/3283>`_添加了一个BT节点,根据主题或默认值来设置平滑器。有关更多详细信息,请参阅配置指南:简单平滑器。
发布Costmap图层
PR #3320 <https://github.com/ros-planning/navigation2/pull/3320>`_添加了nav2_costmap_2d软件包的功能,发布与每个图层相关联的代价地图数据。
让行为服务器访问两个Costmap
PR #3255 <https://github.com/ros-planning/navigation2/pull/3255>`_添加了一个行为访问本地和全局代价地图的功能。
为了更新行为,所有对global_frame的引用必须更新为local_frame参数,以及``configuration``方法,该方法现在接受本地和全局碰撞检查器。最后,必须覆盖``getResourceInfo``以返回``CostmapInfoType::LOCAL``。其他选项包括如果行为使用全局costmap和/或足迹,则返回``GLOBAL``,如果两者都需要,则返回``BOTH``。这样我们就可以只创建和维护最少量的昂贵资源。
新的模型预测路径积分控制器
新的Nav2 MPPI控制器是一个预测性控制器,是TEB和纯路径跟踪MPC控制器的继任者,与Nav2一起使用。它使用基于采样的方法选择最优轨迹,在连续迭代之间进行优化。它包含基于插件的目标函数,可用于自定义和扩展各种行为和行为属性。
有关详细信息,请参阅README.md和:ref:`configuring_mppic`页面。
行为树使用错误代码
PR #3324 <https:https://github.com/ros-planning/navigation2/pull/3324>`_添加了三个新的条件节点,用于检查由包含它们的动作BT节点在黑板上设置的错误代码。
AreErrorCodesPresent``条件节点允许用户指定来自服务器的错误代码以及要匹配的错误代码。``WouldAControllerRecoveryHelp``检查活动错误代码是否为UNKNOWN、PATIENCE_EXCEEDED、FAILED_TO_MAKE_PROGRESS或NO_VALID_CONTROL。如果错误代码匹配,条件返回``SUCCESS
。这些错误代码有可能通过控制器恢复来清除。
WouldAPlannerRecoveryHelp
检查当前的错误代码是否为UNKNOWN、NO_VALID_CONTROL或TIMEOUT。如果错误代码匹配,该条件返回``SUCCESS``。这些错误代码可能可以通过规划器恢复来清除。
WouldASmootherRecoveryHelp``检查活动错误代码是否为UNKNOWN、TIMEOUT、FAILED_TO_SMOOTH_PATH或SMOOTHED_PATH_IN_COLLISION。如果错误代码匹配,条件返回``SUCCESS
。这些错误代码有可能通过平滑器恢复来清除。
DWB正向和反向修剪
PR #3374 <https://github.com/ros-planning/navigation2/pull/3374> 在 DWB 控制器中添加了一个新的 forward_prune_distance 参数。它替代了 prune_distance 用于前向路径缩短,通过布尔参数 shorten_transformed_plan 启用。这个改变允许使用不同的值来进行前向和后向路径缩短。
在长远的前瞻距离下对曲线进行更稳定的调节
PR #3414 <https://github.com/ros-planning/navigation2/pull/3414> 在 RPP 控制器中添加了一个新的 use_fixed_curvature_lookahead 参数。这使得在曲线上减速不再依赖于瞬时的前瞻点,而是由参数 curvature_lookahead_dist 设置的固定距离。
发布碰撞监视器状态
PR #3504 <https://github.com/ros-planning/navigation2/pull/3504> 在 CollisionMonitor 中添加了一个新的 state_topic 参数。如果指定了这个可选参数,它将启用状态主题发布器。该主题报告当前激活的多边形动作类型和名称。
碰撞监视器中的ROS参数已重命名
PR #3513 <https://github.com/ros-planning/navigation2/pull/3513> 将 max_points 参数重命名为 min_points 并改变了其含义。以前,max_points 表示区域内仍不触发动作的最大点数,而 min_points 是从动作开始计算的最小点数。换句话说,min_points 现在应该调整为 max_points + 1。
碰撞监视器中新增了安全行为模型“limit”
PR #3519 <https://github.com/ros-planning/navigation2/pull/3519> 添加了一个新的碰撞监视器行为模型 limit,它限制最大线速度和角速度到特定的值 (linear_limit 和 angular_limit),如果给定形状内有足够的点。
当超时时,速度平滑器应用减速
PR #3512 <https://github.com/ros-planning/navigation2/pull/3512> 使得 VelocitySmoother 在输入命令超时时应用减速。
PoseProgressChecker插件
PR #3530 <https://github.com/ros-planning/navigation2/pull/3530> 添加了一个新的 nav2_controller::PoseProgressChecker 插件。它在 SimpleProgressChecker 的基础上添加了一个新的参数 required_movement_angle,允许插件在没有平移运动时仍然认为有进展,只要在 movement_time_allowance 内有一个超过 required_movement_angle 的旋转运动。
允许多个目标检查器并更改参数progress_checker_plugin(s)的名称和类型
PR #3555 初始化了进度检查器插件的方式,与目标检查器和控制器插件相同:现在它是一个字符串列表,并且从``progress_checker_plugin``更名为``progress_checker_plugins``,类型从``string``变为``vector<string>``。这允许初始化多个进度检查器,可以从``FollowPath``操作的``progress_checker_id``字段中选择。请注意,这是一个重大变更,需要更新配置文件。
行为服务器错误代码
PR #3569 更新行为服务器插件,在失败时提供错误代码。
旋转:无:0,未知:701,服务器错误代码:701-709
BackUp: NONE: 0, UNKNOWN: 801, 服务器错误代码:710-719
DriveOnHeading:无:0,未知:901,服务器错误代码:720-729
AssistedTeleop: NONE: 0, UNKNOWN: 1001, 服务器错误代码:730-739
新的去噪代价地图层插件
PR #2567 添加了用于过滤代价地图噪声的新插件。
由于``Voxel Layer``或``Obstacle Layer``测量中的错误,在:ref:costmap <configuring_cosmaps>`上可能会出现椒盐噪声。这种噪声会产生虚假障碍物,阻止机器人在地图上找到最佳路径。新的``Denoise Layer``插件旨在过滤掉由噪声引起的独立障碍物或小型障碍物组。该插件允许您添加一个层来过滤局部或全局代价地图。有关``Denoise Layer``插件及其工作原理的更多信息,请参阅:ref:`此处 <filtering_of_noise-induced_obstacles>。
SmacPlannerHybrid viz_expansions 参数
``PR#3577 <https://github.com/ros-planning/navigation2/pull/3577>`_ 添加了一个用于调试目的的可视化SmacPlannerHybrid扩展的新参数。