AFSim仿真系统—01 架构介绍

本栏目将对《AFSim 2.9中文参考手册》进行持续更新,欢迎关注交流!

获取本书全文和AFSIM其它资料,请联系作者~

全部内容索引请看 ⬇️⬇️⬇️《AFSim 2.9中文参考手册》-CSDN博客https://blog.csdn.net/henggesim/article/details/145566384


目录

一、核心架构

二、核心应用

三、核心服务

Scenarios(场景)

Simulations(仿真)

Thread Management(线程管理)

Extensions and Plug-Ins(扩展和插件)

Utilities(实用工具)

Tasking(任务分配)

Tracking(跟踪)

Geospatial Data(地理空间数据)

Observer(观察者)

Script(脚本)

Distributed Simulation Interfaces(分布式仿真接口)

四、核心组件

Platforms(平台)

Movers(移动器)

Communications(通信)

Sensors(传感器)

Weapons(武器)

Processors(处理器)

Terminology(术语)


本文档描述了AFSIM架构的终端用户视角,旨在帮助终端用户深入了解AFSIM的操作概念。

一、核心架构

AFSIM的面向对象C++架构提供了一个可扩展和模块化的架构,允许轻松集成许多附加功能。AFSIM允许在框架中插入和使用新的组件模型(例如传感器、通信、移动设备等),以及全新的组件类型。扩展和插件是扩展框架以集成新的平台组件模型、新的和扩展的平台能力以及新的和扩展的仿真服务的主要机制。插件功能是一种扩展形式,允许在不重新编译核心AFSIM代码的情况下添加功能。使用插件可以更轻松地分发扩展功能,并提供选择在特定分析中使用哪些扩展功能的能力。下图显示了AFSIM主要框架组件和提供的服务,这些组件和服务可以被扩展。

二、核心应用

基于AFSIM的可执行文件通常由一个利用AFSIM服务的AFSIM“应用程序”组成。该应用程序维护脚本类型、扩展和插件管理器以及应用程序配置数据。应用程序由一个或多个场景组成,这些场景拥有类型工厂和列表、用户输入和脚本。根据应用程序的不同,场景由一个或多个仿真组成。仿真包含类型实例、接口(例如DIS、XIO、观察者、地形)和运行时数据,包括事件管理和线程处理。

三、核心服务

AFSIM提供了处理和支持仿真执行及其他常规计算和基本功能的能力。

  • Scenarios - 提供场景输入处理、类型列表和脚本。
  • Simulations - 提供基于时间的事件处理并维护平台列表。
  • Thread Management - 提供线程和多线程管理能力。
  • Extensions and Plug-Ins - 提供添加新服务和组件的通用方法。
  • Script - 提供实现和扩展AFSIM脚本语言的基础设施。
  • Observer - 提供用于从仿真中提取数据的通用发布-订阅服务。
  • Tasking - 允许进行跨平台任务分配和行为建模。
  • Tracking - 允许从传感器测量中生成轨迹,并进行轨迹关联和融合。
  • Geospatial - 提供地形和视线数据。
  • Distributed Simulation Interfaces - 仿真接口应用接口标准以实现仿真互操作性(IEEE 1278和1516)。
  • Utilities - 提供地球模型、坐标系、数学例程、人工智能结构等。

Scenarios(场景)

场景输入加载器提供了从输入文件加载仿真的机制。场景类型列表和脚本为AFSIM组件和脚本提供了用户输入的内部表示。一个应用程序中可能有多个场景,尽管这有些不常见。

Simulations(仿真)

每个仿真维护一个平台列表。仿真是从场景中的场景类型列表实例化的。仿真使用时间管理来推进仿真的状态,可以是实时或比实时更快的模式,即建设性(尽可能快)模式。仿真拥有一个事件管理器,负责按时间顺序处理事件。虽然AFSIM是基于事件的,但事件是抽象的,因此分析人员不必担心它们。每个场景可能有多个仿真。

Thread Management(线程管理)

仿真线程管理使仿真执行更快、更优雅,尤其是在虚拟实时环境中。线程化允许某些处理并行执行,使用独立的执行线程,例如传感器和移动更新、仿真接口和地理空间检查。

Extensions and Plug-Ins(扩展和插件)

扩展:应用程序、场景和仿真都可以“扩展”。应用程序扩展代表可以添加到应用程序的可选功能。场景扩展用于注册新组件类型并提供对输入加载器的访问。仿真扩展提供特定于仿真的可选功能,并提供对观察者服务的访问。

插件:扩展插件管理允许在不更改已交付框架代码的情况下开发扩展的AFSIM功能。

Utilities(实用工具)

AFSIM实用工具提供了多种软件工具:

  • 专用数据类型
  • 人工智能结构
  • 数学类和算法
  • 输入、输出和文件管理例程
  • 时间管理
  • 地球坐标参考框架和大气数据
  • 观察者服务使用的发布/订阅类
  • 以及许多其他功能……

Tasking(任务分配)

