Skip to content

Latest commit

 

History

History
366 lines (290 loc) · 27.7 KB

File metadata and controls

366 lines (290 loc) · 27.7 KB

项目需求文档:端到端多机器人探索框架

1. 项目概述

项目 内容
项目名称 zlr-explore
核心目标 使用端到端的网络结合深度强化学习实现多无人机未知环境探索

2. 任务设定

2.1 机器人类型

  • 同构多机器人(所有机器人相同且为无人机)
  • 数量范围:数量可变化,不固定

2.2 感知与视野

  • 传感器类型:深度相机
  • 视野约束:
    • 有限FoV,参考code_ref/MARVEL中的设计方法
  • 感知范围:参考code_ref/MARVEL中的设计方法
  • 是否考虑传感器噪声:否

2.3 环境模型

  • 维度:2D静态栅格地图(定高飞行,固定Z轴高度)
  • 地图表示:
    • 占用栅格(Occupancy Grid),参考code_ref/MARVEL中的设计方法
    • 原始地图格式:PNG灰度图像(8-bit),包含以下像素值:
      • 像素值208:机器人初始出生位置(仅在原始地图中存在)
      • 像素值>150:障碍物区域(墙壁等)
      • 像素值50-80:障碍物区域(其他灰度障碍物)
      • 其他像素值:空闲可通行区域
    • 处理后地图格式(二值化转换后):
      • 255(FREE):空闲可通行区域
      • 1(OCCUPIED):障碍物区域
      • 127(UNKNOWN):未知未探索区域(机器人belief初始化值)
    • 坐标系统
      • 栅格坐标:图像坐标系(y向下,x向右)
      • 世界坐标:以初始位置为原点,单位米(米),分辨率CELL_SIZE=0.4米/栅格
    • 机器人位置:不与地图像素值绑定,存储在独立变量中(robot_locations数组),包含:
      • 位置(世界坐标x, y)
      • 航向角(0-360度)
    • 地图来源code_ref/MARVEL/maps_medium/code_ref/MARVEL/maps_test/
    • 地图处理流程
      1. 读取PNG图像 → 2倍下采样(block_reduce)→ 二值化 → 转换为标准占用栅格值
      2. 二值化规则:(像素>150) | (50≤像素≤80)为障碍物,其余为空闲
      3. 最终转换:ground_truth = 二值化结果 × 254 + 1(得到255或1)

3. 方法设计

3.1 核心网络架构

本项目采用 Actor-Critic 架构 配合 Soft Actor-Critic (SAC) 算法进行训练。整体网络遵循编码器-解码器(Encoder-Decoder)范式,以拓扑图和局部地图作为观测输入,输出离散的前沿视点选择概率以及对应的连续朝向控制量。

3.1.1 整体架构概述

模块 功能说明 主要参考
观测编码模块 将图节点特征、机器人自身状态、地图图像分别编码为统一维度的嵌入向量 论文2、论文3
图编码器 (Graph Encoder) 采用 GAT 与 GCN 并行的混合结构,对拓扑图进行多轮特征提炼 论文1、论文2
地图-节点交叉注意力融合 将 Swin Transformer 提取的地图特征通过交叉注意力注入节点特征 需求定义
策略解码器 (Policy Decoder) 基于增强后的节点特征,输出视点选择概率与最佳朝向 论文2、论文3
Critic 网络 采用特权学习 (Privileged Learning) 的 Q 网络,用于 SAC 训练 论文2

3.1.2 观测编码模块

