行为树BehaviorTree

news2025/1/15 19:48:04

主要依托于BehaviorTree.CPP进行介绍。

1 基本概念

1.1 是什么与用来做什么

官网 https://www.behaviortree.dev/docs/learn-the-basics/BT_basics
Unlike a Finite State Machine, a behavior Tree is a tree of hierarchical nodes that controls the flow of execution of “tasks”.
用于任务流控制的多层节点树。不是有限状态机。(有限状态机不能表示同时做多件事情,任务流可能会出现同时做多件事情,都结束后执行另外一件事情,任务流的本质是单起点有向图)

BehaviorTree.CPP 是一个c++库,能够比较方便的集成到应用中。

1.2 tick和node

1 tick (时间步脉冲,类似于bpmn的token)
每一个tick都会从tree的根节点root传递到叶节点leaf。

2 每个节点收到tick后会执行callback,并返回状态
SUCCESS
FAILURE
RUNNING

3 节点会传递tick给其子节点,每个节点类型都有其规则来确定是否,何时或多少次数的传递tick给某一个子节点。

4 叶节点。具体执行某个任务的节点,Action nodes是最普遍的叶节点。

1.3 节点类型

节点分为3类,控制节点,装饰节点,叶节点,其中叶节点是负责执行具体事务的节点,其它节点的作用是流程控制。根据功能的区别,每一种节点还可以继续细分。

叶节点分为条件节点与动作节点。
控制节点可以分顺序节点等。
在这里插入图片描述

节点类型说明
ControlNode 控制节点常用节点类型为顺序节点
DecoratorNode 装饰节点可修改子节点的返回,可多次tick子节点; Retry和 Inverter类型节点
ConditionNode 条件节点不会返回running
ActionNode 动作节点执行某个任务的节点,分为同步和异步,同步会阻塞直到结束,返回 SUCCESS or FAILURE ,异步可能会返回RUNNING

1.3.1 控制节点

1)顺序节点
顺序执行。如果全部成功则执行成功,如果一个失败则不执行后续节点,直接返回失败。
顺序执行,直到失败返回失败,如果全部成功返回成功。
相当于以下结构:

if( activity1 ){
	if( activity2 ){
		if(activity3  ){
			
			return success;
		} else{
			return failure;
		}
	} else{
		return failure;
	}
} else{
	return failure;
}

2)Fallback节点。
顺序执行,直到成功返回成功,如果全部失败返回失败。
在行为树(Behavior Tree)的上下文中,FallbackNodes 通常被用于创建一个"或"(OR)逻辑:子节点将按照特定的顺序执行,只要有一个子节点成功(返回SUCCESS),则整个 FallbackNode 也被视为成功,并且不会进一步执行其它的子节点。但是,如果所有子节点都失败了(返回FAILURE),则 FallbackNode 本身也会返回 FAILURE。
相当于以下结构:

if( activity1 ){
	return success;
} else{
	if( activity2 ){
		return success;
	} else{
		if(activity3  ){
			return success;
		} else{
			return failure;
		}
	}
}

2 BehaviorTree.CPP 4.5使用

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

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

相关文章

C++:day5

思维导图 例题 #include <iostream> using namespace std; class RMB { private:int yuan;int jiao;int fen;static int count;public:RMB(){count;}RMB(int yuan, int jiao, int fen) : yuan(yuan), jiao(jiao), fen(fen){count;}const RMB operator(const RMB &R)…

基于springboot实现交通管理在线服务系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现交通管理在线服务系统演示 摘要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装交通管理在线服…

上海亚商投顾:微盘股指数涨近5% 超跌低价股集体反弹

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 大小指数6月7日走势分化&#xff0c;沪指全天探底回升&#xff0c;深成指跌近1%&#xff0c;创业板指跌超2%&a…

wordpress轻量免费主题

WordPress建站公司 适合提供WordPress建站服务的公司或个体(个人)工作室使用的WordPress建站公司主题模板。 https://www.jianzhanpress.com/?p545 首屏大图红色简洁wordpress主题 首屏大图红色简洁wordpress主题&#xff0c;非常地高端大气上档次&#xff0c;可用于多个行…

《软件定义安全》之六:SDN和NFV安全实践

第6章 SDN和NFV安全实践 1.基于流的安全防护 1.1 DDoS检测清洗 DDoS检测清洗应用ADS APP的设计思路&#xff1a;借助安全控制平台中流相关的组件&#xff0c;从SDN控制器中获得相应的流量&#xff0c;并根据抗DDoS应用订阅的恶意流特征进行检测&#xff0c;发现恶意流量后&a…

