1. 学习目标
-
什么是 ROS2 Launch
-
Launch 为什么存在
-
Launch 文件的基本结构是什么
-
如何使用 Launch 启动多个 Node
-
如何在 Launch 中加载参数
2. 什么是 Launch
Launch 是:
ROS2 的系统启动工具
用于:
启动多个 Node
加载参数
设置环境
管理系统启动
简单理解:
Launch = 系统启动脚本
3. 为什么需要 Launch
假设机器人系统:
机器人系统
├── lidar_node
├── camera_node
├── slam_node
├── navigation_node
└── motor_node
如果手动启动:
ros2 run lidar lidar_node
ros2 run camera camera_node
ros2 run slam slam_node
ros2 run navigation navigation_node
问题:
步骤复杂
容易出错
难维护
ROS2 Launch
ros2 launch robot_system robot.launch.py
一次启动整个系统
4. Launch 系统结构
Launch 文件通常防在:
package
└── launch
└── robot.launch.py
Launch 文件结构:
launch
└── robot.launch.py
5. Launch 文件类型
ROS2 支持三种 Launch 文件:
| 类型 | 推荐程度 |
|---|---|
| Python | 推荐 |
| XML | 较少 |
| YAML | 较少 |
ROS2 官方推荐:
Python Launch
因为更灵活。
6. Launch 文件基本结构
一个 Launch 文件结构:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='my_package',
executable='my_node',
name='my_node'
)
])
结构说明:
| 部分 | 作用 |
|---|---|
| LaunchDescription | Launch 描述 |
| Node | 启动节点 |
| package | 包名 |
| executable | 节点程序 |
| name | 节点名称 |
7. 启动多个 Node
Launch 可以同时启动多个节点。
示例:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='lidar_pkg',
executable='lidar_node',
name='lidar'
),
Node(
package='slam_pkg',
executable='slam_node',
name='slam'
),
Node(
package='nav_pkg',
executable='navigation_node',
name='navigation'
)
])
运行:
ros2 launch robot_system robot.launch.py
系统同时启动三个 Node。
8. Launch 加载参数
Launch 可以加载参数文件。
例如:
Node(
package='nav_pkg',
executable='navigation_node',
parameters=['config/nav.yaml']
)
配置文件:
navigation_node:
ros__parameters:
max_speed: 2.0
goal_tolerance: 0.5
9. Launch 设置参数
也可以直接在 Launch 中设置参数:
Node(
package='robot_pkg',
executable='robot_node',
parameters=[
{"max_speed": 2.0},
{"robot_name": "robot1"}
]
)
10. Launch 设置 Topic 重映射
Launch 可以修改 Topic 名称。
例如:
Node(
package='camera_pkg',
executable='camera_node',
remappings=[
('/image', '/camera/image_raw')
]
)
作用:
/image → /camera/image_raw
11. Launch 系统启动流程
系统启动流程:
Launch File
|
v
创建 Node
|
v
加载参数
|
v
启动 Node
系统结构:
launch
|
v
node1
node2
node3
12. 一个机器人 Launch 示例
完整机器人系统:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='lidar_driver',
executable='lidar_node'
),
Node(
package='camera_driver',
executable='camera_node'
),
Node(
package='slam_pkg',
executable='slam_node'
),
Node(
package='navigation_pkg',
executable='nav_node'
)
])
启动:
ros2 launch robot robot.launch.py
13. Launch 调试工具
查看运行节点:
ros2 node list
查看 Topic:
ros2 topic list
查看参数:
ros2 param list
14. Launch 系统总结
Launch 本质:
Launch = 系统启动脚本
作用:
启动多个 Node
加载参数
管理系统启动
系统结构:
launch file
|
v
node1
node2
node3
15. Q&A
-
Launch 为什么存在?
-
Launch 文件的作用是什么?
-
Launch 如何启动多个 Node?
-
Launch 如何加载参数?
-
Launch 为什么适合机器人系统?