观测编码模块负责将三种异构输入转换为维度一致的初始特征:

  1. 节点特征嵌入

    • 输入:每个节点的原始 40 维特征(位置 2 + 占据 1 + 访问 1 + 朝向 36)。
    • 处理:通过一个 2 层 MLP 投影到 d 维潜在空间(默认 d = 128)。
    • 归一化:位置特征需先进行归一化(如按地图尺寸或通信范围缩放),其余特征按相应取值范围归一化到 $[0, 1]$
  2. 机器人状态编码

    • 输入:当前无人机的世界坐标 $(x, y)$ 和航向角 $\theta$
    • 处理:通过一个独立的 2 层 MLP 编码为 d 维向量 $h_{robot}$
    • 融合方式:将 $h_{robot}$ 与当前机器人所在节点(或最近节点)的初始嵌入相加,得到增强的 query 节点特征。
  3. 地图图像编码

    • backbone:采用 Swin Transformer(如 microsoft/swin-tiny-patch4-window7-224)作为地图编码器。
    • 输入:以当前机器人已探索区域的最大 $x, y$ 范围外扩 scale 倍(默认 scale = 1.2)裁剪出的四值栅格图像(障碍物、未知、已知空闲、前沿)。若边长不能被 patch_size 整除,则在不超出 1.2 倍的前提下适度缩小。
    • 输出:得到地图特征图 $F_{map} \in \mathbb{R}^{H' \times W' \times C_{map}}$,其中每个空间位置可视为一个地图 token。

3.1.3 图编码器 (Graph Encoder)

图编码器是策略网络的核心,负责在拓扑图上进行消息传递与特征提炼。本设计综合论文1的 混合全局-局部推理 与论文2的 多层掩码自注意力 机制,采用 GAT 与 GCN 并行编码 + 特征拼接 的方案。

编码流程:

  1. 初始嵌入: 所有节点经过观测编码模块后得到初始节点嵌入 $H^{(0)} \in \mathbb{R}^{N \times d}$,其中 $N$ 为图中节点数量(动态可变)。

  2. 并行分支

    分支 A — GAT 全局注意力(参考论文1、论文2)

    • 使用 $N_a$ 层(默认 $N_a = 6$)的 掩码多头图注意力 (Masked Multi-Head Self-Attention)
    • 每层的 attention mask 由图的邻接矩阵 $A$ 推导而来,确保节点 $i$ 只能 attend 到其一跳邻居 $j$(即 $M_{ij}=1$ 当且仅当 $(v_i, v_j) \in E$)。
    • 通过堆叠多层,信息可逐步传播到多跳邻居,兼顾局部结构约束与全局依赖(参考论文2)。
    • 注意力头数默认设为 $8$ 头,每层后接层归一化 (LayerNorm) 与残差连接。
    • 输出:全局注意力分支的节点嵌入 $H_{GAT} \in \mathbb{R}^{N \times d}$

    分支 B — GCN 局部图卷积(参考论文1)

    • 使用一个轻量级的 可扩展 GCN(如 2 层 GCN)直接在邻接矩阵 $A$ 上进行消息传递。
    • 侧重于捕获局部拓扑连通性和几何结构,避免纯注意力机制可能导致的过平滑问题。
    • 输出:局部图卷积分支的节点嵌入 $H_{GCN} \in \mathbb{R}^{N \times d}$
  3. 特征融合

    • 将两个分支的输出在特征维度上拼接:$H_{concat} = [H_{GAT} \parallel H_{GCN}] \in \mathbb{R}^{N \times 2d}$。
    • 再通过一个 线性投影层$2d$ 维映射回 $d$ 维,得到融合后的节点特征 $\tilde{H} \in \mathbb{R}^{N \times d}$$$\tilde{H} = \text{Linear}([H_{GAT} \parallel H_{GCN}])$$
    • 该并行结构同时保留了 GAT 的长距离关系建模能力与 GCN 的局部结构归纳偏置,实验表明优于单一分支(参考论文1的消融实验)。

3.1.4 地图-节点交叉注意力融合

为将 Swin Transformer 提取的地图语义信息注入图节点,设计 地图-节点交叉注意力 (Map-Node Cross-Attention) 模块:

  • Query (Q):来自图编码器输出的节点特征 $\tilde{H} \in \mathbb{R}^{N \times d}$
  • Key (K)Value (V):来自 Swin Transformer 输出的地图特征图。先将 $F_{map}$ 展平为序列 $F_{map}^{seq} \in \mathbb{R}^{L \times d}$($L = H' \times W'$,若通道数不一致则通过线性层投影到 $d$)。
  • 计算标准的多头交叉注意力: $$H_{fused} = \text{MultiHeadCrossAttn}(Q=\tilde{H}, K=F_{map}^{seq}, V=F_{map}^{seq})$$
  • 输出 $H_{fused} \in \mathbb{R}^{N \times d}$ 即为融合了地图上下文信息的最终节点表示,作为解码器的输入。

