Intégration des fichiers de lancement dans les packages ROS 2
Objectif : Ajouter un fichier de lancement à un package ROS 2
Niveau du didacticiel : Intermédiaire
Durée : 10 minutes
Contenu
Conditions préalables
Vous devriez avoir suivi le didacticiel sur la façon de créer un package ROS 2.
Comme toujours, n’oubliez pas de sourcer ROS 2 dans chaque nouveau terminal que vous ouvrez.
Arrière-plan
Dans le tutoriel précédent, nous avons vu comment écrire un fichier de lancement autonome. Ce didacticiel montrera comment ajouter un fichier de lancement à un package existant et les conventions généralement utilisées.
Tâches
1 Créer un package
Créez un espace de travail dans lequel le package doit résider :
mkdir -p launch_ws/src
cd launch_ws/src
mkdir -p launch_ws/src
cd launch_ws/src
md launch_ws\src
cd launch_ws\src
ros2 pkg create py_launch_example --build-type ament_python
ros2 pkg create cpp_launch_example --build-type ament_cmake
2 Création de la structure pour contenir les fichiers de lancement
Par convention, tous les fichiers de lancement d’un paquet sont stockés dans le répertoire launch
à l’intérieur du paquet. Assurez-vous de créer un répertoire launch
au niveau supérieur du paquet que vous avez créé ci-dessus.
Pour les packages Python, le répertoire contenant votre package devrait ressembler à ceci :
src/
py_launch_example/
package.xml
py_launch_example/
resource/
setup.py
setup.cfg
test/
Pour que colcon trouve les fichiers de lancement, nous devons informer les outils de configuration de Python de nos fichiers de lancement en utilisant le paramètre data_files
de setup
.
Dans notre fichier setup.py
:
import os
from glob import glob
from setuptools import setup
package_name = 'py_launch_example'
setup(
# Other parameters ...
data_files=[
# ... Other data files
# Include all launch files.
(os.path.join('share', package_name), glob('launch/*launch.[pxy][yma]*'))
]
)
Pour les packages C++, nous n’ajusterons le fichier CMakeLists.txt
qu’en ajoutant :
# Install launch files.
install(DIRECTORY
launch
DESTINATION share/${PROJECT_NAME}/
)
à la fin du fichier (mais avant ament_package()
).
3 Ecriture du fichier de lancement
Dans votre répertoire launch
, créez un nouveau fichier de lancement appelé my_script_launch.py
. _launch.py
est recommandé, mais pas obligatoire, comme suffixe de fichier pour les fichiers de lancement Python. Cependant, le nom du fichier de lancement doit se terminer par launch.py
pour être reconnu et complété automatiquement par ros2 launch
.
Votre fichier de lancement doit définir la fonction generate_launch_description()
qui renvoie un launch.LaunchDescription()
à utiliser par le verbe ros2 launch
.
import launch
import launch_ros.actions
def generate_launch_description():
return launch.LaunchDescription([
launch_ros.actions.Node(
package='demo_nodes_cpp',
executable='talker',
name='talker'),
])
Dans votre répertoire launch
, créez un nouveau fichier de lancement appelé my_script_launch.xml
. _launch.xml
est recommandé, mais pas obligatoire, comme suffixe de fichier pour les fichiers de lancement XML.
<launch>
<node pkg="demo_nodes_cpp" exec="talker" name="talker"/>
</launch>
Dans votre répertoire launch
, créez un nouveau fichier de lancement appelé my_script_launch.yaml
. _launch.yaml
est recommandé, mais pas obligatoire, comme suffixe de fichier pour les fichiers de lancement YAML.
launch:
- node:
pkg: "demo_nodes_cpp"
exec: "talker"
name: "talker"
4 Construire et exécuter le fichier de lancement
Accédez au niveau supérieur de l’espace de travail et créez-le :
colcon build
Une fois que le colcon build
a réussi et que vous avez créé l’espace de travail, vous devriez pouvoir exécuter le fichier de lancement comme suit :
ros2 launch py_launch_example my_script_launch.py
ros2 launch py_launch_example my_script_launch.xml
ros2 launch py_launch_example my_script_launch.yaml
ros2 launch cpp_launch_example my_script_launch.py
ros2 launch cpp_launch_example my_script_launch.xml
ros2 launch cpp_launch_example my_script_launch.yaml
Documentation
La documentation de lancement fournit plus de détails sur les concepts qui sont également utilisés dans launch_ros
.
De la documentation/des exemples supplémentaires de capacités de lancement sont à venir. Voir le code source (https://github.com/ros2/launch et https://github.com/ros2/launch_ros) en attendant.