任务分配是一种用于发送和接收与轨迹或感知相关的任务分配的服务。任务分配允许用户使用有限状态机的概念对轨迹进行分类。用户定义一组转换规则,这些规则定义了从一个状态转换到另一个状态的条件。每个轨迹在AFSIM任务分配中维护自己的状态。

Tracking(跟踪)

提供轨迹关联、轨迹过滤和轨迹融合。AFSIM中提供了本地跟踪算法。此外,还可以集成第三方跟踪算法。AFSIM目前支持:

  • 完美和不完美的轨迹关联选项。
  • 多种轨迹过滤器选择。
  • 协方差矩阵提供检测和轨迹概率区域。

Geospatial Data(地理空间数据)

地形(地理空间数据)管理为DTED和“浮动网格”(兼容ESRI-GIS)数据库提供优化的地形高程查询。视线管理提供目标可见性计算的服务。

Observer(观察者)

观察者允许在不更改框架的情况下提取数据。用户可以轻松创建“脚本观察者”来使用脚本类型输出提取数据,而无需软件修改。观察者可用于标准和自定义输出、重放文件和分布式接口。

Script(脚本)

脚本管理器理解脚本类型并启用脚本语言。脚本类型易于扩展,以适应新集成的模型和服务。

Distributed Simulation Interfaces(分布式仿真接口)

  • DIS & HLA:AFSIM封装了行业标准接口,允许平台与其他仿真中的实体进行交互。
  • XIO:AFSIM专用接口,允许仿真在多台计算机之间分布,并通过图形用户界面进行仿真控制。

四、核心组件

Platforms(平台)

平台是其组成组件的容器。平台由以下部分组成:

  • 物理组件
  • 智能计算组件
  • 信息
  • 属性
  • 链路

Movers(移动器)

移动器维护其附属平台的运动状态(位置、方向、速度、加速度等)。可用的移动器选项很多,从水下到空间运动模型都有。

Communications(通信)

通信设备使用外部链接在平台之间传输和接收消息。AFSIM允许使用有线或无线设备,通过发射器、接收器和天线来捕捉通信系统的全部物理特性。

Sensors(传感器)

传感器创建测量并通过链接在轨迹消息中传输它们。在AFSIM中,传感器通常使用发射器、接收器和天线。AFSIM中有多种雷达传播、消光、杂波和误差选项。

Weapons(武器)

武器是用于阻止其他物体运行的东西(无论是永久还是暂时)。在AFSIM中,大多数武器是显式武器,其中物体被明确建模为平台(例如导弹和炸弹),而隐式武器在仿真中不作为平台表示(例如干扰器或激光)。

Processors(处理器)

处理器定义行为或计算算法,类似于人脑或计算机。大多数处理器由用户使用AFSIM脚本语言定义,afsim不过AFSIM也提供了许多专用处理器。

Terminology(术语)

  • AFSIM - 高级仿真、集成和建模框架
  • COMMS - 通信
  • DIS - 分布式交互仿真
  • HLA - 高层架构
  • WSF - 世界仿真框架
  • XIO - 外部输入/输出
### AFSim 技术概述 AFSim 是一种用于仿真和建模的技术工具框架,通常应用于航空、航天以及复杂系统的动态行为分析领域。尽管未直接提及于所提供的参考资料中,可以从相关背景推断其可能涉及的核心技术和功能。 #### 动态系统仿真的核心概念 动态系统仿真依赖于多种技术栈的支持,其中包括但不限于机器人操作系统(ROS)、C++ 高性能库以及其他跨平台开发环境。例如,在复杂的仿真环境中,ROS 提供了一种封装学术机器人软件的机制,并通过消息传递层实现组件间的通信[^2]。这种架构设计使得像 AFSim 这样的工具能够高效集成多源数据流并支持实时交互。 #### 开发与部署环境的选择 对于 macOS 用户而言,构建类似 AFSim 的应用需要关注本地开发资源的有效利用。macOS 上的应用程序主要分为标准 GUI Apps 和其他特殊用途软件形式[^3]。如果目标是打造一个高性能计算密集型解决方案,则需额外引入专门优化过的第三方库作为辅助支撑模块——比如针对基准测试场景下的 C++ benchmark 工具集合[^4]。 #### 示例代码片段展示如何初始化基本模拟循环结构 以下是采用现代 C++ 实现的一个简单时间步推进器模板: ```cpp #include <iostream> #include <chrono> class Simulation { public: void run(double duration_sec, double step_size_sec) { auto start_time = std::chrono::steady_clock::now(); while ((std::chrono::duration<double>(std::chrono::steady_clock::now() - start_time)).count() < duration_sec) { tick(step_size_sec); } } private: void tick(double dt) const { // Perform simulation logic here. std::cout << "Simulation advancing by " << dt << " seconds." << std::endl; } }; int main(){ Simulation sim; sim.run(10.0 /* total runtime */, 0.01 /* time-step size */ ); } ``` 上述例子展示了基础的时间驱动逻辑框架,适用于大多数离散事件或连续状态空间模型的基础搭建工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值