Launch 文件允许您同时启动和配置多个包含 ROS 2 节点的可执行文件。
launch文件编写
创建文件夹用来存储launch文件
mkdir launch
创建launch文件
touch launch/first.launch.py
编写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’, ) ])
4. 进入launch文件夹启动launch文件```bashros2 launch turtlesim_mimic_launch.py
python工程包中launch文件编写
- 在python工程包下创建launch文件夹编写launch文件
- 在setup.py中配置 ```python import os from glob import glob from setuptools import setup
package_name = ‘my_package’
setup(
# Other parameters ...data_files=[# ... Other data files# Include all launch files. This is the most important line here!(os.path.join('share', package_name), glob('launch/*.launch.py'))]
)
启动launch文件```bashros2 launch 包名 launch文件名
指定节点名和命名空间
Node(package='turtlesim',namespace='tutle',executable='turtlesim_node',name='tutrtle1')
topic重定向
Node( # 配置一个节点的启动package='turtlesim', # 节点所在的功能包namespace='turtlesim2', # 节点所在的命名空间executable='turtlesim_node', # 节点的可执行文件名name='sim', # 对节点重新命名remappings=[ # 资源重映射列表('/turtlesim2/turtle1/cmd_vel', '/my_cmd_vel'), # 将/input/pose话题名修改为/turtlesim1/turtle1/pose]),
param参数修改
定义参数:
from launch import LaunchDescription # launch文件的描述类from launch.actions import DeclareLaunchArgument # 声明launch文件内使用的Argument类from launch.substitutions import LaunchConfiguration, TextSubstitutionfrom launch_ros.actions import Node # 节点启动的描述类def generate_launch_description(): # 自动生成launch文件的函数background_r_launch_arg = DeclareLaunchArgument('background_r', default_value=TextSubstitution(text='0') # 创建一个Launch文件内参数(arg)background_r)background_g_launch_arg = DeclareLaunchArgument('background_g', default_value=TextSubstitution(text='84') # 创建一个Launch文件内参数(arg)background_g)background_b_launch_arg = DeclareLaunchArgument('background_b', default_value=TextSubstitution(text='122') # 创建一个Launch文件内参数(arg)background_b)
使用param参数:
return LaunchDescription([ # 返回launch文件的描述信息background_r_launch_arg, # 调用以上创建的参数(arg)background_g_launch_arg,background_b_launch_arg,Node( # 配置一个节点的启动package='turtlesim',executable='turtlesim_node', # 节点所在的功能包name='sim', # 对节点重新命名parameters=[{ # ROS参数列表'background_r': LaunchConfiguration('background_r'), # 创建参数background_r'background_g': LaunchConfiguration('background_g'), # 创建参数background_g'background_b': LaunchConfiguration('background_b'), # 创建参数background_b}]),])
加载yaml参数文件
- 在package下创建config文件夹
在config下创建turtlesim.yaml
/turtlesim:ros__parameters:background_b: 0background_g: 0background_r: 0
配置setup.py
(os.path.join('share', package_name, 'config'), glob(os.path.join('config', '*.*'))),
param文件路径
from ament_index_python.packages import get_package_share_directory # 查询功能包路径的方法config = os.path.join( # 找到参数文件的完整路径get_package_share_directory('launch_pkg'),'config','turtlesim.yaml')
配置节点param文件
Node( # 配置一个节点的启动package='turtlesim', # 节点所在的功能包executable='turtlesim_node', # 节点的可执行文件名namespace='turtlesim2', # 节点所在的命名空间name='sim', # 对节点重新命名parameters=[config] # 加载参数文件)
包含launch文件
找到另外一个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’]) )
2. launch文件的描述中```pythonreturn LaunchDescription([parameter_yaml,Node(package='rviz2',executable='rviz2',)])