Day 43 keepalived高可用集群

keepalived高可用集群 负载均衡 lb集群 load balance ​ 流量分发 高可用 ha集群 high availability ​ 主要是给服务器做冗余 keepalive 持久连接 保持存活 keepalived 高可用软件名称 红帽有自己的高可用集群套件&#xff1a;RHCS keepalived介绍 ​ keepalived是集…

8.1 基本打印功能

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 在使用“MFC应用”项目模板生成应用程序的过程中&#xff0c;如果在“高级功能”窗口中不取消对打印和打印预览的设置&#xff0c;那么应用程序就已经具备了简单的打印和打…

开源VisualFbeditor中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序

吴涛老矣&#xff0c;社区苦无64位易语言&#xff0c;用注入DLL增强菜单&#xff0c;做成VS一样的界面 终归是治标不治本&#xff0c;一来会报毒&#xff0c;二来闭源20年没更新了 开源的VB7&#xff0c;欢迎易语言的铁粉进群&#xff1a;1032313876 【Freebasic编程语言】编绎…

细说中国自动化集成商100家

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在当今快速发展的工业自动化领域&#xff0c;中国企业正以其卓越的技术实力和创新能力&#xff0c;在全球市场上占据着越来越重要的位置。为了更…

【MySQL】(基础篇七) —— 通配符和正则表达式

通配符和正则表达式 本章介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索&#xff0c;以便对数据进行复杂过滤&#xff1b;如何使用正则表达式来更好地控制数据过滤。 目录 通配符和正则表达式LIKE操作符百分号(%)通配符下划线(_)通配符 通配符使用技巧正…

【APP逆向】央视频播放量增加,逆向全过程解密

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

2024北京通信展:聚焦新一代信息通信技术、产品、应用及解决方案

中国国际信息通信展览会&#xff08;PTEXPO&#xff09;作为工业和信息化部主办的ICT行业盛会&#xff0c;自1990年创办以来&#xff0c;已走过了三十多年的辉煌历程。三十余载光阴荏苒&#xff0c;PT展以其独特的魅力&#xff0c;不仅成为反映信息通信行业发展新成果的重要窗口…

【vue3|第8期】深入理解Vue 3 computed计算属性

日期&#xff1a;2024年6月10日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

邻接矩阵深度优先遍历

深度优先遍历&#xff0c;就是一条路&#xff0c;走到底&#xff0c;然后再走下一个岔路。 下面代码就主要使用递归来进行&#xff0c;当然也可以借助栈来实现。 private void traverse(char v, boolean[] visited) {int index _getIndexOfV(v);//获取v顶点在vertexS字符数组…

传感器技术

传感器技术 传感器概述传感器简介传感器的特性线性度灵敏度迟滞重复性传感器的动态特性 步进电动机步进电机的工作原理 传感器概述 传感器简介 传感器&#xff1a;能够感受被测量并按照一定规律转换成可用输出信号的器件或装置。 敏感元件&#xff1a;传感器中能直接感受或响…

Qwen 2 模型介绍及其应用探索

引言 Qwen 2 模型家族最近引起了广泛关注&#xff0c;作为继 Qwen 1.5 的升级版&#xff0c;这些模型在多语言支持、推理能力和长上下文处理等方面表现出色。本文将深入探讨 Qwen 2 模型的特点、应用场景以及具体的代码示例&#xff0c;帮助读者更好地理解和使用这些模型。 Q…

如何把java项目打包成jar包

以下就是图解过程 确定好以后 过一会就成这样了

Python 基础语法详解(四)

Python 基础语法详解&#xff08;四&#xff09; Python 条件语句最简单的 if 语句基本的 if 语句实战&#xff1a; 复杂 if 语句实战&#xff1a; 看一看 elif 的好处题目&#xff1a;代码实现&#xff1a; 三元表达式格式为&#xff1a;实操&#xff1a; Python 条件语句 在…

17个有用的CLI命令

作为前端开发工程师&#xff0c;我们需要了解哪些命令&#xff1f;如果您熟悉这些命令&#xff0c;它们将大大提高您的工作效率。 1. tree 你们知道如何列出一个目录的文件结构吗&#xff1f;它在显示文件之间的目录关系方面做得很好 commands ├── a.js ├── b.js ├── …

用GAN网络生成彩票号码

本文将详细解析如何使用生成对抗网络(GAN)来生成彩票号码。我们将介绍代码的每个部分,并给出详细注释,帮助读者理解整个过程。效果如下: 导入依赖 首先,我们需要导入所需的库。 import numpy as np import pandas as pd import torch import torch.nn as nn import t…