Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted yasmin yasmin_demos yasmin_msgs yasmin_ros yasmin_viewer

Repository Summary

Description YASMIN (Yet Another State MachINe)
Checkout URI https://github.com/uleroboticsgroup/yasmin.git
VCS Type git
VCS Version main
Last Updated 2025-07-10
Dev Status DEVELOPED
Released RELEASED
Tags python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yasmin 3.3.0
yasmin_demos 3.3.0
yasmin_msgs 3.3.0
yasmin_ros 3.3.0
yasmin_viewer 3.3.0

README

YASMIN (Yet Another State MachINe)

YASMIN is a project focused on implementing robot behaviors using Finite State Machines (FSM). It is available for ROS 2, Python and C++.

[![License: MIT](https://img.shields.io/badge/GitHub-GPL--3.0-informational)](https://opensource.org/license/gpl-3-0) [![GitHub release](https://img.shields.io/github/release/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/releases) [![Code Size](https://img.shields.io/github/languages/code-size/uleroboticsgroup/yasmin.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin?branch=main) [![Dependencies](https://img.shields.io/librariesio/github/uleroboticsgroup/yasmin?branch=main)](https://libraries.io/github/uleroboticsgroup/yasmin?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/commits/main) [![GitHub issues](https://img.shields.io/github/issues/uleroboticsgroup/yasmin)](https://github.com/uleroboticsgroup/yasmin/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/uleroboticsgroup/yasmin)](https://github.com/uleroboticsgroup/yasmin/pulls) [![Contributors](https://img.shields.io/github/contributors/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/graphs/contributors) [![Python Formatter Check](https://github.com/uleroboticsgroup/yasmin/actions/workflows/python-formatter.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/python-formatter.yml?branch=main) [![C++ Formatter Check](https://github.com/uleroboticsgroup/yasmin/actions/workflows/cpp-formatter.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/cpp-formatter.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | Documentation | | :----------: | :------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Foxy** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Foxy Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/foxy-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/foxy-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=foxy) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Galatic** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Galactic Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/galactic-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/galactic-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=galactic) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Humble** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Humble Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/humble-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/humble-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=humble) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Iron** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Iron Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/iron-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/iron-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=iron) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Jazzy** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Jazzy Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/jazzy-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/jazzy-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=jazzy) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Kilted** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Kilted Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/kilted-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/kilted-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=kilted) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Rolling** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Rolling Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/rolling-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/rolling-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-rolling-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=rolling) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) |

Table of Contents

  1. Features
  2. Installation
  3. Docker
  4. Demos
  5. YASMIN Viewer
  6. Citations

Key Features

  • ROS 2 Integration: Integrates with ROS 2 for easy deployment and interaction.
  • Support for Python and C++: Available for both Python and C++, making it flexible for a variety of use cases.
  • Rapid Prototyping: Designed for fast prototyping, allowing quick iteration of state machine behaviors.
  • Predefined States: Includes states for interacting with ROS 2 action clients, service clients, and topics.
  • Data Sharing with Blackboards: Utilizes blackboards for data sharing between states and state machines.
  • State Management: Supports cancellation and stopping of state machines, including halting the current executing state.
  • Web Viewer: Features an integrated web viewer for real-time monitoring of state machine execution.

Installation

Debian Packages

To install YASMIN and its packages, use the following command:

sudo apt install ros-$ROS_DISTRO-yasmin ros-$ROS_DISTRO-yasmin-*

Building from Source

Follow these steps to build the source code from this repository:

cd ~/ros2_ws/src
git clone https://github.com/uleroboticsgroup/yasmin.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
cd ~/ros2_ws
colcon build

Note for Deprecated or Rolling ROS 2 Distros

If you are using a deprecated ROS 2 distribution (e.g., Foxy or Galactic) or the Rolling distribution, install the example interfaces:

sudo apt install -y ros-$ROS_DISTRO-example-interfaces

Docker

If your operating system doesn’t support ROS 2, docker is a great alternative. You can use an image from Dockerhub or create your own images. First of all, to build the image you have to use the following command:

## Assuming you are in the YASMIN project directory
docker build -t yasmin .

To use a shortcut the docker build, you may use the following command:

## Assuming you are in the YASMIN project directory
make docker_build

After the image is created, run a docker container with the following command:

docker run -it --net=host --ipc=host --privileged --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --volume="${XAUTHORITY}:/root/.Xauthority" --entrypoint /bin/bash yasmin

To use a shortcut the docker run, you may use following command:

File truncated at 100 lines see the full file

Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted yasmin yasmin_demos yasmin_msgs yasmin_ros yasmin_viewer

Repository Summary

Description YASMIN (Yet Another State MachINe)
Checkout URI https://github.com/uleroboticsgroup/yasmin.git
VCS Type git
VCS Version main
Last Updated 2025-07-10
Dev Status DEVELOPED
Released RELEASED
Tags python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yasmin 3.3.0
yasmin_demos 3.3.0
yasmin_msgs 3.3.0
yasmin_ros 3.3.0
yasmin_viewer 3.3.0

README

YASMIN (Yet Another State MachINe)

YASMIN is a project focused on implementing robot behaviors using Finite State Machines (FSM). It is available for ROS 2, Python and C++.

[![License: MIT](https://img.shields.io/badge/GitHub-GPL--3.0-informational)](https://opensource.org/license/gpl-3-0) [![GitHub release](https://img.shields.io/github/release/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/releases) [![Code Size](https://img.shields.io/github/languages/code-size/uleroboticsgroup/yasmin.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin?branch=main) [![Dependencies](https://img.shields.io/librariesio/github/uleroboticsgroup/yasmin?branch=main)](https://libraries.io/github/uleroboticsgroup/yasmin?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/commits/main) [![GitHub issues](https://img.shields.io/github/issues/uleroboticsgroup/yasmin)](https://github.com/uleroboticsgroup/yasmin/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/uleroboticsgroup/yasmin)](https://github.com/uleroboticsgroup/yasmin/pulls) [![Contributors](https://img.shields.io/github/contributors/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/graphs/contributors) [![Python Formatter Check](https://github.com/uleroboticsgroup/yasmin/actions/workflows/python-formatter.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/python-formatter.yml?branch=main) [![C++ Formatter Check](https://github.com/uleroboticsgroup/yasmin/actions/workflows/cpp-formatter.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/cpp-formatter.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | Documentation | | :----------: | :------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Foxy** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Foxy Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/foxy-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/foxy-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=foxy) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Galatic** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Galactic Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/galactic-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/galactic-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=galactic) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Humble** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Humble Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/humble-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/humble-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=humble) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Iron** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Iron Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/iron-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/iron-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=iron) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Jazzy** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Jazzy Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/jazzy-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/jazzy-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=jazzy) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Kilted** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Kilted Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/kilted-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/kilted-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=kilted) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Rolling** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Rolling Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/rolling-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/rolling-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-rolling-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=rolling) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) |

Table of Contents

  1. Features
  2. Installation
  3. Docker
  4. Demos
  5. YASMIN Viewer
  6. Citations

Key Features

  • ROS 2 Integration: Integrates with ROS 2 for easy deployment and interaction.
  • Support for Python and C++: Available for both Python and C++, making it flexible for a variety of use cases.
  • Rapid Prototyping: Designed for fast prototyping, allowing quick iteration of state machine behaviors.
  • Predefined States: Includes states for interacting with ROS 2 action clients, service clients, and topics.
  • Data Sharing with Blackboards: Utilizes blackboards for data sharing between states and state machines.
  • State Management: Supports cancellation and stopping of state machines, including halting the current executing state.
  • Web Viewer: Features an integrated web viewer for real-time monitoring of state machine execution.

Installation

Debian Packages

To install YASMIN and its packages, use the following command:

sudo apt install ros-$ROS_DISTRO-yasmin ros-$ROS_DISTRO-yasmin-*

Building from Source

Follow these steps to build the source code from this repository:

cd ~/ros2_ws/src
git clone https://github.com/uleroboticsgroup/yasmin.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
cd ~/ros2_ws
colcon build

Note for Deprecated or Rolling ROS 2 Distros

If you are using a deprecated ROS 2 distribution (e.g., Foxy or Galactic) or the Rolling distribution, install the example interfaces:

sudo apt install -y ros-$ROS_DISTRO-example-interfaces

Docker

If your operating system doesn’t support ROS 2, docker is a great alternative. You can use an image from Dockerhub or create your own images. First of all, to build the image you have to use the following command:

## Assuming you are in the YASMIN project directory
docker build -t yasmin .

To use a shortcut the docker build, you may use the following command:

## Assuming you are in the YASMIN project directory
make docker_build

After the image is created, run a docker container with the following command:

docker run -it --net=host --ipc=host --privileged --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --volume="${XAUTHORITY}:/root/.Xauthority" --entrypoint /bin/bash yasmin

To use a shortcut the docker run, you may use following command:

File truncated at 100 lines see the full file

Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted yasmin yasmin_demos yasmin_msgs yasmin_ros yasmin_viewer

Repository Summary

Description YASMIN (Yet Another State MachINe)
Checkout URI https://github.com/uleroboticsgroup/yasmin.git
VCS Type git
VCS Version main
Last Updated 2025-07-10
Dev Status DEVELOPED
Released RELEASED
Tags python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yasmin 3.3.0
yasmin_demos 3.3.0
yasmin_msgs 3.3.0
yasmin_ros 3.3.0
yasmin_viewer 3.3.0

README

YASMIN (Yet Another State MachINe)

YASMIN is a project focused on implementing robot behaviors using Finite State Machines (FSM). It is available for ROS 2, Python and C++.

[![License: MIT](https://img.shields.io/badge/GitHub-GPL--3.0-informational)](https://opensource.org/license/gpl-3-0) [![GitHub release](https://img.shields.io/github/release/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/releases) [![Code Size](https://img.shields.io/github/languages/code-size/uleroboticsgroup/yasmin.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin?branch=main) [![Dependencies](https://img.shields.io/librariesio/github/uleroboticsgroup/yasmin?branch=main)](https://libraries.io/github/uleroboticsgroup/yasmin?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/commits/main) [![GitHub issues](https://img.shields.io/github/issues/uleroboticsgroup/yasmin)](https://github.com/uleroboticsgroup/yasmin/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/uleroboticsgroup/yasmin)](https://github.com/uleroboticsgroup/yasmin/pulls) [![Contributors](https://img.shields.io/github/contributors/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/graphs/contributors) [![Python Formatter Check](https://github.com/uleroboticsgroup/yasmin/actions/workflows/python-formatter.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/python-formatter.yml?branch=main) [![C++ Formatter Check](https://github.com/uleroboticsgroup/yasmin/actions/workflows/cpp-formatter.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/cpp-formatter.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | Documentation | | :----------: | :------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Foxy** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Foxy Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/foxy-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/foxy-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=foxy) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Galatic** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Galactic Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/galactic-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/galactic-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=galactic) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Humble** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Humble Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/humble-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/humble-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=humble) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Iron** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Iron Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/iron-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/iron-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=iron) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Jazzy** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Jazzy Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/jazzy-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/jazzy-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=jazzy) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Kilted** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Kilted Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/kilted-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/kilted-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=kilted) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Rolling** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Rolling Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/rolling-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/rolling-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-rolling-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=rolling) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) |

Table of Contents

  1. Features
  2. Installation
  3. Docker
  4. Demos
  5. YASMIN Viewer
  6. Citations

Key Features

  • ROS 2 Integration: Integrates with ROS 2 for easy deployment and interaction.
  • Support for Python and C++: Available for both Python and C++, making it flexible for a variety of use cases.
  • Rapid Prototyping: Designed for fast prototyping, allowing quick iteration of state machine behaviors.
  • Predefined States: Includes states for interacting with ROS 2 action clients, service clients, and topics.
  • Data Sharing with Blackboards: Utilizes blackboards for data sharing between states and state machines.
  • State Management: Supports cancellation and stopping of state machines, including halting the current executing state.
  • Web Viewer: Features an integrated web viewer for real-time monitoring of state machine execution.

Installation

Debian Packages

To install YASMIN and its packages, use the following command:

sudo apt install ros-$ROS_DISTRO-yasmin ros-$ROS_DISTRO-yasmin-*

Building from Source

Follow these steps to build the source code from this repository:

cd ~/ros2_ws/src
git clone https://github.com/uleroboticsgroup/yasmin.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
cd ~/ros2_ws
colcon build

Note for Deprecated or Rolling ROS 2 Distros

If you are using a deprecated ROS 2 distribution (e.g., Foxy or Galactic) or the Rolling distribution, install the example interfaces:

sudo apt install -y ros-$ROS_DISTRO-example-interfaces

Docker

If your operating system doesn’t support ROS 2, docker is a great alternative. You can use an image from Dockerhub or create your own images. First of all, to build the image you have to use the following command:

## Assuming you are in the YASMIN project directory
docker build -t yasmin .

To use a shortcut the docker build, you may use the following command:

## Assuming you are in the YASMIN project directory
make docker_build

After the image is created, run a docker container with the following command:

docker run -it --net=host --ipc=host --privileged --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --volume="${XAUTHORITY}:/root/.Xauthority" --entrypoint /bin/bash yasmin

To use a shortcut the docker run, you may use following command:

File truncated at 100 lines see the full file

Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted yasmin yasmin_demos yasmin_msgs yasmin_ros yasmin_viewer

Repository Summary

Description YASMIN (Yet Another State MachINe)
Checkout URI https://github.com/uleroboticsgroup/yasmin.git
VCS Type git
VCS Version main
Last Updated 2025-07-10
Dev Status DEVELOPED
Released RELEASED
Tags python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
yasmin 3.3.0
yasmin_demos 3.3.0
yasmin_msgs 3.3.0
yasmin_ros 3.3.0
yasmin_viewer 3.3.0

README

YASMIN (Yet Another State MachINe)

YASMIN is a project focused on implementing robot behaviors using Finite State Machines (FSM). It is available for ROS 2, Python and C++.

[![License: MIT](https://img.shields.io/badge/GitHub-GPL--3.0-informational)](https://opensource.org/license/gpl-3-0) [![GitHub release](https://img.shields.io/github/release/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/releases) [![Code Size](https://img.shields.io/github/languages/code-size/uleroboticsgroup/yasmin.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin?branch=main) [![Dependencies](https://img.shields.io/librariesio/github/uleroboticsgroup/yasmin?branch=main)](https://libraries.io/github/uleroboticsgroup/yasmin?branch=main) [![Last Commit](https://img.shields.io/github/last-commit/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/commits/main) [![GitHub issues](https://img.shields.io/github/issues/uleroboticsgroup/yasmin)](https://github.com/uleroboticsgroup/yasmin/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/uleroboticsgroup/yasmin)](https://github.com/uleroboticsgroup/yasmin/pulls) [![Contributors](https://img.shields.io/github/contributors/uleroboticsgroup/yasmin.svg)](https://github.com/uleroboticsgroup/yasmin/graphs/contributors) [![Python Formatter Check](https://github.com/uleroboticsgroup/yasmin/actions/workflows/python-formatter.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/python-formatter.yml?branch=main) [![C++ Formatter Check](https://github.com/uleroboticsgroup/yasmin/actions/workflows/cpp-formatter.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/cpp-formatter.yml?branch=main) | ROS 2 Distro | Branch | Build status | Docker Image | Documentation | | :----------: | :------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Foxy** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Foxy Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/foxy-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/foxy-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-foxy-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=foxy) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Galatic** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Galactic Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/galactic-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/galactic-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-galactic-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=galactic) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Humble** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Humble Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/humble-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/humble-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-humble-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=humble) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Iron** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Iron Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/iron-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/iron-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-iron-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=iron) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Jazzy** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Jazzy Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/jazzy-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/jazzy-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-jazzy-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=jazzy) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Kilted** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Kilted Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/kilted-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/kilted-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-kilted-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=kilted) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) | | **Rolling** | [`main`](https://github.com/uleroboticsgroup/yasmin/tree/main) | [![Rolling Build](https://github.com/uleroboticsgroup/yasmin/actions/workflows/rolling-docker-build.yml/badge.svg?branch=main)](https://github.com/uleroboticsgroup/yasmin/actions/workflows/rolling-docker-build.yml?branch=main) | [![Docker Image](https://img.shields.io/badge/Docker%20Image%20-rolling-blue)](https://hub.docker.com/r/mgons/yasmin/tags?name=rolling) | [![Doxygen Deployment](https://github.com/uleroboticsgroup/yasmin/actions/workflows/doxygen-deployment.yml/badge.svg)](https://uleroboticsgroup.github.io/yasmin/latest) |

Table of Contents

  1. Features
  2. Installation
  3. Docker
  4. Demos
  5. YASMIN Viewer
  6. Citations

Key Features

  • ROS 2 Integration: Integrates with ROS 2 for easy deployment and interaction.
  • Support for Python and C++: Available for both Python and C++, making it flexible for a variety of use cases.
  • Rapid Prototyping: Designed for fast prototyping, allowing quick iteration of state machine behaviors.
  • Predefined States: Includes states for interacting with ROS 2 action clients, service clients, and topics.
  • Data Sharing with Blackboards: Utilizes blackboards for data sharing between states and state machines.
  • State Management: Supports cancellation and stopping of state machines, including halting the current executing state.
  • Web Viewer: Features an integrated web viewer for real-time monitoring of state machine execution.

Installation

Debian Packages

To install YASMIN and its packages, use the following command:

sudo apt install ros-$ROS_DISTRO-yasmin ros-$ROS_DISTRO-yasmin-*

Building from Source

Follow these steps to build the source code from this repository:

cd ~/ros2_ws/src
git clone https://github.com/uleroboticsgroup/yasmin.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
cd ~/ros2_ws
colcon build

Note for Deprecated or Rolling ROS 2 Distros

If you are using a deprecated ROS 2 distribution (e.g., Foxy or Galactic) or the Rolling distribution, install the example interfaces:

sudo apt install -y ros-$ROS_DISTRO-example-interfaces

Docker

If your operating system doesn’t support ROS 2, docker is a great alternative. You can use an image from Dockerhub or create your own images. First of all, to build the image you have to use the following command:

## Assuming you are in the YASMIN project directory
docker build -t yasmin .

To use a shortcut the docker build, you may use the following command:

## Assuming you are in the YASMIN project directory
make docker_build

After the image is created, run a docker container with the following command:

docker run -it --net=host --ipc=host --privileged --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --volume="${XAUTHORITY}:/root/.Xauthority" --entrypoint /bin/bash yasmin

To use a shortcut the docker run, you may use following command:

File truncated at 100 lines see the full file

Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted
Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted
Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted
Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted
Repo symbol

yasmin repository

python state-machine cpp ros2 ros2-foxy ros2-galactic ros2-rolling ros2-humble ros2-iron ros2-jazzy ros2-kilted