行为树(Behavior Tree)

行为树是一种在机器人行业中用于实现复杂任务的工具,由执行结点(动作和条件)、控制结点(顺序、备选、并行、装饰)组成。Python库py_trees提供动态修改功能,而BehaviorTree.CPP适用于C++和嵌入式系统。虽然两者表达力相似,但行为树更利于组合和修改,状态机则更适合反应式设计。
摘要由CSDN通过智能技术生成

行为树概念

原文连接
行为树(behavior tree)是用来实现非人工角色复杂行为的工具,在机器人行业,使用行为树来实现复杂任务。特征:

  1. 行为树是树:执行时从根节点开始按照指定的顺序遍历,直到到达终结状态
  2. 叶子结点都是可执行的行为:叶子结点会进行具体的操作,结点会返回状态信息(成功、失败、进行中)
  3. 内部结点控制树的遍历:内部结点会根据孩子即诶单返回的状态信息,按照特定的规则确定下一个执行的结点。

行为树相关术语

行为树结点的一次触发称为一次tick,会返回成功(success)、失败(failure)、运行中(running)的状态信息给它的父节点。
行为树的结点类型概览

  • 执行结点(execution nodes):行为树的叶子结点,分为动作结点(action)和条件结点(condition)。
  • 控制结点(control nodes):控制结点时行为树的内部结点,它们定义了遍历子结点的方式。控制结点的子结点可以是执行结点或控制结点。顺序(sequence),备选(fallback),并行(parallel)可以有任意子结点,而装饰(decorator)只能有一个子结点,用来对子结点的行为进行自定义修改。

控制结点中各结点特性

  1. 顺序结点(Sequence):按照顺序执行子结点,直到其中一个子结点返回失败状态或所有子结点返回成功状态。
  2. 备选结点(Fallback):按顺序执行子结点,直到其中一个子结点返回成功状态或所有子结点返回失败状态。
  3. 并行结点(Parallel):并行执行所有子结点,直到至少M(M的值在1到N之间)个子结点返回成功状态或所有子结点返回失败状态。
  4. 装饰结点(Decorator):以自定义的方式修改孩子结点的行为。比如Invert类型的装饰结点,可以反转其孩子结点返回的状态信息。

装饰器和黑板

使用装饰结点(Decorator)来对行为树进行优化,使用装饰结点可以定义一个规则为Repeat的装饰结点,用来重复执行它的子结点。使用队列来存储所有带搜寻的地点,每次迭代从队列中取出一个点滴进行搜索,队列为空时即为搜索完毕。

引入黑板(blackboard)的概念来存储可以被多个结点访问的共享信息。黑板是一块可以被结点读写的公共存储区。

在这里插入图片描述

行为树相关软件库

两个用于行为树编程的软件库:py_trees和BehaviorTree.CPP。
py_trees是由Daniel Stonier创建的一个python库。

  • 使用python编写,支持在运行时动态修改行为树。
  • 提供了可视化工具和日志工具。

BehaviorTree.CPP是C++库。

  • 基于C++,方便嵌入式系统使用
  • 基于XML工作流,可以使用其它XML编辑器编辑行为树,注册自定义结点类型。
  • 可以使用Groot进行可视化编辑它所识别的XML文件。
  • 但对于需要运行时动态修改行为树的情况需要手动编程,并且这种使用方式在可视化编辑器下支持较差。

行为树和有限状态机

行为树和状态机具有相同的表达能力,可以实现相同的功能。
行为树更方便进行组合和修改,状态机更方便进行反应式动作设计。

  • 28
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值