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

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

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

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

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

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

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

节点类型

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

叶节点分为两类:

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

复合节点(Composite nodes)

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

顺序(Sequence)

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

for child in children:status = child.run()if status == RUNNING or status == FAILURE:return statusreturn SUCCESS

选择器(Selector)

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

for child in children:status = child.run()if status == RUNNING or status == SUCCESS:return statusreturn 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 相结合。促进建模技术向更高层,有高效的方式的应用。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

目录 前言: 委托构造函数: 类内初始化: 空指针: 枚举类: 总结: 前言: C的学习难度大,内容繁多。因此我们要及时掌握C的各种特性,因此我们更新本篇文章,向…

【案例实战】高并发业务的多级缓存架构一致性解决方案

我们在高并发的项目中基本上都离不开缓存,那么既然引入缓存,那就会有一个缓存与数据库数据一致性的问题。 首先,我们先来看看高并发项目里面Redis常见的三种缓存读写模式。 Cache Aside 读写分离模式,是最常见的Redis缓存模式&a…

【状态估计】基于卡尔曼滤波器和扩展卡尔曼滤波器用于 INS/GNSS 导航、目标跟踪和地形参考导航研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【深入探究人工智能】:历史、应用、技术与未来

深入探究人工智能 前言人工智能的历史人工智能的应用人工智能的技术人工智能的未来当代的人工智能产物结语🍀小结🍀 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 &am…

LangChain大型语言模型(LLM)应用开发(三):Chains

LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

【UE4 塔防游戏系列】10-防御塔升级

目录 效果 步骤 一、根据防御塔等级修改子弹伤害 二、根据防御塔等级修改子弹速度 三、根据防御塔等级修改检测半径 四、根据防御塔等级修改子弹颜色 五、根据防御塔等级修改换弹时间 效果 步骤 一、根据防御塔等级修改子弹伤害 1. 打开“TowerBaseBullet_Child”&…

【ArcGIS Pro二次开发】(48):三调土地利用现状分类面积汇总统计

之前做了一个三调三大类面积统计,有小伙伴反映太粗糙,想要一个完整的地类面积汇总表。 【ArcGIS Pro二次开发】(35):三调三大类面积统计 本质上并没有多少难度,之前也做过类似的用地用海汇总表,于是拿出来改一改就好了…

window 命令笔记

1.查看端口 输入“netstat -ano”并回车可以获得所有网络连接活动的列表,在表中,本地地址IP地址后方冒号之后的即是端口号: 如果想要查找特定的端口可以输入命令“netstat -aon|findstr “端口号””,例如“netstat -aon|findstr…

My_window类(带有next和quit按钮)

运行代码: //My_window类(带有next和quit按钮) #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"//--…

C++基础算法离散化及区间合并篇

📟作者主页:慢热的陕西人 🌴专栏链接:C算法 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要讲解了双指针,位运算,离散化以及区间合并。…

有效的括号(C)

bool isValid(char* s) {ST st;StackInit(&st);while (*s) //遍历 -- 与\0终止{//是左括号 压栈if (*s ( || *s [ *s {){StackPush(&st, *s);s;}else{//应对样例: ’]if (StackEmpty(&st)){StackDestroy(&st);return false;}//不是左括号 应该就…

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树、Pipeline、交叉验证

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树案例 除了scikit-learn外,在spark中也提供了机器学习库,即Spark MLlib。 在Spark MLlib机器学习库提供两套算法实现的API:基于RDD API和基于DataFrame API。今天,主要介绍下Data…

docker k8s

Docker docker到底与一般的虚拟机有什么不同呢? 我们知道一般的linux系统即GNU/Linux系统包括两个部分,linux系统内核GNU提供的大量自由软件,而centos就是众多GNU/Linux系统中的一个。 虚拟机会在宿主机上虚拟出一个完整的操作系统与宿主机完…

在 3ds Max 中对链模型进行摆放姿势处理

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 建模和“摆姿势”3D链可能看起来是一项繁琐的工作,但实际上可以通过使用阵列工具并将链中的链接视为骨骼来轻松完成。在本教程中,我将向您展示如何对链条进行建模,并通过…

oled拼接屏在柳州的户外广告中有哪些应用展现?

柳州oled拼接屏是一种高端的显示屏,它采用了OLED技术,具有高亮度、高对比度、高色彩饱和度、高刷新率等优点,能够呈现出更加真实、清晰、细腻的图像效果。 同时,柳州oled拼接屏还具有拼接功能,可以将多个屏幕拼接在一…

vue element select下拉框回显展示数字

vue element select下拉框回显展示数字 问题截图&#xff1a; 下拉框显示数字可以从数据类型来分析错误&#xff0c;接收的数据类型是字符串&#xff0c;但是value是数字类型 <el-form-item prop"classifyLabelId" :label"$t(item.classifyLabelId)"…

GUI-Menu菜单实例

运行代码&#xff1a; //GUI-Menu菜单实例 #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"struct Lines_window :Window {Lines_window…

常见的网络攻击

​ 1.僵木蠕毒 攻击业内习惯把僵尸网络、木马、蠕虫、感染型病毒合称为僵木蠕毒。从攻击路径来看&#xff0c;蠕虫和感染型病毒通过自身的能力进行主动传播&#xff0c;木马则需要渠道来进行投放&#xff0c;而由后门木马&#xff08;部分具备蠕虫或感染传播能力&#xff09;构…

Mybatis架构简介

文章目录 1.整体架构图2. 基础支撑层2.1 类型转换模块2.2 日志模块2.3 反射工具模块2.4 Binding 模块2.5 数据源模块2.6缓存模块2.7 解析器模块2.8 事务管理模块3. 核心处理层3.1 配置解析3.2 SQL 解析与 scripting 模块3.3 SQL 执行3.4 插件4. 接口层1.整体架构图 MyBatis 分…

智能优化算法——灰狼优化算法(PythonMatlab实现)

目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2.1 社会等级分层 2.2 包围猎物 2.3 狩猎 2.4 攻击猎物 2.5 寻找猎物 3 实现步骤及程序框图 3.1 步骤 3.2 程序框图 4 Python代码实现 5 Matlab实现 1 灰狼优化算法基本思想 灰狼优化算法是一种群智能优化算法&#xff0c;它的…