3.1.5 策略解码器 (Policy Decoder)

策略解码器基于融合后的节点特征 $H_{fused}$,输出两类动作:选择下一个前沿视点生成该视点的最佳朝向。动作空间为动态(前沿节点数量不固定)。

解码流程:

  1. 当前节点特征增强

    • 提取当前无人机所在节点特征 $h_c \in \mathbb{R}^{d}$ 作为 query。
    • 将其与邻居节点特征一起输入一个 交叉注意力层,得到增强的当前节点特征 $\hat{h}_c$(参考论文3)。
  2. 图级上下文聚合(参考论文1)

    • 以 $\hat{h}c$ 为 query,对所有节点做 全局注意力池化,生成图级别的上下文嵌入: $$h{agg} = \text{Attn}(\text{query}=\hat{h}c, \text{keys/values}=H{fused})$$
  3. 双头动作输出

    头 A — 视点选择头 (Node Selection Head)

    • 计算图级嵌入 $h_{agg}$ 与所有前沿视点候选节点特征 $h_{v}^{frontier}$ 的相关性分数: $$\text{logits}{node}(v) = h{agg}^{\top} \cdot h_{v}^{frontier}, \quad v \in \mathcal{A}$$
    • 仅对动作候选集 $\mathcal{A}$(即可达的前沿视点)计算 softmax,得到离散选择概率 $\pi_{node}$
    • 该设计动态适配可变数量的前沿节点,无需固定输出维度(参考论文3的 Pointer Network 思想)。

    头 B — 朝向生成头 (Orientation Head)

    • 针对每个候选前沿节点,预测一个连续朝向值 $\phi_v \in [0, 1]$,映射到 $[0^{\circ}, 360^{\circ}]$
    • 具体实现:将每个候选节点的特征 $h_{v}^{frontier}$$h_{agg}$ 拼接,通过 2 层 MLP + Sigmoid 输出: $$\phi_v = \sigma(\text{MLP}([h_{agg} \parallel h_{v}^{frontier}]))$$
    • 实际执行时,根据策略头 A 选中的节点 $v^$,取其对应的 $\phi_{v^}$ 作为最佳朝向中心线。若 FoV 为 $120^{\circ}$,则实际视野范围为 $[\phi_{v^} \times 360^{\circ} - 60^{\circ}, ; \phi_{v^} \times 360^{\circ} + 60^{\circ}]$。

3.1.6 Critic 网络

Critic 网络 $Q_{\phi}(s, a)$ 用于 SAC 训练,采用 中心化训练去中心化执行 (CTDE) 范式,并引入论文2提出的 特权 Critic (Privileged Critic) 设计以提升训练稳定性与信用分配效果。

结构设计:

  • 编码器共享结构:Critic 使用与 Actor(策略网络)相同的图编码器和地图编码器结构,但接收 完整的特权信息 作为输入,包括:
    • 全局真实地图(而非单个机器人的局部地图);
    • 所有机器人的真实位置与动作;
    • 完整的全局拓扑图(包含所有机器人共享的节点信息)。
  • Critic 解码器
    1. 编码器输出所有机器人的增强节点特征后,提取当前机器人 $i$ 的节点特征 $\hat{h}_c^{(i)}$ 与其他机器人 $j$ 的节点特征 $\hat{h}_c^{(j)}$
    2. 将其他机器人的状态-动作对与当前机器人的 query 特征拼接,输入 注意力层 进行信用分配(参考论文2的 Actor-Attention-Critic 机制)。
    3. 最后通过 2 层前馈网络 (Feed-Forward) 映射到标量 Q 值: $$Q_{\phi}(s_t, a_t) = \text{FFN}([\hat{h}_c^{(i)} \parallel {\hat{h}c^{(j)}, a_t^{(j)}}{j \neq i}])$$

3.1.7 网络超参数配置

所有与网络结构相关的超参数均可在 parameter.py 中配置,初始默认值如下:

