Skip to content

Commit

Permalink
Merge pull request #106 from KIT-MRT/add_comparison_to_behavior_trees
Browse files Browse the repository at this point in the history
Add comparison to behavior trees
  • Loading branch information
orzechow authored Feb 12, 2025
2 parents d1674de + 79375ca commit b22f3c8
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 6 deletions.
35 changes: 30 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,46 @@
Behavior components address *How to do it?* and *Can we do it?*, while Arbitrators decide *What to do?*
- 🧠 **Meta-framework**
Integrate diverse methods in one decision-making framework. Why not combine optimization-based planning, probabilistic approaches (POMDPs), and machine learning (RL)? Use any approach where it performs best!
- 📈 **Scalability**
Stack behavior components in arbitrators to create hierarchical behavior models.
- 🛠️ **Maintainability**
Add new behaviors without having to touch existing ones – did we mention strict modularity and functional decomposition?
- 💡 **Transparency**
Easily follow and understand the decision-making process.
- 🛡️ **Behavior Verification**
Use tightly integrated verifiers to ensure that only safe and valid behavior commands are executed.
- 🪂 **Graceful Degradation**
Your behavior is unreliable or unsafe? Arbitrators will gracefully fall back to the next-best option.


<details>
<summary>😋 Click for more reasons!</summary>

- 📈 **Scalability**
Stack behavior components in arbitrators to create hierarchical behavior models.
- 💡 **Transparency**
Easily follow and understand the decision-making process, e.g., with our GUI.
- 📦 **Header-Only**
Simple integration – just include this header-only C++ library!
Simple integration – just include this header-only C++17 library!
- 📜 **Permissive License**
Published under MIT license to ensure maximum flexibility for your projects.

</details>


<details>
<summary>🤨 How does it compare to Behavior Trees?</summary>

Behavior Trees (BTs) are great for a variety of applications and thrive within a vibrant community!
Kudos to [Petter Ögren's](https://www.kth.se/profile/petter/) crew, [Michele Colledanchise](https://miccol.github.io/behaviortrees/) and [Davide Faconti](https://github.com/facontidavide) 🖖

But, Arbitration Graphs bring great value, especially for safety critical applications like self-driving cars and mobile robots in general – by strictly coupling preconditions to behaviors and tightly integrating behavior verification.
A bit more in detail:

| | Behavior Trees | Arbitration Graphs |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Interfaces** | Nodes return execution status (*success*, *failure*, or *running*). <br>⏵ more flexibility w.r.t. a node's actuator interfaces | Behavior components & arbitrators return commands (e.g., a trajectory). <br>⏵ control theory motivated interface ${f(\boldsymbol{x}) \to \boldsymbol{u}}$ <br>⏵ command can be verified by each arbitrator |
| **Preconditions** | Implemented by condition nodes distributed throughout the tree. <br>⏵ easy to reuse preconditions for multiple behaviors | Require behavior components to define their own preconditions. <br>⏵ tight coupling of preconditions to behaviors <br>⏵ robustness and safety less dependent on node arrangement |
| **Safety** | Each node decides on its success or failure. <br>⏵ can lead to safety and reliability issues, if not carefully managed | Integrate safety into the selection mechanism, using node-independent verifiers. <br>⏵ reduces the burden on behavior engineers <br>⏵ allows an easy integration of unsafe behavior components (ML, probabilistic, …) |

</details>


## Demo

Expand Down
14 changes: 13 additions & 1 deletion docs/_includes/head-custom.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
<link rel="stylesheet" href="{{ '/docs/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}">

<script src="{{ '/docs/assets/js/toc.js?v=' | append: site.github.build_revision | relative_url }}"></script>
<script src="{{ '/docs/assets/js/toc.js?v=' | append: site.github.build_revision | relative_url }}"></script>

<script>
MathJax = {
tex: {
inlineMath: [['$', '$']]
},
options: {
skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre']
}
};
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
8 changes: 8 additions & 0 deletions docs/assets/css/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@ img.github-logo {
content: url({{ "/docs/assets/img/github-mark.svg" | relative_url }});
}

.main-content table th, .main-content table td {
border: none;
border-bottom: 1px solid #ddd;
}
.main-content table tr:last-child td {
border: none;
}

// Improve collapsible sections
details summary {
cursor: pointer;
Expand Down

0 comments on commit b22f3c8

Please sign in to comment.