行为树 (Behavior Tree, BT)
refer:《机器人学和人工智能中的行为树》& chatgpt
行为树介绍
-
构建一个自主智能体在不同任务之间切换的方法。实现机器人在不同行为之间的切换,同时满足“反应性”和“模块化“
-
相比FSM(有限状态机),由于FSM采用单向传输进行任务跳转,这意味着FSM需要在“反应性”和“模块化”之间进行权衡
类似“GoTo”语句带来的不便,这主要反映在实现机器人“反应性”过程中,为了使系统具有反应性,需要在组件之间进行多次转换,而FSM组件之间的转化是单向的,这将使程序混乱,从而破坏程序的模块化。
BT使用由树的内部节点控制的双向传输机制,使得BT可以同时实现机器人的模块化和适应性。
运行原理
1、BT的经典阐述
一、四类控制流节点
-
序列
-
回退
-
并行
-
装饰器
1.序列节点
伪代码:
将时钟信号从左侧还是发送到其子节点,直到找到返回“失败”或者“执行”的子节点,全部节点返回成功父节点才返回成功。
attention:
只有子结点返回“成功”父节点才会把时钟信号传递给下一个子节点,子节点返回“失败”或者“执行”时父节点将不会将时钟信号传递给下一个子节点。
2.回退节点
回退节点常用于实现一种备选策略:如果某个任务无法完成,就尝试执行另一个任务,直到找到一个可行的解决方案为止。这种方式可以增加系统的鲁棒性和适应性,使其能够在面对不同情况时做出合适的反应。
伪代码:
和序列节点类似,父节点将时钟信号从左开始发送到子节点,直到找到一个“成功”或者“执行”的节点,如果“失败”将时钟信号继续向后传递,如果最后全都“失败”,父节点才返回“失败”。
3.并行节点
伪代码:
父节点将时钟信号发送到所有子节点(N个),设立一个阈值M(M≤N),如果M个子节返回“成功”,则父节点返回成功,如果N-M+1个节点返回“失败”,则父节点返回“失败”,否则返回“执行”。伪代码中“N“为上述描述中的M,”0“为上述描述中的N-M,即为与上述描述中当M=N是时的实现效果相同。
4.装饰器
装饰器节点是带有一个子节点的控制流节点,该节点根据用户定义的规则操纵其子节点的返回状态。并根据预定于的规则有选择性地触发子节点。
例如:
-
反转装饰器节点:
-
反转子节点的“成功”和“失败”状态
-
-
最多尝试N次的装饰器节点:
-
只允许节点失败N次,并且总是返回“失败”而不执行该节点。
-
-
最大时间执行T秒的装饰器节点:
-
只允许节点执行T秒,如果T秒后节点还在执行,装饰器将返回“失败”并不再触发该节点。
-
二、两类执行节点
-
动作
-
条件
1.动作节点
伪代码:
当动作节点接收到时钟信号时将该执行命令。
attention:
动作执行的频率可能比BT执行的频率更高,BT的时钟信号用于决策,而动作执行的时钟信号往往来自传感器或其他组件,BT信号只是让动作运行起来,直到他们成功或失败。
但BT库可以通过特定的机制来安全的中止动作。
2.条件节点
伪代码:
当条件节点接收到时钟信号时,它就会检查一个命题,返回“成功”或“失败”,条件节点无法返回“执行”状态。