An Event-Driven, Asynchronous, Behavioral State Machine Library for ROS2 (Robotic Operating System) applications written in C++
SMACC2 is an event-driven, asynchronous, behavioral state machine library for real-time ROS 2 (Robotic Operating System) applications written in C++, designed to allow programmers to build robot control applications for multicomponent robots, in an intuitive and systematic manner.
SMACC was inspired by Harel's statecharts and the SMACH ROS package. SMACC is built on top of the Boost StateChart library.
ROS 2 Distro | Branch | Build status | Documentation | Released packages |
---|---|---|---|---|
Foxy | foxy |
|
Generated Doc |
SMACC2 |
Galactic | galactic |
|
Generated Doc |
SMACC2 |
Humble | humble |
Generated Doc |
SMACC2 |
|
Rolling | rolling |
|
Generated Doc |
NOTE: There are three build stages checking current and future compatibility of the package.
Binary builds - against released packages (main and testing) in ROS distributions. Shows that direct local build is possible.
Uses repos file: src/SMACC2/.github/SMACC2-not-released.<ros-distro>.repos
Semi-binary builds - against released core ROS packages (main and testing), but the immediate dependencies are pulled from source. Shows that local build with dependencies is possible and if fails there we can expect that after the next package sync we will not be able to build.
Uses repos file: src/SMACC2/.github/SMACC2.repos
Source build - also core ROS packages are build from source. It shows potential issues in the mid future.
Make sure that colcon
, its extensions and vcs
are installed:
sudo apt install python3-colcon-common-extensions python3-vcstool
Create a new ROS 2 workspace if necessary:
export COLCON_WS=~/workspace/humble_ws
mkdir -p $COLCON_WS/src
Or just navigate to your workspace source folder:
cd ~/workspace/humble_ws/src
Clone the repo:
git clone https://github.com/robosoft-ai/SMACC2.git
Checkout the Humble branch:
cd ~/workspace/humble_ws/src/SMACC2
git checkout humble
Navigate to the workspace:
cd ~/workspace/humble_ws
Update System:
sudo apt update
sudo apt upgrade
Source the workspace:
source /opt/ros/humble/setup.bash
Update dependencies:
rosdep update
vcs import src --skip-existing --input src/SMACC2/.github/SMACC2.humble.repos
rosdep install --ignore-src --from-paths src -y -r
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
Make sure that colcon
, its extensions and vcs
are installed:
sudo apt install python3-colcon-common-extensions python3-vcstool
Create a new ROS 2 workspace if necessary:
export COLCON_WS=~/workspace/galactic_ws
mkdir -p $COLCON_WS/src
Or just navigate to your workspace source folder:
cd ~/workspace/galactic_ws/src
Clone the repo:
git clone https://github.com/robosoft-ai/SMACC2.git
Checkout the Galactic branch:
cd ~/workspace/galactic_ws/src/SMACC2
git checkout galactic
Navigate to the workspace:
cd ~/workspace/galactic_ws
Update System:
sudo apt update
sudo apt upgrade
Source the workspace:
source /opt/ros/galactic/setup.bash
Update dependencies:
rosdep update
vcs import src --skip-existing --input src/SMACC2/.github/SMACC2.galactic.repos
rosdep install --ignore-src --from-paths src -y -r
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
Make sure that colcon
, its extensions and vcs
are installed:
sudo apt install python3-colcon-common-extensions python3-vcstool
Create a new ROS 2 workspace if necessary:
export COLCON_WS=~/workspace/foxy_ws
mkdir -p $COLCON_WS/src
Or just navigate to your workspace source folder:
cd ~/workspace/foxy_ws/src
Clone the repo:
git clone https://github.com/robosoft-ai/SMACC2.git
Checkout the Foxy branch:
cd ~/workspace/foxy_ws/src/SMACC2
git checkout foxy
Navigate to the workspace:
cd ~/workspace/foxy_ws
Update System:
sudo apt update
sudo apt upgrade
Source the workspace:
source /opt/ros/foxy/setup.bash
Update dependencies:
rosdep update
vcs import src --skip-existing --input src/SMACC2/.github/SMACC2.foxy.repos
rosdep install --ignore-src --from-paths src -y -r
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
Make sure that colcon
, its extensions and vcs
are installed:
sudo apt install python3-colcon-common-extensions python3-vcstool
Create a new ROS 2 workspace if necessary:
export COLCON_WS=~/workspace/rolling_ws
mkdir -p $COLCON_WS/src
Or just navigate to your workspace source folder:
cd ~/workspace/rolling_ws/src
Clone the repo:
git clone https://github.com/robosoft-ai/SMACC2.git
Navigate to the workspace:
cd ~/workspace/rolling_ws
Update System:
sudo apt update
sudo apt upgrade
Source the workspace:
source /opt/ros/rolling/setup.bash
Update dependencies:
rosdep update
Pull relevant packages and install dependencies:
vcs import src --skip-existing --input src/SMACC2/SMACC2-not-released.rolling.repos
rosdep install --ignore-src --from-paths src -y -r
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
smacc2
- core library of SMACC2.smacc2_client_library
- client libraries for SMACC2, e.g., Navigation2 (nav2z_client
), MoveIt2 (moveit2z_client
).smacc2_event_generators
- ...smacc2_msgs
- ROS 2 messages for SMACC2 framework.smacc2_sm_reference_library
- libraries with reference implementations of state-machines used for demonstaration and testing of functionalities.↓smacc2_state_reactor_library
- ...smacc2_performance_tools
- ...From it's inception, SMACC2 was written to support the programming of multi-component, complex robots. If your project involves small, solar-powered insect robots, that simply navigate towards a light source, then SMACC2 might not be the right choice for you. But if you are trying to program a robot with a mobile base, a robotic arm, a gripper, two lidar sensors, a gps transceiver and an imu, then you've come to the right place.
The easiest way to get started is by selecting one of the state machines in our reference library, and then hacking it to meet your needs.
Each state machine in the reference library comes with it's own README.md file, which contains the appropriate operating instructions, so that all you have to do is simply copy & paste some commands into your terminal.
If you are looking for a minimal example, we recommend sm_atomic.
If you are looking for a minimal example but with a looping superstate, try sm_three_some.
If you want to get started with the ROS Navigation stack right away, try sm_dance_bot.
If you want to get started with ROS Navigation and exploring the orthogonal read-write cycle, then try sm_dance_bot_strikes_back.
Operating instructions can be found in each reference state machines readme file.
There is a state machine generator in the reference library.
To use it go to the src
folder of your ROS 2 workspace and execute:
smacc2/smacc2_sm_reference_library/create-sm-package.bash <name_of_state_machine>
After than compile your workspace and source it to set paths of the new package.
Check README.md
in new package about instructions to start newly created state machine.
Happy Coding!
If you are interested in getting involved or need a little support, feel free to contact us by emailing [email protected]