![License MIT](https://img.shields.io/github/license/BehaviorTree/BehaviorTree.CPP?color=blue)
![Version](https://yellow-cdn.veclightyear.com/2b54e442/7da9482f-b128-4883-8332-e5fa69be2392.svg)
[![conan Ubuntu](https://yellow-cdn.veclightyear.com/2b54e442/772fab66-ce0b-4f2f-bef1-41e81ad6be24.svg)](https://github.com/BehaviorTree/BehaviorTree.CPP/actions/workflows/cmake_ubuntu.yml)
[![conan Windows](https://yellow-cdn.veclightyear.com/2b54e442/d641cd53-2fcc-4a02-9e81-d85847c2996d.svg)](https://github.com/BehaviorTree/BehaviorTree.CPP/actions/workflows/cmake_windows.yml)
[![ros1](https://yellow-cdn.veclightyear.com/2b54e442/d7895102-8333-4306-a80a-e5275806ac9f.svg?branch=master)](https://github.com/BehaviorTree/BehaviorTree.CPP/actions?query=workflow%3Aros1)
[![ros2](https://yellow-cdn.veclightyear.com/2b54e442/c9b07c47-aa87-4c66-93f7-77aa9a4e8ed5.svg?branch=master)](https://github.com/BehaviorTree/BehaviorTree.CPP/actions?query=workflow%3Aros2)
[![pixi (Conda)](https://yellow-cdn.veclightyear.com/2b54e442/9850ebb8-9245-46b6-a0f7-0b1b8c3e3f5b.svg)](https://github.com/BehaviorTree/BehaviorTree.CPP/actions/workflows/pixi.yaml)
# BehaviorTree.CPP 4.6
<p align="center"><img width=350 src="https://yellow-cdn.veclightyear.com/2b54e442/a7e192f4-43a3-419f-9cd7-a8fea55d37a7.svg"></p>
这个 __C++ 17__ 库提供了一个创建行为树的框架。它设计为灵活、易用、反应迅速且运行速度快。
即使我们的主要用例是 __机器人技术__,您也可以使用该库来构建 __游戏的人工智能__ 或替代有限状态机。
与其他实现相比,__BehaviorTree.CPP__ 具有一些独特的功能:
- 它使 __异步动作__,即非阻塞动作,成为一等公民。
- 您可以构建 __反应式__ 行为,这些行为可以同时执行多个动作(正交性)。
- 树结构使用特定领域的 __脚本语言__(基于 XML)定义,并且可以在运行时加载;换句话说,即使用 C++ 编写,树的形态也不是硬编码的。
- 您可以静态链接自定义的树节点或将其转换为 __插件__ 并在运行时加载。
- 它提供了一种类型安全且灵活的机制,用于在树的节点之间进行 __数据流__。
- 它包括一个 __日志/分析__ 基础设施,允许用户可视化、记录、回放和分析状态转换。
## 文档与社区
您可以在这里了解主要概念、API 和教程:https://www.behaviortree.dev/
如果文档未能解答您的问题,或者您希望与其他 **BT.CPP** 用户交流,请访问 [我们的论坛](https://github.com/BehaviorTree/BehaviorTree.CPP/discussions)
# 图形用户界面编辑器
编辑行为树就像在您喜欢的文本编辑器中编辑 XML 文件一样简单。
如果您正在寻找一个更漂亮的图形用户界面(我知道您一定想要),请查看 [Groot2](https://www.behaviortree.dev/groot)。
![Groot 截图](https://yellow-cdn.veclightyear.com/2b54e442/07b30c20-d810-4079-8409-9ffca99e8307.png)
# 如何编译
**BT.CPP** 需要一个支持 C++17 的编译器。
支持三种构建系统:
- 如果您使用 ROS,使用 **catkin**。
- 如果您使用 ROS2,使用 **colcon (ament)**。
- 否则使用 **conan**(Linux/Windows)。
- 如果您愿意亲自处理依赖项,可以使用 **cmake**。
使用 [conan](https://conan.io/) 编译:
假设您在 `BehaviorTree.CPP` 的 **父目录** 中:
mkdir build; cd build conan install ../BehaviorTree.CPP --output-folder=. --build=missing cmake ../BehaviorTree.CPP -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" cmake --build . --parallel
如果您已经安装了如 ZeroMQ 和 SQLite 之类的依赖项,并且不想使用 conan,只需输入:
mkdir build; cd build cmake ../BehaviorTree.CPP cmake --build . --parallel
如果您想在 [pixi](https://pixi.sh/) 项目(conda 虚拟环境)中构建:
pixi run build
如果您希望在您的应用程序中使用 BT.CPP,请参考此处的示例:https://github.com/BehaviorTree/btcpp_sample 。
# 商业支持
您是否在商业产品中使用 BT.CPP,并且需要技术支持/咨询服务?
您可以联系主要作者 **dfaconti@aurynrobotics.com**,讨论您的用例和需求。
# Star 历史
[![Star History Chart](https://api.star-history.com/svg?repos=BehaviorTree/BehaviorTree.CPP&type=Date)](https://star-history.com/#BehaviorTree/BehaviorTree.CPP&Date)
## 以前的版本
软件的 3.8 版本可以在分支 [v3.8](https://github.com/BehaviorTree/BehaviorTree.CPP/tree/v3.8) 中找到。
该分支可能会收到错误修复,但新功能只会在主分支中实现。
# 许可证
MIT 许可证 (MIT)
版权所有 (c) 2019-2023 Davide Faconti
版权所有 (c) 2018-2019 Davide Faconti, Eurecat
版权所有 (c) 2014-2018 Michele Colledanchise
特此免费授予任何获得本软件及相关文档文件(以下简称 "软件")副本的人无权限制地处理软件的权限,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或销售软件的副本的权利,并允许向其提供软件的人员这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按 "现状" 提供,不附带任何形式的明示或暗示的担保,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权持有人均不对因软件或软件的使用或其他交易而产生的任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼或其他诉讼中。