从 Humble 到 Iron
从 ROS 2 Humble 到 Iron,增加了许多稳定性改进,我们不会在这里具体介绍。
新的行为树导航器插件
PR 3345 中新增,导航器类型作为可替换或添加新导航器类型的插件向用户公开。导航到姿势和导航通过姿势的默认行为仍然是默认行为,但现在可以使用新的操作接口定义进行自定义。这些插件实现了 nav2_core::BehaviorTreeNavigator
基类,它必须处理操作请求、反馈和完成消息。行为树由此基类处理,尽可能多地从用户那里抽象出通用逻辑,以最大限度地减少重复。
有关编写新导航器插件的教程,请参阅:ref:writing_new_nav2navigator_plugin。
添加了碰撞监视器
PR 2982 添加了独立于 Nav2 堆栈运行的新安全层,可确保机器人控制与附近障碍物的碰撞,这些障碍物来自不同的传感器(LaserScan、PointCloud、IR、Sonars 等)。有关更多详细信息,请参阅:ref:configuring_collision_monitor。它不包含在``nav2_bringup`` 中包含的默认启动电池中。
从 yaml 中删除了 use_sim_time
PR #3131 可以从启动文件中为多个节点设置 use_sim_time 参数,而不是通过 yaml 文件单独设置。如果使用 Nav2 启动文件,您可以选择从 yaml 文件中删除 use_sim_time 参数并通过启动参数进行设置。
Smac Planner 的运行时加速
Smac Planner 框架中图形实现的核心数据结构在 PR 3201 中被替换为使用专门的无序映射实现。这可将规划器在简单请求上的速度提高 10%,并将涉及大量重新哈希的复杂计划的速度提高 30%。
Smac 和简单平滑器的递归细化
简单和 Smac Planner 平滑器的递归细化次数已在 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。
Smac Planner 起始姿势包含在路径中
PR 3168 将初始姿势添加到在回溯期间预留 Smac 规划器之前。RPP 中的可参数化冲突检查 ** ****************************** `PR 3204 <https://github.com/ros-planning /navigation2/pull/3204>`_adds 使 RPP 的碰撞检查成为可选(默认开启)。
扩展规划器基准测试
PR 3218 添加了启动文件和更新的脚本,用于在 Nav2 中的规划器中执行客观随机规划测试,以进行基准测试和指标计算。
Smac Planner 路径公差
PR 3219 为 Hybrid-A* 和 State Lattice 规划器添加路径公差,如果无法找到精确路径,则返回近似路径,在目标姿势的可配置公差范围内。
costmap_2d_node 默认构造函数
PR #3222 <https://github.com/ros-planning/navigation2/pull/3222> _ 更改独立 costmap 节点使用的构造函数。新构造函数不会在内部设置名称和命名空间,因此可以通过启动文件进行设置。
导航失败的反馈
PR #3146 更新全局规划器以在规划失败时抛出异常。这些异常会报告回规划器服务器,后者又会将错误代码放在行为树导航器的黑板上,用于自主应用程序中的上下文错误处理。
支持以下错误代码(必要时会提供更多错误代码):未知、TF 错误、起点或目标超出地图范围、起点或目标已占用、超时或未找到有效路径。
PR #3248 通过姿势操作更新计算路径以报告规划失败。这些异常会报告回规划器服务器,后者又会将错误代码放在行为树导航器的黑板上,用于自主应用程序中的上下文错误处理。
支持以下错误代码(必要时将提供更多错误代码):未知、TF 错误、起点或目标超出地图范围、起点或目标被占用、超时、未找到有效路径和未提供航点。
PR #3227 更新控制器以在发生故障时抛出异常。这些异常会报告回控制器服务器,控制器服务器又会将错误代码放在行为树导航器的黑板上,用于自主应用程序中的上下文错误处理。
支持以下错误代码(必要时将提供更多错误代码):未知、TF 错误、无效路径、超出耐心、无法取得进展或无有效控制。
PR #3251 通过 bt_navigator 传输最高优先级错误代码并定义错误代码结构。
BT Navigator 的一个新参数“error_code_id_names”已添加到 nav2_params.yaml 中,用于定义要比较的错误代码。
“error_code_id_names”中最小的错误随后会在操作请求(导航到姿势、通过姿势导航航点跟随器)中返回,而代码枚举在软件堆栈中越往上增加 - 为较低级别的故障提供更高的优先级。
服务器生成的错误代码遵循以下准则。
0 到 9999 的错误代码为 nav2 保留,而 10000-65535 的错误代码为外部服务器保留。
每个服务器都有两个“保留”错误代码。0 为 NONE 保留,序列中的第一个错误代码为 UNKNOWN 保留。
当前已实施的服务器及其错误代码如下:
控制器服务器:NONE:0,UNKNOWN:100,服务器错误代码:101-199
规划器服务器(compute_path_to_pose):NONE:0,UNKNOWN:201,服务器错误代码:201-299
规划器服务器(compute_path_through_poses):NONE:0,UNKNOWN:301,服务器错误代码:301-399
平滑器服务器:NONE: 0,UNKNOWN: 501,服务器错误代码:501-599
航点跟随器服务器:NONE: 0,UNKNOWN: 601,服务器错误代码:601-699
此 pr 还更新了航点跟随器服务器,以在发生故障时抛出异常。这些异常会被报告回服务器,服务器会将错误代码放在行为树导航器的黑板上,用于自主应用程序中的上下文错误处理。 支持以下错误代码(必要时会支持更多错误代码):未知和任务执行器失败。 有关更多信息,请参阅:ref:adding_a_nav2_task_server 和 PR。
成本图过滤器
成本图过滤器现在能够在运行时通过调用相应过滤器的“toggle_filter”服务来启用/禁用(PR #3229)。
添加了新的二进制翻转过滤器,允许例如在敏感区域关闭摄像头、打开前灯/LED/其他安全装置或在机器人位于标记的遮罩区域内时切换操作模式(PR #3228)。
Savitzky-Golay 平滑器
将新的平滑器算法 Savitzky-Golay 平滑器添加到平滑器服务器插件列表。有关更多详细信息,请参阅配置指南:ref:configuring_savitzky_golay_filter_smoother。
Launch 中 map_server 节点的 Map yaml 文件路径更改
PR #3174 添加了一种设置 map_server 节点的 map yaml 文件路径的方法,既可以从 yaml 文件设置,也可以使用启动配置参数 map
优先考虑启动配置参数。yaml_filename
不再严格要求出现在 nav2_params.yaml
中。
SmootherSelector BT 节点
PR #3283 添加了一个 BT 节点,可根据主题或默认值设置平滑器。有关更多详细信息,请参阅配置指南:ref:configuring_simple_smoother。
发布 Costmap 图层
PR #3320 为 nav2_costmap_2d 包添加了发布与每个图层相关的 costmap 数据的功能。
授予行为服务器访问两个 Costmap 的权限
PR #3255 为行为添加了访问本地和全局 costmap 的功能。
要更新行为,必须将对 global_frame 的任何引用更新为 local_frame 参数
以及 configuration
方法,该方法现在接受本地和全局碰撞检查器。
最后,必须重写 getResourceInfo
以返回 CostmapInfoType::LOCAL
。其他选项包括“GLOBAL”(如果行为使用全局成本图和/或足迹)或“BOTH”(如果两者都需要)。这使我们能够仅创建和维护最少量的昂贵资源。
新型模型预测路径积分控制器
新型 Nav2 MPPI 控制器是一种预测控制器 - TEB 和纯路径跟踪 MPC 控制器的后继者 - 带有 Nav2。它使用基于采样的方法来选择最佳轨迹,在连续迭代之间进行优化。它包含基于插件的目标函数,用于定制和扩展各种行为和行为属性。
有关更多详细信息,请参阅 README.md 和 Model Predictive Path Integral Controller 页面。
行为树使用错误代码
PR #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 在 DWB 控制器中添加了一个新的 forward_prune_distance
参数。它取代了正向路径缩短的 prune_distance
,通过 shorten_transformed_plan
布尔参数启用。此更改允许对正向和反向路径缩短使用不同的值。
对长前瞻距离的曲线进行更稳定的调节
PR #3414 向 RPP 控制器添加了一个新的 use_fixed_curvature_lookahead
参数。这使得曲线上的减速不依赖于瞬时前视点,而是依赖于参数“curvature_lookahead_dist”设置的固定距离。
发布碰撞监视器状态
PR #3504 向 CollisionMonitor 添加一个新的“state_topic”参数。如果指定,此可选参数将启用状态主题发布者。该主题报告当前激活的多边形操作类型和名称。
在碰撞监视器中重命名 ROS 参数
PR #3513 将“max_points”参数重命名为“min_points”并更改其含义。以前的“max_points”表示区域内仍未触发操作的最大点数,而“min_points”表示从要启动的操作开始的最小点数。换句话说,“min_points”现在应调整为“max_points + 1”。
碰撞监视器中的新安全行为模型“限制”
PR #3519 添加了一个新的碰撞监视器行为模型“限制”,如果给定形状中有足够的点,则将最大线性和角速度限制为特定值(“linear_limit”和“angular_limit”)。
速度平滑器在超时时应用减速
PR #3512 使 VelocitySmoother 在输入命令超时时应用减速。
PoseProgressChecker 插件
PR #3530 添加了一个新的 nav2_controller::PoseProgressChecker
插件。它基于 SimpleProgressChecker
的行为,添加了一个新参数 required_movement_angle
,允许插件认为在没有平移运动时仍有进展,从 movement_time_allowance
内有优于 required_movement_angle
的旋转运动的那一刻开始。
允许多个目标检查器并更改参数progress_checker_plugin的名称和类型
PR #3555 以与目标检查器和控制器插件相同的方式初始化进度检查器插件:它现在是一个字符串列表,并从``progress_checker_plugin``重命名为``progress_checker_plugins``,类型从``string``更改为``vector<string>``。这允许初始化多个进度检查器,可以从``FollowPath``操作中添加的``progress_checker_id field``中选择。 请注意,这是一个重大更改,配置文件需要更新。
IsBatteryChargingCondition BT 节点
PR #3553 添加一个 BT 节点来检查电池是否正在充电。有关更多详细信息,请参阅配置指南:ref:bt_is_battery_charging_condition。
行为服务器错误代码
PR #3569 更新行为服务器插件以在失败时提供错误代码。
Spin:无:0,未知:701,服务器错误代码:701-709
BackUp:无:0,未知:801,服务器错误代码:710-719
DriveOnHeading:无:0,未知:901,服务器错误代码:720-729
AssistedTeleop:无:0,未知:1001,服务器错误代码:730-739
新的 Denoise Costmap Layer 插件
PR #2567 添加了用于过滤 costmap 上噪声的新插件。
由于“体素层”或“障碍层”测量中的错误,成本图 <configuring_cosmaps> 上可能会出现盐和胡椒噪声。这种噪声会产生虚假障碍,阻止机器人在地图上找到最佳路径。
新的“降噪层”插件旨在过滤掉噪声引起的独立障碍物或小障碍物组。此插件允许您添加将过滤本地或全局成本图的层。
有关“降噪层”插件及其工作原理的更多信息,请参见:ref:此处 <filtering_of_noise-induced_obstacles>。
SmacPlannerHybrid viz_expansions 参数
PR #3577 添加了一个新参数,用于可视化 SmacPlannerHybrid 扩展以进行调试。