Créer une action
Objectif : Définir une action dans un package ROS 2.
Niveau du didacticiel : Intermédiaire
Durée : 5 minutes
Contenu
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
mkdir -p ros2_ws/src
cd ros2_ws/src
ros2 pkg create action_tutorials_interfaces
md ros2_ws\src
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
cd action_tutorials_interfaces
mkdir action
cd action_tutorials_interfaces
md 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++).