Files
ROS2_learn/src/bringup/README.md
T

4.0 KiB

bringup — 跨包 launch 聚合(11 节点一键启动)

最后一个包:整合所有 demo 一键启动

预计学习时间:30 分钟。


这是什么?

bringup 包专门用来跨包启动多个节点。ROS2 项目一般会有一个 bringup 包负责"启动整个机器人"。

典型用法:

ros2 launch bringup full_demo_launch.py

一个命令启动所有 11 个节点(模拟整个机器人系统)。


🎯 学完之后你能做什么?

  1. IncludeLaunchDescription 复用其他包的 launch
  2. FindPackageShare 找其他包的资源路径
  3. 写一个聚合 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:复用其他 launch
  • launch_arguments={'param': 'value'}.items():覆盖参数

⚠️ 命名约束

ROS2 系统有一个 launch 包(ros-humble-launch),所以包名不能叫 launch(会冲突)。本仓库用 bringup 这个名字(机器人行业惯例)。


🧪 跑测试

colcon test --packages-select bringup

预期:bringup 没有 pytest/gtest(launch 包不写测试代码,只整合)。


📚 深入学习


🎉 学完整个仓库了!

接下来:

  1. 做项目:用本仓库的模板做自己的 ROS2 项目
  2. 学 Level 2:看 doc/99-embodied-ai.md,学 ros2_control + MoveIt2 + Gazebo
  3. 上真实机器人:看 doc/100-embedded-deployment.md,PC + RDK X5 + RK3506 三机部署

📍 学习路径导航

⏮ 上一个 🏠 当前位置 ⏭ 下一个
py_overlay_dds — Python DDS + overlay bringup — 跨包 launch 聚合 (学完整个仓库 🎉)

📍 完整 12 包学习顺序见 主 README