Modular Mission Framework (Behavior Trees)

A screenshot of the ‘Behavior Trees IDE’ - A drag/drop GUI that allows users to create the behavior trees that will define their autonomous vehicle’s behavior. Shown here are three trees designed for a vertical takeoff vehicle.

This framework allows engineers to create complex behaviors/missions easily by arranging nodes into a Behavior Tree (Colledanchise 2017). My vision for this project was to create a mission framework that treated pieces of autonomous functionality as though they were LEGO bricks - modular, reusable, and expressive in the number of ways the individually simple elements can be combined to create something nuanced and complex. With this vision in mind, I pioneered this project myself, building an early prototype on weekends before making a pitch for funding to leadership. It has since grown into a multi-engineer effort, has produced a patent application, and is poised to be the mission structure on several autonomous vehicles.

In this short demo, I open a behavior file and expand/collapse some of its branches before I open a branch called 'delivery.beh'. I then delete a leaf node from the branch and show how I might add that leaf node back by dragging/dropping it and filling in the necessary parameters. I then simulate the execution of this behavior and show how the status of the nodes is color-coated in real time.
 
 

Beyond Behavior Trees

Behavior Trees provide many benefits in terms of their re-usability and expressiveness but have only been documented to do so on small scale robotics applications and in the video game industry. How can these benefits be transferred to the scale and safety-rigor of an aerospace company wishing to deploy a common mission framework across many different autonomous vehicles? This is the problem that I set out to solve with this project and one that I am confident that I have found a solution for.

By implementing Behavior Trees in a distributed environment, nodes can be created, tested, and certified as separate software entities allowing them to be exchanged between projects easily regardless of the language they were written in. The design also features a unique approach to parameters that allows nodes to share information with one another in a systematic fashion. This makes the reuse and reconfigurability of nodes far more likely.


Code

I created the initial prototype of the framework in Python for its ease-of-use but later transferred the core execution module to C++ with the help of a teammate. I also wrote the GUI code in Python using PyQt.

Screenshot of Python class definition for the Sequence Node type


Screenshot of figure from patent application

Patent Application

While Behavior Trees themselves are an established autonomy paradigm, this work allowed me to make several novel contributions that are captured in a patent application that was submitted in May 2020.