行为树(Behavior Trees)
Nav2 是一个高度可配置的项目,支持多种类型的插件,涵盖行为树、核心算法、状态检查器等。
本节重点介绍项目默认提供的示例行为树 XML 文件,演示如何完成常见导航任务。
你可以根据实际应用场景修改这些文件,也可以参考它们来构建专属的行为树。
这些示例展示了如何利用行为树灵活调整导航行为。Nav2 还在 nav2_bt_navigator 包中提供了其他行为树,本节仅介绍其中较为重要的几个。
下面展示一个基础但功能完整的导航器:
<root main_tree_to_execute="MainTree"> <BehaviorTree ID="MainTree"> <PipelineSequence name="NavigateWithReplanning"> <DistanceController distance="1.0"> <ComputePathToPose goal="{goal}" path="{path}"/> </DistanceController> <FollowPath path="{path}"/> </PipelineSequence> </BehaviorTree> </root>该行为树使用 ComputePathToPose 每隔 1 米(由 DistanceController 设置)重新规划一条到达 goal 的路径。一旦 path 黑板变量中有了新路径,FollowPath 就会获取该路径,并使用服务器默认算法跟随。
该行为树存在以下局限:
- 没有任何恢复(recovery)行为
- 失败时不重试
- 没有选择规划器或控制器算法
- 没有用于根据场景调优性能的节点
- 没有与自动门、电梯或其他 API 的集成
- 没有用户自定义的 BT 节点
- 没有用于停靠(docking)、跟随等其他行为的子树
- 没有使用其他类型的规划器,例如完全覆盖(complete coverage)规划器
上述能力均可在 Nav2 中配置,满足自定义导航逻辑的需求。