主要依托于BehaviorTree.CPP进行介绍。
1 基本概念
1.1 是什么与用来做什么
官网 https://www.behaviortree.dev/docs/learn-the-basics/BT_basics
 Unlike a Finite State Machine, a behavior Tree is a tree of hierarchical nodes that controls the flow of execution of “tasks”.
 用于任务流控制的多层节点树。不是有限状态机。(有限状态机不能表示同时做多件事情,任务流可能会出现同时做多件事情,都结束后执行另外一件事情,任务流的本质是单起点有向图)
BehaviorTree.CPP 是一个c++库,能够比较方便的集成到应用中。
1.2 tick和node
1 tick (时间步脉冲,类似于bpmn的token)
 每一个tick都会从tree的根节点root传递到叶节点leaf。
2 每个节点收到tick后会执行callback,并返回状态
 SUCCESS
 FAILURE
 RUNNING
3 节点会传递tick给其子节点,每个节点类型都有其规则来确定是否,何时或多少次数的传递tick给某一个子节点。
4 叶节点。具体执行某个任务的节点,Action nodes是最普遍的叶节点。
1.3 节点类型
节点分为3类,控制节点,装饰节点,叶节点,其中叶节点是负责执行具体事务的节点,其它节点的作用是流程控制。根据功能的区别,每一种节点还可以继续细分。
叶节点分为条件节点与动作节点。
 控制节点可以分顺序节点等。
 
| 节点类型 | 说明 | 
|---|---|
| ControlNode 控制节点 | 常用节点类型为顺序节点 | 
| DecoratorNode 装饰节点 | 可修改子节点的返回,可多次tick子节点; Retry和 Inverter类型节点 | 
| ConditionNode 条件节点 | 不会返回running | 
| ActionNode 动作节点 | 执行某个任务的节点,分为同步和异步,同步会阻塞直到结束,返回 SUCCESS or FAILURE ,异步可能会返回RUNNING | 
1.3.1 控制节点
1)顺序节点
 顺序执行。如果全部成功则执行成功,如果一个失败则不执行后续节点,直接返回失败。
 顺序执行,直到失败返回失败,如果全部成功返回成功。
 相当于以下结构:
if( activity1 ){
	if( activity2 ){
		if(activity3  ){
			
			return success;
		} else{
			return failure;
		}
	} else{
		return failure;
	}
} else{
	return failure;
}
2)Fallback节点。
 顺序执行,直到成功返回成功,如果全部失败返回失败。
 在行为树(Behavior Tree)的上下文中,FallbackNodes 通常被用于创建一个"或"(OR)逻辑:子节点将按照特定的顺序执行,只要有一个子节点成功(返回SUCCESS),则整个 FallbackNode 也被视为成功,并且不会进一步执行其它的子节点。但是,如果所有子节点都失败了(返回FAILURE),则 FallbackNode 本身也会返回 FAILURE。
 相当于以下结构:
if( activity1 ){
	return success;
} else{
	if( activity2 ){
		return success;
	} else{
		if(activity3  ){
			return success;
		} else{
			return failure;
		}
	}
}



















