Nav2行为树协调导航动作、条件和恢复行为。它可以重新规划、清除选定的代价地图、等待、旋转、备份或请求其他系统响应。树应将已知故障转化为有界决策;不应将每个错误都变成机器人重复的动作。
恢复质量取决于上下文。规划错误可能导致局部路径修复计算,而持续定位或系统故障则可能需要取消和操作员协助。在干预覆盖之前保留原始错误,并在下一次尝试耗尽重试预算前要求可衡量的进展。
将本指南与 ROS 2 生命周期恢复指南 及 Nav2 代价地图指南结合使用。测试已部署机器人配置中注入故障的树。
将树作为显式导航策略使用
行为树通过序列、回退、装饰器、条件和动作节点,使控制流程可视化。 Nav2 将这些节点连接到规划器、控制器和行为服务器。因此, XML 成为一个操作策略,决定重试、修复、升级或返回给调用方的故障。
Nav2行为树文档提供了可针对应用修改的示例树。将示例视为起点。添加任务约束、物理恢复权限、重试限制以及实际车辆和站点所需的可观测性。

上下文恢复与系统恢复分离
上下文恢复应紧邻发生故障的动作。路径规划分支可以清除全局代价地图或尝试其他规划器,而路径跟踪分支则可以处理局部代价地图或控制器状态。这种接近性保留了有用的故障身份,避免过早进行广泛干预。
系统恢复在更窄的补救措施用尽或故障非局部时运行。它可能等待环境、清除更广泛的状态、执行允许的动作或终止导航请求。定义错误类别与证据之间的转换,而非仅仅根据通用故障计数。
| 失效证据 | 可能的主人 | 情境反应 | 升级示例 |
|---|---|---|---|
| 无有效的全局路径 | 规划器或全局地图 | 重新计算或定向清除 | 拒绝无法达成的目标 |
| 控制器无法继续前进 | 地方控制或障碍 | 局部清除或受控等待 | 取消并保留 |
| 姿势无效或跳跃 | 本地化 | 地图清空后不要隐藏 | 重新本地化或请求帮助 |
| 服务器不可用 | 生命周期或过程 | 检查管理状态 | 监督员恢复 |
| 物理路径受阻 | 环境 | 等待或替代路线 | 人为干预 |
理解 RecoveryNode 重试语义
恢复节点通常执行一个主子节点,并在失败后调用一个恢复子节点,并设定了一定次数的重试。这种结构仅在恢复能够改变导致失败的条件时才有用。重复相同的输入和状态仅是延迟,并可能产生重复动作。
记录重试计数是指部署实现中的总主尝试次数还是恢复周期。记录每个尝试次数、错误代码和经过时间。同时限制计数和实际经过时长,因为即使重试次数较少,一个慢动作也可能超过操作限制。
在恢复状态改变之前,先保留第一个故障
清除地图、重启服务器或移动机器人可以抹除证据。记录第一个失败动作、服务器错误、目标、路径、姿势、代价地图、坐标变换和相关传感器数据时效,再让恢复分支改变这些状态。将所有记录关联到一个公共时钟上。
将最终错误和恢复历史分开保存。如果后续旋转失败,不应替代事故报告中的原始规划器或定位故障。操作员需要同时提供起始原因和最后一次失败干预。

