Utilisation du lancement de ROS 2 pour lancer des nœuds composables
Table des matières
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])
<launch>
<node_container pkg="rclcpp_components" exec="component_container" name="image_container" namespace="">
<composable_node pkg="image_tools" plugin="image_tools::Cam2Image" name="cam2image" namespace="">
<remap from="/image" to="/burgerimage" />
<param name="width" value="320" />
<param name="height" value="240" />
<param name="burger_mode" value="true" />
<param name="history" value="keep_last" />
<extra_arg name="use_intra_process_comms" value="true" />
</composable_node>
<composable_node pkg="image_tools" plugin="image_tools::ShowImage" name="showimage" namespace="">
<remap from="/image" to="/burgerimage" />
<param name="history" value="keep_last" />
<extra_arg name="use_intra_process_comms" value="true" />
</composable_node>
</node_container>
</launch>
launch:
- node_container:
pkg: rclcpp_components
exec: component_container
name: image_container
namespace: ''
composable_node:
- pkg: image_tools
plugin: image_tools::Cam2Image
name: cam2image
namespace: ''
remap:
- from: /image
to: /burgerimage
param:
- name: width
value: 320
- name: height
value: 240
- name: burger_mode
value: true
- name: history
value: keep_last
extra_arg:
- name: use_intra_process_comms
value: 'true'
- pkg: image_tools
plugin: image_tools::ShowImage
name: showimage
namespace: ''
remap:
- from: /image
to: /burgerimage
param:
- name: history
value: keep_last
extra_arg:
- name: use_intra_process_comms
value: 'true'
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])
<launch>
<node pkg="rclcpp_components" exec="component_container" name="image_container">
</node>
<load_composable_node target="image_container">
<composable_node pkg="image_tools" plugin="image_tools::Cam2Image" name="cam2image">
<remap from="/image" to="/burgerimage" />
<param name="width" value="320" />
<param name="height" value="240" />
<param name="burger_mode" value="true" />
<param name="history" value="keep_last" />
<extra_arg name="use_intra_process_comms" value="true" />
</composable_node>
<composable_node pkg="image_tools" plugin="image_tools::ShowImage" name="showimage" namespace="">
<remap from="/image" to="/burgerimage" />
<param name="history" value="keep_last" />
<extra_arg name="use_intra_process_comms" value="true" />
</composable_node>
</load_composable_node>
</launch>
launch:
- node_container:
pkg: rclcpp_components
exec: component_container
name: image_container
namespace: ''
composable_node:
- pkg: image_tools
plugin: image_tools::Cam2Image
name: cam2image
namespace: ''
remap:
- from: /image
to: /burgerimage
param:
- name: width
value: 320
- name: height
value: 240
- name: burger_mode
value: true
- name: history
value: keep_last
extra_arg:
- name: use_intra_process_comms
value: 'true'
- pkg: image_tools
plugin: image_tools::ShowImage
name: showimage
namespace: ''
remap:
- from: /image
to: /burgerimage
param:
- name: history
value: keep_last
extra_arg:
- name: use_intra_process_comms
value: 'true'
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.
Python, XML ou YAML : lequel dois-je utiliser ?
Voir la discussion dans Utilisation de Python, XML et YAML pour les fichiers de lancement ROS 2 pour plus d’informations.