行为树(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 相结合。促进建模技术向更高层,有高效的方式的应用。

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

相关推荐
Robot_Nav9 天前
Nav2 行为树(Behavior Tree)技术详解
行为树·nav2·behavior tree
日月星辰cmc2 个月前
【开源】Groot2风格行为树可视化监控软件,能展示20个节点以上
机器人·开源软件·行为树
永恒星1 年前
行为树详解(6)——黑板模式
行为树·黑板模式
ue星空1 年前
UE5行为树浅析
人工智能·ai·ue5·行为树
永恒星1 年前
行为树详解(5)——事件驱动
行为树·轮询·事件驱动
永恒星1 年前
行为树详解(4)——节点参数配置化
行为树·参数配置
Flamesky1 年前
MMORPG技能管线设计经验总结
行为树·可视化·rpg·skill·mmo·战斗系统·技能编辑器·技能管线·mmorpg·arpg
蔗理苦2 年前
2024-07-22 Unity AI行为树1 —— 框架介绍
unity·c#·游戏引擎·行为树·游戏ai
大风吹~~~~~2 年前
行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)
行为树
薛动静2 年前
行为树(Behavior Trees)
行为树