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 机器人学

MIT 许可证

66KB
1K SLoC

Bonsai 盆栽

Rust 实现

Build Status Bonsai crate minimum rustc 1.56 Docs codecov Maintenance GitHub pull-requests GitHub pull-requests closed ViewCount License: MIT

目录

使用 Bonsai

Bonsai 可在 crates.io 上使用。推荐的方法是在 Cargo.toml 中添加一行,例如

[dependencies]
bonsai-bt = "*"

什么是行为树?

行为树(BT)是一种数据结构,我们可以在其中设置某些行为的规则以及它们的执行顺序。BT 是创建复杂系统的非常有效的方法,这些系统既模块化又反应灵敏。这些属性在许多应用中至关重要,这也导致了 BT 从计算机游戏编程扩展到 AI 和机器人学的许多分支。

如何使用行为树?

行为树形成一个树结构,其中每个节点代表一个进程。当进程终止时,它会发出 SuccessFailure 信号。然后父节点可以使用这些信号来选择下一个进程。使用 Running 信号来表示进程尚未完成。

例如,如果你有状态 A 和状态 B

  • 如果 A 成功,则从状态 A 移动到状态 BSequence([A, B])
  • 当状态 A 正在运行时,将其移动到状态序列 [B]。如果状态序列 [B] 中的所有状态按顺序成功,检查 A 是否仍在运行,并重复。如果 A 成功或任何状态失败,则停止:RepeatSequence(A, [B])
  • 首先尝试 A,如果失败再尝试 BSelect([A, B])
  • 如果 condition 成功,则执行 A,否则执行 BIf(condition, A, B)
  • 如果 A 成功,则返回失败(反之亦然):Invert(A)
  • A 正在运行时,重复执行 BWhile(A, [B])
  • 永远执行 ABWhile(WaitForever, [A, B])
  • 并行运行 AB 并等待两者都成功:WhenAll([A, B])
  • 并行运行 AB 并等待任一成功:WhenAny([A, B])
  • 并行运行 AB,但必须在 B 之前成功执行 AAfter([A, B])

有关更多信息,请参阅 Behavior 枚举。

在行为树中调用长时间运行的任务

为了确保行为树始终响应,重要的是要创建的动作能够立即执行,以免阻塞树遍历。如果您有长时间运行的任务/函数,可能需要几秒或几分钟才能执行——无论是 async 还是 sync,则可以将这些作业调度到后台线程,并通过通道获取任务的状态。

请参阅 /examples 文件夹中的 async drone 示例以获取更多详细信息。

使用示例

请参阅 示例 文件夹。

类似的项目

Bonsai 启发于许多其他项目,以下是一些值得注意的

依赖项

~2.5–3.5MB
~62K SLoC