BetFSM provides a unified and modular framework for orchestrating robotic applications using behavior trees and finite state machines. It supports hierarchical composition, concurrency, and reusable control structures (e.g., sequences, fallbacks, loops, and parallel execution), allowing developers to structure complex task logic in a clear and scalable way. While it can be used independently of ROS2, it also provides complete ROS 2 integration by enabling seamless interaction with nodes, services, and actions, as well as precise timing and lifecycle management of tasks. It bridges high-level decision-making and low-level execution, making it suitable for coordinating both discrete events and continuous robotic behaviors.
| Package | Description |
|---|---|
BeTFSM (doc) |
BeTFSM is a library for "ticking" statemachines and behavior trees. It targets discrete coordination of robotic systems at both high- and low level. |
Click here for official website
Crospi is a highly-configurable pipeline that focuses on interfacing (plugins, ROS2 and non-ROS sensors, robot hardware, easy user interfaces) and easy integration (pipeline for Orchestration, creation of libraries, configuration files, etc). It uses eTaSL which is a collection of C++/CMake/LUA libraries that define a language and interpreter to specify constraint-based control task specifications. Besides Crospi, there are several other frameworks that use eTaSL, such as ROS/Orocos and ROS2/Orocos (see below). Note that, although the constraint-based task specifications are specified using a scripting language, all real-time critical runs in C++. With Crospi, you can focus on configuring to use your own robot setup in your own orchestrated applications, and easily reuse tasks and skills from libraries.
| Package | Description |
|---|---|
Crospi (doc) |
This package was created to be able to develop constraint-based reactive robot behaviors with eTaSL that can fully operate with the ROS2 architecture. |
├─ crospi_core |
Core package of Crospi providing important interfacing tools and ROS2 functionalities. |
├─ crospi_application_template |
This is a template that facilitates development and provides development functionalities to speed up development and deployment with Crospi. |
├─ crospi_default_plugins |
This package contains the default plugins for crospi_core. |
├─ crospi_interfaces |
Package containing ros msgs and srv used to communicate with the crospi_core package. |
├─ skill_lib_example |
Package with an example of a skill for Crospi. This contains BetFSM skill orchestration examples. |
├─ core_task_lib |
Package with core and common eTaSL task specifications that can be used within the Crospi pipeline for controlling robots. |
├─ debug_lib |
Package with eTaSL task specifications for debugging that can be used within the Crospi pipeline. |
├─ dummy_lib |
Package with dummy examples of eTaSL task specifications that can be used within the Crospi pipeline. |
├─ template_driver_crospi |
This package contains a template on how to implement a robot driver for crospi_core node using ROS2 plugins. If used without any modification, it will simply simulate the robot by integrating the joint velocities and returning joint positions through shared memory communication. |
├─ kuka_iiwa_driver_crospi |
This package contains a driver for controlling the Kuka iiwa using crospi_core, based on template_driver_crospi package which uses ROS2 plugins. |
├─ urXe_driver_crospi |
This package contains a driver for controlling Universal Robots UR CB and e series using crospi_core, based on template_driver_crospi package which uses ROS2 plugins. |
├─ trossen_widowx_driver_crospi |
This package contains a driver for controlling the Trossen WidowX robot using crospi_core, based on template_driver_crospi package which uses ROS2 plugins. |
├─ expressiongraph |
This package contains a library for automatic differentiation specifically targeted to robotics data-types such as orientations, quaternions, poses, twists and wrenches |
├─ luabind |
This package contains C++ template utilities to bind C++ code to lua |
While Orocos is nowadays maintained externally, we keep some packages that can prove useful:
| Package | Description |
|---|---|
| rtt_ros_utilities | A meta-package containing the following packages: |
├─ rttlua_completion |
Enables tab completion in the rttlua shell |
├─ rFSM |
State machine framework for Lua |
├─ rtt_dot_service |
Creates a DOT graph from the current deployment |
| python_gui | Configurable ROS graphical interface to send events to rFSM |
| URDriver | Drivers for using UR robots with ROS |
| rtt_soem | EtherCAT master component with plugins (mainly Beckhoff modules) |
| rtt_soem_maxpos | EtherCAT drivers for the MaxPos, a motor driver from Maxon motors |
| Package | Description |
|---|---|
| rtt_ros2_utilities | A meta package containing the following packages: |
├─ motion_control |
Legacy message types (ros2 branch) |
├─ rFSM |
State machine framework (ros2 branch) |
├─ ros2_rtt_typekits |
Typekits for Eigen and KDL |
├─ rtt_dot_service |
Generates DOT graphs (ros2 branch) |
├─ rttlua_completion |
Lua shell tab completion (ros2 branch) |
| rtt_ros2_pkg | Adds commands for creating Orocos packages in rtt-ros2 integration |
| python_gui_ros2 | Configurable ROS2 graphical interface to send events to rFSM |
| soem | ROS2 EtherCAT dependency (use the foxy_devel branch) |
| rtt_soem | EtherCAT master component with plugins (mainly Beckhoff modules) (ros2 branch) |
Prebuilt Docker images for ROS1 and ROS2 with the above utilities installed: