Développement d’un package ROS 2

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

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

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.