- GAT与GCN结合的具体方式:README提到"采用GAT与GCN结合的方法对特征进行编码",但具体的结合方式(是串联、并联还是交替使用)需要进一步确认。
- 苏有的项目和论文:README提到"参考苏有的项目和论文",但我无法确定具体指哪个项目/论文,需要明确。
- 图节点特征维度:README说"每个节点包含N=10维信息",但后续列出的特征维度超过10维(位置2维 + 占据信息1维 + 访问信息1维 + 朝向信息36维 = 40维),这里的N=10是指什么?
- 地图编码器的输出维度:使用CNN/ViT/Swin Transformer编码地图后的输出维度需要确定。
- 节点产生方法中的C++代码转换:README提到需要将C++代码转为Python代码,但具体涉及哪些文件/功能需要明确。
- 各奖励项的权重:README提到"通过加权求和得到整体奖励函数",但具体的权重值或权重学习策略未明确。
- A*算法的具体应用:是在每次决策时都运行A*计算距离,还是预先计算?
- 隐式会和逻辑的具体修改:README提到"参考代码2和文章3的逻辑,并进行修改",具体修改方向是什么?
- 课程学习的具体策略:地图从简单到复杂的具体划分标准是什么?是按障碍物密度、地图大小还是其他指标?
- Ray分布式训练的具体配置:需要多少worker、使用什么资源分配策略?
- 决策频率:README说"到达下一目标点后再进行决策",这是否意味着动作是离散的(到达一个点后选择下一个点)?
- 地图数据集的格式:参考项目3和4中的地图是什么格式(图片、矩阵、其他)?
- 地图复杂度的量化标准:如何对地图进行排序?
zlr-explore是一个端到端的多无人机未知环境探索框架,核心特点是:
- 端到端学习:使用深度强化学习(SAC算法)直接从观测到动作映射
- 多智能体协作:支持可变数量的同构无人机进行协同探索
- 拓扑图表示:使用拓扑节点图作为观测空间的核心表示
- 受限视野:考虑有限FoV(Field of View)的深度相机感知模型
┌─────────────────────────────────────────────────────────────────┐
│ 核心网络架构 (SAC算法) │
├─────────────────────────────────────────────────────────────────┤
│ 编码器 (Encoder) → 解码器 (Decoder) │
│ ├── GAT + GCN 图特征提取 → ├── 节点选择头 │
│ ├── CNN/ViT 地图编码 → │ (选择下一个目标节点) │
│ └── 机器人状态编码 → └── 朝向选择头 │
│ (选择最佳FOV朝向) │
└─────────────────────────────────────────────────────────────────┘
拓扑节点图(核心输入):
- 节点生成:对前沿区域进行聚类 + 主成分分析(PCA)得到簇中心
- 节点特征(N=10维,需要确认):
- 位置信息 [x, y](归一化)
- 占据信息(当前无人机/其他无人机/未被占据)
- 访问信息(前沿节点/已探索)
- 朝向信息(36维向量,表示不同角度扇区的未知栅格数量)
- 边的连通性:两点连线不经过未知区域或障碍物则连通
通信机制:
- 通信范围限制:一定距离内才能通信
- 通信内容:共享拓扑节点图、位置信息
补充输入:
- 四值栅格地图编码(障碍物/未知/已知/前沿)
- 当前无人机位置、朝向
- 其他无人机位置、朝向
- 动作类型:从候选前沿节点中选择下一个目标点 + 选择对应朝向
- 动作维度:不固定,取决于当前候选前沿节点数量
- 输出结构:
- 头1:每个前沿节点的选择概率(Softmax)
- 头2:每个前沿节点的最佳朝向(0
1映射到0°360°)
| 奖励项 | 描述 | 参考 |
|---|---|---|
| R₁ 航行距离 | A*算法计算的当前位置到目标点距离 | 代码1+文章1 |
| R₂ 朝向代价 | 当前朝向与目标朝向的差异 | 代码1+文章1 |
| R₃ 局部信息增益 | 下一目标点的视线角度下的未知栅格数量 | - |
| R₄ 全局信息增益 | 所有无人机整体前沿信息增益,减少重叠 | 代码3+文章4 |
| R₅ 隐式会和 | 促进无人机隐式会和的奖励 | 代码2+文章3 |
| 参考项目 | 主要贡献 | 本项目复用内容 |
|---|---|---|
| FUEL (代码1+文章1) | 单无人机探索,拓扑图构建 | 节点生成算法、朝向计算 |
| IR2 (代码2+文章3) | 隐式会和多机器人探索 | 隐式会和奖励设计、可视化方案 |
| MARVEL (代码3+文章4) | 多无人机RL探索 | 环境设置、传感器模型、分布式训练 |
| 论文2 | GAT+GCN图网络探索 | 网络架构设计 |
zlr-explore/
├── parameter.py # 参数配置文件
├── driver.py # 主训练脚本
├── test_driver.py # 测试脚本
├── model/ # 网络模型
│ ├── encoder.py # GAT+GCN编码器
│ ├── decoder.py # 解码器(节点选择+朝向)
│ ├── sac_model.py # SAC算法实现
│ └── map_encoder.py # 地图编码器(CNN/ViT/Swin)
├── utils/ # 工具函数
│ ├── env.py # 环境实现
│ ├── sensor.py # 传感器模型(参考MARVEL)
│ ├── node_manager.py # 拓扑节点管理(C++转Python)
│ ├── graph.py # 图结构处理
│ ├── motion_model.py # 运动模型
│ ├── reward_calculator.py # 奖励计算器
│ ├── runner.py # 训练运行器
│ └── utils.py # 通用工具
├── scripts/ # 脚本文件
│ ├── train.py # 训练入口
│ ├── eval.py # 评估入口
│ ├── visualize.py # 可视化
│ └── ray_worker.py # Ray分布式worker
├── map/ # 地图数据集
│ ├── easy/ # 简单地图(课程学习初期)
│ ├── medium/ # 中等难度
│ └── hard/ # 困难地图(课程学习后期)
├── train/ # 训练输出(按时间分文件夹)
│ └── YYYYMMDD_HHMMSS/
│ ├── logs/ # 训练日志
│ └── checkpoints/ # 模型检查点
├── checkpoint/ # 最佳模型权重
├── gifs/ # 可视化GIF
└── requirements.txt # 依赖
- 创建项目目录结构
- 编写
requirements.txt(PyTorch, Ray, tensorboard, swanlab等) - 编写
parameter.py基础配置 - 验证参考代码能否运行
- 分析参考项目3和4的地图格式
- 编写地图加载器
utils/map_loader.py - 实现地图复杂度评估函数
- 按难度整理地图到
map/目录
- 复用/改写
utils/sensor.py - 实现有限FoV深度相机模型
- 实现射线投射(ray casting)
- 验证传感器输出
- 复用/改写
utils/env.py - 实现2D栅格地图环境
- 实现无人机运动模型
- 实现基础碰撞检测
- 实现前沿区域检测算法
- 实现聚类算法(如DBSCAN/K-means)
- 实现主成分分析(PCA)获取簇中心
- 编写节点生成器
utils/frontier_processor.py
- 分析FUEL项目中C++节点管理代码
- 将核心逻辑转为Python
utils/node_manager.py - 实现节点特征计算(位置、占据、访问、朝向信息)
- 实现边连通性判断
- 实现图结构
utils/graph.py - 集成PyG(PyTorch Geometric)或DGL
- 实现图的特征提取接口
- 实现GAT层
model/gat_layer.py - 实现GCN层
model/gcn_layer.py - 实现GAT+GCN结合的编码器
model/graph_encoder.py - 实现地图编码器(CNN/ViT/Swin)
model/map_encoder.py - 实现状态编码器
- 实现节点选择头
model/node_selection_head.py - 实现朝向预测头
model/heading_prediction_head.py - 整合解码器
model/decoder.py
- 实现Actor网络
model/actor.py - 实现Critic网络
model/critic.py - 实现SAC训练逻辑
model/sac_trainer.py - 实现经验回放缓冲区
- 实现A*算法
utils/astar.py - 集成到环境中计算路径距离
- 优化A*性能(可考虑预计算)
- 实现R₁航行距离奖励
- 实现R₂朝向代价奖励
- 实现R₃局部信息增益计算
- 实现R₄全局信息增益(多智能体重叠检测)
- 实现R₅隐式会和奖励(参考IR2)
- 整合奖励计算器
utils/reward_calculator.py
- 实现Ray分布式训练配置
scripts/ray_worker.py - 实现课程学习策略
- 实现
runner.py训练循环 - 集成TensorBoard和SwanLab日志
- 实现多无人机探索实时渲染
- 实现单无人机视角渲染
- 生成GIF保存功能
- 参考IR2和MARVEL的可视化方案
- 实现探索覆盖率计算
- 实现探索成功率计算
- 实现完成时间统计
- 实现路径平均长度统计
- 实现重叠比例计算
- 编写
test_driver.py - 实现批量测试功能
- 实现模型加载与推理
- 端到端训练测试(小规模地图)
- 分布式训练测试
- 预训练权重加载测试
- 可视化流程测试
- 优化图计算性能
- 优化A*计算(如使用向量化/JIT编译)
- 优化内存使用
- Ray并行效率调优
- 编写详细README
- 编写API文档
- 整理训练记录
- 代码审查与重构
| 序号 | 问题 | 优先级 | 备注 |
|---|---|---|---|
| 1 | 节点特征N=10维的具体定义 | 高 | 影响观测空间设计 |
| 2 | GAT与GCN的结合方式 | 高 | 影响编码器架构 |
| 3 | 奖励函数权重设置 | 高 | 影响训练效果 |
| 4 | 课程学习策略细节 | 中 | 影响训练效率 |
| 5 | Ray分布式配置要求 | 中 | 影响训练规模 |
| 6 | FUEL中需要转换的C++代码范围 | 高 | 影响Phase 2工作量 |
| 7 | "苏有的项目和论文"具体指什么 | 中 | 影响解码器设计参考 |
# 核心依赖
torch>=2.0.0
torch-geometric>=2.3.0 # 图神经网络
ray[rllib]>=2.5.0 # 分布式训练
numpy>=1.24.0
scipy>=1.10.0
# 可视化
matplotlib>=3.7.0
pillow>=9.5.0 # GIF生成
opencv-python>=4.7.0
# 日志
tensorboard>=2.13.0
swanlab>=0.1.0
# 其他
tqdm>=4.65.0
pyyaml>=6.0
| 风险 | 可能性 | 影响 | 应对策略 |
|---|---|---|---|
| C++代码转换复杂度高 | 中 | 高 | 优先阅读FUEL代码,评估工作量 |
| 训练收敛困难 | 中 | 高 | 从小规模地图开始,逐步增加难度 |
| 奖励函数设计不当 | 中 | 中 | 多轮调参,参考已有项目经验 |
| 分布式训练配置复杂 | 低 | 中 | 先实现单机版本,再扩展分布式 |
| 图计算性能瓶颈 | 中 | 中 | 考虑使用稀疏矩阵优化 |