Skip to content

Groot 行为树编辑器

  • 可视化行为树
  • 编辑行为树
  • 添加自定义节点

要显示「完整 Nav2 默认行为树」中的行为树,首先启动 Groot。 默认情况下,Groot 只能显示 BT.CPP 自带的行为树和节点,并不了解 Nav2 或你的项目。 因此需要让 Groot 加载我们的调色板(palette),也就是 Nav2/自定义行为树节点的索引:

  1. 以编辑器模式打开 Groot,界面如「默认编辑器视图」所示。
  2. 通过右键上下文菜单或菜单栏顶部中央的导入图标,选择 Load palette from file。
  3. 打开文件 /path/to/navigation2/nav2_behavior_tree/nav2_tree_nodes.xml,导入导航所用的全部自定义行为树节点。这就是 Nav2 的自定义行为树节点调色板。此时 Groot 界面如「已加载蓝色自定义节点的编辑器」所示。
  4. 选择左上角附近的 Load tree。
  5. 浏览并选择要可视化的行为树,然后点击 OK。Nav2 的行为树位于 /path/to/navigation2/nav2_bt_navigator/behavior_trees/ 目录下。
默认编辑器视图已加载蓝色自定义节点的编辑器

如果你选择默认的行为树 navigate_w_replanning_and_recovery.xml,Groot 编辑器界面如「完整 Nav2 默认行为树」所示。

完整 Nav2 默认行为树

完整 Nav2 默认行为树

注意:如果因调色板缺少某些节点导致行为树无法显示,需要将这些节点手动添加到调色板中。我们会尽量保持 Nav2 的 BT 节点与调色板同步,但若发现某个节点缺失,请提交 issue 或 pull request,我们会尽快更新。

在编辑器模式下用 Groot 打开 Nav2 行为树后,即可通过 GUI 轻松修改。 如「完整 Nav2 默认行为树」所示,可以从侧边面板拖入新节点添加到工作区,然后在节点的输入和输出端口之间拖放连线,将新节点组装到行为树中。

选中某个节点后,可以修改它的元数据,例如名称或可参数化端口的值。修改完成后,保存新的配置文件即可在机器人上使用。

行为树中的每个节点都承担一项专门功能。 在设计过程中,有时需要创建新节点并添加到调色板——甚至在具体实现完成之前就先定义好。 这样设计者就可以将实现细节抽象掉,专注于行为树本身的高级逻辑以及节点之间的交互方式(例如类型、端口等)。 在 Groot 中,你可以创建新的自定义节点添加到行为树中,并将这些新节点导出到调色板。 节点本身的实现需要在 Groot 之外单独完成,相关内容参见编写新的 BT 插件。

创建新的自定义节点

创建新的自定义节点

Groot 处于编辑器模式时,点击「创建新的自定义节点」图中橙色标记的图标,即可开始创建新的自定义节点。 此时会弹出一个新窗口,如「描述新节点的界面」所示。 在该窗口中需要填写新节点的元数据,包括一些标准信息:名称(绿色框)、节点类型(橙色框),以及用于参数化或访问黑板变量的可选端口(蓝色框)。

完成后,在「描述新节点的界面」中点击 OK,新的自定义节点将以蓝色出现在 TreeNode Palette 中,如「导出新的自定义节点」所示。

描述新节点的界面导出新的自定义节点

在基于新自定义节点创建行为树之前,建议先导出并保存新创建的节点,以防 Groot 崩溃导致数据丢失。 导出操作通过「导出新的自定义节点」中绿色高亮的图标完成。 「描述新节点的界面」中创建的节点,其生成的 XML 输出如下所示。 更多示例可参见 Nav2 的 BT 节点调色板 XML。

<root>
<TreeNodesModel>
<Action ID="MyAwesomeNewNode">
<input_port name="key_name" default="false">coffee</input_port>
<output_port name="key_name2" default="42">Sense of life</output_port>
<inout_port name="next_target" default="pancakes">rolling target</inout_port>
</Action>
</TreeNodesModel>
</root>