# bringup — 跨包 launch 聚合(11 节点一键启动) > 最后一个包:**整合所有 demo 一键启动**。 > > 预计学习时间:30 分钟。 --- ## 这是什么? `bringup` 包专门用来**跨包启动多个节点**。ROS2 项目一般会有一个 `bringup` 包负责"启动整个机器人"。 **典型用法**: ```bash ros2 launch bringup full_demo_launch.py ``` 一个命令启动所有 11 个节点(模拟整个机器人系统)。 --- ## 🎯 学完之后你能做什么? 1. ✅ 用 `IncludeLaunchDescription` 复用其他包的 launch 2. ✅ 用 `FindPackageShare` 找其他包的资源路径 3. ✅ 写一个聚合 launch,启动整个系统 --- ## 🚀 跑起来 ### 一键启动 11 节点 ```bash 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 ```bash # 只启动 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) ```python 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`:复用其他 launch - `launch_arguments={'param': 'value'}.items()`:覆盖参数 --- ## ⚠️ 命名约束 ROS2 系统有一个 `launch` 包(`ros-humble-launch`),所以**包名不能叫 `launch`**(会冲突)。本仓库用 `bringup` 这个名字(机器人行业惯例)。 --- ## 🧪 跑测试 ```bash colcon test --packages-select bringup ``` **预期**:`bringup` 没有 pytest/gtest(launch 包不写测试代码,只整合)。 --- ## 📚 深入学习 - [doc/70-launch.md](../../doc/70-launch.md) — launch 文件深度 --- ## 🎉 学完整个仓库了! 接下来: 1. **做项目**:用本仓库的模板做自己的 ROS2 项目 2. **学 Level 2**:看 [doc/99-embodied-ai.md](../../doc/99-embodied-ai.md),学 ros2_control + MoveIt2 + Gazebo 3. **上真实机器人**:看 [doc/100-embedded-deployment.md](../../doc/100-embedded-deployment.md),PC + RDK X5 + RK3506 三机部署 --- ## 📍 学习路径导航 | ⏮ 上一个 | 🏠 当前位置 | ⏭ 下一个 | |---|---|---| | [py_overlay_dds — Python DDS + overlay](../py_overlay_dds/README.md) | **bringup — 跨包 launch 聚合** | (学完整个仓库 🎉) | 📍 完整 12 包学习顺序见 [主 README](../../README.md#-12-包推荐学习顺序)