py_trees源码分析(二)
@ 晚风 · Thursday, Apr 18, 2024 · 2 分钟阅读 · 更新于 4月 18, 2024

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的映射

关于我

❤️

姓名: lwz


性别: 男


年龄: 29


星座: 摩羯座


职业: python工程师


爱好: 秋、ps5、运动


主要的技术栈是:

  • python
  • 自动驾驶仿真验证

学习网站: leetcode


公司: 国科础石


– 2025 年 2 月 25 日更新

我的一些开源项目

等等?项目呢?不会没有吧??

其他

如果你喜欢我的开源项目或者它们可以给你带来帮助,可以赏一杯咖啡 ☕ 给我。~

It is better to attach some information or leave a message so that I can record the donation 📝, thank you very much 🙏.

社交链接