Créer une action

Objectif : Définir une action dans un package ROS 2.

Niveau du didacticiel : Intermédiaire

Durée : 5 minutes

Arrière-plan

Vous avez appris les actions précédemment dans le didacticiel Comprendre les actions. Comme les autres types de communication et leurs interfaces respectives (topics/msg et services/srv), vous pouvez également définir des actions personnalisées dans vos packages. Ce didacticiel vous montre comment définir et créer une action que vous pouvez utiliser avec le serveur d’action et le client d’action que vous écrirez dans le prochain didacticiel.

Conditions préalables

Vous devriez avoir ROS 2 et colcon installés.

Configurez un workspace et créez un package nommé action_tutorials_interfaces :

(N’oubliez pas de sourcer votre installation ROS 2 en premier.)

mkdir -p ros2_ws/src #you can reuse existing workspace with this naming convention
cd ros2_ws/src
ros2 pkg create action_tutorials_interfaces

Tâches

1 Définir une action

Les actions sont définies dans des fichiers .action de la forme :

# Request
---
# Result
---
# Feedback

Une définition d’action est composée de trois définitions de message séparées par ---.

  • Un message request est envoyé d’un client d’action à un serveur d’action initiant un nouvel objectif.

  • Un message result est envoyé d’un serveur d’action à un client d’action lorsqu’un objectif est atteint.

  • Des messages Feedback sont périodiquement envoyés d’un serveur d’action à un client d’action avec des mises à jour sur un objectif.

Une instance d’action est généralement appelée objectif.

Disons que nous voulons définir une nouvelle action « Fibonacci » pour calculer la suite de Fibonacci.

Créez un répertoire action dans notre package ROS 2 action_tutorials_interfaces :

cd action_tutorials_interfaces
mkdir action

Dans le répertoire action, créez un fichier appelé Fibonacci.action avec le contenu suivant :

int32 order
---
int32[] sequence
---
int32[] partial_sequence

La demande d’objectif est l”ordre de la séquence de Fibonacci que nous voulons calculer, le résultat est la séquence finale et le retour est la séquence_partielle calculée jusqu’à présent.

2 Construire une action

Avant de pouvoir utiliser le nouveau type d’action Fibonacci dans notre code, nous devons transmettre la définition au pipeline de génération de code rosidl.

Ceci est accompli en ajoutant les lignes suivantes à notre CMakeLists.txt avant la ligne ament_package(), dans action_tutorials_interfaces :

find_package(rosidl_default_generators REQUIRED)

rosidl_generate_interfaces(${PROJECT_NAME}
  "action/Fibonacci.action"
)

Nous devrions également ajouter les dépendances requises à notre package.xml :

<buildtool_depend>rosidl_default_generators</buildtool_depend>

<member_of_group>rosidl_interface_packages</member_of_group>

Nous devrions maintenant pouvoir construire le package contenant la définition de l’action Fibonacci :

# Change to the root of the workspace
cd ~/ros2_ws
# Build
colcon build

Avaient fini!

Par convention, les types d’action seront préfixés par leur nom de package et le mot action. Ainsi, lorsque nous voulons faire référence à notre nouvelle action, elle aura le nom complet action_tutorials_interfaces/action/Fibonacci.

Nous pouvons vérifier que notre action a bien été construite avec l’outil de ligne de commande :

# Source our workspace
# On Windows: call install/setup.bat
. install/setup.bash
# Check that our action definition exists
ros2 interface show action_tutorials_interfaces/action/Fibonacci

Vous devriez voir la définition de l’action de Fibonacci imprimée à l’écran.

Résumé

Dans ce didacticiel, vous avez appris la structure d’une définition d’action. Vous avez également appris comment construire correctement une nouvelle interface d’action en utilisant CMakeLists.txt et package.xml, et comment vérifier une construction réussie.

Prochaines étapes

Ensuite, utilisons votre interface d’action nouvellement définie en créant un service d’action et un client (dans Python ou C++).