ROS2——启动多个launch文件

机器人有很多功能,每个功能都有一个launch文件,我们运行机器人时,可能需要同时启动这些launch文件。这时就可以使用IncludeLaunchDescription在launch文件中嵌套启动launch文件。

1、举个栗子

# 导入描述launch文件的库,这是必须的
from launch import LaunchDescription
# 我们需要告诉现在的launch文件,其他要打开的launch文件,在文件系统的哪个位置
# 然后,去打开
# 于是就需要导入OS库和FindPackageShare库
# FindPackageShare库:找到指定名字的包,得到包的路径,例如/home/m/fishbot/src/fishbot_bringup
# 包下就是launch文件夹和xxx.launch.py文件,即launch/xxx.launch.py
# OS库:将上面两个路径合成一个/home/m/fishbot/src/fishbot_bringup/launch/xxx.launch.py,
# 即xxx.launch.py文件的路径
import os
from launch_ros.substitutions import FindPackageShare
# 导入启动另一个launch文件所需要的库
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource

def generate_launch_description():
    """launch内容描述函数,由ros2 launch 扫描调用"""
    # 构造被包含launch文件的路径,
    # 比如:/home/m/fishbot/src/fishbot_bringup/launch/xxx.launch.py(见上面的分析)
    # 找到指定名字的包,得到包的路径,例如/home/m/fishbot/src/fishbot_bringup
    yolov5_ros2_pkg_share = FindPackageShare(package='yolov5_ros2').find('yolov5_ros2')
    # 将两个路径合成一个/home/m/fishbot/src/fishbot_bringup/launch/xxx.launch.py,
    # 即xxx.launch.py文件的路径        
    yolov5_ros2_launch_file_path = os.path.join(yolov5_ros2_pkg_share, 'launch', 'yolov5_ros2.launch.py')    
    
    camera_driver_pkg_share = FindPackageShare(package='fishbot_camera').find('fishbot_camera')
    camera_driver_launch_file_path = os.path.join(camera_driver_pkg_share, 'launch', 'camera_driver.launch.py')    

    # 启动另一个launch的必要格式
    yolov5_ros2_launch_file = IncludeLaunchDescription(
        # yolov5_ros2_launch_file_path为yolov5_ros2包下launch文件的路径
        PythonLaunchDescriptionSource(yolov5_ros2_launch_file_path),
        # 可以在这里传递参数,例如:launch_arguments={'arg_name': 'arg_value'}.items(),
    )

    camera_driver_launch_file = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(camera_driver_launch_file_path),
        # 可以在这里传递参数,例如:launch_arguments={'arg_name': 'arg_value'}.items(),
    )
    
    # 创建LaunchDescription对象launch_description,用于描述launch文件
    ld = LaunchDescription()
    ld.add_action(yolov5_ros2_launch_file)
    ld.add_action(camera_driver_launch_file)

    # 返回让ROS2根据launch描述执行节点
    return ld

2、豪华大礼包——启动多个launch文件的所有配置

from launch import LaunchDescription
import os
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch_ros.substitutions import FindPackageShare

def generate_launch_description():
    """launch内容描述函数,由ros2 launch 扫描调用"""
    yolov5_ros2_pkg_share = FindPackageShare(package='yolov5_ros2').find('yolov5_ros2')
    yolov5_ros2_launch_file_path = os.path.join(yolov5_ros2_pkg_share, 'launch', 'yolov5_ros2.launch.py')    

    another-launch = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(yolov5_ros2_launch_file_path),
        # 传递参数
        launch_arguments={'arg-name': example-arg}.items()
    )
    ld.add_action(another-launch)
    # 返回让ROS2根据launch描述执行节点
    return ld

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值