参数名 默认值 说明
EMBEDDING_DIM 128 节点/地图/机器人状态的统一嵌入维度 $d$
GAT_LAYERS 6 GAT 分支的堆叠层数 $N_a$(参考论文2)
GAT_HEADS 8 多头注意力头数
GCN_LAYERS 2 GCN 分支的层数
MLP_HIDDEN_DIM 128 各类 MLP 的隐藏层维度
MAP_SCALE_FACTOR 1.2 地图裁剪外扩倍数
SWIN_BACKBONE "microsoft/swin-tiny-patch4-window7-224" Swin Transformer 预训练模型
USE_PRIVILEGED_CRITIC True 是否启用特权 Critic

3.2 学习范式

  • 强化学习(RL)
    • 采用SAC算法设计网络
    • 需要设计合理的奖励函数,奖励函数由多个奖励组成,通过加权求和得到整体奖励函数(权重事先固定,可以参考参考论文或代码)【自由发挥:权重初始值参考其他项目,可在parameter.py中调整】
      • 奖励函数权重初始值可以按照其余项目论文中设定,后续我会在配置文件中自己调整
      • 奖励函数第一部分:当前无人机的航行距离,通过A算法得到当前位置和下一个目标点之间的距离(每次决策时都运行A计算距离),作为移动代价,有助于减少总体航行的轨迹长度
      • 奖励函数第二部分:当前无人机的朝向代价,结合当前无人机朝向与下一目标点的朝向,参考代码1与文章1,减少无人机转向代价
      • 奖励函数第三部分:当前无人机在下一目标点对应的视线角度下,能够观察到的未知栅格的数量,即为前沿信息增益
      • 奖励函数第四部分:所有无人机整体的前沿信息增益,减少新增探索区域的重叠比例,该部分设计参考代码3与文章4中的设计逻辑,能够优化无人机之间的任务分配
      • 奖励函数第五部分:隐式会和逻辑,这部分参考代码2和文章3的逻辑,并进行修改,用于使无人机能够学会隐式会和(该参考代码2和文章3中提及了如何设计隐式会和的奖励函数,采用一样的计算方法,但是需要完成无人车探索到无人机的适配,忽略高度差异,将无人车的激光雷达视野变成有限视野的FOV无人机)

4. 输入输出定义

4.1 观测空间(Observation)

  • 采用拓扑节点图来作为整体的观测空间的输入主要部分,节点与节点之间边的连通性可以通过规则(两个节点之间的连线不经过未知区域或者障碍物)来确定。
  • 无人机之间会进行通信(只要在一定的距离范围内才能通信),通信会共享彼此之间的地图信息(拓扑节点图),并通信彼此之间的位置。
  • 节点的产生方法:使用参考文章1提到的方法,在更新的时候,对前沿区域进行区域生长聚类得到前沿簇,簇的中心位置(簇内栅格位置的平均值)即为节点位置,需要对应的算法程序从C++代码转为python代码(code_ref/FUEL当中)【修正说明:经代码分析,FUEL使用区域生长聚类+BFS扩展,中心位置为平均值;PCA仅用于分割过大的簇】
  • 前沿视点的定义:就是在节点中能够在感知范围内观察到未知区域的节点(与参考论文1保持一致)
  • 前沿的定义:与未知区域栅格相邻的已知自由栅格,不需要额外设置像素值,保持自由栅格值即可
  • 图节点特征:从四个方面,每个节点包含N=(2+1+1+36)维信息,即每个节点有N个特征(位置2维 + 占据信息1维 + 访问信息1维 + 朝向信息36维 = 40维)
    • 节点的位置信息:[x,y](输入要进行归一化)
    • 占据信息:一个多值分类,表示该节点被当前无人机占据、被其他无人机占据、未被无人机占据,代表了无人机及其他无人机的位置信息(其他无人机位置信息取上一次通信的位置信息)
    • 访问信息:表示该节点是否被无人机访问过,包含前沿节点(未访问过)、已经被无人机探索过,隐含了历史轨迹信息
    • 朝向信息:用以表示一个角度范围内的扇形包含的未知栅格的数量,是一个36维度的向量,从010、1020、...、350~360的360上每10度为一个间隔得到的扇形FOV所能包含的未知栅格数量,值得注意的是,如果该区域射线先照到已知障碍物再到未知区域,则该部分为0
  • 观测空间的输入也包括地图编码器,指的是将整个四值栅格地图(障碍物、未知区域、已知区域、前沿区域)使用Swinfomer进行编码作为补充地图信息输入(需要支持任意尺度地图的输入)
    • 输入的地图并不是完整的未探索的地图,也不是完全探索过的地图,而是当前无人机探索的地图
    • 不同尺寸体现在输入的图像(正方形)的边界长度为当前无人机探索x,y范围的scale=1.2倍(探索过的最大范围,以正方形表示)【自由发挥:scale因子可在1.0-1.5范围内调整】
    • 不同尺寸如果不能整除输入就适当缩小边长(保持不超过1.2倍的前提下),使其能被patch_size整除
    • 由于不同尺寸的地图输入导致输出不相同,可以使用交叉注意力机制将信息编码进节点特征中,拼接特征(将地图特征作为K和V,节点作为Q)
  • 当前无人机的位置、当前无人机的朝向都需要一起编码(MLP)输入到编码器中

