launch文件ros2
时间: 2025-06-19 18:11:27 浏览: 35
### ROS2 Launch 文件使用教程与示例
#### 什么是 Launch 文件?
Launch 文件用于启动多个节点和其他进程,简化复杂系统的配置和运行过程。通过定义一组动作(Actions),可以控制节点的启动顺序、参数传递以及其他依赖项。
---
#### 基本结构
一个典型的 ROS2 Launch 文件由 `LaunchDescription` 对象组成,该对象包含一系列的动作(Actions)。以下是基本语法:
```python
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
node_action = Node(
package='example_package',
executable='example_node',
name='example_node_name',
parameters=[{'param_name': 'value'}],
output='screen'
)
return LaunchDescription([node_action])
```
此代码片段展示了如何创建并返回一个简单的 Launch 描述符[^1]。
---
#### 调用其他 Launch 文件
可以通过 `IncludeLaunchDescription` 动作来嵌套调用其他的 Launch 文件。以下是一个例子:
```python
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
import os
from ament_index_python.packages import get_package_share_directory
def generate_launch_description():
pkg_dir = get_package_share_directory('my_package')
include_launch = IncludeLaunchDescription(
PythonLaunchDescriptionSource(os.path.join(pkg_dir, 'launch', 'other_launch_file.py'))
)
return LaunchDescription([include_launch])
```
这段代码演示了如何在一个 Launch 文件中加载另一个 Launch 文件的内容[^1]。
---
#### 定时器延迟启动节点
如果希望某个节点在特定时间之后再启动,可以使用 `TimerAction` 来实现延时效果:
```python
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import TimerAction
def generate_launch_description():
delayed_node = Node(
package='ros2_test',
executable='ros2_test_publisher_node',
name='ros2_test_publisher_node',
output='screen'
)
timer_action = TimerAction(period=5.0, actions=[delayed_node])
return LaunchDescription([timer_action])
```
这里展示了一个定时器,在等待 5 秒钟后再启动指定的节点[^1]。
---
#### 参数化 Launch 文件
可以在 Launch 文件中传入动态参数,并将其应用于不同的节点或操作。例如:
```python
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch.actions import DeclareLaunchArgument
from launch_ros.actions import Node
def generate_launch_description():
param_arg = DeclareLaunchArgument(
'param_name',
default_value='default_value',
description='A parameter to pass into the nodes.'
)
example_node = Node(
package='example_package',
executable='example_node',
parameters=[{
'dynamic_param': LaunchConfiguration('param_name')
}]
)
return LaunchDescription([
param_arg,
example_node
])
```
这个例子说明了如何声明命令行可选参数并通过它们调整节点行为[^1]。
---
#### 集成 Gazebo 的 Launch 文件
当需要集成 Gazebo 模拟环境时,通常会结合 `.sdf` 或 `.urdf` 文件一起工作。下面是一段常见的 Gazebo 启动脚本:
```xml
<launch>
<!-- 加载 Gazebo -->
<include file="$(find-pkg-share ros_gz_sim)/launch/gz_sim.launch.py">
<arg name="gz_args" value="-v 4 -r visualize_lidar.sdf"/>
</include>
<!-- 添加机器人模型到仿真环境中 -->
<node pkg="ros_gz_spawn" exec="spawn_entity.py"
args="-topic robot_description -entity my_robot"/>
</launch>
```
这是基于 XML 格式的 Launch 文件,适用于某些旧版工具链中的场景[^2]。
对于纯 Python 实现,则可能如下所示:
```python
from launch import LaunchDescription
from launch.actions import ExecuteProcess
from launch_ros.actions import Node
def generate_launch_description():
gazebo_cmd = ExecuteProcess(
cmd=['gz', 'sim', '-v', '4', '--pause', 'visualize_lidar.sdf'],
output='screen'
)
spawn_entity = Node(
package='ros_gz_utils',
executable='spawn_entity.py',
arguments=[
'-string', 'robot_description',
'-name', 'my_robot',
'-allow_renaming', 'true'
],
output='screen'
)
return LaunchDescription([
gazebo_cmd,
spawn_entity
])
```
以上代码实现了 Gazebo 的初始化及其机器人的加载[^2]。
---
阅读全文
相关推荐


















