py_trees源码分析之通用行为和通用模块
版本信息
Python: 3.9
py_trees: 2.2.3
本文的代码与示例绝大部分来自github,只分析了部分重要的代码,包含基础行为模块、通用行为模块、通用模块、组合节点模块、装饰节点模块、黑板模块,且较简单的模块用表格汇总。
通用行为(Behaviours)
通用方法
方法名 | 参数 | 作用 | 返回 |
---|---|---|---|
success | 返回成功 | common.Status | |
failure | 返回成失败 | common.Status | |
running | 返回运行中 | common.Status | |
dummy | 测试运行中 | common.Status |
⚠️:注意下述类默认都继承于Behaviour,所以必须实现update方法
独立行为(不涉及交互)
Class Periodic
参数
- name: 行为名称
- n: 迭代周期
作用
以n为周期的tick后改变其返回状态: Running -> n * tick -> SUCCESS -> n * tick -> FAILURE -> n * tick -> Running
Class StatusQueue
参数
- name: 行为名称
- queue: [Status] 存储状态队列
- eventually: 终止循环的状态
作用
接收指定状态队列,然后不断弹出状态值返回
- 如果设置eventually,则在queue为空时,以eventually的值终止循环
- 循环弹出
示例
ffs = py_trees.behaviours.StatusQueue(
name="FFS",
queue=[
py_trees.common.Status.FAILURE,
py_trees.common.Status.FAILURE,
],
eventually=py_trees.common.Status.SUCCESS,
)
# 队列中包含 2 个状态 可以预见两次tick结束后(队列为空)还未返回成功,则第三次tick按照eventually中设置的SUCCESS返回
Class SuccessEveryN
参数
- name: 行为名称
- n: 返回成功周期
作用
每n次tick将状态变更为SUCCESS,假如n为3 从1开始计数,则返回: FAILURE->FAILURE->SUCCESS->FAILURE->FAILURE->SUCCESS
Class TickCounter
参数
- name: 行为名称
- duration: 持续tick次数
- completion_status: [Status] 满足duration后返回的状态
作用
在tick次数满足duration后返回指定的状态值,并可重置tick计数,重新update
黑板行为
类 | 参数 | 作用 |
---|---|---|
BlackboardToStatus | name: 行为名称 variable_name: 查找变量的key,其第一个元素作为黑板的key eg: car.tyre |
注册一个黑板变量,并在update中返回其状态值 |
CheckBlackboardVariableExists | name: 行为名称 variable_name: 查找变量的key,其第一个元素作为黑板的key eg: car.tyre |
初始化注册一个黑板变量[读权限],update中判断变量是否存在,存在则返回SUCCESS,否则返回FAILURE |
WaitForBlackboardVariable (CheckBlackboardVariableExists) |
name: 行为名称 variable_name: 查找变量的key,其第一个元素作为黑板的key eg: car.tyre |
等待黑板变量设置,成功后返回SUCCESS |
UnsetBlackboardVariable | name: 行为名称 key: 黑板变量的key, [写权限]因为主要执行删除key操作 |
在update中删除黑板变量,无论是否存在都返回SUCCESS |
SetBlackboardVariable | name: 行为名称 variable_name: 黑板变量的key, [写权限]因为主要执行写入key操作 variable_value: 黑板变量的value overwrite: 是否覆盖 |
在update中写入黑板变量,成功后返回SUCCESS, 失败则返回FAILURE,如果overwrite为False,则不会覆盖已存在的变量 |
CheckBlackboardVariableValue | name: 行为名称 check: 检查实例 |
在update中检查check.key的value,如果value与check.value匹配则返回SUCCESS,其他条件如key不存在,值不匹配,属性不匹配等均返回FAILURE |
WaitForBlackboardVariableValue (CheckBlackboardVariableValue) |
name: 行为名称 check: 检查实例 |
等待黑板变量的值与check.value匹配,若失败则返回RUNNING,直到匹配成功 |
CheckBlackboardVariableValues | name: 行为名称 checks: 检查实例列表 operator: 操作符 namespace: 命名空间 |
在update中检查check.key的value,如果value与check.value匹配则存储,其他条件如key不存在,值不匹配,属性不匹配等均返回FAILURE,最后根据给定的operator返回状态值。 eg:在checks中有3个检查实例,分别为check1, check2, check3, operator为AND,则只有当check1, check2, check3都返回SUCCESS时,才返回SUCCESS,否则返回FAILURE check是一个列表,每个元素都是一个ComparisonExpression实例,注意这个类的作用是接受 3 个值,key, value, operator,然后根据给定的operator进行比较,返回对应的状态值。 |
ProbabilisticBehaviour | name: 行为名称 weights: 权重列表 |
根据给定的权重列表,返回随机的状态值,权重越高,越容易返回对应的状态值,如果未指定权重,则默认为SUCCESS, FAILURE, RUNNING的权重分别为1, 1, 1 |
通用模块(common)
类 | 参数 | 作用 | 返回 |
---|---|---|---|
Name | |||
Status(枚举) | 四种状态表示 | ||
Duration(枚举) | 两种状态,均为最大值,可能用于永久阻塞 | ||
Access(枚举) | 用于表示黑板操作,<读><写><排它写> | ||
ParallelPolicy | synchronise | 并行策略<全部成功返回><一个节点成功即返回><指定节点成功返回> | |
OneShotPolicy(枚举) | 两种状态,<成功或失败即返回><直到成功才返回> | ||
ClearingPolicy(枚举) | 三种状态:<初始化时清理><成功时清理><从不> | ||
ComparisonExpression | variable value operator |
在通用行为中用于检查黑板变量时常用。接受 3 个值,variable, value, operator,首先从黑板中取variable对应的value,然后根据给定的operator与value进行比较,返回对应的状态值 | |
BlackBoxLevel(枚举) | 决定行为是否被视为黑箱的等级,包含 4 个 | ||
VisibilityLevel(枚举) | 树可视化工具的可见性等级,包含 4 个 | ||
string_to_visibility_level | level | 字符串到VisibilityLevel的映射 | |