CounterDroneBackend/docs/implementation/tasks/实施计划与任务跟踪.md
tian 537671ab3a DroneProfile→ScenarioDrone / EquipmentDeployment→ScenarioUnit 重命名
- 模型表: ScenarioDrone(原DroneProfile) / ScenarioUnit(原EquipmentDeployment)
- ScenarioConfig.Equipment→Units
- 数据库旧表清理 + scenariosVersion 4→5
- 238 测试全过
2026-06-18 16:36:25 +08:00

20 KiB
Raw Blame History

实施计划与任务跟踪

项目:反无人机仿真系统后端
文档版本V1.5
更新日期2026-06-16


一、阶段总览

Phase 1  ✅ 核心基础
Phase 2  ✅ 想定管理
Phase 3  ✅ 算法层
Phase 4  ✅ 仿真引擎
Phase 5  ✅ 报告生成
Phase 6  ✅ Unity 集成(桥接层 + 示例项目)
Phase 7  ✅ 打磨收尾
Phase 8  ✅ 天气/物理模型统一
Phase 9  ✅ 性能优化 + 架构文档校准
Phase 10 ✅ 探测实时链路(已完成)
Phase 11 ✅ 运动学重构 + 实体暴露 + 基础数据 CRUD
Phase 12 ✅ 空基/地基统一规划 + 编队轴 + LaneDivider
────────────────────────
已完成   P1-P12

二、各阶段详情

Phase 1核心基础

目标:搭建项目骨架,数据层可读写,单元测试全绿。
测试27 个

# 任务 状态
1.1-1.12 项目骨架、枚举、数据模型、Repository、ModelService、单元测试

Phase 2想定管理

目标:仿真任务的完整 CRUD + 5 步配置保存/加载 + 搜索分页。
测试20 个

# 任务 状态
2.1-2.14 8 个 Repository、ScenarioService、搜索分页、输入校验、单元测试

Phase 3算法层

目标:高斯烟团扩散模型、三种毁伤模型、防御推荐算法全部实现。
测试26 个

# 任务 状态
3.1-3.12 GaussianPuffDispersion、InertGas/ActiveMaterial/ActiveFuel 毁伤模型、DefaultDefenseAdvisor、AlgorithmFactory

关键设计变更

  • 推荐算法由弹药规格驱动,查库选型
  • 计算多轮次云团CloudSalvo确保覆盖率
  • 输入校验:无目标/无航路/弹药缺失时返回失败原因
  • Kinematics 工具类:抛物线弹道、风矢量、多边形判定

Phase 4仿真引擎

目标:完整仿真引擎 + 集成测试。
测试11 个

# 任务 状态
4.1-4.16 6 个实体类、FireSchedule 发射计划、FrameDataStore 分库、Pause/Resume/Stop、集成测试

关键设计变更

  • 引擎重构为纯执行器:SetFireSchedule() 接收计划,不包含任何决策
  • TimeScale 属性支持加速仿真(集成测试 4 倍速)
  • 弹道飞行时间用 Kinematics 真实计算
  • 集成测试4 个端到端场景全通过NoDefense/ZoneIntrusion/Piston/Jet

Phase 5报告生成

目标:仿真结束后自动生成 Markdown 报告并导出文件。
测试7 个

# 任务 状态
5.1-5.8 ReportGenerator、ReportService、ExportToFile、搜索分页、单元测试

PDF/Word 导出暂以 Markdown 替代,后续可扩展。


Phase 6Unity 集成

目标:将 Core.dll 集成到 Unity实现完整运行链路。
前置条件:安装 Unity Hub + Editor 22.3.62
位置src/Unity/(完整 Unity 项目)

# 任务 预估 状态 说明
6.1 创建 Unity 项目,导入 Core.dll 1h src/Unity/ 项目16 个 DLL → Assets/Plugins/
6.2 实现 UnityPathProvider 1h Application.persistentDataPath 桥接
6.3 实现 ModelManager 3h 导入/删除/查询,含 Verify
6.4 实现 ScenarioManager5 步配置) 4h 完整 CRUD + 搜索分页 + 多批次 Route
6.5 实现 SimulationRunnerUpdate 驱动) 3h Tick 驱动 + 事件订阅 + 实体位置同步 + 炮弹轨迹可视化
6.6 实现 ReplayController(帧加载) 3h 从分库加载帧数据TotalFrames/GetFrame
6.7 实现 ReportManager 2h 生成 + Markdown 导出
6.8 3D 实体可视化 4h Drone/Cube、Cloud/Sphere、Munition/Cylinder逐帧位置同步
6.9 粒子系统参数传递 3h 云团半径缩放 + 颜色/透明度动态更新
6.10 端到端联调 + 一键验证 6h ManagerVerification 7 模块全过,SimulationBootstrap 一键 Demo