4.2 动作空间(Action)

  • 动作空间是离散的
  • 动作空间中的节点一定是前沿视点,而不是所有节点
  • 从候选节点中选择下一个目标点,同时选择对应的朝向
  • 动作维度:不固定,从所有候选的前沿节点(可以理解为视点)中选择,每一个前沿视点会对应有一个最佳朝向
  • 动作选择:在经过解码器得到特征后,经过两个头,一个头得到每一个前沿节点的选择概率,另一个头得到每个前沿节点的最佳朝向(此为一个01的值,将0360度映射到0~1),该朝向为FOV朝向中心线,假设该值为0.5,FOV视野为120度,则代表朝向中心线角度为180度,则视野范围扇形为[180-60,180+60],以此计算对应的视野范围。

5. 训练与评估

5.1 训练设置

  • 采用基于Ray的分布式训练方式,与code_ref/IR2-Multi-Robot-RL-Explorationcode_ref/MARVEL保持一致,参数配置具体参考code_ref/IR2-Multi-Robot-RL-Explorationcode_ref/MARVEL,选择一个任意数值参数均可【自由发挥:IR2使用32,MARVEL使用18,建议初始值16】,后续我会自己在配置文件修改
  • 要支持从加载预训练权重
  • 决策频率,由于动作空间是离散的,目前仅需要在到达下一目标点后再进行决策,每一决策就是选择一个目标点(视点)和其对应的朝向中轴
  • 课程学习,将地图从简单到复杂进行训练

5.2 仿真环境

  • 地图来源:地图数据集来源于参考项目3和参考项目4中所有的地图(需要帮我检验地图是否能使用)
  • 地图规模:指代不同尺寸的大小的图片
  • 地图复杂度:地图的复杂程度主要是地图大小和障碍物的密度来确定,直接根据我的数据集提供简单/中等/困难地图的划分标准(如地图尺寸范围、障碍物密度阈值),保证三个标准下的数据集分配比较合理,后续我可以根据需求自己在配置文件中修改划分函数,每个标准下划分训练、验证和测试集【自由发挥:建议划分比例70%训练/15%验证/15%测试】
  • 地图的格式:为图片格式,具体可以参考code_ref/MARVEL/maps_test/1.png以及code_ref/MARVEL/parameter.py中的像素值含义
  • 我的数据集地址(项目相对地址):map
    • 忽略文件夹名称中的test或者train,需要将其所有地图数据进行复杂度分类后排序后统一划分训练、验证和测试集
    • 第一个数据集:map\maps_ARiADNE
    • 第二个数据集:map\maps_IR2-Multi-Robot-RL-Exploration
    • 第三个数据集:map\maps_large-scale-DRL-exploration
    • 第四个数据集:map\maps_medium_MARVEL
    • 第五个数据集:map\maps_ORION-multi-agent-navigation
    • 第六个数据集:map\maps_test_DARE
    • 第七个数据集:map\maps_test_MARVEL
    • 第八个数据集:map\maps_train_DARE

5.3 评价指标

  • 探索覆盖率(Exploration Rate)
  • 探索成功率(Exploration success rate)
  • 完成时间(Completion time)
  • 路径平均长度(Average path length)
  • 机器人间重复探索比例(Overlap)

6. 训练可视化需求

