This commit is contained in:
2026-08-05 18:17:25 +08:00
parent 61796dfa9f
commit b52cee9e39
34 changed files with 866 additions and 309 deletions
+40 -19
View File
@@ -248,22 +248,23 @@ bash scripts/launch.sh pubsub_launch 30
# 第 2 个参数是运行时长(秒);空着 = 一直跑
```
**预期输出**:
**预期输出**(节点名是 `bringup/launch/pubsub_launch.py``name=` 字段决定的):
```
[INFO] [launch]: All log files can be found below /root/.ros/log/2026-08-03-...
[INFO] [launch]: All log files can be found below /root/.ros/log/...
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [talker-1]: process started with pid [56]
[INFO] [listener-2]: process started with pid [58]
[INFO] [talker-3]: process started with pid [60]
[INFO] [listener-4]: process started with pid [62]
[talker-1] [INFO] [...] talker_py started -> topic=chatter, period=500ms
[listener-2] [INFO] [...] listener_py subscribed <- chatter
[talker-3] [INFO] [...] talker_cpp started -> topic=chatter, period=500ms
[listener-4] [INFO] [...] listener_cpp subscribed <- chatter
[listener-2] [INFO] [...] recv: "Hello from PY, seq=0"
[listener-4] [INFO] [...] recv: "Hello from C++, seq=0"
[listener-4] [INFO] [...] recv: "Hello from PY, seq=0" ← **跨语言互通!**
[listener-2] [INFO] [...] recv: "Hello from C++, seq=0" ← **跨语言互通!**
[INFO] [chatter_publisher-1]: process started with pid [2656]
[INFO] [chatter_publisher_cpp-2]: process started with pid [2658]
[INFO] [chatter_subscriber-3]: process started with pid [2660]
[INFO] [chatter_subscriber_cpp-4]: process started with pid [2662]
[chatter_publisher_cpp-2] [INFO] [...] ChatterPublisher started: rate=2.00 Hz, topic="chatter"
[chatter_publisher-1] [INFO] [...] ChatterPublisher started: rate=2.00 Hz, topic="chatter"
[chatter_subscriber-3] [INFO] [...] ChatterSubscriber subscribed: topic="chatter"
[chatter_subscriber_cpp-4] [INFO] [...] ChatterSubscriber subscribed: topic="chatter"
[chatter_subscriber-3] [INFO] [...] recv #0: "Hello from PY, seq=0"
[chatter_subscriber_cpp-4] [INFO] [...] recv #0: "Hello from C++, seq=0"
[chatter_subscriber-3] [INFO] [...] recv #1: "Hello from C++, seq=0" ← 跨语言互通
[chatter_subscriber_cpp-4] [INFO] [...] recv #1: "Hello from PY, seq=1" ← 跨语言互通
...
```
**Ctrl+C** 退出。
@@ -278,15 +279,13 @@ docker exec ros2_dev bash -lc "source /opt/ros/humble/setup.bash && source /root
**预期输出**:
```
/chatter
/joint_states
/parameter_events
/rosout
/tf
```
**看 chatter 频率**:
```bash
docker exec ros2_dev bash -lc "source /opt/ros/humble/setup.bash && source /root/ros2_ws/install/setup.bash && ros2 topic hz /chatter --no-daemon"
docker exec ros2_dev bash -lc "source /opt/ros/humble/setup.bash && source /root/ros2_ws/install/setup.bash && ros2 topic hz /chatter"
```
**预期**:
@@ -295,7 +294,7 @@ average rate: 4.000
min: 0.250s max: 0.260s std dev: 0.00302s window: 10
```
(4Hz = 2 talker × 2Hz)
(4Hz = 2 publisher × 2Hz)
### 5.3 看通信拓扑(可视化)
@@ -380,7 +379,7 @@ source .venv/bin/activate
- [ ] `docker ps` 看到 `ros2_dev` 容器 `Up`
- [ ] `docker exec ros2_dev echo hello` 输出 `hello`
- [ ] `bash scripts/build.sh` 12 packages 全 build 成功
- [ ] `bash scripts/test.sh` 全过(12 packages / 78 tests, 0 failed)
- [ ] `bash scripts/test.sh` 全过(12 packages / 82 tests, 0 failed)
- [ ] `bash scripts/launch.sh pubsub_launch 30` 启动 4 节点
- [ ] `docker exec ros2_dev bash -c "ros2 topic list"` 看到 `/chatter`
- [ ] `docker exec ros2_dev bash -c "ros2 topic hz /chatter --no-daemon"` 显示 ~4Hz
@@ -399,6 +398,28 @@ source .venv/bin/activate
- Win/macOS:启动 Docker Desktop,等右下角图标稳定
- Linux:`sudo systemctl start docker`
### Q1.4: `ros2 topic info` 显示 Publisher count: 4(应该是 2)
**原因**:`bash scripts/launch.sh pubsub_launch forever` 或多次调试后,launch fork 出的 `chatter_publisher_*` 子进程 reparent 到容器 PID 1,下次启动 launch 又起 2 个,累计 4 个。
**解决**:
```bash
docker exec ros2_dev bash /root/ros2_ws/scripts/clean_ros.sh
```
### Q1.5: `docker compose up` 报 `Pool overlaps with other one on this address space`
```
Network ros2_ros2_net Error Error response from daemon:
invalid pool request: Pool overlaps with other one on this address space
failed to create network ros2_ros2_net
```
**原因**:compose project 名 `ros2` 让网络名前缀成 `ros2_ros2_net`,但仓库里手动(或上次启动)已经创建了 `ros2_net`,子网重叠 daemon 拒绝。
**解决 1(推荐)**:绕过 compose,直接走 docker run(参考 Step 3)。
**解决 2**:
```bash
docker rm -f ros2_dev
docker network rm ros2_net
docker compose -p ros2 -f docker/docker-compose.yml up -d
```
### Q2: 构建镜像很慢,卡在 `pulling image`
**原因**: 网络慢 / 在国内
**解决**: