官网:https://www.behaviortree.dev
节点状态
- SUCCESS:成功
- FAILURE:失败
- IDLE:节点还未执行
- RUNNING:正在运行
控制节点:
包含至少一个子节点
1)Fallback:
(ReactiveFallback与连续检查条件有关)
1,在勾选第一个子节点之前,节点状态变为RUNNING。
2,如果一个子级返回失败,则回退会勾选下一个子级。
3,如果最后一个子级也返回FAILURE,则所有子级都将halted,并且序列返回FAILURE。
4,如果一个孩子返回成功,它就会停止并返回成功。所有的孩子都halted了。
2)Sequences:
(ReactiveSequence与连续检查条件有关)
1,在tick第一个子节点之前,节点状态变为RUNNING。
2,如果一个孩子返回SUCCESS,它会勾选下一个孩子。
3,如果最后一个子级也返回SUCCESS,则所有子级都将halted,并且序列返回SUCCESS。
修饰节点:
仅包含一个子节点
1,InverterNode
子节点成功则返回FAILURE,Running则返回Running
2,ForceSuccessNode
仅返回SUCCESS和RUNNING
3,ForceFailureNode
仅返回FAILURE和RUNNING
4,RepeatNode
勾选子项最多N次,其中N作为输入端口传递,只要子项返回SUCCESS。
如果子级返回FAILURE,则中断循环,在这种情况下,也返回FAILURE。
RUNNING则返回RUNNING
5,RetryNode
勾选子项最多N次,其中N作为输入端口传递,只要子项返回FAILURE。
如果子对象返回SUCCESS,则中断循环,在这种情况下,也返回SUCCESS。
RUNNING则返回RUNNING
ActionNodes and 条件节点:
不包含子节点
XML格式的行为树:
//类似于HTML格式,具体内容百度或看官网,很详细~
<root main_tree_to_execute=""></root>
<BehaviorTree ID="">
<ReactiveSequence name="顺序执行">
<Condition ID="" message1="" message2="{message2}"/>
<Action ID=""/>
<Subtree ID="" />
</ReactiveSequence>
</BehaviorTree>
<TreeNodesModel>
<Condition ID="">
<inout_port name="message1"/>
<inout_port name="message2"/>
</Condition>
</TreeNodesModel>
表示树的开始,其中main_tree_to_execute表示要执行的树
其他
- 行为树中,如果只tickRoot()一次,只会执行一个ActionNode,执行完毕后行为树结束,所以一般放在循环中;
- …
记一笔
- 若要在当前树与子树之间传递端口值,需使用[端口值=“端口值”]的形式,双引号内不要带花括号!!!如<SubTree ID=“树ID” 端口值=“端口值”/>