训练与测试过程中的可视化采用 离线逐帧绘图 + 合成 GIF 的方式(参考代码2-3),基于 matplotlib 与 imageio 实现。可视化分为全局视角单机器人视角两类,并在画面中叠加关键决策信息以直观验证策略行为。

  • 全局视角 GIF

    • 在同一张图中展示所有无人机的协同探索过程。
    • 底图:所有无人机共享/合并后的belief地图(或ground truth)。
    • 无人机状态:各无人机实时位置(不同颜色区分)、航向箭头、FoV扇形(依据当前朝向中轴与FoV角度绘制)。
    • 历史轨迹:各无人机已飞行路径。
    • 拓扑与通信:前沿视点(节点)、图边连线、通信范围内的无人机间用虚线连接。
    • 决策信息叠加:画出每个无人机当前选中的下一个目标视点(高亮标记)、从当前位置到目标点的A*规划路径(虚线或彩色线)、以及朝向中轴角度(箭头或射线)。
  • 单机器人视角 GIF

    • 为每个无人机单独生成一个GIF。
    • 底图:该无人机自身的局部belief地图。
    • 自身状态:位置、航向、FoV扇形、历史轨迹。
    • 队友与拓扑:基于上一次通信获得的队友位置、观测到的前沿节点与图边。
    • 决策信息叠加:当前选中的目标视点A*规划路径、以及策略输出的最佳朝向中轴
  • 触发与存储机制

    • 训练阶段:通过参数 SAVE_IMG_GAP 控制保存频率(如每N个episode保存一次),减少磁盘I/O开销。
    • 测试/评估阶段:可设置为保存全部episode。
    • 存储路径:gifs/{run_timestamp}/global/ 与 gifs/{run_timestamp}/robot_{id}/,最终由 imageio 合成为 .gif(默认帧间隔 GIF_DURATION=0.5s,分辨率 PLOT_DPI=150,均可在 parameter.py 中配置)。
    • 合成后自动清理中间 .png 帧(参考代码2-3的做法)。

7. 代码结构需求

7.1 复用策略

  • 对于代码来说,优先从参考代码中复用模块(如:sensor.py / env.py / 整体结构),对于没有参考的代码模块进行完全重写
  • 本项目代码使用Python进行编写,不使用C++,对于参考项目1中用到的C++代码需要转为python代码

7.2 依赖与工具

  • 训练使用ubuntu24.04操作系统,cuda版本为12.8,GPU为RTX 5090
  • 数据处理、训练与、可视化与测试均使用conda create -n paper-train python=3.10的环境
  • 深度学习框架:PyTorch + transformers
  • 日志系统:TensorBoard + SwanLab
  • pytorch安装在conda环境paper-train的命令:pip install torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/cu128
  • 如需测试,都需要在conda环境paper-train进行,不需要新建环境

7.3 代码项目的整体结构

  • 优先参考参考项目2-3的项目目录,代码放在项目根目录下
  • model:该文件夹下存放模型相关的架构设计
  • map:该文件夹下主要存放用于课程学习的仿真地图,可以再在其下新建文件下存放不同难度的地图
  • utils:该文件夹用于存放工具类函数代码
  • scripts:该文件夹主要存放训练、可视化运行、ray分布式智能体创建运行、图结构、批量利用网络测试效果等代码
  • checkpoint:该文件夹存放训练保存的模型权重,分别以训练的时间为文件夹名成存在不同的文件下
  • gifs:存放训练与测试过程中生成的可视化GIF(全局视角与各机器人视角),按训练时间分文件夹存储
  • parameter.py:该文件存放各种参数配置,超参数等,是类似于config.yaml的配置文件
  • train:该文件夹按照训练时间分文件夹保存日志检查点等,方便从断点继续训练
  • requires.txt:该文件存放所需要用的环境配置,比如GPU版本的pytroch和Ray库等的安装

8. 训练环境迁移到ROS仿真环境

8.1 迁移说明

  • 训练环境使用的环境为通过将像素值设定成多个不同值表示的图片,从而形成Occupancy Grid栅格地图,但是我需要进行真实的仿真,需要通过机器人操作系统ROS来实现,通过开源项目(参考代码1和参考代码4提供)提供的UAV仿真环境和轨迹规划算法实现多无人机端到端未知环境探索

