让我明确指出这两种导航方式在代码中的具体实现位置。
拓扑导航 vs 几何导航的具体实现位置
1. **拓扑导航:基于 GVD Place 节点的中层规划**
实现文件
`@/home/jiayuliang/WS/CMU_VLFM/Active_Semantic/src/exploration/scripts/mid_planning.py:20-99`
关键代码
**订阅 GVD 占用栅格**(第 33-36 行):
```python
grid_topics = [
f"{self.config.OCCUPANCY_GRID_TOPIC_PREFIX}{i}/gvd/occupancy"
for i in range(self.config.OCCUPANCY_GRAPH_COUNT)
]
```
**输入话题**:
-
`/clio_node/graph0/gvd/occupancy`
-
`/clio_node/graph1/gvd/occupancy`
-
...(根据 `OCCUPANCY_GRAPH_COUNT` 配置)
**输出**:
-
发布路径到:`/planned_mid_path`(第 31 行)
-
发布合并地图到:`/gvd_merged_map`(第 24 行)
**核心特点**:
-
✅ 使用 **GVD (Generalized Voronoi Diagram)** 占用栅格
-
✅ GVD 基于 **Place 节点**生成(自由空间骨架)
-
✅ 在拓扑空间中规划,避开障碍物中心线
-
✅ 合并多个 Scene Graph 的 GVD 地图
2. **几何导航:基于 TSDF 的局部避障**
实现文件
`@/home/jiayuliang/WS/CMU_VLFM/Active_Semantic/src/exploration/scripts/local_planning.py:19-98`
关键代码
**订阅 TSDF 占用栅格**(第 33-36 行):
```python
grid_topics = [
f"{self.config.OCCUPANCY_GRID_TOPIC_PREFIX}{i}/tsdf/occupancy"
for i in range(self.config.OCCUPANCY_GRAPH_COUNT)
]
```
**输入话题**:
-
`/clio_node/graph0/tsdf/occupancy`
-
`/clio_node/graph1/tsdf/occupancy`
-
...(根据 `OCCUPANCY_GRAPH_COUNT` 配置)
**输出**:
-
发布路径到:`/planned_local_path`(第 31 行)
-
发布膨胀地图到:`/inflated_map`(第 23 行)
**核心特点**:
-
✅ 使用 **TSDF (Truncated Signed Distance Field)** 占用栅格
-
✅ TSDF 提供精确的几何距离信息
-
✅ 执行障碍物膨胀([merge_and_inflate_grid](cci:1://file:///home/jiayuliang/WS/CMU_VLFM/Active_Semantic/src/exploration/scripts/local_planning.py:174:4-286:30),第 49 行)
-
✅ 局部精细避障规划
对比总结
| 特性 | 拓扑导航(Mid Planner) | 几何导航(Local Planner) |
|------|------------------------|--------------------------|
| **文件** | [mid_planning.py](cci:7://file:///home/jiayuliang/WS/CMU_VLFM/Active_Semantic/src/exploration/scripts/mid_planning.py:0:0-0:0) | [local_planning.py](cci:7://file:///home/jiayuliang/WS/CMU_VLFM/Active_Semantic/src/exploration/scripts/local_planning.py:0:0-0:0) |
| **数据源** | **GVD 占用栅格** | **TSDF 占用栅格** |
| **话题** | `/*/gvd/occupancy` | `/*/tsdf/occupancy` |
| **规划空间** | Place 节点拓扑空间 | 几何网格空间 |
| **输出路径** | `/planned_mid_path` | `/planned_local_path` |
| **输出地图** | `/gvd_merged_map` | `/inflated_map` |
| **特点** | 全局拓扑路径 | 局部避障路径 |
| **障碍物处理** | 基于 Voronoi 骨架 | 基于距离场 + 膨胀 |
数据流
```
Scene Graph (Clio)
├─→ GVD Layer (Place 节点) → /gvd/occupancy → Mid Planner → /planned_mid_path
└─→ TSDF Layer (几何网格) → /tsdf/occupancy → Local Planner → /planned_local_path
```
**两者协同工作**:
-
Mid Planner 在 GVD 拓扑空间规划全局路径
-
Local Planner 跟随 Mid 路径,在 TSDF 几何空间执行精细避障
-
形成**分层导航架构**:拓扑层 + 几何层