拓扑导航 vs 几何导航的具体实现位置

让我明确指出这两种导航方式在代码中的具体实现位置。

拓扑导航 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

```

**两者协同工作**:

  1. Mid Planner 在 GVD 拓扑空间规划全局路径

  2. Local Planner 跟随 Mid 路径,在 TSDF 几何空间执行精细避障

  3. 形成**分层导航架构**:拓扑层 + 几何层

相关推荐
我真不是小鱼14 分钟前
cpp刷题打卡记录27——无重复字符的最长子串 & 找到字符串中所有字母的异位词
数据结构·c++·算法·leetcode
XuecWu318 分钟前
原生多模态颠覆Scaling Law?解读语言“参数需求型”与视觉“数据需求型”核心差异
人工智能·深度学习·算法·计算机视觉·语言模型
We་ct18 分钟前
LeetCode 69. x 的平方根:两种解法详解
前端·javascript·算法·leetcode·typescript·平方
一直不明飞行20 分钟前
C++:string,写法s.find(‘@‘) != s.end()是否有问题
开发语言·c++·算法
Proxy_ZZ032 分钟前
打造自己的信道编码工具箱——Turbo、LDPC、极化码三合一
c语言·算法·信息与通信
wayz1134 分钟前
21天机器学习核心算法学习计划(量化方向)
学习·算法·机器学习
穿条秋裤到处跑35 分钟前
每日一道leetcode(2026.04.09):区间乘法查询后的异或 II
算法·leetcode
超级大只老咪42 分钟前
一维度前缀和解题通用模板(java)
java·开发语言·算法
weixin_513449961 小时前
walk_these_ways项目学习记录第十篇(通过行为多样性 (MoB) 实现地形泛化)--从仿真到部署
人工智能·学习·算法
小欣加油1 小时前
leetcode 42 接雨水
c++·算法·leetcode·职场和发展