Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add comparison to behavior trees #106

Merged
merged 4 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading