• 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
  • 相关阅读:
    【数据库——MySQL(实战项目1)】(2)图书借阅系统
    在写windows C++代码的时候,从代码安全角度考虑,我们应该注意什么?
    kmp算法要点和难点具体应用场景
    其实MyBatis的插件机制可以帮我们解决工作很多问题,建议收藏
    迟到的秋招经验分享贴,希望能帮到大家
    【面试普通人VS高手系列】volatile关键字有什么用?它的实现原理是什么?
    Java并发工具类:Semaphore
    LeetCode 899. 有序队列
    离线方式安装高可用RKE2 (版本: v1.22.13+rke2r1)记录
    CSS之标准流(普通流)、浮动以及清除浮动的方法
  • 原文地址:https://blog.csdn.net/Raine_Yang/article/details/126106507