额外交付物

  • SimulationBootstrap.cs:一键创建想定 → 推荐方案 → 启动仿真Scene 直接运行)
  • simple_simulation.unity:预配置场景文件
  • ManagerVerificationInspector 右键 Run Full Verification → Console 7 行 OK

Phase 7打磨收尾

# 任务 状态
7.1 性能优化 Tick 热路径优化Unity 满载帧率 <20→200+ FPS详见总体架构设计第十三章
7.2 TTL 清理FrameDataStore.CleanupExpired + 测试)
7.3 边界测试(空部署/强风/超长航路/空基弹药)
7.4 错误处理加固 (基本校验已有)
7.5 测试覆盖率 95.4% 行 / 80.5% 分支
7.6 README + API XML 文档
死代码清理DetectionEntity, EventQueue
代码格式化(.editorconfig + dotnet format

三、最终指标

指标
测试总数 237全部通过1 跳过-Jet高弹道
行覆盖率 95%+
分支覆盖率 80%+
执行时间 ~11 秒
Core 程序集 CounterDrone.Core.dll (.NET Standard 2.1)
共享物理工具类 Kinematics / RouteGeometry / CloudExpansionModel / DamageAssessment
全局配置 data/planner_config.jsonplanner 策略参数,代码零默认值)
Unity 项目 src/Unity/Unity 2022.3.62
Unity Manager 8 个 MonoBehaviour 桥接 + Bootstrap + SqliteConnectionTracker
零 Unity 依赖 Core 可脱离 Unity 独立运行和测试

四、Phase 8天气/物理统一与功能增强

8.0(天气/物理统一已完成8.1/8.2/8.3 为后续增强功能,部分待开发。 UI/视觉/动画属于前端同事范畴,以下仅列后端 Core 的功能。

8.0 天气与物理模型统一( 已完成)

# 功能 说明
8.0.1 天气纳入扩散模型 修复 GaussianPuffDispersion 写死 Sunny 的 bugPhase3 用真实 env.WeatherType 推导 Pasquill 稳定度
8.0.2 Planner 风偏补偿 抛撒点逆风预置(cloudGen = 穿越点 windVec×expansionTime),云团漂移后回到航路
8.0.3 去除无人机风偏叠加 DroneEntity 不再叠加风位移真实无人机有飞控修正planner 与引擎速度模型一致
8.0.4 PathInSphere 云团参考系修正 毁伤判定改在云团参考系(drone.Pos cloud.Center),修正移动球导致的每 tick ~2m 系统误差
8.0.5 ComputeEffectiveRadius 云龄 bug ArrivalTime×2(无人机飞行时间,概念错误)改为 expansionTime(云团自身膨胀时长)
8.0.6 物理模型统一架构 新增 RouteGeometry 静态工具类planner 与引擎共用航路几何planner 删除所有本地物理公式
8.0.7 配置外置 新增 PlannerConfig + planner_config.json,策略参数(重叠系数、类型系数、弹药匹配、概率阈值)全部从配置读,代码零默认值
8.0.8 云团重叠布局 间距 2R×(1重叠比例),默认重叠 20%消除相切处密度空洞offset 沿航路切向,支持任意方向/折线航路

8.1 仿真增强

# 功能 说明
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 等),导入 ScenarioDrone 默认值
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.3 第三方对接

