Développement d’un package ROS 2
Table des matières
Ce tutoriel vous apprendra comment créer votre première application ROS 2. Il est destiné aux développeurs qui souhaitent apprendre à créer des packages personnalisés dans ROS 2, et non aux personnes souhaitant utiliser ROS 2 avec ses packages existants.
Conditions préalables
Configurez votre espace de travail en vous procurant votre installation ROS 2.
Création d’un paquet
Tous les packages ROS 2 commencent par exécuter la commande
ros2 pkg create <pkg-name> --dependencies [deps]
dans votre espace de travail (généralement ~/ros2_ws/src
).
Pour créer un package pour une bibliothèque cliente spécifique :
ros2 pkg create <pkg-name> --dependencies [deps] --build-type ament_cmake
ros2 pkg create <pkg-name> --dependencies [deps] --build-type ament_python
Vous pouvez ensuite mettre à jour le package.xml
avec les informations de votre package telles que les dépendances, les descriptions et la paternité.
Paquets C++
Vous utiliserez principalement la macro CMake add_executable()
avec
ament_target_dependencies(<executable-name> [dependencies])
pour créer des nœuds exécutables et des dépendances de liens.
Pour installer vos fichiers de lancement et nœuds, vous pouvez utiliser la macro install()
placée vers la fin du fichier mais avant la macro ament_package()
.
Un exemple pour les fichiers de lancement et les nœuds :
# Install launch files
install(
DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)
# Install nodes
install(
TARGETS [node-names]
DESTINATION lib/${PROJECT_NAME}
)
Paquets Python
ROS 2 suit le processus de distribution de module standard de Python qui utilise setuptools
. Pour les packages Python, le fichier setup.py
complète le CMakeLists.txt
d’un package C++. Plus de détails sur la distribution peuvent être trouvés dans la documentation officielle.
Dans votre package ROS 2, vous devriez avoir un fichier setup.cfg
qui ressemble à :
[develop]
script_dir=$base/lib/<package-name>
[install]
install_scripts=$base/lib/<package-name>
et un fichier setup.py
qui ressemble à :
import os
from glob import glob
from setuptools import setup
package_name = 'my_package'
setup(
name=package_name,
version='0.0.0',
# Packages to export
packages=[package_name],
# Files we want to install, specifically launch files
data_files=[
# Install marker file in the package index
('share/ament_index/resource_index/packages', ['resource/' + package_name]),
# Include our package.xml file
(os.path.join('share', package_name), ['package.xml']),
# Include all launch files.
(os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*.launch.py'))),
],
# This is important as well
install_requires=['setuptools'],
zip_safe=True,
author='ROS 2 Developer',
author_email='ros2@ros.com',
maintainer='ROS 2 Developer',
maintainer_email='ros2@ros.com',
keywords=['foo', 'bar'],
classifiers=[
'Intended Audience :: Developers',
'License :: TODO',
'Programming Language :: Python',
'Topic :: Software Development',
],
description='My awesome package.',
license='TODO',
# Like the CMakeLists add_executable macro, you can add your python
# scripts here.
entry_points={
'console_scripts': [
'my_script = my_package.my_script:main'
],
},
)
Packages combinés C++ et Python
Lors de l’écriture d’un paquet avec du code C++ et Python, les fichiers setup.py
et setup.cfg
ne sont pas utilisés. À la place, utilisez ament_cmake_python.