• ROS2自学笔记:launch文件完整编写流程


    1 创建launch文件夹
    launch文件可以放在任何文件夹下。对于一个对应节点的launch文件可以放在该节点功能包下,但是如果一个launch文件对应多个节点,最好在工作空间里新建一个功能包(ament_cmake和ament_python都可以,只是之后配置会有一点不同)
    这里拿ament_cmake功能包举例

    在功能包initiator下创建文件夹launch,launch文件夹下创建launch文件,同时删除功能包里原有src和include文件夹
    在这里插入图片描述
    2 编写launch文件
    一个简单示例:

    from launch import LaunchDescription
    from launch_ros.actions import Node
    def generate_launch_description():
        ld = LaunchDescription()
        serial_node = Node(
            package = "communicator",
            executable = "serial_node",
        )
        processor_node = Node(
            package = "processor",
            executable = "processor_node"
        )
        webcam_node = Node(
            package = "webcam",
            executable = "camera_node",
        )
        ld.add_action(serial_node)
        ld.add_action(processor_node)
        ld.add_action(webcam_node)
        return ld
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1 from launch import LaunchDescription
    from launch_ros.actions import Node
    引入必要库
    2 def generate_launch_description():
    任何launch文件必须包含该函数,该函数会返回一个launchDescription对象
    3 serial_node = Node(
    package = “communicator”,
    executable = “serial_com”,
    )
    添加要启动的节点,必须配置节点对应功能包和可执行文件名称。节点还有重定向,添加命名空间,设置参数等设置,详见以下文章:

    https://blog.csdn.net/Raine_Yang/article/details/125885266?spm=1001.2014.3001.5501

    (注:可执行文件名称和节点名称一致,而不是和节点python程序名称一致。如我这里有一个节点camera_node在webcam功能包,webcam文件夹,webcam Python程序里,因此pckage为webcam,executable为camera_node)

    4 ld.add_action(serial_node)
    将节点加入到LaunchDescription里

    3 配置依赖项
    在launch文件功能包的package.xml文件下对launch文件要启动的节点所对应功能包进行声明

      <exec_depend>communicatorexec_depend>
      <exec_depend>webcamexec_depend>
      <exec_depend>processorexec_depend>
    
    • 1
    • 2
    • 3

    对应ament_cmake功能包,在CMakeLists.txt find_package(ament_cmake REQUIRED)下面加入以下语句以定位launch文件夹位置

    install(DIRECTORY
      launch
      DESTINATION share/${PROJECT_NAME}
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    对于ament_python功能包在setup.py添加以下语句:

    from setuptools import setup
    import os
    from glob import glob
    
    ...
    
        data_files=[
            ...
            (os.path.join('share', package_name), glob('launch/*.launch.py'))
        ],
    
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    详谈判断点在多边形内的七种方法
    FastAPI 学习之路(十八)表单与文件
    小企业数字化经营模式是什么?
    23.Visitor访问者(行为型模式)
    Python爬虫:爬虫所需要的爬虫代理ip是什么?
    智能座舱系列一:智能化基础平台及架构
    亚商投资顾问 早餐FM/0913
    字节一面:深拷贝浅拷贝的区别?如何实现一个深拷贝?
    Banana Pi BPI-W3(ArmSoM-W3) RK3588编解码之MPP环境配置
    virsh管理虚拟机的命令行工具
  • 原文地址:https://blog.csdn.net/Raine_Yang/article/details/126106507