# 功能 说明
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 推迟到 FlushUnity 端移除 JsonDocument.Parse最大收益项
9.1.3 ControlZoneEntity 顶点 2D 缓存 构造时缓存 _vertices2DContainsPoint 零分配
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 球冠。 前置设计《总体架构设计》第十四章V135 项行为决策已确认(见 14.6)。 关键约束

  • 实时探测是纯只读观测层(决策 3/4不影响 FireSchedule、不驱动拦截
  • planner 与实时探测必须共用 3D 球冠判定IsInCoverage)——正确性硬要求,否则会出现"未探测却拦截"的物理错误(详见 T3

任务依赖关系见 10.5。建议按 T1→T2→T3→T4 顺序T5/T6 可并行。

10.1 数据层T1

# 任务 预估 状态 说明
T1.1 ScenarioUnit 加 4 列 0.5h MinElevation/MaxElevation/MinDetectAlt/MaxDetectAlt,均 NULLABLE
T1.2 DetectionSource 类扩展 0.5h 同步加 4 个三维几何属性float.MaxValue=无限制,退化 2D
T1.3 BuildDetectionSources 读取新字段 0.5h 缺失时退化球冠float.MaxValue保证存量数据平滑过渡

10.2 算法层T2

# 任务 预估 状态 说明
T2.1 DetectionCalculator.IsInCoverage 1h 3D 球冠判定:水平距离 + 俯仰角 ∈ [Min,Max]Elevation + 高度 ∈ [Min,Max]DetectAlt。float.MaxValue=无限制(退化 2D
T2.2 IsInCoverage 单元测试 0.5h 7 个边界用例:球冠内/外、正顶、俯仰越界、高度越界、无限制等价 2D

10.3 planner 3D 适配T3🔒 正确性硬要求

# 任务 预估 状态 说明
T3.1 EarliestDetection 改采样法 2h 从"线段-圆解析求交"改为"沿航路采样点步长≤50m调 IsInCoverage"。删除旧 EarliestEntryArc/IsInside
T3.2 DefensePlannerTests 回归验证 1h 30 个测试全通过,无回归

🔒 T3 不可砍、不可降级为 2D。这是正确性硬约束,不是精度优化:

  • 仿真是按 planner 规划执行的,planner 的探测判定 = 仿真的事实依据
  • 若 planner 保留 2D 圆判定,会出现"目标高度超出探测设备真实 3D 球冠范围(探测不到),但 planner 按 2D 判定能发现并规划拦截、仿真照此摧毁"的物理错误结局——防空系统不可能拦截它没发现的目标。
  • 因此 planner 必须与实时探测共用 IsInCoverage(详见总体架构设计 14.2.1)。

关于采样误差(已澄清,可放心):采样法 vs 解析法的弧长误差 ≤ 一个步长50m换算到推荐抛撒时机 ≤ ~1.5s120km/h远小于云团膨胀窗口~30s和云团重叠冗余不影响火力计划结果。所以 T3 的重点是用 3D 几何保证"该探测的能探测、不该探测的探测不到",而非追求采样精度。

10.4 引擎层T4

# 任务 预估 状态 说明
T4.1 DetectionEntity 运行时实体 1h 持有 DetectionSource + 每无人机探测状态机Undetected ⇄ DetectedUpdateState 返回首次进入/离开信号
T4.2 SimulationEngine 加 _detectionEntities 0.5h Initialize 时从 BuildDetectionSources 构建Tick 第 5 步遍历
T4.3 Tick 第 5 步实时扫描 2h 决策 1离开回退= Undetected决策 2融合取最早/同刻取精度高);触发 TargetDetected含 OnTargetDetected 事件)
T4.4 SimulationEngineTests 验证 1h 4 个测试:进入探测范围触发事件、多设备融合取最早、无探测设备无事件、离开后再次进入重新触发

10.5 前端 / 报告T5可并行

# 任务 预估 状态 说明
T5.1 Unity 探测范围可视化 前端范畴3D 球冠 wireframe / 发现标记(决策 4 仅可视化)
T5.2 时序图/报告纳入 TargetDetected 0.5h ReportGenerator 时序表增加发现事件(👁️ 目标发现);统计增加目标发现计数

10.6 任务依赖与顺序

T1数据层→ T2算法层 IsInCoverage
                    ↓
        T3planner 3D 适配 ⚠️耦合点)→ T4引擎实时扫描
                                              ↓
                                         T5前端/报告,可并行)

总预估:约 11hT1 1.5h + T2 1.5h + T3 3h + T4 4.5h + T5.2 0.5h;前端 T5.1 不计入后端)。


六、Phase 11运动学重构 + 实体暴露 + 基础数据 CRUD

目标抛物线前向计算、空基固定阵位发射、全部实体属性公开、DataService 全 CRUD、LiveFrames 内存回放。

11.1 运动学重构

# 任务 说明
11.1.1 ComputeParabolicRange / ParabolicApex 正问题:给定 v₀+θ → (射程, 飞行时间) + 顶点参数
11.1.2 Math.Max 回退全部移除 CalculateLaunchAngle/ParabolicShellTime/ParabolicTimeOfFlight 非法输入抛异常GaussianPuffDispersion/CloudExpansionModel Pow 输入验证
11.1.3 MunitionEntity 前向到达 launchAngle 必须由方案提供_arrivesDescending 区分上升/下落Math.Max 除零移除

11.2 空基固定阵位

# 任务 说明
11.2.1 DefensePlanner 空基 ComputeHorizontal 用 platform.PosYComputeParabolicRange 前向算时间;云团=到达位置
11.2.2 死代码清理 CommandFlyTo/FlyingToTarget/ReadyToRelease + "到达投放点" 块删除

