行为树,即Behavior Tree,简称BT,是Nav2中新引入的流程控制机制,该机制的加入使其在上层业务流程控制上更加灵活,对开发者来说更加友好,所覆盖的范围如下图所示,主要涵盖了条件插件、动作插件、控制插件、装饰器插件等四大类别,具体每个插件的作用可以参照Navigation2-BT官方网站, BehaviorTree.CPP官网
重点了解一下控制插件,该插件决定了所有action的执行流程和顺序
PipelineSequence插件
勾选第一个子节点直到它成功,然后勾选第一个和第二个子节点直到第二个成功。
再然后勾选第一个、第二个和第三个子节点,直到第三个成功,依此类推。
如果在任何时候子节点返回RUNNING,那就不会改变行为。
而如果在任何时候一个子节点返回FAILURE,这会停止所有子节点并返回FAILURE。
示例:
<PipelineSequence>
<!--Add tree components here--->
</PipelineSequence>
RoundRobin插件
用于为BT子节点创建循环行为的自定义控制流节点。
示例:
<RoundRobin>
<!--Add tree components here--->
</RoundRobin>
RecoveryNode
RecoveryNode流程RecoveryNode
RecoveryNode是一个有两个子节点的控制流节点。
当且仅当第一个子节点返回SUCCESS时,它才会返回SUCCESS。只有当第一个子节点返回FAILURE时,才会执行第二个子节点。如果第二个子节点返回SUCCESS,则会再次执行第一个子节点。
用户可以指定在返回FAILURE之前应该执行多少次恢复动作。在nav2中,RecoveryNode包含在行为树中,用于在发生故障时执行恢复动作。
具体流程如上图,该节点流程比较复杂,不过也是最常用的,需要搞明白流程走向。
输入端口:
number_of_retries端口:数据类型为int,默认值为1。端口描述—用于设置执行恢复动作的次数。
示例:
<RecoveryNode number_of_retries="1">
<!--Add tree components here--->
</RecoveryNode>
Nav2中所涉及的行为、条件、控制、装饰
网友评论