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

launch文件编写

  1. 创建文件夹用来存储launch文件

    1. mkdir launch
  2. 创建launch文件

    1. touch launch/first.launch.py
  3. 编写launch文件 ```python from launch import LaunchDescription from launch_ros.actions import Node

def generate_launch_description(): return LaunchDescription([ Node( package=’turtlesim’, executable=’turtlesim_node’, ), Node( package=’turtlesim’, executable=’turtlesim_node’, ) ])

  1. 4. 进入launch文件夹启动launch文件
  2. ```bash
  3. ros2 launch turtlesim_mimic_launch.py

python工程包中launch文件编写

  1. 在python工程包下创建launch文件夹编写launch文件
  2. 在setup.py中配置 ```python import os from glob import glob from setuptools import setup

package_name = ‘my_package’

setup(

  1. # Other parameters ...
  2. data_files=[
  3. # ... Other data files
  4. # Include all launch files. This is the most important line here!
  5. (os.path.join('share', package_name), glob('launch/*.launch.py'))
  6. ]

)

  1. 启动launch文件
  2. ```bash
  3. ros2 launch 包名 launch文件名

指定节点名和命名空间

  1. Node(
  2. package='turtlesim',
  3. namespace='tutle',
  4. executable='turtlesim_node',
  5. name='tutrtle1'
  6. )

topic重定向

  1. Node( # 配置一个节点的启动
  2. package='turtlesim', # 节点所在的功能包
  3. namespace='turtlesim2', # 节点所在的命名空间
  4. executable='turtlesim_node', # 节点的可执行文件名
  5. name='sim', # 对节点重新命名
  6. remappings=[ # 资源重映射列表
  7. ('/turtlesim2/turtle1/cmd_vel', '/my_cmd_vel'), # 将/input/pose话题名修改为/turtlesim1/turtle1/pose
  8. ]
  9. ),

param参数修改

定义参数:

  1. from launch import LaunchDescription # launch文件的描述类
  2. from launch.actions import DeclareLaunchArgument # 声明launch文件内使用的Argument类
  3. from launch.substitutions import LaunchConfiguration, TextSubstitution
  4. from launch_ros.actions import Node # 节点启动的描述类
  5. def generate_launch_description(): # 自动生成launch文件的函数
  6. background_r_launch_arg = DeclareLaunchArgument(
  7. 'background_r', default_value=TextSubstitution(text='0') # 创建一个Launch文件内参数(arg)background_r
  8. )
  9. background_g_launch_arg = DeclareLaunchArgument(
  10. 'background_g', default_value=TextSubstitution(text='84') # 创建一个Launch文件内参数(arg)background_g
  11. )
  12. background_b_launch_arg = DeclareLaunchArgument(
  13. 'background_b', default_value=TextSubstitution(text='122') # 创建一个Launch文件内参数(arg)background_b
  14. )

使用param参数:

  1. return LaunchDescription([ # 返回launch文件的描述信息
  2. background_r_launch_arg, # 调用以上创建的参数(arg)
  3. background_g_launch_arg,
  4. background_b_launch_arg,
  5. Node( # 配置一个节点的启动
  6. package='turtlesim',
  7. executable='turtlesim_node', # 节点所在的功能包
  8. name='sim', # 对节点重新命名
  9. parameters=[{ # ROS参数列表
  10. 'background_r': LaunchConfiguration('background_r'), # 创建参数background_r
  11. 'background_g': LaunchConfiguration('background_g'), # 创建参数background_g
  12. 'background_b': LaunchConfiguration('background_b'), # 创建参数background_b
  13. }]
  14. ),
  15. ])

加载yaml参数文件

  1. 在package下创建config文件夹
  2. 在config下创建turtlesim.yaml

    1. /turtlesim:
    2. ros__parameters:
    3. background_b: 0
    4. background_g: 0
    5. background_r: 0
  3. 配置setup.py

    1. (os.path.join('share', package_name, 'config'), glob(os.path.join('config', '*.*'))),
  4. param文件路径

    1. from ament_index_python.packages import get_package_share_directory # 查询功能包路径的方法
    2. config = os.path.join( # 找到参数文件的完整路径
    3. get_package_share_directory('launch_pkg'),
    4. 'config',
    5. 'turtlesim.yaml'
    6. )
  5. 配置节点param文件

    1. Node( # 配置一个节点的启动
    2. package='turtlesim', # 节点所在的功能包
    3. executable='turtlesim_node', # 节点的可执行文件名
    4. namespace='turtlesim2', # 节点所在的命名空间
    5. name='sim', # 对节点重新命名
    6. parameters=[config] # 加载参数文件
    7. )

    包含launch文件

  6. 找到另外一个launch文件 ```python

from launch_ros.actions import Node

import os

from ament_index_python.packages import get_package_share_directory # 查询功能包路径的方法

from launch import LaunchDescription # launch文件的描述类 from launch.actions import IncludeLaunchDescription # 节点启动的描述类 from launch.launch_description_sources import PythonLaunchDescriptionSource from launch.actions import GroupAction # launch文件中的执行动作 from launch_ros.actions import PushRosNamespace # ROS命名空间配置

parameter_yaml = IncludeLaunchDescription( # 包含指定路径下的另外一个launch文件 PythonLaunchDescriptionSource([os.path.join( get_package_share_directory(‘launch_pkg’)), ‘/first.launch.py’]) )

  1. 2. launch文件的描述中
  2. ```python
  3. return LaunchDescription([
  4. parameter_yaml,
  5. Node(
  6. package='rviz2',
  7. executable='rviz2',
  8. )
  9. ])