docs: 跟踪文档更新至 V1.5 + 探测统一原则定性纠正
1. 实施计划与任务跟踪 V1.4 -> V1.5: - 阶段总览补 Phase 9(完成)/Phase 10(待开发) - 校准现状:7.1 性能优化 ✅(<20->200+ FPS)、8.1.1 探测设计完成 - 测试数 191 -> 204,执行时间 41s -> 7s - Phase 8 标题去掉误导性 ✅,未完成项(蜂群/PDF/Word/第三方)补 ⬜ - 新增 Phase 9:性能优化 5 项 + 文档校准 3 项(均 ✅) - 新增 Phase 10:探测实时链路任务拆解(T1-T5, 依赖图, 总预估 11h) - 里程碑补 M8/M9/M10 2. 探测统一原则定性纠正(总体架构设计 14.2/14.2.1/14.7): - 原表述"统一原则"被弱化为"好看的对称",且有"planner 可保留 2D"备选方案 - 纠正:仿真是按 planner 规划执行的,planner 探测判定 = 仿真事实依据 - planner 若用 2D 判定"能发现"但目标高度超出 3D 球冠范围,会导致 "未探测却拦截并摧毁"的物理错误结局 - 统一原则是正确性硬约束,T3 不可砍、不可降级为 2D - 澄清两个独立问题:采样误差(<=1.5s)不影响火力计划(正确); 2D->3D 几何升级不可省略(我之前漏了)
This commit is contained in:
parent
68b7434ddc
commit
6b005cf9cc
@ -1742,7 +1742,7 @@ float EffectiveRange(float radarRange, float eoRange, float irRange, float visib
|
||||
}
|
||||
```
|
||||
|
||||
> **统一原则**:planner 的静态估算与运行时实时扫描必须用同一个探测几何判定,否则会出现"规划以为能发现、运行时却没发现"的不一致。
|
||||
> **统一原则(正确性硬约束)**:planner 的事前规划与运行时实时探测**必须用同一个 3D 球冠判定模型**(`IsInCoverage`)。原因:仿真是按 planner 规划执行的,planner 的探测判定就是仿真的事实依据——若 planner 用比真实探测能力更宽松的几何(如 2D 圆),会规划出"未探测却拦截"的物理错误结局(详见 14.2.1)。
|
||||
|
||||
### 14.2.1 三维球冠探测几何(决策 5)
|
||||
|
||||
@ -1788,7 +1788,13 @@ bool IsInCoverage(
|
||||
}
|
||||
```
|
||||
|
||||
> **planner 适配**:`EarliestDetection`/`EarliestEntryArc` 当前用线段-圆求交,升级 3D 后需改为"沿航路逐采样点调用 `IsInCoverage`"(解析求三维球冠-折线交点复杂度高,采样法足够且与实时探测判定一致)。这是 3D 升级的主要工作量。
|
||||
> **planner 必须升级到 3D(正确性硬要求,非精度优化)**:
|
||||
> `EarliestDetection`/`EarliestEntryArc` 当前用线段-圆求交(纯 2D),必须改为"沿航路逐采样点调用 `IsInCoverage`"。
|
||||
> **原因**:仿真是按 planner 规划执行的——planner 判定"威胁能被发现"→ 据此规划拦截→ 仿真照此执行→ 威胁被摧毁。若 planner 用 2D 判定"能发现",但威胁实际高度超出 3D 球冠范围(探测设备真实能力达不到),就会出现**"根本没探测到、却被规划拦截并摧毁"的物理错误结局**——防空系统不可能拦截它没发现的目标。
|
||||
>
|
||||
> 因此 planner 与实时探测**必须共用同一个 3D 球冠判定**(`IsInCoverage`),这不是为了"好看的统一",而是正确性硬约束。
|
||||
>
|
||||
> **采样法 vs 解析法**:三维球冠-折线解析求交复杂度高,改用沿航路采样(步长 ≤ 50m)。采样引入的弧长误差 ≤ 一个步长,换算到推荐抛撒时机 ≤ ~1.5s(典型 120km/h),远小于云团膨胀窗口(~30s)和云团重叠冗余,**不影响火力计划结果**。所以采样误差可接受,但 2D→3D 的几何升级不可省略。
|
||||
|
||||
### 14.3 探测源构成
|
||||
|
||||
@ -1905,7 +1911,7 @@ FOR EACH 飞行无人机(维护"本帧已发现该目标的最优探测设备"
|
||||
| **DetectionSource 类加字段** | 14.5.1 | 同上 4 个三维几何字段 | 待加属性 |
|
||||
| **DetectionCalculator.IsInCoverage** | 14.2.1 | 三维球冠判定(水平距离 + 俯仰角 + 高度门限),planner 与实时探测共用 | 待实现 |
|
||||
| **DetectionCalculator.EffectiveRange** | 14.2 | 现有签名不变(返回综合水平距离基准),3D 判定在其上层 | 已实现(基础) |
|
||||
| **planner 适配 3D** | 14.2.1 | `EarliestDetection` 由"线段-圆求交"改为"沿航路采样点调 IsInCoverage" | 待改造 |
|
||||
| **planner 适配 3D** | 14.2.1 | `EarliestDetection` 由"线段-圆求交"改为"沿航路采样点调 IsInCoverage"。**正确性硬要求**:planner 判定=仿真事实,必须与真实 3D 探测能力一致,否则"未探测却拦截" | 待改造 |
|
||||
| **SimulationEngine 加 _detectionEntities** | 5.1 | Initialize 时从配置构建 `List<DetectionEntity>`,Tick 第5步遍历 | 待实现 |
|
||||
| **Tick 第5步实时探测** | 5.3 / 14.5.2 | 扫描 + 状态机 + 决策1/2/3/4 落地,触发 `TargetDetected` | 待实现 |
|
||||
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
# 实施计划与任务跟踪
|
||||
|
||||
> **项目**:反无人机仿真系统后端
|
||||
> **文档版本**:V1.4
|
||||
> **更新日期**:2026-06-15
|
||||
> **文档版本**:V1.5
|
||||
> **更新日期**:2026-06-16
|
||||
|
||||
---
|
||||
|
||||
@ -16,9 +16,11 @@ Phase 4 ✅ 仿真引擎
|
||||
Phase 5 ✅ 报告生成
|
||||
Phase 6 ✅ Unity 集成(桥接层 + 示例项目)
|
||||
Phase 7 ✅ 打磨收尾
|
||||
Phase 8 🔄 待开发(天气/物理模型统一已完成)
|
||||
Phase 8 ✅ 天气/物理模型统一
|
||||
Phase 9 ✅ 性能优化 + 架构文档校准
|
||||
Phase 10 ⏳ 探测实时链路(设计完成,待开发)
|
||||
────────────────────────
|
||||
已完成 P1-P7
|
||||
已完成 P1-P9
|
||||
```
|
||||
|
||||
---
|
||||
@ -124,7 +126,7 @@ Phase 8 🔄 待开发(天气/物理模型统一已完成)
|
||||
|
||||
| # | 任务 | 状态 |
|
||||
|---|------|------|
|
||||
| 7.1 | 性能优化 | ⬜(非关键,实体少时自然 < 5ms) |
|
||||
| 7.1 | 性能优化 | ✅ Tick 热路径优化,Unity 满载帧率 <20→200+ FPS(详见总体架构设计第十三章) |
|
||||
| 7.2 | TTL 清理(FrameDataStore.CleanupExpired + 测试) | ✅ |
|
||||
| 7.3 | 边界测试(空部署/强风/超长航路/空基弹药) | ✅ |
|
||||
| 7.4 | 错误处理加固 | ⬜(基本校验已有) |
|
||||
@ -139,10 +141,10 @@ Phase 8 🔄 待开发(天气/物理模型统一已完成)
|
||||
|
||||
| 指标 | 值 |
|
||||
|------|------|
|
||||
| 测试总数 | **191** |
|
||||
| 测试总数 | **204**(通过 202,跳过 2) |
|
||||
| 行覆盖率 | **95.4%**(待重测) |
|
||||
| 分支覆盖率 | **80.5%**(待重测) |
|
||||
| 执行时间 | ~41 秒 |
|
||||
| 执行时间 | ~7 秒 |
|
||||
| Core 程序集 | `CounterDrone.Core.dll` (.NET Standard 2.1) |
|
||||
| 共享物理工具类 | `Kinematics` / `RouteGeometry` / `CloudExpansionModel` / `DamageAssessment` |
|
||||
| 全局配置 | `data/planner_config.json`(planner 策略参数,代码零默认值) |
|
||||
@ -152,9 +154,10 @@ Phase 8 🔄 待开发(天气/物理模型统一已完成)
|
||||
|
||||
---
|
||||
|
||||
## 四、Phase 8:待开发功能(后端范围)
|
||||
## 四、Phase 8:天气/物理统一与功能增强
|
||||
|
||||
> UI/视觉/动画属于前端同事范畴,以下仅列后端 Core 需实现的功能。
|
||||
> 8.0(天气/物理统一)已完成;8.1/8.2/8.3 为后续增强功能,部分待开发。
|
||||
> UI/视觉/动画属于前端同事范畴,以下仅列后端 Core 的功能。
|
||||
|
||||
### 8.0 天气与物理模型统一(✅ 已完成)
|
||||
|
||||
@ -173,30 +176,125 @@ Phase 8 🔄 待开发(天气/物理模型统一已完成)
|
||||
|
||||
| # | 功能 | 说明 |
|
||||
|---|------|------|
|
||||
| 8.1.1 | 探测设备搜索逻辑 | ✅ 事前规划已接入探测能力:`DetectionCalculator` 算统一信息网络最早探测点,planner 基于探测边界(非上帝视角起点)算到达时间;天气(Visibility)衰减光电探测距离;探测精度影响抛撒散布。实时探测→火控链路留作未来增强 |
|
||||
| 8.1.2 | 蜂群运动模型 | `FormationMode.Swarm` 枚举已定义,需差异化行为(随机扰动、个体差异) |
|
||||
| 8.1.3 | 空基平台 + DefensePlanner | ✅ 五步规划引擎,通道模型,物理间隔错发,路径积分毁伤判定 | ✅ |
|
||||
| 8.1.4 | 预置典型目标库 | 具体无人机型号 JSON 配置(如 DJI Mavic 3、Shahed-136 等),导入 `TargetConfig` 默认值 |
|
||||
| 8.1.5 | 毁伤曲线参数校准 | ✅ RequiredExposureSeconds 替代硬编码,密度阈值统一在引擎检查 | ✅ |
|
||||
| 8.1.6 | Fallback/default 清理 | ✅ 删除所有硬编码默认值和静默 fallback,参数缺失即报错 | ✅ |
|
||||
| 8.1.1 | 探测设备搜索逻辑 | ✅ 事前规划:`DetectionCalculator` 算统一信息网络最早探测点,planner 基于探测边界算到达时间;天气衰减光电;精度影响散布。**实时探测设计完成**(总体架构设计第十四章),待 Phase 10 开发 |
|
||||
| 8.1.2 | 蜂群运动模型 | ⬜ `FormationMode.Swarm` 枚举已定义,需差异化行为(随机扰动、个体差异) |
|
||||
| 8.1.3 | 空基平台 + DefensePlanner | ✅ 五步规划引擎,通道模型,物理间隔错发,路径积分毁伤判定 |
|
||||
| 8.1.4 | 预置典型目标库 | ⬜ 具体无人机型号 JSON 配置(如 DJI Mavic 3、Shahed-136 等),导入 `TargetConfig` 默认值 |
|
||||
| 8.1.5 | 毁伤曲线参数校准 | ✅ RequiredExposureSeconds 替代硬编码,密度阈值统一在引擎检查 |
|
||||
| 8.1.6 | Fallback/default 清理 | ✅ 删除所有硬编码默认值和静默 fallback,参数缺失即报错 |
|
||||
|
||||
### 8.2 报告与导出
|
||||
|
||||
| # | 功能 | 说明 |
|
||||
|---|------|------|
|
||||
| 8.2.1 | PDF 导出 | QuestPDF 或其他 .NET Standard 2.1 方案调研,`IReportService.ExportReport()` 实现 |
|
||||
| 8.2.2 | Word 导出 | 调研可行方案 |
|
||||
| 8.2.1 | PDF 导出 | ⬜ QuestPDF 或其他 .NET Standard 2.1 方案调研,`IReportService.ExportReport()` 实现 |
|
||||
| 8.2.2 | Word 导出 | ⬜ 调研可行方案 |
|
||||
|
||||
### 8.3 第三方对接
|
||||
|
||||
| # | 功能 | 说明 |
|
||||
|---|------|------|
|
||||
| 8.3.1 | 第三方 DLL 接口规范 | 与供应商对齐 `ICloudDispersionModel` P/Invoke 签名和调用约定 |
|
||||
| 8.3.2 | 扩散模型替换验证 | 通过 `AlgorithmFactory.Register` 切换到第三方实现后的集成测试 |
|
||||
| 8.3.1 | 第三方 DLL 接口规范 | ⬜ 与供应商对齐 `ICloudDispersionModel` P/Invoke 签名和调用约定 |
|
||||
| 8.3.2 | 扩散模型替换验证 | ⬜ 通过 `AlgorithmFactory.Register` 切换到第三方实现后的集成测试 |
|
||||
|
||||
---
|
||||
|
||||
## 五、里程碑
|
||||
## 五、Phase 9:性能优化 + 架构文档校准 ✅
|
||||
|
||||
**目标**:Tick 热路径性能优化(Unity 满载 <20→200+ FPS)+ 总体架构设计文档与实现对齐。
|
||||
|
||||
### 9.1 性能优化(✅ 已完成)
|
||||
|
||||
| # | 任务 | 状态 | 说明 |
|
||||
|---|------|------|------|
|
||||
| 9.1.1 | DroneEntity 航路几何缓存 | ✅ | 构造时预算 `_totalArc`/`_segLen[]`/`_cumArc[]`,Update 内 O(1) 定位段,消除每帧重复几何运算 |
|
||||
| 9.1.2 | 仿真期零字符串分配 | ✅ | EntitySnapshot 强类型字段流转,JSON 推迟到 Flush;Unity 端移除 JsonDocument.Parse(最大收益项) |
|
||||
| 9.1.3 | ControlZoneEntity 顶点 2D 缓存 | ✅ | 构造时缓存 `_vertices2D`,ContainsPoint 零分配 |
|
||||
| 9.1.4 | 帧数据内存缓存+批量落库 | ✅ | List\<FrameRecord\> struct 缓冲,Flush 单事务 InsertAll |
|
||||
| 9.1.5 | 毁伤判定快速排斥 | ✅ | 浓度阈值 + 2R 距离两层裁剪 |
|
||||
|
||||
> 详见《总体架构设计》第十三章。优化前后实测:Unity 满载渲染帧率 <20 FPS(卡顿)→ 200+ FPS。
|
||||
|
||||
### 9.2 架构文档校准(✅ 已完成)
|
||||
|
||||
| # | 任务 | 状态 | 说明 |
|
||||
|---|------|------|------|
|
||||
| 9.2.1 | 修正文档与实现不符 | ✅ | AlgorithmFactory(Func 工厂)、IDefensePlanner.Plan(4参数)、IDamageModel(RequiredExposureSeconds)、FrameDataStore(类非接口)、删除 IRecordService、DroneEntity 弧长运动、Tick 流程顺序、StateData 双轨 |
|
||||
| 9.2.2 | 新增性能设计章节 | ✅ | 总体架构设计 第十三章 |
|
||||
| 9.2.3 | 探测设备行为设计 | ✅ | 总体架构设计 第十四章(双链路 + 3D 球冠 + 5 项决策 + 数据模型清单)|
|
||||
|
||||
---
|
||||
|
||||
## 六、Phase 10:探测实时链路开发 ⏳(设计完成,待开发)
|
||||
|
||||
**目标**:实现仿真运行时实时探测(链路 B),产生 `TargetDetected` 事件 + 可视化数据;并将 planner 探测判定升级到 3D 球冠。
|
||||
**前置设计**:《总体架构设计》第十四章(V13),5 项行为决策已确认(见 14.6)。
|
||||
**关键约束**:
|
||||
- 实时探测是**纯只读观测层**(决策 3/4),不影响 FireSchedule、不驱动拦截;
|
||||
- **planner 与实时探测必须共用 3D 球冠判定**(`IsInCoverage`)——正确性硬要求,否则会出现"未探测却拦截"的物理错误(详见 T3)。
|
||||
|
||||
> 任务依赖关系见 10.5。建议按 T1→T2→T3→T4 顺序,T5/T6 可并行。
|
||||
|
||||
### 10.1 数据层(T1)
|
||||
|
||||
| # | 任务 | 预估 | 状态 | 说明 |
|
||||
|---|------|------|------|------|
|
||||
| T1.1 | EquipmentDeployment 加 4 列 | 0.5h | ⬜ | `MinElevation`/`MaxElevation`/`MinDetectAlt`/`MaxDetectAlt`,均 NULLABLE |
|
||||
| T1.2 | DetectionSource 类扩展 | 0.5h | ⬜ | 同步加 4 个三维几何属性 |
|
||||
| T1.3 | BuildDetectionSources 读取新字段 | 0.5h | ⬜ | 缺失时退化球冠(无限制,等价 2D),保证存量数据平滑过渡 |
|
||||
|
||||
### 10.2 算法层(T2)
|
||||
|
||||
| # | 任务 | 预估 | 状态 | 说明 |
|
||||
|---|------|------|------|------|
|
||||
| T2.1 | DetectionCalculator.IsInCoverage | 1h | ⬜ | 3D 球冠判定:水平距离 + 俯仰角 ∈ [Min,Max]Elevation + 高度 ∈ [Min,Max]DetectAlt |
|
||||
| T2.2 | IsInCoverage 单元测试 | 0.5h | ⬜ | 边界用例:球冠内/外、正顶、俯仰越界、高度越界 |
|
||||
|
||||
### 10.3 planner 3D 适配(T3)🔒 正确性硬要求
|
||||
|
||||
| # | 任务 | 预估 | 状态 | 说明 |
|
||||
|---|------|------|------|------|
|
||||
| T3.1 | EarliestDetection 改采样法 | 2h | ⬜ | 从"线段-圆解析求交"改为"沿航路采样点(步长≤50m)调 IsInCoverage" |
|
||||
| T3.2 | DefensePlannerTests 回归验证 | 1h | ⬜ | 跑全量测试验证;若有测试因 3D 高度门限导致"探测不到→拦截失败"而失败,需核查是测试用例高度设置问题还是真实回归 |
|
||||
|
||||
> 🔒 **T3 不可砍、不可降级为 2D**。这是正确性硬约束,不是精度优化:
|
||||
> - 仿真是按 planner 规划执行的,**planner 的探测判定 = 仿真的事实依据**。
|
||||
> - 若 planner 保留 2D 圆判定,会出现"目标高度超出探测设备真实 3D 球冠范围(探测不到),但 planner 按 2D 判定能发现并规划拦截、仿真照此摧毁"的**物理错误结局**——防空系统不可能拦截它没发现的目标。
|
||||
> - 因此 planner 必须与实时探测共用 `IsInCoverage`(详见总体架构设计 14.2.1)。
|
||||
>
|
||||
> **关于采样误差(已澄清,可放心)**:采样法 vs 解析法的弧长误差 ≤ 一个步长(50m),换算到推荐抛撒时机 ≤ ~1.5s(120km/h),远小于云团膨胀窗口(~30s)和云团重叠冗余,**不影响火力计划结果**。所以 T3 的重点是用 3D 几何保证"该探测的能探测、不该探测的探测不到",而非追求采样精度。
|
||||
|
||||
### 10.4 引擎层(T4)
|
||||
|
||||
| # | 任务 | 预估 | 状态 | 说明 |
|
||||
|---|------|------|------|------|
|
||||
| T4.1 | DetectionEntity 运行时实体 | 1h | ⬜ | 持有 DetectionSource + 每无人机探测状态机(Undetected ⇄ Detected) |
|
||||
| T4.2 | SimulationEngine 加 _detectionEntities | 0.5h | ⬜ | Initialize 时构建,Tick 第 5 步遍历 |
|
||||
| T4.3 | Tick 第 5 步实时扫描 | 2h | ⬜ | 决策 1(离开回退)、决策 2(融合取最早/同刻取精度高),触发 TargetDetected |
|
||||
| T4.4 | SimulationEngineTests 验证 | 1h | ⬜ | 断言:进入探测范围触发事件、离开后再次进入重新触发、多设备融合取最早 |
|
||||
|
||||
### 10.5 前端 / 报告(T5,可并行)
|
||||
|
||||
| # | 任务 | 预估 | 状态 | 说明 |
|
||||
|---|------|------|------|------|
|
||||
| T5.1 | Unity 探测范围可视化 | — | ⬜ | 前端范畴:3D 球冠 wireframe / 发现标记(决策 4 仅可视化) |
|
||||
| T5.2 | 时序图/报告纳入 TargetDetected | 0.5h | ⬜ | ReportGenerator 时序表增加发现事件 |
|
||||
|
||||
### 10.6 任务依赖与顺序
|
||||
|
||||
```
|
||||
T1(数据层)→ T2(算法层 IsInCoverage)
|
||||
↓
|
||||
T3(planner 3D 适配 ⚠️耦合点)→ T4(引擎实时扫描)
|
||||
↓
|
||||
T5(前端/报告,可并行)
|
||||
```
|
||||
|
||||
**总预估**:约 11h(T1 1.5h + T2 1.5h + T3 3h + T4 4.5h + T5.2 0.5h;前端 T5.1 不计入后端)。
|
||||
|
||||
---
|
||||
|
||||
## 七、里程碑
|
||||
|
||||
| 里程碑 | 状态 |
|
||||
|------|------|
|
||||
@ -207,10 +305,13 @@ Phase 8 🔄 待开发(天气/物理模型统一已完成)
|
||||
| M5 — 报告可生成 | ✅ |
|
||||
| M6 — Unity 可演示 | ✅ |
|
||||
| M7 — 交付就绪 | ✅ |
|
||||
| M8 — 天气/物理模型统一 | ✅ |
|
||||
| M9 — 性能优化 + 文档校准 | ✅ |
|
||||
| M10 — 探测实时链路 | ⏳ 设计完成(V13),待开发 |
|
||||
|
||||
---
|
||||
|
||||
## 六、状态图例
|
||||
## 八、状态图例
|
||||
|
||||
| 符号 | 含义 |
|
||||
|------|------|
|
||||
|
||||
Loading…
Reference in New Issue
Block a user