Skip to content

Latest commit

 

History

History
329 lines (262 loc) · 13.2 KB

File metadata and controls

329 lines (262 loc) · 13.2 KB

zlr-explore 项目规划文档(模型不解的细节部分+整体需要执行的规划)

1. 对README.md的不理解之处

1.1 网络架构细节

  • GAT与GCN结合的具体方式:README提到"采用GAT与GCN结合的方法对特征进行编码",但具体的结合方式(是串联、并联还是交替使用)需要进一步确认。
  • 苏有的项目和论文:README提到"参考苏有的项目和论文",但我无法确定具体指哪个项目/论文,需要明确。

1.2 观测空间细节

  • 图节点特征维度:README说"每个节点包含N=10维信息",但后续列出的特征维度超过10维(位置2维 + 占据信息1维 + 访问信息1维 + 朝向信息36维 = 40维),这里的N=10是指什么?
  • 地图编码器的输出维度:使用CNN/ViT/Swin Transformer编码地图后的输出维度需要确定。
  • 节点产生方法中的C++代码转换:README提到需要将C++代码转为Python代码,但具体涉及哪些文件/功能需要明确。

1.3 奖励函数细节

  • 各奖励项的权重:README提到"通过加权求和得到整体奖励函数",但具体的权重值或权重学习策略未明确。
  • A*算法的具体应用:是在每次决策时都运行A*计算距离,还是预先计算?
  • 隐式会和逻辑的具体修改:README提到"参考代码2和文章3的逻辑,并进行修改",具体修改方向是什么?

1.4 训练设置细节

  • 课程学习的具体策略:地图从简单到复杂的具体划分标准是什么?是按障碍物密度、地图大小还是其他指标?
  • Ray分布式训练的具体配置:需要多少worker、使用什么资源分配策略?
  • 决策频率:README说"到达下一目标点后再进行决策",这是否意味着动作是离散的(到达一个点后选择下一个点)?

1.5 仿真环境细节

  • 地图数据集的格式:参考项目3和4中的地图是什么格式(图片、矩阵、其他)?
  • 地图复杂度的量化标准:如何对地图进行排序?

2. 对项目的理解

2.1 项目核心目标

zlr-explore是一个端到端的多无人机未知环境探索框架,核心特点是:

  • 端到端学习:使用深度强化学习(SAC算法)直接从观测到动作映射
  • 多智能体协作:支持可变数量的同构无人机进行协同探索
  • 拓扑图表示:使用拓扑节点图作为观测空间的核心表示
  • 受限视野:考虑有限FoV(Field of View)的深度相机感知模型

2.2 核心技术架构

┌─────────────────────────────────────────────────────────────────┐
│                     核心网络架构 (SAC算法)                        │
├─────────────────────────────────────────────────────────────────┤
│  编码器 (Encoder)              →    解码器 (Decoder)              │
│  ├── GAT + GCN 图特征提取      →    ├── 节点选择头               │
│  ├── CNN/ViT 地图编码          →    │   (选择下一个目标节点)      │
│  └── 机器人状态编码            →    └── 朝向选择头               │
│                                     (选择最佳FOV朝向)            │
└─────────────────────────────────────────────────────────────────┘

2.3 观测空间(Observation Space)

拓扑节点图(核心输入)

  • 节点生成:对前沿区域进行聚类 + 主成分分析(PCA)得到簇中心
  • 节点特征(N=10维,需要确认):
    • 位置信息 [x, y](归一化)
    • 占据信息(当前无人机/其他无人机/未被占据)
    • 访问信息(前沿节点/已探索)
    • 朝向信息(36维向量,表示不同角度扇区的未知栅格数量)
  • 边的连通性:两点连线不经过未知区域或障碍物则连通

通信机制

  • 通信范围限制:一定距离内才能通信
  • 通信内容:共享拓扑节点图、位置信息

补充输入

  • 四值栅格地图编码(障碍物/未知/已知/前沿)
  • 当前无人机位置、朝向
  • 其他无人机位置、朝向

2.4 动作空间(Action Space)

  • 动作类型:从候选前沿节点中选择下一个目标点 + 选择对应朝向
  • 动作维度:不固定,取决于当前候选前沿节点数量
  • 输出结构
    • 头1:每个前沿节点的选择概率(Softmax)
    • 头2:每个前沿节点的最佳朝向(01映射到0°360°)

2.5 奖励函数设计

奖励项 描述 参考
R₁ 航行距离 A*算法计算的当前位置到目标点距离 代码1+文章1
R₂ 朝向代价 当前朝向与目标朝向的差异 代码1+文章1
R₃ 局部信息增益 下一目标点的视线角度下的未知栅格数量 -
R₄ 全局信息增益 所有无人机整体前沿信息增益,减少重叠 代码3+文章4
R₅ 隐式会和 促进无人机隐式会和的奖励 代码2+文章3

2.6 参考项目分析

参考项目 主要贡献 本项目复用内容
FUEL (代码1+文章1) 单无人机探索,拓扑图构建 节点生成算法、朝向计算
IR2 (代码2+文章3) 隐式会和多机器人探索 隐式会和奖励设计、可视化方案
MARVEL (代码3+文章4) 多无人机RL探索 环境设置、传感器模型、分布式训练
论文2 GAT+GCN图网络探索 网络架构设计

2.7 项目文件结构

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          # 依赖

