Groot与行为树互动 [待校准@1432]

../../_images/groot_start_menu.png

概述

Groot is the companion application of the BehaviorTree.CPP library used to create, edit, and visualize behavior trees. Behavior Trees are deeply integrated into Nav2, used as the main method of orchestrating task server logic across a complex navigation and autonomy stack. Behavior Trees, in short BTs, consist of many nodes completing different tasks and control the flow of logic, similar to a Heirarchical or Finite State Machine, but organized in a tree structure. These nodes are of types: Action, Condition, Control, or Decorator, and are described in more detail in 导航相关概念 and BehaviorTree.CPP.

如果创建新的BT节点是有趣的, 编写新的行为树插件 [待校准@1988] 提供了一个创建简单的 Action 节点的写得很好的例子。本教程将仅专注于启动Groot、可视化行为树以及为给定的定制修改该树,假设有一个BT节点库。幸运的是,Nav2提供了大量的BT节点供您开箱使用,列于 导航插件[待校准@1437]

行为树.CPP中的BT配置文件是XML文件。这用于在运行时从映射到其名称的适当库动态加载BT节点插件。XML格式定义为 in detail here 。因此,Groot需要有一个它可以访问的节点列表,以及关于它们的重要元数据,比如它们的类型和端口 (或参数)。在本教程的后面部分我们将其称为节点的 "pallet" 。 [校准@小鱼]

在上面的视频中,您可以看到Groot与RVIz和配备西门子支持ROS的硬件的测试平台100% 并排。Groot不仅在机器人运行时显示当前行为树。注意: 在ROS 2谦逊之前,Nav2支持执行期间的实时Groot行为树监控。由于BT.CPP/Groot对动态更改行为树的错误支持,此选项被删除,有关更多详细信息,请参见 Galactic到Humble [待校准@899][待校准@1439]

可视化行为树 [待校准@1440]

要在: numref: groot_nav2_default_bt 中显示这样的行为树,我们将首先启动Groot可执行文件。开箱即用,Groot只能显示BT.CPP中默认值的行为树和节点,因为它对Nav2或您的其他项目一无所知。因此,我们必须将Groot指向Nav2乙/自定义行为树节点的托盘或索引: [待校准@1441]

  1. 在编辑器模式下打开Groot。现在,格鲁特应该看起来像: 数字: groot_bt_editor[待校准@1442]

  2. 通过上下文菜单或菜单栏顶部中间的导入图标选择 Load palette from file 选项。 [待校准@1443]

  3. 打开文件 “/path/to/navigation2/nav2_acts _ tree/nav2_tree_nodes.xml” 以导入用于导航的所有自定义行为树节点。这是Nav2自定义行为树节点的托盘。现在,格鲁特应该看起来像: 数字: groot_bt_editor_with_nodes[待校准@1444]

  4. 选择左上角附近的 Load tree 选项 [待校准@1445]

  5. 浏览您想要可视化的树,然后选择 OK 。Nav2BTs存在于 “/路径/到/导航2/nav2_bt_navigator/行为树/” 中 [待校准@1446]

../../_images/groot_bt_editor.png

Figure 1 默认编辑器视图 [待校准@1447]

../../_images/groot_with_nav2_custom_nodes.png

Figure 2 以蓝色加载自定义节点的编辑器 [待校准@1448]

如果选择默认树 navigate_w_replanning_and_recovery.xml ,格鲁特编辑器应该: numref: groot_nav2_default_bt[待校准@1449]

../../_images/bt_w_replanning_and_recovery.png

Figure 3 全Nav2默认行为树 [待校准@1450]

备注

如果由于托盘中缺少某些节点而无法可视化树,则可能需要将其添加到托盘中。当我们尝试保持Nav2的BT节点和托盘同步时,如果您发现其中一个丢失,请提交票证或请求,我们应该会快速更新。 [待校准@1451]

编辑行为树 [待校准@1452]

现在你有Nav2BT在格鲁特在编辑器模式,你应该能够平凡修改使用GUI。从屏幕所示: numref: groot_nav2_default_bt ,你可以新节点侧面板添加到工作区。你可以连接节点使用 "drag and drop" 运动节点的输入和输出端口组装新节点树。 [待校准@1453]

如果选择给定节点,则可以更改有关该节点的元数据,例如其名称或可参数化端口的值。完成修改后,只需保存新的配置文件,下次在您的机器人上使用它! [待校准@1454]

添加自定义节点 [待校准@1455]

行为树中的每个节点都有一个专用函数。有时,在设计过程中创建新节点并将其添加到托盘中很有用-也许在实现本身存在之前。这有助于设计人员从树本身的高级逻辑中抽象出节点的实现细节,以及他们希望如何与给定节点进行交互 (例如g.类型、端口等)。在Groot中,您可以创建新的自定义节点以添加到树中,并将这些新节点导出回托盘。实现节点本身需要与Groot分开完成,这在 编写新的行为树插件 [待校准@1988] 中有所描述。 [待校准@1456]

../../_images/groot_create_custom_node.png

Figure 4 创建新的自定义节点 [待校准@1457]

创建新定制节点可以开始单击橙色标记图标 Figure 4 ,格鲁特在编辑器模式。这应该加载新窗口,类似 Figure 5 。在这个新窗口,它要求你填写元数据新节点,创建它。它会问你标准信息如姓名 (绿色框),节点类型 (橙色框),任何可选端口参数化或访问黑板变量 (蓝色框)。 [待校准@1458]

完成后,在 Figure 5 中选择 OK ,新的自定义节点应在 TreeNode Palette 中显示为蓝色,如 Figure 6[待校准@1459]

../../_images/groot_interactive_node_creation.png

Figure 5 描述新节点的用户界面 [待校准@1460]

../../_images/groot_export_new_node.png

Figure 6 导出新定制节点 [待校准@1461]

在开始基于新的自定义节点创建新的BT之前,建议导出新创建的节点以保存以防Groot崩溃。这可以用绿色突出显示的图标来执行 Figure 6 。从在 Figure 6 可以在下面看到。你可以看到更多的例子在 Nav2's BT Node Pallet XML 中创建的节点生成的XML输出。 [待校准@1462]

<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>