Start leveraging the advantages of Behavior Trees π³ fully integrated with ROS 2 π€
AutoAPMS is a heavily extensible development framework for behavior-based ROS 2 applications. It provides a highly modular integration of behavior trees, implements a powerful execution engine and offers convenient CLI tooling for deploying behaviors with ease.
The intention of this project is to make it significantly more user-friendly and less error prone to develop autonomous robotics with behavior trees. The core packages are written in C++ and a supplementary Python API exposes high-level features for scripting.
Note
Currently we support Linux only!.
There are plenty of ROS 2 packages which provide an implementation for behavior trees. AutoAPMS adopts BehaviorTree.CPP, the most popular one when it comes to C++, and embeds it into the ROS 2 ecosystem so that developers have a much easier time writing custom behaviors and distributing them among robots. Here are some of the most prominent features offered by this repository:
-
Convenient resource management using
ament_cmakeandament_index -
Inherently extensible due to plugin-based design
-
Flexible and highly configurable behavior execution engine
-
Powerful C++ behavior tree builder API (a supplement to BehaviorTree.CPP)
-
High-level node manifests for registering node plugins without writing a single line of code
-
Support for custom behavior definitions and tree builder algorithms
-
ros2 behaviorcommand extending the ROS2 CLI for behavior management -
Abstractions for PX4 Autopilot available with auto-apms-px4
-
Comprehensive user guide and API documentation
The following installation guide helps you getting started with AutoAPMS.
-
Create a ROS 2 workspace and clone this repository
mkdir ros2_ws && cd ros2_ws (mkdir src && cd src && git clone https://github.com/robin-mueller/auto-apms.git)
-
Install all required dependencies. We assume that you already installed ROS 2 on your system
rosdep init # Skip this if rosdep has already been initialized rosdep update rosdep install --from-paths src --ignore-src -y -
Build and install all packages required for
auto_apms_examplescolcon build --packages-up-to auto_apms_examples --symlink-install
-
Run your first behavior using
ros2 behavior. This is an extension of the ROS 2 CLI introduced by theauto_apms_ros2behaviorpackagesource install/setup.bash ros2 behavior run auto_apms_examples::demo::HelloWorld --blackboard name:=Turtle
Finally, you may as well run a cool visual demonstration of what's possible with this framework.
-
Install dependencies and build package
auto_apms_simulation# Python packages for simulation (not all are available with rosdep) python3 -m pip install -r src/auto-apms/auto_apms_simulation/requirements.txt colcon build --packages-up-to auto_apms_simulation --symlink-install -
Run the less intelligent behavior first
source install/setup.bash ros2 launch auto_apms_simulation pyrobosim_hogwarts_launch.py # Press Ctrl+C to quit
The actions of each robot you've seen are executed using behavior trees. This functionality is provided by the
auto_apms_behavior_treepackage. However, each robot is acting independently and they are not aware of their environment. Yet. -
Now, we want to make the robots more intelligent and allow them to dynamically adjust their behavior when they encounter other robots inside one of the hallways. This is realized by implementing fallback mechanisms introduced by the
auto_apms_missionpackage. To achieve that, add a launch argumentsource install/setup.bash ros2 launch auto_apms_simulation pyrobosim_hogwarts_launch.py mission:=true # Press Ctrl+C to quit
The robots dynamically decide to retreat and wait until the hallway they are about to cross is not occupied anymore. They basically monitor if a certain event occurs and initialize a corresponding sequence of action if applicable. With this, we effectively introduced automatically orchestrated reactive behaviors.
demo.mp4
Make sure to visit the User Guide for tutorials and best practices when writing software using AutoAPMS.
We also offer an extensive API Documentation which is created using Doxygen >= 1.10. To generate the documentation run the following from the repository's root:
doxygen doc/DoxyfileThis repository builds on:
- BehaviorTree.CPP by Davide Faconti
- pyrobosim by Sebastian Castro
Special thanks to the maintainers of these projects. It was their contributions to the robotic community that made AutoAPMS possible in the first place! π