3. 项目规划执行步骤

Phase 1: 环境搭建与基础组件(第1-2周)

Step 1.1: 项目初始化

  • 创建项目目录结构
  • 编写 requirements.txt(PyTorch, Ray, tensorboard, swanlab等)
  • 编写 parameter.py 基础配置
  • 验证参考代码能否运行

Step 1.2: 地图数据处理

  • 分析参考项目3和4的地图格式
  • 编写地图加载器 utils/map_loader.py
  • 实现地图复杂度评估函数
  • 按难度整理地图到 map/ 目录

Step 1.3: 传感器模型(复用MARVEL)

  • 复用/改写 utils/sensor.py
  • 实现有限FoV深度相机模型
  • 实现射线投射(ray casting)
  • 验证传感器输出

Step 1.4: 基础环境搭建

  • 复用/改写 utils/env.py
  • 实现2D栅格地图环境
  • 实现无人机运动模型
  • 实现基础碰撞检测

Phase 2: 拓扑图与节点管理(第3-4周)

Step 2.1: 前沿检测与聚类

  • 实现前沿区域检测算法
  • 实现聚类算法(如DBSCAN/K-means)
  • 实现主成分分析(PCA)获取簇中心
  • 编写节点生成器 utils/frontier_processor.py

Step 2.2: 拓扑图管理(C++转Python)

  • 分析FUEL项目中C++节点管理代码
  • 将核心逻辑转为Python utils/node_manager.py
  • 实现节点特征计算(位置、占据、访问、朝向信息)
  • 实现边连通性判断

Step 2.3: 图数据结构

  • 实现图结构 utils/graph.py
  • 集成PyG(PyTorch Geometric)或DGL
  • 实现图的特征提取接口

Phase 3: 网络模型实现(第5-6周)

Step 3.1: 编码器(Encoder)

  • 实现GAT层 model/gat_layer.py
  • 实现GCN层 model/gcn_layer.py
  • 实现GAT+GCN结合的编码器 model/graph_encoder.py
  • 实现地图编码器(CNN/ViT/Swin)model/map_encoder.py
  • 实现状态编码器

Step 3.2: 解码器(Decoder)

  • 实现节点选择头 model/node_selection_head.py
  • 实现朝向预测头 model/heading_prediction_head.py
  • 整合解码器 model/decoder.py

Step 3.3: SAC算法实现

  • 实现Actor网络 model/actor.py
  • 实现Critic网络 model/critic.py
  • 实现SAC训练逻辑 model/sac_trainer.py
  • 实现经验回放缓冲区

Phase 4: 奖励函数与训练逻辑(第7-8周)

Step 4.1: A*路径规划

  • 实现A*算法 utils/astar.py
  • 集成到环境中计算路径距离
  • 优化A*性能(可考虑预计算)

Step 4.2: 奖励计算器

  • 实现R₁航行距离奖励
  • 实现R₂朝向代价奖励
  • 实现R₃局部信息增益计算
  • 实现R₄全局信息增益(多智能体重叠检测)
  • 实现R₅隐式会和奖励(参考IR2)
  • 整合奖励计算器 utils/reward_calculator.py

Step 4.3: 训练框架

  • 实现Ray分布式训练配置 scripts/ray_worker.py
  • 实现课程学习策略
  • 实现 runner.py 训练循环
  • 集成TensorBoard和SwanLab日志

Phase 5: 可视化与评估(第9-10周)

Step 5.1: 实时可视化

  • 实现多无人机探索实时渲染
  • 实现单无人机视角渲染
  • 生成GIF保存功能
  • 参考IR2和MARVEL的可视化方案

Step 5.2: 评估指标

  • 实现探索覆盖率计算
  • 实现探索成功率计算
  • 实现完成时间统计
  • 实现路径平均长度统计
  • 实现重叠比例计算

Step 5.3: 测试脚本

  • 编写 test_driver.py
  • 实现批量测试功能
  • 实现模型加载与推理

Phase 6: 集成测试与优化(第11-12周)

Step 6.1: 集成测试

  • 端到端训练测试(小规模地图)
  • 分布式训练测试
  • 预训练权重加载测试
  • 可视化流程测试

Step 6.2: 性能优化

  • 优化图计算性能
  • 优化A*计算(如使用向量化/JIT编译)
  • 优化内存使用
  • Ray并行效率调优

Step 6.3: 文档与整理

  • 编写详细README
  • 编写API文档
  • 整理训练记录
  • 代码审查与重构

4. 关键问题待确认清单

序号 问题 优先级 备注
1 节点特征N=10维的具体定义 影响观测空间设计
2 GAT与GCN的结合方式 影响编码器架构
3 奖励函数权重设置 影响训练效果
4 课程学习策略细节 影响训练效率
5 Ray分布式配置要求 影响训练规模
6 FUEL中需要转换的C++代码范围 影响Phase 2工作量
7 "苏有的项目和论文"具体指什么 影响解码器设计参考

5. 依赖项

# 核心依赖
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

6. 风险评估

风险 可能性 影响 应对策略
C++代码转换复杂度高 优先阅读FUEL代码,评估工作量
训练收敛困难 从小规模地图开始,逐步增加难度
奖励函数设计不当 多轮调参,参考已有项目经验
分布式训练配置复杂 先实现单机版本,再扩展分布式
图计算性能瓶颈 考虑使用稀疏矩阵优化