行为树(BEHAVIOR TREES)及其工业应用

顾名思义,行为树是描述事物(人,动物,机器人,虚拟角色等等)行为的树形结构。游戏行业使用行为树为角色行为建模。现在行为树建模技术正在向其它领域渗透,比如工业产线编排,机器人控制。

另一方面,从一些自动化厂商的技术发展趋势可以看出,开放自动化正朝着从底层编程,建模技术逐步上移,采用更高级的领域语言和高层建模技术,逐步走向基于自然语言的编程与建模的目标。

行为树和有限自动机是两种主要的行为建模方式。

行为树由三类预定义的节点(node)构建的树,它们分别是 根(root),工作流(workflow)和执行节点。用它们来描述"某些"行为。节点的返回是成功(Success),失败(Failure )和运行(Running)

设想你感觉饿了,准备去烹饪一个肉,或者订购一份外卖。我们可以用下面的行为树来描述:

也许你并不知道SELECTORSEQUENCE的含义,但是你大致了解行为树描述的行为模型的意义。只有一个节点会成功,做成一份肉,或者点了一份外卖。

节点类型

(动作/任务/叶)Action/Task/Leaf nodes

叶节点分为两类:

  • 动作: 完成某类动作,例如:开门
  • 条件: 检测某类条件

复合节点(Composite nodes)

复合节点是有多个子节点(Child)的节点,主要包括下列三种:

顺序(Sequence)

顺序节点包含多个子节点,一旦执行,将顺序执行子节点。其中一个子节点执行错误便返回失败。

python 复制代码
for child in children:
    status = child.run()
    if status == RUNNING or status == FAILURE:
        return status

return SUCCESS

选择器(Selector)

选择器节点具有多个子节点,一旦执行,它执行所有节点,直到某一个成功,否则便失败。你可能看出来,它正好与顺序节点相反。

python 复制代码
for child in children:
    status = child.run()
    if status == RUNNING or status == SUCCESS:
        return status

return FAILURE

修饰器节点(Decorator)

修饰器只有一个子节点,它大多数用于实用节点(utility Nodes),例如

  • Repeater: 无限制执行,或者执行一段时间子节点。
  • Inverter: 子节点的结果取反
  • AlwaysSucceed: 失败变成成功.
  • UntilFail: 运行直到出错

其它的复合节点包括

  • 并行执行
  • 随机执行

黑板(Blackboard)

几乎在大多数情况下,某个节点需要与其它的节点对话,行为树具有数据存储的能力,它们被称为黑板或者数据脉络(blackboard, data context),比如一个节点发现最近的敌人,而另一个节点袭击它。它们之间要交换敌人的方位信息

行为树的应用

  • 游戏
  • 对话AI
  • 机器人

行为树在工业软件中的应用

在制造业中,人们使用行为树为工作流程建模。例如将制造行业的标准工单(SOP-Standard Operation Procedure)转换成为行为树模型。构建了行为树模型之后,工业软件能够将行为树转换成为执行程序,每个节点对应与一个功能块(function block)。从而实现工作流自动化和低代码。

搜索Github 可以找到许多Python和C++ 的行为树库。也有专门支持ROS 的机器人行为树库。

行为树与功能块相结合

开放自动化领域中的功能块是一种模块化技术,将完成某个单一功能的程序段封装成功能块,并且提供规范的功能块接口。功能块适合图形化编程。显然,使用功能块实现行为树是有效的方法。能够方便地将行为树图模型转换成为功能块图网络。

模型和代码的分层架构

结束语

行为树作为一种行为建模方式,在工制造业的基于标准工单的作业流控制,机器人,AGV 等场合具有广阔的市场应用。

不过也应该指出,行为树和有限状态机一样,它是一种建模方法,并不是一个技术标准。在具体应用中有灵活的应用方法。行为树模型和其它建模方法相结合,能够成为高层建模方法,例如OPCUA 和IEC61499 基于事件功能块信息模型。进一步地,随着chatGPT 大语言模型的行业应用的普及,能够与基于自然语言的领域语言DSL 相结合。促进建模技术向更高层,有高效的方式的应用。

俗话说,"基础不牢,地动山摇"。当我们研究和学习新技术和创新思想时候,基础技术需要掌握的。与此同时,也要借鉴其它行业的成功经验,这样才能够到达"它山之石,可以攻玉"的境界。

相关推荐
Flamesky11 小时前
MMORPG技能管线设计经验总结
行为树·可视化·rpg·skill·mmo·战斗系统·技能编辑器·技能管线·mmorpg·arpg
蔗理苦4 个月前
2024-07-22 Unity AI行为树1 —— 框架介绍
unity·c#·游戏引擎·行为树·游戏ai
大风吹~~~~~9 个月前
行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)
行为树
薛动静10 个月前
行为树(Behavior Trees)
行为树