docs(nav): 阅读路径导航 + 数字统一

This commit is contained in:
xs
2026-08-04 16:10:27 +08:00
parent 549d6b337e
commit 6338f3d36a
95 changed files with 3838 additions and 1260 deletions
+135 -42
View File
@@ -1,57 +1,150 @@
# bringup
# bringup — 跨包 launch 聚合(11 节点一键启动)
顶层 launch 聚合包。属于 Level 1 跨包集成层
> 最后一个包:**整合所有 demo 一键启动**
>
> 预计学习时间:30 分钟。
## 6 个 launch 文件
---
| 文件 | 启动节点 | 数量 |
|---|---|---|
| `pubsub_launch.py` | py_pubsub + cpp_pubsub 的 pub/sub | 4 |
| `service_launch.py` | add_two_ints_server | 1 |
| `action_launch.py` | fibonacci_action_server | 1 |
| `robot_launch.py` | URDF + JointState + TF(nested `cpp_robot_tf2`) | 3 |
| `vision_launch.py` | fake_camera + image_processor(nested `py_vision_demo`) | 2 |
| `full_demo_launch.py` | 上面所有组合 | **11** |
## 这是什么?
## 关键设计
- **不实现业务节点** — 只用 `IncludeLaunchDescription` 复用其他包的 launch
- **跨包嵌套** — `robot_launch.py` / `vision_launch.py``FindPackageShare` + `PythonLaunchDescriptionSource` 引用单包 launch
- **包名避让** — 包名是 `bringup`,**不是** `launch`(与 ROS2 系统包同名会冲突)
## 运行
`bringup` 包专门用来**跨包启动多个节点**。ROS2 项目一般会有一个 `bringup` 包负责"启动整个机器人"。
**典型用法**:
```bash
# 各 demo 单独启动
ros2 launch bringup pubsub_launch.py
ros2 launch bringup service_launch.py
ros2 launch bringup action_launch.py
ros2 launch bringup robot_launch.py
ros2 launch bringup vision_launch.py
# 全开(11 节点同时跑)
ros2 launch bringup full_demo_launch.py
```
## 验证端到端
一个命令启动所有 11 个节点(模拟整个机器人系统)。
---
## 🎯 学完之后你能做什么?
1. ✅ 用 `IncludeLaunchDescription` 复用其他包的 launch
2. ✅ 用 `FindPackageShare` 找其他包的资源路径
3. ✅ 写一个聚合 launch,启动整个系统
---
## 🚀 跑起来
### 一键启动 11 节点
```bash
# 跨包跨语言 Topic:PY + CPP 同时发,listener 都收到
ros2 launch bringup pubsub_launch.py
ros2 topic info /chatter -v
# 预期:Publication count: 2, Subscription count: 2
source /opt/ros/humble/setup.bash
source /root/ros2_ws/install/setup.bash
# Action
ros2 launch bringup action_launch.py
ros2 action send_goal /fibonacci example_interfaces/action/Fibonacci "{order: 6}" --feedback
# Service
ros2 launch bringup service_launch.py
ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 12, b: 30}"
# 预期: sum: 42
ros2 launch bringup full_demo_launch.py
```
## 深度学习
**预期**:11 个节点同时跑,看到各种 Topic/Service/Action 交互。
- 编程规范:[`doc/CODING_STYLE.md`](../doc/CODING_STYLE.md) §5.5
- launch 深度:[`doc/70-launch.md`](../doc/70-launch.md)
### 单独启动某个 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-包推荐学习顺序)