sidebar_position: 1
关于(此部分博主套用官方介绍BehaviorTree)
关于此库
这个 C++ 库提供了一个创建行为树的框架。 它被设计为灵活、易用且快速。
即使我们的主要用例是__机器人学__,你也可以使用这个库来构建 游戏AI,或者在你的应用中替换有限状态机。
与其它实现相比,BehaviorTree.CPP 有许多有趣的特性:
- 它将__异步动作__,即非阻塞例程,作为一等公民。
- 树在运行时创建,使用__解释型语言__(基于XML)。
- 它包含一个__日志/分析__基础设施,允许用户 可视化、记录、重放和分析状态转换。
- 你可以静态链接你的自定义TreeNodes,或者将它们转换为插件 在运行时加载。
什么是行为树?
行为树(BT)是一种结构化自主代理(如机器人或计算机游戏中的虚拟实体)中不同 任务之间切换的方式。
BT是一种非常有效的方式来创建既模块化又反应式的复杂系统。 这些特性在许多应用中至关重要,这导致了BT从计算机游戏编程 扩展到AI和机器人学的许多分支。
如果你已经熟悉有限状态机(FSM),你将 很容易掌握大部分概念,但希望你会发现BT 更具表现力和更容易推理。
将__树的节点__想象成一组积木。 这些积木用C++实现并且是”可组合的”:换句话说,它们可以被 “组装”来构建行为。
在上图中,你可以看到我们将这些动作安排在一个简单的序列中; 动作将从左到右依次执行。要了解更多,请访问页面 BT介绍。
行为树的主要优势
-
它们本质上是分层的:我们可以_组合_ 复杂的行,为,包括将整个树作为更大树的子分支。 例如,“拿啤酒”的行为可能重用 “抓取物体”的树。
-
它们的图形表示具有语义意义:更容易 “阅读”BT并理解相应的工作流程。 相比之下,FSM中的状态转换 在文本和图形表示中都更难理解。
-
它们更具表现力:现成的ControlNodes和DecoratorNodes 使得表达更复杂的控制流成为可能。用户可以使用他/她自己的自定义节点来扩展 “词汇表”。
“好的,但是为什么我们需要行为树(或有限状态机)?”
许多软件系统,机器人学就是一个显著的例子,本质上 是复杂的。
管理复杂性、异构性和可扩展性的通常方法是 使用 基于组件的软件工程的概念。
任何现有的机器人中间件都正式或非正式地采用了这种方法, ROS、YARP和 SmartSoft就是一些显著的例子。
一个”好的”软件架构应该具有以下特征:
- 模块化。
- 组件的可重用性。
- 可组合性。
- 良好的关注点分离。
如果我们从一开始就不考虑这些概念,我们创建的 软件将是紧密耦合的且可重用性差。
通常,一个软件系统的业务逻辑被”分散”到许多 组件中,这使得__开发者 很难推理它并调试错误__。
为了实现强大的关注点分离,最好将 业务逻辑集中在一个位置。
__有限状态机__正是为了这个目标而创建的,但在 近年来,__行为树__获得了普及,尤其是在游戏行业。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时









