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文件
```bash
ros2 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文件
```bash
ros2 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, TextSubstitution
from 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: 0
background_g: 0
background_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文件的描述中
```python
return LaunchDescription([
parameter_yaml,
Node(
package='rviz2',
executable='rviz2',
)
])