17 个不稳定版本 (5 个重大变更)
0.6.3 | 2024年2月7日 |
---|---|
0.6.0 | 2023年12月18日 |
0.5.0 | 2023年11月26日 |
0.4.9 | 2022年8月18日 |
0.3.8 | 2022年7月25日 |
#150 in 机器人学
66KB
1K SLoC
Bonsai 盆栽
Rust 实现
目录
使用 Bonsai
Bonsai 可在 crates.io 上使用。推荐的方法是在 Cargo.toml 中添加一行,例如
[dependencies]
bonsai-bt = "*"
什么是行为树?
行为树(BT)是一种数据结构,我们可以在其中设置某些行为的规则以及它们的执行顺序。BT 是创建复杂系统的非常有效的方法,这些系统既模块化又反应灵敏。这些属性在许多应用中至关重要,这也导致了 BT 从计算机游戏编程扩展到 AI 和机器人学的许多分支。
如何使用行为树?
行为树形成一个树结构,其中每个节点代表一个进程。当进程终止时,它会发出 Success
或 Failure
信号。然后父节点可以使用这些信号来选择下一个进程。使用 Running
信号来表示进程尚未完成。
例如,如果你有状态 A
和状态 B
- 如果
A
成功,则从状态A
移动到状态B
:Sequence([A, B])
- 当状态
A
正在运行时,将其移动到状态序列[B]
。如果状态序列[B]
中的所有状态按顺序成功,检查A
是否仍在运行,并重复。如果A
成功或任何状态失败,则停止:RepeatSequence(A, [B])
- 首先尝试
A
,如果失败再尝试B
:Select([A, B])
- 如果
condition
成功,则执行A
,否则执行B
:If(condition, A, B)
- 如果
A
成功,则返回失败(反之亦然):Invert(A)
- 当
A
正在运行时,重复执行B
:While(A, [B])
- 永远执行
A
和B
:While(WaitForever, [A, B])
- 并行运行
A
和B
并等待两者都成功:WhenAll([A, B])
- 并行运行
A
和B
并等待任一成功:WhenAny([A, B])
- 并行运行
A
和B
,但必须在B
之前成功执行A
:After([A, B])
有关更多信息,请参阅 Behavior
枚举。
在行为树中调用长时间运行的任务
为了确保行为树始终响应,重要的是要创建的动作能够立即执行,以免阻塞树遍历。如果您有长时间运行的任务/函数,可能需要几秒或几分钟才能执行——无论是 async
还是 sync
,则可以将这些作业调度到后台线程,并通过通道获取任务的状态。
请参阅 /examples
文件夹中的 async drone 示例以获取更多详细信息。
使用示例
请参阅 示例 文件夹。
类似的项目
Bonsai 启发于许多其他项目,以下是一些值得注意的
- ai_behavior(Bonsai 是该项目的延续)
- aspen
- behavior-tree
- stackbt
依赖项
~2.5–3.5MB
~62K SLoC