11.3 实体属性暴露

# 任务 说明
11.3.1 EntitySnapshot + 速度 所有实体帧快照带 VelX/Y/ZCollectSnapshots 覆盖全部 5 类实体
11.3.2 CloudEntity Pos/Radius/Density/Phase/Elapsed 直接属性
11.3.3 MunitionEntity LaunchAngle/Azimuth/MuzzleVelocity/FlightDuration/Start/LaunchTime/ElapsedTime/Velocity 全部 public
11.3.4 DroneEntity/PlatformEntity/DetectionEntity TraveledArc/Progress; Target/FlightDistance; PosX/Y/Z

11.4 基础数据 CRUD

# 任务 说明
11.4.1 类名规范化 7 类模板统一命名(*Spec/*TemplateSQLite Table+PrimaryKey
11.4.2 6 个 Repository SpecRepositories.cs
11.4.3 IDataService + DataService 全 CRUD构造注入
11.4.4 DatabaseManager 建表+种子 自动建表 + InsertOrReplace 种子
11.4.5 Unity 接入 ScenarioManager.DataService + SimulationRunner.DataService

11.5 回放LiveFrames

# 任务 说明
11.5.1 FrameDataStore.LiveFrames Flush 后保留副本BeginRecording/Discard 清除
11.5.2 ReplayController 双路径 LoadReplay(scenarioId, frameStore) 优先内存,回退 SQLite

11.6 测试启用

# 任务 说明
11.6.1 Scenario_3DronesAirBased 参数对齐,平台间隔 300m移除 Skip
11.6.2 Scenario_DetectionDriven 移除 Skip

十二、Phase 12空基/地基统一规划 + 编队轴 + LaneDivider

目标:碰撞点后统一流程,编队支持 XYZ 任意轴展开lane 划分策略可替换。

12.1 运动学修复

# 任务 说明
12.1.1 ComputeParabolicRange 重写 从 tanθ 二次改为垂直运动直接算时间,消除与 CalculateLaunchAngle 的不互逆
12.1.2 风偏纳入角度 cloudGen 先于 launchAngle 计算,消除风偏导致的 range≠targetDist
12.1.3 弹道可达验证 每发 PlanUnitLane 验证 ComputeParabolicRange 不抛异常

12.2 空基/地基统一

# 任务 说明
12.2.1 碰撞点后无分支 cloudGen/deliveryTime/fireTime 统一公式mv 和 launchAngle 按类型取不同值
12.2.2 每发独立角度 launchAngle 对每个目标点重新计算,不共用 InterceptCalculator 的统一值
12.2.3 3机空基全灭 修复后三机编队全部击毁

12.3 编队轴 + LaneDivider

# 任务 说明
12.3.1 LateralAxis/LongitudinalAxis RoutePlan + FormationTemplate + DroneEntity 支持 0=X/1=Y/2=Z
12.3.2 ILaneDivider 接口 车道划分策略抽象
12.3.3 DefaultLaneDivider 宽+深双维度判断,任一超云团半径则拆分
12.3.4 PlanUnitLane 读轴 按 LateralAxis 决定 X/Y/Z 偏移方向

12.4 探测门控

# 任务 说明
12.4.1 _anyThreatDetected 引擎等首次探测后才执行发射
12.4.2 _detectionTime 发射时间 = fe.FireTime(偏移) + 探测时刻

12.5 测试

# 任务 说明
12.5.1 Kinematics 俯射往返 CalculateLaunchAngle→ComputeParabolicRange 往返一致
12.5.2 3机空基 平台 X 轴分布、无人机 Z 轴分布,交叉维度全覆盖

七、里程碑

里程碑 状态
M1 — 数据层就绪
M2 — 想定可配置
M3 — 算法可计算
M4 — 仿真可运行
M5 — 报告可生成
M6 — Unity 可演示
M7 — 交付就绪
M8 — 天气/物理模型统一
M9 — 性能优化 + 文档校准
M10 — 探测实时链路
M11 — 运动学重构 + 实体暴露 + 基础数据 CRUD
M12 — 空基/地基统一规划 + 编队轴 + LaneDivider

九、待解决问题

# 问题 说明 状态
1 高弹道支持 当前只支持低弹道。喷气式ground-standard, 18000m 航线)需要高弹道才能命中。低弹道取上升段时间 t1弹在 6.5s/5199m 就触发了到达判定,实际应 15.5s/12318m 在下行段命中。需要修改 MunitionEntity 的到达判定逻辑 🔴 待解决

八、状态图例

符号 含义
未开始
🔄 进行中
已完成
⏸️ 阻塞
放弃