要求重复尝试之间取得进展
当相关状态发生变化时,重试是正当的:路径变得有效、障碍物清除、定位信心恢复或机器人移动了有意义的距离。为每个分支定义进度。节点在未改变阻塞条件的情况下返回成功,不应重置整个重试预算。
在其他工作中使用进度检查器表示运动和分支特定条件。在低速运行时测量时间和距离窗口,避免正常的细致运动误认为熄火。相反,没有基础位移的车轮旋转不算导航进展。
| 恢复动作 | 所需许可 | 进展证据 | 中止证据 |
|---|---|---|---|
| 等等 | 区域可以安全清理 | 障碍或计划变更 | 截止日期已逾 |
| 清晰的代价地图 | 源可以重建真相 | 新的观察到来 | 缺少所需来源 |
| 旋转 | 净空支持旋转 | 新的有效观察或路径 | 无论是封装风险还是没有变化 |
| 后退 | 后部空间已验证 | 退出本地陷阱 | 未知或被阻挡的后方 |
| 重启服务器 | 故障类别允许重启 | 准备状态变为当前状态 | 反复崩溃或数据无效 |
把旋转和倒车视为物理操作
旋转和倒车动作要求真实移动。在启用前,检查足迹间隙、传感器覆盖范围、有效载荷稳定性、附近人员和场地权限。在空旷的研究楼层上可接受的回收动作,可能禁止在机架、楼梯或共享工作站旁进行。
根据机器人的风险评估设定加速度、速度、距离和持续时间限制。验证取消延迟和停止响应。如果后方感应不足,不能仅因前方控制器报告无路径就假设备份安全。
仅对已知的过期状态失效使用costmap清除
清除可能移除与环境不符的观测,但也能暂时消除真正的障碍。限制清除范围为可从当前传感器迅速重建且来源健康状况得到验证的层和区域。
清除后,等待声明刷新条件后,规划或动作才继续。记录更改的层和区域。反复清除短暂打开路径,是感知、变换或清除缺陷的证据,而非成功的长期恢复。
有意识地选择重新规划的触发点
当路径无效、目标变化或进度停滞时,可以周期性地重新规划。过度重新规划会消耗CPU,并可能导致路径频繁变更;稀疏的重新规划可能导致控制器走过时路径。将触发条件与环境动态和控制器契约匹配。
Nav2示例树包含不同的重新规划安排。在更换过程中测量路径年龄、计算时间和控制器行为。确保新计算的路径经过验证且时间一致,才能覆盖当前路径。
地图服务器错误到不同树枝
规划器、控制器和行为操作返回结构化结果。不要将所有未成功状态合并为一个备份。当接口暴露取消、超时、无效目标、无路径、进度失败、变换问题和服务器可用性时,区分它们。
维护一个版本管理的错误到策略表。未知错误代码应选择保守的默认路径,并在遥测中保持可见。当软件升级添加或更改结果代码时,回归测试应证明每个代码仍能到达预期分支。
坐标取消与优先
新的任务目标、操作员停止或机器人车队重新分配可以在回收过程中抢占导航。定义哪些动作被暂停,取消可能需要多长时间,以及部分完成的机动是否会使机器人处于有效状态。在旧动作所有权尚未明确时,不要开始新的目标。
在等待、清除、旋转、备份和服务器调用中测试抢占。记录请求者和最终操作结果。如果行为树正确且不中断,如果取消确认和命令超时未协调,仍可能发出陈旧动作。
在每个恢复层级注入故障
创建可重复测试,针对阻塞计划、移动障碍物、传感器丢失、变换过期、姿势无效、服务器崩溃、拒绝命令和失败恢复动作。对每个情况,验证所选分支、尝试次数、经过时间、物理输出及最终结果返回任务层。
在CPU和网络负载下运行测试,且负载真实。包含复合故障,如备份时的定位丢失或新目标到来时控制器重启。恢复策略只有在处理中断且不隐藏起始故障时才可信。
释放有界且可观察的回收合约
将 XML、插件集、错误映射、重试预算、操作权限和超时值合并。发布操作员可读状态,说明失败、恢复状态及后续情况。通用恢复标签在反复物理运动中不够。
使用强调证据和退出条件的释放清单。
评估“Nav2 行为树与恢复设计”时,还应保存模型版本、机器人配置、标定文件、测试日期和全部试验记录。把成功、失败、恢复与人工介入放在同一份数据中,才能区分模型能力、系统接口和现场流程造成的差异。
成本评估除了设备与算力,还要记录数据采集、工程调试、安全措施、维护、停机和人员培训。只有把这些持续投入与单位成功任务的价值比较,才能判断方案是否适合扩大。
上线后仍要持续检查分布变化、传感器漂移、机械磨损和人工接管原因。监测结果应能触发降级、停止与重新验证流程,并为下一轮数据采集和模型更新留下可追溯记录。
- 把上下文修复放在失败动作附近。
- 限制尝试次数和按实际时间计算的恢复时长。
- 在重试前要求有可测量的状态变化。
- 保留原始的断层和所有干预措施。
- 测试取消和物理机动限制。
常见问题
Nav2行为树控制什么?
它通过调用 XML 策略 Nav2 服务器来协调导航操作、条件、重试和恢复。
每次失败都应该清除两个代价地图吗?
不。只有当陈旧地图状态成为支持的假设且当前资料能重建有效证据时才明确。
应该允许多少次恢复重试?
根据运营风险和测量的恢复效果设定故障具体计数和时间预算;没有统一的数字。
动感动单车总是安全的恢复吗?
不。这是一项需要空间、感应、运动限制和场地许可的物理操作。
恢复期间应该记录哪些内容?
保留第一个错误、状态快照、每次干预、进展证据、尝试次数、时间安排和最终结果。
恢复运动与断层边界
行为树恢复可以指令机器人运动并改变环境状态。它不能取代应用程序所需的独立停止、保护或操作程序。