在ROS 2中,你可以使用IncludeLaunchDescription
来在一个launch
文件中启动另一个launch
文件。这允许你构建更模块化、可重用的launch
文件,以便在需要时包含或排除特定的启动配置。
以下是一个示例,演示如何在一个launch
文件中启动另一个launch
文件:
# my_parent_launch_file.py
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
def generate_launch_description():
return LaunchDescription([
# 启动第一个节点
Node(
package='my_package',
executable='node1',
name='node1_name',
output='screen',
),
# 启动另一个launch文件
IncludeLaunchDescription(
PythonLaunchDescriptionSource('path/to/my_child_launch_file.py'),
launch_arguments={'arg_name': 'arg_value'}.items(),
),
])
在这个例子中,IncludeLaunchDescription
类被用于启动另一个launch
文件。PythonLaunchDescriptionSource
指定了要包含的launch
文件的路径,而 launch_arguments
参数用于传递参数给被包含的launch
文件。
现在,让我们看看如何在被包含的launch
文件中接收这些参数:
# my_child_launch_file.py
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.conditions import IfCondition
def generate_launch_description(context):
arg_value = context.launch_configurations['arg_name']
return LaunchDescription([
# 启动第二个节点,使用传递的参数
Node(
package='my_package',
executable='node2',
name='node2_name',
output='screen',
parameters=[{'param_name': arg_value}],
),
])
在这个例子中,generate_launch_description
函数的 context
参数用于获取传递的参数,然后将该参数用作第二个节点的配置。
要运行这个父launch
文件,你可以使用以下命令:
bashCopy coderos2 launch my_package my_parent_launch_file.py
这将启动父launch
文件,该文件将启动第一个节点,并包含并启动另一个launch
文件,该文件将启动第二个节点。