行为树(BT)笔记(二):行为树简介

2024-04-21 18:32
文章标签 笔记 行为 简介 bt

本文主要是介绍行为树(BT)笔记(二):行为树简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

行为树简介

与有限状态机不同,行为树是一个分层节点树,它控制决策流和“任务”的执行,或者我们将进一步称之为“ 动作 ”。

树的叶子是实际命令,即我们的协调组件与系统其余部分交互的位置。

例如,在面向服务的体系结构中,叶子将包含与执行操作的“服务器”通信的“客户端”代码。

在下面的示例中,我们可以看到在序列中执行的两个Actions, DetectObject以及GraspObject。

å¶å°ç»ä»¶éä¿¡

树的其他节点,即不是叶子的节点,控制“执行流程”。

为了更好地理解这种控制流是如何发生的,设想一个叫做“ tick ” 的信号; 它在树的根部执行,并通过分支传播,直到它到达一个或多个叶子。

单词tick经常用作动词(勾选/被勾选),这意味着“调用一个tick()名为TreeNode的回调“。

当一个TreeNode被选中,它会返回一个NodeStatus

  • SUCCESS
  • FAILURE
  • RUNNING
  • IDLE

前两个正如它们的名字一样,通知它们父母的行动是成功还是失败。

异步节点在执行未完成时返回RUNNING,并且需要更多时间来返回有效结果。

此C ++库还提供IDLE状态; 这意味着节点已准备好启动。

节点的结果将传播回其父节点,该节点将决定下一个应该选中哪个子节点,或者将结果返回给它自己的父节点。

 

节点的类型

ControlNodes是可以有1到N 个子节点的节点。一旦收到tick,该tick可以传播给一个或多个子节点。

DecoratorNodes类似于ControlNode,但它只能有一个子节点。

ActionNodes是叶子,没有子节点。用户应该实现自己的ActionNodes来执行实际任务。

ConditionNodes等效于ActionNodes,但它们始终是原子的,即它们不能返回RUNNING。它们不应该改变系统的状态。

UML屿¬¡ç»æ

 

例子

为了更好地理解BehaviorTrees如何工作,让我们关注一些实际的例子。为简单起见,我们不会考虑操作返回RUNNING时会发生什么。

我们假设每个Action都是原子地和同步地执行的。

第一个ControlNode:序列

让我们来说明BT如何使用最基本和最常用的ControlNode:SequenceNode。

ControlNode的子节点总是有序的 ; 是由ControlNode来考虑这个顺序。

在图形表示中,执行顺序是从左到右

ç®åçåºåï¼å°ç®±

简而言之:

  • 如果子节点返回SUCCESS,请勾选子节点。
  • 如果子节点返回FAILURE,则不再勾选子节点并且向Sequence返回FAILURE。
  • 如果所有子节点返回SUCCESS,则Sequence也返回SUCCESS。
存在的bug
如果操作GrabBeer失败,冰箱的门将保持打开状态,因为跳过了最后一个动作CloseFridge。

装饰器

DecoratorNode的目标是转接从子节点接收的结果,终止子节点,或重复tick子节点,具体取决于Decorator的类型。

您可以创建自己的装饰器。

ç®åçè£é¥°èï¼è¿å¥æ¿é´

节点Inverter是一个装饰器,它反转其子节点返回的结果; 因此,Inverter后跟着一个称为DoorOpen的节点 相当于

“门关上了吗?”

如果子节点返回FAILURE ,节点Retry将重复给子节点tick N次(在该例子中为3次)。

显而易见的,右侧的分支意味着:

如果门关闭,请尝试打开它。
尝试最多3次,否则放弃并返回FAILURE。

但是...

如果DoorOpen返回FAILURE,我们会有所行动。但是如果它返回SUCCESS,则左分支失败并且整个序列被中断。稍后我们将看到如何改进这棵树。

第二个ControlNode:Fallback

FallbackNodes,也称为“选择器”,是一个节点,顾名思义,它可以表达反馈策略,即如果子节点退出失败,下一步该怎么做。

简而言之,它按顺序给子节点打勾,并且:

  • 如果子节点退回FAILURE,请勾选下一个子节点。
  • 如果子节点返回SUCCESS,则不再勾选子项,并且Fallback返回SUCCESS。
  • 如果所有子节点都返回FAILURE,那么Fallback也会返回FAILURE。

在下一个示例中,您可以看到序列和反馈如何组合:

FallbackNodes

门开了吗?如果没有,请尝试打开门。门没开,如果您有钥匙,请解锁并打开门。否则,砸门。如果这些操作中的任何一个成功,则进入房间。

重写“给我拿一杯啤酒”

我们现在可以改进“给我拿一杯啤酒”的例子,如果啤酒不在冰箱内保持开门的状态。

我们使用绿色表示返回SUCCESS的节点,使用红色表示返回FAILURE的节点,黑色节点则表示永远不会执行。

FetchBeer失败

让我们创建一个替代树,即使GrabBeer 返回FAILURE 也会关闭门。

FetchBeer失败

这两棵树最终将关闭冰箱的门,但是:

  • 如果我们设法打开和关闭冰箱,左侧的树将始终返回SUCCESS。

  • 如果啤酒在那里,右侧的树将返回SUCCESS,否则将失败。

如果GrabBeer返回SUCCESS,一切都按预期工作。

FetchBeeræå
 

这篇关于行为树(BT)笔记(二):行为树简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923767

相关文章

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识