8.2 迁移要求

  • ROS无人机仿真环境
    • 使用ubuntu20.04操作系统和ROS1(Noetic)实现,cuda版本为12.1(torch 2.5.1),GPU显卡为3060 ti
    • 模型环境使用conda环境创建的conda create -n ros_env python=3.10
    • pytorch安装命令:pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121
    • 其余库依赖配套即可
  • 地图
    • 根据参考代码1与参考代码4(主要依据)进行设计,不需要修改原有的地图表示存储与节点管理
    • 在原有地图设计的基础上,根据无人机定高飞行(固定Z轴)设计二维栅格地图结构(从原有地图存储中提取),并进行规划地图管理,得到适合端到端网络输入的格式,从而输出要去的目标点再转换为合适的数据表述提供给轨迹规划模块
    • ROS仿真环境中使用的地图可以理解为训练环境二维地图的3D扩展,把障碍物部分在Z轴延伸到相同的统一高度,因此转换的时候不需要考虑障碍物高度不同导致在定高平面是否存在高矮障碍物问题
  • 轨迹规划
    • 训练环境使用的是离散waypoint序列和Bresenham碰撞检测,但是RO仿真环境要使用高保真的动力学模型,因此再给出目标点后,使用与RACER一样的方式进行单机轨迹规划(Kinodynamic A* + B-spline优化等)
  • 决策算法规划
    • 决策频率要可以控制
  • 动力学模型模型
    • 训练环境使用的是2D + 航向角,动力学约束和仿真频率较为简单,在ROS仿真环境中采用与RACER相同的3D模型维度、状态空间、控制输入、动力学约束、仿真频率
      • 由于是定高飞行,原有的2D + 航向角上仅需要增加定高飞行高度即可变为三维朝向目标点
  • 可视化要求
    • 参考项目中仅有一个可视化界面
    • 本项目需要多个可视化界面(启动多个独立的rivz窗口)
      • 需要一个多无人机共享的全局可视化界面,四个无人机在一个地图上探索,包含全局点云地图、所有无人机的位置与轨迹
      • 每个无人机都需要一个本地的可视化界面,记录该无人机的本地点云地图、位置与轨迹
  • 代码
    • 对于仿真环境的绝大部分代码还是复用参考项目C++的代码,仅有少数需要自编写的python代码(涉及到神经网络相关的,均在自实现节点中)
    • 要实现明确的代码项目结构与目录,整体代码放在文件夹ros_simulator中

9. 其他说明

  • 参考的文献
    • 参考文章1,主要是单无人机未知环境探索的方法,地址:paper_ref/FUEL_Fast_UAV_Exploration_Using_Incremental_Frontier_Structure_and_Hierarchical_Planning.pdf
    • 参考文章2,主要是使用深度强化学习进行未知环境探索的方法,地址:paper_ref/Learning_to_Explore_Efficiently_Heterogeneous_Topological_Graphs_and_Lightweight_Global_Reasoning_for_Robotic_Exploration.pdf
    • 参考文章3,主要是隐式会和的多机器人未知环境探索,地址为:paper_ref/IR2_Implicit_Rendezvous_for_Robotic_Exploration_Teams_under_Sparse_Intermittent_Connectivity.pdf
    • 参考文章4,主要是多无人机未知环境探索,地址为:paper_ref/MARVEL_Multi-Agent_Reinforcement_Learning_for_Constrained_Field-of-View_Multi-Robot_Exploration_in_Large-Scale_Environments.pdf
  • 参考的代码项目
    • 参考代码1,主要为无人机探索方法C++代码,地址为:code_ref/FUEL,与参考文章1配套
    • 参考代码2,主要为隐式会和的多机器人未知环境探索,地址为:code_ref/IR2-Multi-Robot-RL-Exploration,与参考文章3配套
    • 参考代码3,主要为多无人机未知环境探索,地址为:code_ref/MARVEL,与参考文章4配套
    • 参考代码4,主要为多无人机探索方法C++代码,地址为:code_ref\RACER,与参考代码1的多无人机扩展版本

10.要求

  • 对于涉及到的需要量化或加权的部分,直接在配置文件中增加参数配置,随机选择一个权重【自由发挥:权重初始值可参考其他项目设定】,后续可以在参数配置中修改