275 lines
9.9 KiB
Markdown
275 lines
9.9 KiB
Markdown
# ActiveProtect 仿真系统
|
||
|
||
ActiveProtect 是一个用于模拟激光制导导弹和防御系统的仿真环境。
|
||
|
||
## 功能特性
|
||
|
||
### 组件仿真
|
||
|
||
- 激光半主动制导导弹
|
||
- 激光驾束制导导弹
|
||
- 红外指令制导导弹
|
||
- 红外成像制导导弹
|
||
- 毫米波末制导导弹
|
||
- 末敏弹(母弹和子弹)
|
||
- 激光告警器
|
||
- 激光干扰器
|
||
- 激光指示器
|
||
- 激光驾束仪
|
||
- 毫米波测高仪
|
||
- 毫米波辐射计
|
||
- 坦克
|
||
|
||
### 可扩展的仿真框架
|
||
|
||
- 仿真管理器
|
||
- 仿真元素基类
|
||
- 仿真事件定义
|
||
- 导弹基类
|
||
- 导引系统基类
|
||
- 传感器基类
|
||
|
||
## Unity 兼容性
|
||
|
||
本项目设计时考虑了与 Unity 游戏引擎的兼容性, 使用C# 9.0 语法。以下是在 Unity 中使用本项目的注意事项:
|
||
|
||
1. 向量和数学运算:本项目使用自定义的 `Vector3D` 类。在 Unity 中,您可以将其替换为 Unity 的 `Vector3` 类。
|
||
|
||
2. 仿真更新:Unity 使用 `MonoBehaviour` 的 `Update` 方法进行每帧更新。您可以创建一个 `SimulationManager` 脚本,并在其 `Update` 方法中调用仿真系统的更新逻辑。
|
||
|
||
3. 可视化:Unity 提供了强大的 3D 渲染能力。您可以为每个仿真元素(如导弹、坦克等)创建相应的 Unity 游戏对象,并在每帧更新其位置和旋转。
|
||
|
||
4. 输入处理:将键盘/鼠标输入处理逻辑替换为 Unity 的输入系统(如 `Input.GetKey()` 等)。
|
||
|
||
5. 协程:Unity 支持协程,可用于实现某些异步操作或时间相关的功能。
|
||
|
||
6. 物理系统:如果需要更复杂的物理模拟,可以考虑使用 Unity 的物理引擎替代当前的简化物理模型。
|
||
|
||
7. 事件系统:Unity 有自己的事件系统,您可能需要调整当前的事件处理机制以更好地与 Unity 集成。
|
||
|
||
8. 性能优化:在 Unity 中,您可以使用 Unity Profiler 来监控和优化性能。
|
||
|
||
通过这些调整,您应该能够将 ActiveProtect 仿真系统顺利集成到 Unity 项目中,从而获得更好的可视化效果和交互体验。
|
||
|
||
## 使用说明
|
||
|
||
1. 克隆仓库到本地
|
||
2. 使用 Visual Studio 或其他 C# IDE 打开解决方案
|
||
3. 编译并运行项目
|
||
|
||
## 贡献指南
|
||
|
||
欢迎提交 Pull Requests 来改进这个项目。在提交之前,请确保您的代码符合项目的编码规范,并且通过了所有的单元测试。
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证。详情请见 [LICENSE](LICENSE) 文件。
|
||
|
||
## 仿真运行流程(这个 Mermaid 图表会在支持 Mermaid 的 Markdown 查看器中渲染为一个流程图)
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[开始仿真] --> B[初始化SimulationManager]
|
||
B --> C[加载SimulationConfig]
|
||
C --> D[创建仿真元素]
|
||
D --> E[开始仿真循环]
|
||
E --> F{是否结束仿真?}
|
||
F -->|否| G[更新所有元素]
|
||
G --> H[收集数据]
|
||
H --> I[处理事件]
|
||
I --> E
|
||
F -->|是| J[结束仿真]
|
||
J --> K[评估结果]
|
||
K --> L[生成报告]
|
||
L --> M[结束]
|
||
```
|
||
|
||
## 反坦克导弹仿真系统
|
||
|
||
本项目旨在模拟反坦克导弹的飞行过程和攻击效果。
|
||
|
||
### 反坦克导弹飞行阶段
|
||
|
||
反坦克导弹的飞行过程通常可以分为以下几个主要阶段:
|
||
|
||
1. 发射阶段
|
||
- 导弹从发射装置或发射管中被推出
|
||
- 火箭发动机点火,提供初始推力
|
||
|
||
2. 加速阶段
|
||
- 导弹迅速加速到巡航速度
|
||
- 可能会抛掉一些辅助推进装置(如有)
|
||
|
||
3. 巡航阶段
|
||
- 导弹保持相对稳定的速度飞向目标
|
||
- 根据导引系统类型,可能会进行中途修正
|
||
|
||
4. 终端制导阶段
|
||
- 导弹接近目标,进入最后的制导阶段
|
||
- 可能会启动终端制导系统,如毫米波雷达或红外成像系统
|
||
|
||
5. 攻击阶段
|
||
- 导弹进行最后的机动,以最佳角度接近目标
|
||
- 可能会启动穿甲弹头或预制破片
|
||
|
||
6. 爆炸阶段
|
||
- 导弹击中目标并引爆
|
||
- 根据弹头类型,可能是穿甲、破片或破片-燃烧等效果
|
||
|
||
在仿真中,这些阶段被纳入计算,每个阶段可能有不同的物理特性和行为模式。例如,加速阶段可能有较大的加速度,而巡航阶段则保持恒定速度。终端制导阶段可能会有更频繁的方向调整。
|
||
|
||
## 项目结构
|
||
|
||
```csharp
|
||
ActiveProtect/
|
||
│
|
||
├── docs/ # 文档目录
|
||
│ └── Design.md # 设计文档
|
||
│ └── DesignMissile.md # 导弹设计文档
|
||
│ └── DesignSeeker.md # 导引头设计文档
|
||
│ └── DesignEvaluation.md # 效能评估设计文档
|
||
│
|
||
├── src/ # 源码目录
|
||
│ ├── DataProcessing/ # 数据处理目录
|
||
│ ├── Evaluation/ # 效能评估模型目录
|
||
│ ├── Models/ # 仿真模型目录
|
||
│ │ ├── Equipment/ # 设备目录
|
||
│ │ ├── Guidance/ # 制导系统目录
|
||
│ │ ├── Indicator/ # 指示器目录
|
||
│ │ ├── Jammer/ # 干扰器目录
|
||
│ │ ├── Missile/ # 导弹目录
|
||
│ │ ├── Sensor/ # 传感器目录
|
||
│ │ └── Warner/ # 告警器目录
|
||
│ ├── Simulation/ # 仿真目录
|
||
│ └── Utils/ # 工具类目录
|
||
│
|
||
├── Program.cs # 程序入口点
|
||
└── README.md # 项目说明文档
|
||
```
|
||
|
||
## 如何运行
|
||
|
||
1. 确保你的系统已安装 .NET 6.0。
|
||
2. 在终端中导航到项目根目录。
|
||
3. 运行以下命令来构建项目:
|
||
|
||
```shell
|
||
dotnet build
|
||
```
|
||
|
||
4. 运行以下命令来启动仿真:
|
||
|
||
```shell
|
||
dotnet run
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
- 当前仿真使用简化模型,可能无法完全反映真实世界的复杂性。
|
||
- 仿真结果仅供参考,不应用于实际军事决策。
|
||
|
||
## 比例导引系数(N)的选择
|
||
|
||
在导弹制导系统中,比例导引系数(N)是一个关键参数,它直接影响导弹的性能和行为。在我们的仿真系统中,用户可以根据不同的场景需求调整这个参数。
|
||
|
||
### N 值的影响
|
||
|
||
- **N = 3**:这是一个较为保守的选择,适合大多数情况。它提供了良好的稳定性和能源效率,但可能在应对高机动性目标时表现不佳。
|
||
- **N = 4**:这个值提供了更积极的制导,适合需要更高机动性的场景。它能更快地响应目标的变化,但可能会增加能源消耗。
|
||
- **N = 5**:这是一个更激进的选择,提供最高的机动性,但也带来了更大的能源消耗和可能的过度修正。
|
||
|
||
### 选择 N 值的考虑因素
|
||
|
||
1. **导弹类型**:大型、长程导弹通常使用较小的 N 值,而小型、短程导弹可以使用较大的 N 值。
|
||
2. **目标特性**:对付高速、高机动性目标时,可能需要较大的 N 值。
|
||
3. **作战环境**:在复杂环境中,可能需要更大的 N 值来应对突发情况。
|
||
4. **能源限制**:如果导弹燃料有限,较小的 N 值可以帮助节省能源。
|
||
5. **制导系统精度**:精度较高的系统可以使用较小的 N 值,而精度较低的系统可能需要较大的 N 值来补偿误差。
|
||
6. **任务要求**:精确打击任务可能需要较大的 N 值,而区域防御任务可能使用较小的 N 值。
|
||
|
||
在我们的仿真系统中,用户可以通过调整 `ProportionalNavigationCoefficient` 参数来设置不同的 N 值,以模拟各种实际情况下的导弹行为。我们建议用户尝试不同的 N 值,观察其对导弹性能的影响,以找到最适合特定场景的设置。
|
||
|
||
## 仿真时间步长
|
||
|
||
仿真时间步长是仿真系统中的一个重要参数,它直接影响仿真结果的准确性和计算效率。在我们的仿真系统中,用户可以通过调整 `SimulationTimeStep` 参数来设置不同的仿真时间步长。
|
||
|
||
1. **SimulationTimeStep = 0.01**:这是最短的时间步长,仿真精确度最高,但计算成本也最高。
|
||
2. **SimulationTimeStep = 0.025**:这是默认的时间步长,适用于大多数导弹和防御系统。(激光驾束制导导弹至少要用此步长)
|
||
3. **SimulationTimeStep = 0.05**:这是另一个常用的步长,适用于一些需要较低精度的场景。
|
||
4. **SimulationTimeStep = 0.1**:这是较低的时间步长,仿真精确度很低,用于快速验证。
|
||
|
||
用户可以根据具体需求选择合适的时间步长,以平衡仿真精度和计算效率。
|
||
|
||
## 效能评估模型
|
||
|
||
系统提供了多种评估模型,用于评估防护系统的性能:
|
||
|
||
### 1. 直接赋权模型
|
||
|
||
最基础的评估方法,通过直接指定权重进行加权计算。
|
||
|
||
特点:
|
||
|
||
- 计算简单直观
|
||
- 权重确定过程透明
|
||
- 适用于评价指标较少的情况
|
||
- 权重需满足:
|
||
- 非负性:所有权重 ≥ 0
|
||
- 归一性:所有权重之和 = 1
|
||
|
||
适用场景:
|
||
|
||
- 评价指标较少(通常≤5个)
|
||
- 各指标重要性差异明显
|
||
- 有充分的专家经验支持
|
||
- 需要快速得出评估结果
|
||
|
||
### 2. 模糊评价模型
|
||
|
||
适用于不确定性强的指标评估。通过建立隶属度矩阵,对多个评价指标进行综合评估。
|
||
|
||
特点:
|
||
|
||
- 能够处理模糊性和不确定性
|
||
- 支持多指标综合评价
|
||
- 通过隶属度函数量化定性指标
|
||
|
||
### 3. AHP层次分析模型
|
||
|
||
适用于层次分明的指标体系,通过建立判断矩阵进行评估。
|
||
|
||
特点:
|
||
|
||
- 层次结构清晰
|
||
- 考虑指标间的对重要性
|
||
- 结果具有较好的可解释性
|
||
|
||
### 4. 灰色关联分析模型
|
||
|
||
适用于数据不完整的情况,通过计算评估指标与参考序列的关联度进行评估。
|
||
|
||
特点:
|
||
|
||
- 适应不完整信息
|
||
- 计算简单直观
|
||
- 能反映系统发展趋势
|
||
|
||
### 5. 贝叶斯网络模型
|
||
|
||
适用于具有不确定性和条件依赖关系的指标评估。
|
||
|
||
特点:
|
||
|
||
- 考虑指标间的概率依赖关系
|
||
- 支持先验知识的引入
|
||
- 可进行概率推理和预测
|
||
|
||
### 评估模型选择建议
|
||
|
||
- 对于简单且指标较少的评估任务,可以使用直接赋权法
|
||
- 对于不确定性强的指标,优先使用模糊评价或贝叶斯网络
|
||
- 对于有大量历史数据的指标,可以使用神经网络模型
|
||
- 对于层次分明的指标体系,适合使用AHP方法
|
||
- 对于数据不完整的情况,可以考虑灰色关联分析
|
||
- 在实际应用中,常采用多模型组合评估方法,以获得更可靠的评估结果
|