关于BehaviorTree.CPP库
该C++库提供了一个创建行为树的框架。它被设计为一个灵活,易用且快速的库。
尽管我们的主要用例是机器人技术,但您也可以使用该库来为游戏构建AI,或用于替换应用程序中的有限状态机。
与其它实现相比,BehaviorTree.CPP具有许多有趣的功能:
- 它使异步Action(即非阻塞)成为一等公民(first-class citizen)。
- 它允许在运行时使用文本表示(XML)创建树。
- 您可以静态链接您的自定义TreeNode,或将它们转换为在运行时加载的插件。
- 它包括一个logging/profiling基础架构,允许用户可视化,记录,回放与分析状态转换。
什么是行为树?
行为树(BT)是一种用于组织自主智能体(例如机器人或计算机游戏中的虚拟实体)中不同任务之间进行切换的方式。
BT是一种创建模块化与响应式复杂系统的非常有效的方法。这些特性在许多应用中至关重要,使得BT的应用范围从计算机游戏编程扩展到AI和机器人技术的许多分支。
如果您已经熟悉有限状态机(FSM),则可以轻松掌握大多数概念,但是您会发现BT具有更强的表达力和推理能力。
与FSM相比,行为树的主要优点是:
- 它们本质上是分层的:这意味着我们可以构成复杂的行为,包括将整棵树作为一棵更大树的子分支。例如,行为"Fetch Beer"可以重用为树"Grasp Object"中的某个节点。
- 它们的图形表示具有语义含义:更容易阅读BT并了解相应的工作流程。相比之下,FSM的状态转换在文本和图形表示上都很难理解。
- 它们更具表现力:准备使用ControlNode和DecoratorNode,使得表达更复杂的控制流成为可能。用户可以使用他自己的自定义节点来扩展"词汇表"。
为什么需要行为树(或FSM)?
许多软件系统(例如机器人技术)本质上是复杂的。
管理复杂性,异构性和可伸缩性的常用方法是使用基于组件的软件工程的概念 。
任何现有的用于机器人技术的中间件都非正式地或正式地采用了这种方法,例如ROS,YARP和 SmartSoft等。
一个"好的"软件架构应具有以下特征:
- 模块化。
- 组件的可重用性。
- 可组合性。
- 良好的关注点分离。
如果我们从一开始就没有记住这些概念,那么我们将创建与特定应用程序高度耦合而不是可重用的软件模块/组件。
通常,对协同的关注与计算混杂在一起。换句话说,人们着手解决协同行为中的问题并局部做出决定。
业务逻辑"散布"在许多地方,开发人员很难对此进行推理并调试控制流中的错误。
为了实现关注点的强分离,最好将业务逻辑集中在一个地方。
有限状态机是专门为了实现这一目标而创建的,但是近年来,行为树得到了普及,尤其是在游戏行业。