Utilisation du lancement de ROS 2 pour lancer des nœuds composables

Dans le tutoriel de composition, vous avez découvert les nœuds composables et comment les utiliser à partir de la ligne de commande. Dans les tutoriels de lancement, vous avez découvert les fichiers de lancement et comment les utiliser pour gérer plusieurs nœuds.

Ce guide combinera les deux sujets ci-dessus et vous apprendra à écrire des fichiers de lancement pour les nœuds composables.

Installer

Voir instructions d’installation pour plus de détails sur l’installation de ROS 2.

Si vous avez installé ROS 2 à partir de packages, assurez-vous que ros-rolling-image-tools est installé. Si vous avez téléchargé l’archive ou construit ROS 2 à partir de la source, cela fera déjà partie de l’installation.

Exemples de fichiers de lancement

Vous trouverez ci-dessous un fichier de lancement qui lance des nœuds composables en Python, XML et YAML. Les fichiers de lancement effectuent tous les opérations suivantes :

  • Instancier un nœud composable cam2image avec des remappages, des paramètres personnalisés et des arguments supplémentaires

  • Instanciez un nœud composable showimage avec des remappages, des paramètres personnalisés et des arguments supplémentaires

import launch
from launch_ros.actions import ComposableNodeContainer
from launch_ros.descriptions import ComposableNode


def generate_launch_description():
    """Generate launch description with multiple components."""
    container = ComposableNodeContainer(
            name='image_container',
            namespace='',
            package='rclcpp_components',
            executable='component_container',
            composable_node_descriptions=[
                ComposableNode(
                    package='image_tools',
                    plugin='image_tools::Cam2Image',
                    name='cam2image',
                    remappings=[('/image', '/burgerimage')],
                    parameters=[{'width': 320, 'height': 240, 'burger_mode': True, 'history': 'keep_last'}],
                    extra_arguments=[{'use_intra_process_comms': True}]),
                ComposableNode(
                    package='image_tools',
                    plugin='image_tools::ShowImage',
                    name='showimage',
                    remappings=[('/image', '/burgerimage')],
                    parameters=[{'history': 'keep_last'}],
                    extra_arguments=[{'use_intra_process_comms': True}])
            ],
            output='both',
    )

    return launch.LaunchDescription([container])

Charger des nœuds composables dans un conteneur existant

Les conteneurs peuvent parfois être lancés par d’autres fichiers de lancement ou à partir d’une ligne de commande. Dans ce cas, vous devez ajouter vos composants à un conteneur existant. Pour cela, vous pouvez utiliser LoadComposableNodes pour charger des composants dans un conteneur donné. L’exemple ci-dessous lance les mêmes nœuds que ci-dessus.

from launch import LaunchDescription
from launch_ros.actions import LoadComposableNodes, Node
from launch_ros.descriptions import ComposableNode

def generate_launch_description():
    container = Node(
        name='image_container',
        package='rclcpp_components',
        executable='component_container',
        output='both',
    )

    load_composable_nodes = LoadComposableNodes(
        target_container='image_container',
        composable_node_descriptions=[
            ComposableNode(
                 package='image_tools',
                plugin='image_tools::Cam2Image',
                name='cam2image',
                remappings=[('/image', '/burgerimage')],
                parameters=[{'width': 320, 'height': 240, 'burger_mode': True, 'history': 'keep_last'}],
                extra_arguments=[{'use_intra_process_comms': True}],
            ),
            ComposableNode(
                package='image_tools',
                plugin='image_tools::ShowImage',
                name='showimage',
                remappings=[('/image', '/burgerimage')],
                parameters=[{'history': 'keep_last'}],
                extra_arguments=[{'use_intra_process_comms': True}]
            ),
        ],
    )

    return LaunchDescription([container, load_composable_nodes])

Utilisation des fichiers de lancement à partir de la ligne de commande

N’importe lequel des fichiers de lancement ci-dessus peut être exécuté avec ros2 launch. Copiez les données dans un fichier local, puis exécutez :

ros2 launch <path_to_launch_file>

Communications intra-processus

Tous les exemples ci-dessus utilisent un argument supplémentaire pour configurer la communication intra-processus entre les nœuds. Pour plus d’informations sur les communications intra-processus, consultez le tutoriel sur les communications intra-processus.