简介:
https://github.com/BehaviorTree/BehaviorTree.CPP
https://github.com/miccol/ROS-Behavior-Tree
https://github.com/chenjm1109/XM_Studio-guyuehome
本c++库(https://www.behaviortree.dev/)提供了创建行为树的框架。其设计具有灵活易用性。
尽管本库主要应用于机器人,但是也可以将其应用于构建AI游戏,或者在你的应用中替换有限状态机。
BehaviorTree.CPP有许多有意思的特点,当与其他实现相比较来说的话:
1.具有异步行为,例如:非阻塞,具有优先级。
2.可以使用文本格式xml,在运行时创建树。
3.可以静态链接自定义的树节点或者将他们转换到运行时加载的插件中。
4.包括了一个日志记录/分析结构,允许用户可视化,记录,回放以及分析状态转移。
什么是一棵行为树?
行为树(BT)是一种方法用于组织在机器人或者计算机游戏中虚拟实体的不同任务之间的切换。
BT是一种创建复杂系统的有效方法,该复杂系统可能是模块化和反应式系统。在许多应用中这些特性是极其关键的,这使得BT的应用从计算机游戏编程到许多AI和机器人的许多分支领域当中。
如果你已经熟悉有限状态机(FSM),你将会很容易掌握大部分概念,但是希望你会发现BT是更具有描述性和更容易理解的。
行为树的主要优点,相对于有限状态机而言:
内在分层式:意味着可以构建复杂的行为,该行为包括整棵树作为更大的树的一个子分支。例如,行为"获取啤酒"可能会重新使用在树中某个节点中"抓取物体"。
图形表示具有语义意义:很容易理解一棵行为树BT以及对应的工作流。在FSM中的状态转移相比较而言,不管是在文字描述还是图形表示都是更难去理解的。
更具有表达性:准备使用ControlNodes以及DecoratorNodes使得表达更复杂的控制流更具有可能性。用户可以用自定义的节点来扩展词汇。
为什么需要行为树或者状态机呢?
许多软件系统,以机器人这个显著例子来说,它内部是很复杂的。通常的方法去管理复杂性,不均匀性以及可扩展性是使用基于组件的软件工程概念。
任何已有的机器人中间件采用这种方法要么是非正式的或者正式的,比较典型的例子是ROS, YARP and SmartSoft
一个好的软件架构应当有以下特点:
模块化
组件可复用
可组合性
关注点具有好的分离性
如果在最初,不考虑这些概念,那么创建的软件模块或组件将是高度耦合的,不具有可复用性。
通常,协调性的问题是与计算相结合的。换句话说,人们解决的是行为的协调性问题以及局部采取决策。
商业逻辑在许多领域变得越来越广,对于研发人员来说很难在控制流中去推理出来,然后调试错误。
为了获得更强的关注点的可分离性,最好是集中业务逻辑在一个单一的地方。
有限状态机按照上面的目标来实现,但是最近几年,行为树BT变得更加流行,尤其是在游戏领域。