7个版本
新 0.2.5-alpha3 | 2024年8月23日 |
---|---|
0.2.5-alpha1 | 2024年6月6日 |
0.2.2 | 2024年3月1日 |
在 机器学习 类别中排名第 340
每月下载量 133 次
140KB
3K SLoC
behaviortree-rs
BehaviorTree.CPP的Rust实现,仍处于开发中。以下是可以找到的功能表。
使用方法
要在behaviortree-rs
中创建自己的节点,您需要使用提供的属性宏来转换您的struct
和impl
块。您还需要为每种节点类型实现某些函数,以及实现一些可选函数的选项。
创建节点
要创建自己的节点,请使用#[bt_node(...)]
宏。宏的参数是要创建的节点类型。bt_node
宏会修改您的结构体,添加字段和方法实现。
例如,以下节点定义
use behaviortree_rs::bt_node;
#[bt_node(SyncActionNode)]
struct DummyActionNode {}
#[bt_node(SyncActionNode)]
impl DummyActionNode {
// Implementations go here
}
当然,您可以将自己的字段添加到结构体中,这些字段将被包含在生成的结构体中。当您添加字段时,您可以选择在节点构造函数中定义它们,或者具有默认值,在实例化节点时无法修改。
#[bt_node(SyncActionNode)]
struct DummyActionNode {
foo: String,
bar: u32
}
如果您不想在初始化时手动设置字段,请添加#[bt(default)]
属性。只需写下#[bt(default)]
即可调用<类型>::default()
,这仅当指定的类型实现了Default
特质时才有效。要指定显式的默认值:#[bt(default = "10")]
。注意值被引号包围,因此引号内的文本将被评估为Rust代码。可提供的有效默认选项有
// Function calls
#[bt(default = "String::from(10)")]
// Variables
#[bt(default = "foo")]
// Paths (like enums)
#[bt(default = "NodeStatus::Idle")]
// Literals
#[bt(default = "10")]
实践中的示例
use behaviortree_rs::bt_node;
#[bt_node(SyncActionNode)]
struct DummyActionNode {
#[bt(default = "NodeStatus::Success")]
foo: NodeStatus,
#[bt(default)] // defaults to empty String
bar: String
}
节点函数
use behaviortree_rs::prelude::*;
#[bt_node(SyncActionNode)]
struct DummyActionStruct {}
#[bt_node(
SyncActionNode,
ports = ports,
tick = tick,
)]
impl DummyActionStruct {
async fn tick(&mut self) -> NodeResult {
// Some implementation
// ...
// You must return a `NodeStatus` (i.e. Failure, Success, Running, or Skipped)
// Or an Err
Ok(NodeStatus::Success)
}
fn ports() -> PortsList {
define_ports!(
// No default value
input_port!("foo"),
// With default value
input_port!("bar", 16)
)
}
}
依赖关系
~2.7-8.5MB
~74K SLoC