4.0 KiB
4.0 KiB
bringup — 跨包 launch 聚合(11 节点一键启动)
最后一个包:整合所有 demo 一键启动。
预计学习时间:30 分钟。
这是什么?
bringup 包专门用来跨包启动多个节点。ROS2 项目一般会有一个 bringup 包负责"启动整个机器人"。
典型用法:
ros2 launch bringup full_demo_launch.py
一个命令启动所有 11 个节点(模拟整个机器人系统)。
🎯 学完之后你能做什么?
- ✅ 用
IncludeLaunchDescription复用其他包的 launch - ✅ 用
FindPackageShare找其他包的资源路径 - ✅ 写一个聚合 launch,启动整个系统
🚀 跑起来
一键启动 11 节点
source /opt/ros/humble/setup.bash
source /root/ros2_ws/install/setup.bash
ros2 launch bringup full_demo_launch.py
预期:11 个节点同时跑,看到各种 Topic/Service/Action 交互。
单独启动某个 launch
# 只启动 Topic 演示(4 节点)
ros2 launch bringup pubsub_launch.py
# 只启动机器人 TF2 演示(3 节点)
ros2 launch bringup robot_launch.py
📁 文件结构
src/bringup/
├── launch/
│ ├── full_demo_launch.py # 启动 11 节点
│ ├── pubsub_launch.py # Topic 演示(4 节点)
│ ├── service_launch.py # Service 演示
│ ├── action_launch.py # Action 演示
│ ├── robot_launch.py # TF2 + URDF 演示
│ ├── vision_launch.py # 图像演示
│ └── params_launch.py # 参数演示
├── setup.py
└── README.md
📖 核心代码(IncludeLaunchDescription)
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
# 找其他包的 share 目录
py_pubsub_dir = get_package_share_directory('py_pubsub')
return LaunchDescription([
# 启动 py_pubsub 的 launch
IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(py_pubsub_dir, 'launch', 'pubsub_launch.py')
),
launch_arguments={'publish_rate_hz': '2.0'}.items(), # 覆盖参数
),
# 启动 cpp_pubsub
IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(get_package_share_directory('cpp_pubsub'), 'launch', 'pubsub_cpp_launch.py')
),
),
# ... 其他包
])
关键 API:
get_package_share_directory('pkg_name'):拿其他包的 share 路径IncludeLaunchDescription:复用其他 launchlaunch_arguments={'param': 'value'}.items():覆盖参数
⚠️ 命名约束
ROS2 系统有一个 launch 包(ros-humble-launch),所以包名不能叫 launch(会冲突)。本仓库用 bringup 这个名字(机器人行业惯例)。
🧪 跑测试
colcon test --packages-select bringup
预期:bringup 没有 pytest/gtest(launch 包不写测试代码,只整合)。
📚 深入学习
- doc/70-launch.md — launch 文件深度
🎉 学完整个仓库了!
接下来:
- 做项目:用本仓库的模板做自己的 ROS2 项目
- 学 Level 2:看 doc/99-embodied-ai.md,学 ros2_control + MoveIt2 + Gazebo
- 上真实机器人:看 doc/100-embedded-deployment.md,PC + RDK X5 + RK3506 三机部署
📍 学习路径导航
| ⏮ 上一个 | 🏠 当前位置 | ⏭ 下一个 |
|---|---|---|
| py_overlay_dds — Python DDS + overlay | bringup — 跨包 launch 聚合 | (学完整个仓库 🎉) |
📍 完整 12 包学习顺序见 主 README