ROS 2Launch文件允许您同时启动和配置包含ROS 2节点的多个可执行文件。

一、为什么需要Launch文件

1、需要启动的节点太多,手动启动太麻烦
2、客户端服务端通信时,需要相互依赖(顺序启动)
3、在描述可重复使用的launch文件时,用参数文件yaml替换可用于提供更大的灵活性
4、启动配置好的RViz
5、在新版(ros2)的launch文件可以使用python编写,可以加入规则集(if)

二、launch文件编写

1、在功能包新建一个launch的文件夹

abe67df1-7d7d-4109-8433-65fa0fb2460d

2、新建launch.py(名称自定)文件,我以nat.launch.py为例

eff5c48d-788c-417b-b079-d1e8daa894fd

内容为:

from launch import LaunchDescription  #引入功能函数库
import launch_ros.actions 

def generate_launch_description():  #默认函数名
   '''
 程序名称变量 = 函数打开(
            package='功能包名', 
            executable='要启动程序名',  #(在python功能被,setup.py中你已经定义了程序名,不用后缀)
            name='usb_cam', #(随便名称)(可选)
           #arguments=['0', '0', '0','0', '0','0','子坐标','父坐标'] TF坐标定义(可选) 
            arguments=['0', '0', '0','0', '0','0','yolo_link','base_link']
       )        
   '''
    usb_cam = launch_ros.actions.Node(
            package='usb_cam', 
            executable='usb_cam_node_exe', 
            name='usb_cam',
    )        
    #这个程序是我自己的,使用前需要更改或者删掉
    nat_link = launch_ros.actions.Node(
            package='nat_ros2', 
            executable='nat_node', 
            name='nat',
    )
    
    ld_pkg = LaunchDescription()    #赋值对象

    ld_pkg.add_action(usb_cam)      #调用函数
    ld_pkg.add_action(nat_link)
    
    return ld_pkg

3、回到luanch文件夹里面打开终端,输入以下命令行

ros2 launch nat.launch.py

在终端检测是否有问题727bba95-5924-4c41-93d9-4171fe2b9ceb

4、如果已经可以在终端使用成功,就要在setup.py文件添加一行参数,让这个launch文件可以全局使用

from setuptools import find_packages, setup
from glob import glob    #添加库文件
import os                #添加库文件
package_name = 'nat_ros2'

setup(
    name=package_name,
    version='0.0.0',
    packages=find_packages(exclude=['test']),
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
        #添加这一行,直接复制就可以了
        (os.path.join('share',package_name,'launch'),glob('launch/*.launch.py')),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='xp01',
    maintainer_email='xp01@todo.todo',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
            'nat_ros2 = nat_ros2.nat:main',
            'nat_node = nat_ros2.nat_node:main',
            'nat_po = nat_ros2.nat_po:main'  
            
        ],
    },
)

多launch文件启动:ROS2——启动多个launch文件_ros launch文件启动另一个launch文件-CSDN博客