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

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

在功能包initiator下创建文件夹launch,launch文件夹下创建launch文件,同时删除功能包里原有src和include文件夹
ROS2自学笔记:launch文件完整编写流程_第1张图片
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 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>

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

install(DIRECTORY
  launch
  DESTINATION share/${PROJECT_NAME}
)

对于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'))
    ],

...

你可能感兴趣的:(实习记录,ROS2学习笔记,自动驾驶,人工智能,机器学习,python,linux)