Skip to content

Commit

Permalink
new readme
Browse files Browse the repository at this point in the history
  • Loading branch information
facontidavide committed Oct 13, 2022
1 parent 33f5628 commit ac34612
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 62 deletions.
71 changes: 9 additions & 62 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,35 @@

# BehaviorTree.CPP

<p align="center"><img src="docs/images/ReadTheDocs.png"></p>
<p align="center"><img src="animated.svg"></p>

This __C++ 14__ library provides a framework to create BehaviorTrees.
This __C++ 17__ library provides a framework to create BehaviorTrees.
It was designed to be flexible, easy to use, reactive and fast.

Even if our main use-case is __robotics__, you can use this library to build
__AI for games__, or to replace Finite State Machines in your application.
__AI for games__, or to replace Finite State Machines.

There are few features that make __BehaviorTree.CPP__ unique, when compared to other implementations:

- It makes __asynchronous Actions__, i.e. non-blocking, a first-class citizen.

- You can build __reactive__ behaviors that execute multiple Actions concurrently.

- Trees are defined using a Domain Specific Scripting __scripting language__ (based on XML), and can be loaded at run-time; in other words, even if written in C++, Trees are _not_ hard-coded.
- Trees are defined using a Domain Specific __scripting language__ (based on XML), and can be loaded at run-time; in other words, even if written in C++, the morphology of the Trees is _not_ hard-coded.

- You can statically link your custom TreeNodes or convert them into __plugins__
which can be loaded at run-time.
and load them at run-time.

- It provides a type-safe and flexible mechanism to do __Dataflow__ between
Nodes of the Tree.

- It includes a __logging/profiling__ infrastructure that allows the user
to visualize, record, replay and analyze state transitions.

- Last but not least: it is well [documented](https://www.behaviortree.dev/)!

## Documentation

You can learn about the main concepts, the API and the tutorials here: https://www.behaviortree.dev/

To find more details about the conceptual ideas that make this implementation different from others,
you can read the [final deliverable of the project MOOD2Be](https://github.com/BehaviorTree/BehaviorTree.CPP/blob/master/MOOD2Be_final_report.pdf).

## Forum and Community

Expand All @@ -64,15 +60,9 @@ In practice, this means that:
You should be able to implement them once and reuse them to build many behaviors.

- To build a Behavior Tree out of TreeNodes, the Behavior Designer must
not need to read nor modify the C++ source code of a given TreeNode.

- Complex Behaviours must be composable using Subtrees

Many of the features and, sometimes, the apparent limitations of this library, might be a consequence
of this design principle.
not need to read nor to modify the C++ source code..

For instance, having a scoped BlackBoard, visible only in a portion of the tree, is particularly important
to avoid "name pollution" and allow the creation of large scale trees.
- Complex Behaviours must be composable using Subtrees.

# GUI Editor

Expand All @@ -83,13 +73,6 @@ If you are looking for a more fancy graphical user interface (and I know you do)

![Groot screenshot](docs/groot-screenshot.png)

## Watch Groot and BehaviorTree.CPP in action

Click on the following image to see a short video of how the C++ library and
the graphic user interface are used to design and monitor a Behavior Tree.

[![MOOD2Be](docs/video_MOOD2Be.png)](https://vimeo.com/304651183)

# How to compile (plain old cmake)

On Ubuntu, you are encourage to install the following dependencies:
Expand All @@ -105,12 +88,11 @@ To compile and install the library, from the BehaviorTree.CPP folder, execute:
make
sudo make install

If you want to use BT.CPp in your application a typical **CMakeLists.txt** file
If you want to use BT.CPP in your application a typical **CMakeLists.txt** file
will look like this:

```cmake
cmake_minimum_required(VERSION 3.10.2)
project(hello_BT)
set(CMAKE_CXX_STANDARD 17)
Expand All @@ -121,41 +103,6 @@ add_executable(${PROJECT_NAME} "hello_BT.cpp")
target_link_libraries(${PROJECT_NAME} BT::behaviortree_cpp)
```

## ROS1 or ROS2 users (Catkin/Ament)

You can easily install the package with the command

sudo apt-get install ros-$ROS_DISTRO-behaviortree-cpp-v4
If you want to compile it with catkin, you __must__ include this package
to your catkin workspace.

# Acknowledgement

This library was initially developed at **Eurecat - https://eurecat.org/en/** (main author, Davide Faconti) in a joint effort
with the **Italian Institute of Technology** (Michele Colledanchise).

This software is one of the main components of [MOOD2Be](https://eurecat.org/en/portfolio-items/mood2be/),
which is one of the six **Integrated Technical Projects (ITPs)** selected from the
[RobMoSys first open call](https://robmosys.eu/itp/). Therefore, MOOD2Be has been supported by the European Horizon2020 project RobMoSys. This software is RobMoSys conformant.

![RobMoSys Conformant](docs/robmosys_conformant_logo.png)

# Further readings

- Introductory article: [Behavior trees for AI: How they work](http://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php)

- **How Behavior Trees Modularize Hybrid Control Systems and Generalize
Sequential Behavior Compositions, the Subsumption Architecture,
and Decision Trees.**
Michele Colledanchise and Petter Ogren. IEEE Transaction on Robotics 2017.

- **Behavior Trees in Robotics and AI**,
published by CRC Press Taylor & Francis, available for purchase
(ebook and hardcover) on the CRC Press Store or Amazon.

The Preprint version (free) is available here: https://arxiv.org/abs/1709.00084

# License

The MIT License (MIT)
Expand All @@ -164,7 +111,7 @@ Copyright (c) 2014-2018 Michele Colledanchise

Copyright (c) 2018-2019 Davide Faconti, Eurecat

Copyright (c) 2019-2021 Davide Faconti
Copyright (c) 2019-2022 Davide Faconti

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
Loading

0 comments on commit ac34612

Please sign in to comment.