Skip to content

行为树(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 中配置,满足自定义导航逻辑的需求。