【建模与仿真】一文搞定AFSIM

在这里插入图片描述

😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔本文讲解【建模与仿真】一文搞定AFSIM,期待与你一同探索、学习、进步,一起卷起来叭!

一、准备工作

构建工具

  • CMake
    • 介绍:CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),并且输出对应的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
    • 🔗官网:https://cmake.org/download
    • 安装:根据官网进行安装即可,比较简单,这里不再赘述。
  • Microsoft Visual Studio
    • 介绍:Visual Studio IDE 是一个创意启动板,可用于编辑、调试和生成代码,然后发布应用。除了大多数 IDE 都提供的标准编辑器和调试器之外,Visual Studio 还包括编译器、代码补全工具、图形设计器以及许多其他功能,以增强软件开发过程。
      下载
    • 🔗官网:https://visualstudio.microsoft.com/zh-hans/vs/
    • 安装:根据官网进行安装即可,比较简单,这里不再赘述。如果是个人使用,社区版就够用了,我这里下载社区版。

软件获取

可以使用以下方法获取 AFSIM 源文件和应用程序文件:

  • 从官方分发安装 AFSIM 源文件和应用程序文件。(zip、msi、tar.gz、deb、rpm)
  • 从官方 AFSIM 存储库下载 AFSIM 源文件。
  • 从官方 AFSIM 存储库克隆 AFSIM 源。

注意:从分发文件中获取的AFSIM软件在发行版中会包含编译好的AFSIM应用可执行文件,如Mission、Warlock等。克隆的仓库需要后续构建才能生成目标AFSIM应用。

💡AFSIM 分发文件中的目录结构:

path/to/afsim/distribution
           |__ bin
           |__ demos
           |__ documentation
           |__ resources
           |__ swdev
           |  |__ src
           |      .
           |      .
           |      CMakeLists.txt
           |      .
           |      .
           |__ tools
           |__ training

编译运行

💡AFSIM关于Win编译打包运行流程:

  1. 新建build文件夹【一定要与src同级】在这里插入图片描述
  2. 使用cmake打开源代码(src文件夹)
  3. configuration
  4. generate在这里插入图片描述
  5. open project【如无反应,手动进入build目录下,设置afsim.slm默认启动项为Microsoft Visual Studio在这里插入图片描述
  6. 配置解决方案为Release【编译后,build文件夹会产生Release文件夹】在这里插入图片描述
  7. 解决方案——cmaketargets——ALL BUILD(右键生成)【生成文件在build/Release/下】
  8. 解决方案——cmaketargets——INSTALL(右键生成)【生成文件在build/wsf_install/下】
  9. build/wsf_install/bin/* 复制到build/Release/
  10. resource、demo、document拷贝到build/
  11. 设置wizard设为启动项解决方案——applications——wizard——右键设为启动项目
  12. VS中点击本地调试器
  13. 选择Demo Browser — air-to-air — Open Project
    在这里插入图片描述
  14. 选择Warlock模式启动在这里插入图片描述
  15. 模拟演示在这里插入图片描述

二、AFSIM入门

前言

🔗官方文档:http://124.222.40.9/html/docs/main_page.html

🔗参考论文1:Advanced Framework for Simulation, Integration and Modeling (AFSIM)

🔗参考论文2:Modeling fog of war effects in AFSIM

  • 背景:AFSIM(Advanced Framework for Simulation, Integration and Modeling)由美国空军研究实验室(AFRL)开发和维护。"AF"在AFSIM中不代表空军,而是表示一个通用的框架,用于对陆、海、空和空基平台进行建模,如潜艇,海军舰艇,坦克,飞机,直升机,卫星。
  • 介绍:AFSIM是一个通用的建模框架,底层是一个C++库,用于创建模拟,以模型在地理背景下的平台交互。在模拟中,顶级对象被称为平台(或主体、实体、参与者),每个平台都可以附加各种系统和属性,如车辆(地面、空中、太空、表面、地下)、建筑物或生物等。交互包括传感器探测(如雷达、红外等)、碰撞检测、以及通信等。

架构元素

AFSIM使用四个架构元素(属性,元素,组件和链接)来描述仿真中的每个平台:

在这里插入图片描述

  • 属性(Attributes):
    • 常规数据:包括平台名称、类型和从属关系等信息。
    • 任务特定信息:可扩展包含如雷达、光学、红外签名数据等,用于评估飞机被敌方传感器检测到的难易程度。
  • 信息(Information):
    • 驻留数据:包含平台上存在的所有数据。
    • 感知详情:详细描述了接收者(如飞行员)如何接收并感知这些数据,包括高度、速度、航向、雷达指示等显示给飞行员的信息类型。
    • 原始数据源:提供了驱动上述显示的大量原始数据。
  • 组件(Components):由直接控制平台行为的多种模型组成,这些模型描述了:
    • 时空运动:平台如何在时空中移动。
    • 环境感知:平台如何感知其周围环境。
    • 信息处理:平台如何处理收集到的信息。
    • 通信能力:平台如何与其他平台进行通信。
    • 武器使用:平台如何使用其动能和非动能武器库对抗对手平台。
    • 其他任务执行:执行除上述之外的各种任务的能力。
  • 链接(Links):
    • 数据交换协调:协调平台上各个子系统之间的数据交换。
    • 平台间通信:与其他平台进行通信。
    • 武器对抗:利用动能和非动能武器库对抗对手平台。
    • 任务执行:执行各种任务,包括但不限于上述功能。

核心应用

AFSIM库的应用程序可以利用AFSIM输入系统来加载系统属性、填充仿真实体并对仿真进行控制。

  • post_processor:负责处理仿真结果数据,生成报告和可视化图表,帮助用户理解仿真过程和结果。
  • sensor_plot:用于分析和可视化传感器在仿真环境中的覆盖范围以及天线的增益情况,对于评估传感器性能和通信能力至关重要。
  • engage:此应用专注于武器交战过程的仿真和分析,能够模拟不同武器系统之间的交互,评估其效能和准确性。
  • weapon_tools:提供一系列工具和接口,支持用户开发和验证新的武器模型,确保这些模型在仿真环境中能够准确反映实际性能。
  • mission(mission_analyzer、baseline_sim):用于执行具体任务分析和基准仿真。它允许用户定义任务场景、配置仿真参数,并运行仿真以评估任务执行效果。通过该应用,用户可以深入了解不同任务条件下的平台性能、资源需求和作战效能。

套件:

  • Wizard:这是一个向导式的开发工具,用于简化AFSIM框架下应用程序的创建和配置过程。它提供了一系列直观的界面和选项,帮助用户快速搭建仿真模型,减少手动编码的工作量。
    在这里插入图片描述
  • EVT Reader:此工具用于读取AFSIM仿真过程中生成的事件文件(EVT文件),这些文件记录了仿真过程中的关键事件和状态变化。EVT Reader允许用户分析这些事件数据,以便深入理解仿真过程和行为。在这里插入图片描述
  • Mystic:Mystic是一个强大的仿真结果可视化工具,它能够将AFSIM仿真产生的数据转换为易于理解的图表、图像和动画。通过Mystic,用户可以直观地观察和分析仿真结果,快速识别关键趋势和模式。在这里插入图片描述
  • Mover Creator:此工具用于创建和管理AFSIM仿真中的移动器(Mover)对象,这些对象代表了在仿真环境中具有动态行为能力的实体(如车辆、飞机等)。Mover Creator提供了灵活的界面和参数设置,帮助用户精确定义移动器的行为模式和性能特征。在这里插入图片描述
  • Warlock:Warlock是AFSIM框架中的人在回路(Operator-In-The-Loop, OITL)工具,它允许用户在仿真过程中实时参与和干预。通过Warlock,用户可以根据实时反馈调整仿真参数、发送指令或执行其他操作,以模拟真实世界中的决策和响应过程。
    在这里插入图片描述

核心架构

AFSIM提供了一种可扩展和模块化的架构,使得许多附加功能能够轻松集成。

  • AFSIM允许新的组件模型(如传感器、通信、移动器等)以及全新的组件类型被插入并在框架中使用。
  • 扩展和插件是框架扩展以集成新平台组件模型、新扩展平台功能以及新扩展仿真服务的主要机制。
  • 插件功能是一种扩展形式,允许用户在不重新编译AFSIM核心代码的情况下添加新功能。使用插件可以更容易地分发扩展功能,并提供为特定分析选择使用哪些扩展功能的能力。

以下图表展示了AFSIM提供的主要框架组件和服务,这些组件和服务可以进行扩展。

在这里插入图片描述

核心服务

在这里插入图片描述
AFSIM提供了处理和支持仿真执行、其他常规计算和基础功能的能力。

  • 场景 - 提供场景输入处理、类型列表和脚本。
  • 仿真 - 提供基于时间的事件处理和维护平台列表。
  • 线程管理 - 提供线程和多线程管理能力。
  • 扩展和插件 - 提供一种通用的方法来添加新的服务和组件。
  • 脚本 - 提供实现和扩展AFSIM脚本语言的基础设施。
  • 观察者 - 提供一种通用的发布-订阅服务,用于从仿真中提取数据。
  • 任务分配 - 允许跨平台的任务分配和行为建模。
  • 跟踪 - 允许根据传感器测量进行航迹形成、航迹相关和融合。
  • 地理空间 - 提供地形和视线数据。
  • 分布式仿真接口 - 仿真接口应用接口标准以实现仿真的互操作性(IEEE 1278 & 1516)。
  • 实用工具 - 提供地球模型、坐标系、数学例程、人工智能构造等。

核心组件

在这里插入图片描述
在这里插入图片描述

  • 移动器:移动器维护着它所附着的平台的动力学状态(位置、方向、速度、加速度等)。移动器有多种选项可供选择,范围从地下到空间动力学模型。
  • 通信:通信设备通过外部链路在平台之间发送和接收消息。AFSIM支持有线或无线设备,使用发射器、接收器和天线来捕捉通信系统的全部物理方面。
  • 传感器:传感器创建测量值并通过链路在轨迹消息中传输它们。在AFSIM中,传感器经常使用发射器、接收器和天线。AFSIM提供了雷达传播、衰减、杂波和误差的多种选项。
  • 武器:武器是指旨在阻止其他物体运行(永久或暂时)的装置。在AFSIM中,大多数武器是显式武器,即对象被明确建模为平台(如导弹和炸弹),与隐式武器相比,后者在模拟中不作为平台表示(如干扰机或激光器)。
  • 处理器:处理器定义行为或计算算法,类似于人脑或计算机。大多数处理器由用户使用AFSIM脚本语言定义,但AFSIM也提供了许多专用处理器。

三、Wizard

在这里插入图片描述

主窗口

在这里插入图片描述

  • 标题栏:标题栏包含关闭、最小化和最大化操作的标准控件,这些控件位于右侧,而应用程序的名称位于左侧。如果打开了项目或文件,则会显示项目的当前根目录。
  • 菜单:菜单出现在标题栏下方。向导的大多数工具、命令和设置都可通过这些菜单访问。
  • 工具栏:工具栏位于菜单下方。可以通过“视图”菜单来启用或禁用工具栏。
  • 浏览器:浏览器出现在应用程序的左侧或右侧,提供多种视图和场景数据的导航方式。它们可以被设置为停靠或自由浮动。
  • 文本编辑器:文本编辑器提供了一个带有标签的界面,用于编辑场景文件。它提供语法高亮、自动完成、快速文件和类型导航、上下文敏感的命令查找以及其他功能。
  • 地图窗口:地图显示窗口展示了当前场景的平台布局。
  • 输出面板:输出面板位于主窗口的下部区域,最初会显示命令文档、错误列表、查找结果、输出和脚本控制台。如果需要,可以将每个标签页取消停靠并重新停靠。
  • 状态栏:状态栏显示诸如光标当前行号和列号以及解析进度等信息。

开始一个新项目

选择:File - New Project - 创建test_project文件夹 - 设置文件名保存

在这里插入图片描述
创建项目基本结构:

/output
/air_demo.txt

右键设置air_demo.txt启动文件

编写air_demo.txt

# *******************
# 这是一个Demo
# *******************
#定义平台类型
platform_type MINI_PLANE WSF_PLATFORM
  icon c-130 # 使用C-130的图标
  mover WSF_AIR_MOVER end_mover # 使用WSF_AIR_MOVER作为移动器
end_platform_type

# 定义蓝方玩家,类型为MINI_PLANE
platform blue_player MINI_PLANE
  position 29:30:57.34n 30e altitude 1500.00 ft  # 起始位置:北纬29度30分57.34秒,东经30度,高度1500英尺  
  side blue  # 所属方:蓝方  
  route  # 飞行路线  
    position 29:30:57.34n 30e altitude 1500.00 ft  # 起始点  
    speed 1000 kts  # 速度:1000节  
    position 30:40:37.43n 30e altitude 1500.00 ft  # 终点  
  end_route  
end_platform
  
# 事件输出配置  
event_output  
  file output/demo.evt  # 输出文件  
  disable all  # 禁用所有事件  
  enable SENSOR_DETECTION_ATTEMPT  # 启用传感器检测尝试事件  
  enable SENSOR_TRACK_INITIATED  # 启用传感器跟踪开始事件  
  enable SENSOR_TRACK_UPDATED  # 启用传感器跟踪更新事件  
  enable SENSOR_TRACK_DROPPED  # 启用传感器跟踪丢失事件  
end_event_output  
  
# 结束时间  
end_time 7 min  # 模拟时间7分钟

编译运行

在这里插入图片描述

Platform

语法

platform <platform-name> <platform-type>
   acoustic_signature ...
   altitude ...
   aux_data ...
   category ...
   clear_categories
   commander ...
   command_chain ...
   concealment_factor ...
   creation_time ...
   empty_mass ...
   fuel ... end_fuel
   fuel_mass ...
   geo_point ...
   group_join ...
   group_leave ...
   heading ...
   height ...
   icon ...
   indestructible ...
   infrared_signature ...
   inherent_contrast ...
   initial_damage_factor ...
   length ...
   marking ...
   mgrs_coordinate ...
   add_mover ... end_mover
   mover ... end_mover
   navigation_errors ... end_navigation_errors
   nutation_update_interval ...
   on_broken ...
   optical_reflectivity ...
   optical_signature ...
   payload_mass ...
   position ...
   precession_nutation_update_interval ...
   radar_signature ...
   route ... end_route
   side ...
   spatial_domain ...
   <component> ... end_<component>
   add <component> ... end_<component>
   edit <component> ... end_<component>
   delete <component> ...
   track ... end_track
   track_manager ... end_track_manager
   use_zone ...
   width ...
   zone ... end_zone
   zone_set ... end_zone_set

   # Script Interface
   on_initialize ... end_on_initialize
   on_initialize2 ... end_on_initialize2
   on_update ... end_on_update
   script_variables ... end_script_variables
   script ... end_script
   ... Other Script_Commands ...

   script void on_damage_received() ... end_script
   script void on_platform_deleted() ... end_script
   script void on_commander_deleted(WsfPlatform aCommander) ... end_script
   script void on_peer_deleted(WsfPlatform aPeer) ... end_script
   script void on_subordinate_deleted(WsfPlatform aSubordinate) ... end_script
   callback ... end_callback

end_platform

命令

  • 基础结构
    • 每个平台定义以 platform 开始,并以 end_platform 结束。
  • 创建新实例
    • 使用 platform <platform-name> <platform-type> 开始定义一个平台实例。
    • <platform-name> 必须是模拟中的唯一名称,通常使用小写。
    • <platform-type> 可以是先前定义的平台类型或 WSF_PLATFORM
  • 创建新类型
    • 使用 platform_type <new-type-name> <source-type-name> 定义一个平台类型。
    • <new-type-name> 必须是模拟中唯一的新类型名称,通常使用大写。
    • <source-type-name> 可以是任何已定义的平台类型或 WSF_PLATFORM
  • 编辑实例
    • 使用 edit platform <platform-name> 编辑现有的平台实例。
  • 命令
    • 包括 side, icon, marking, indestructible, on_broken, spatial_domain 等,用于设置平台的各种属性。
  • 签名定义
    • 使用 acoustic_signature, infrared_signature, optical_signature, radar_signature 等命令定义平台的传感器签名。
  • 位置和导航
    • 使用 position, altitude, heading, route 等命令定义平台的位置和导航路径。
  • 物理属性
    • 使用 empty_mass, fuel_mass, payload_mass 等命令定义平台的物理属性。
  • 损坏和生存
    • 使用 initial_damage_factor 命令定义平台的初始损伤系数。
  • 组件管理
    • 使用 add <component>, edit <component>, delete <component> 命令管理平台的组件。
  • 脚本接口
    • 使用 on_initialize, on_update, script 等命令定义平台的行为脚本。
  • 事件处理
    • 使用 on_damage_received, on_platform_deleted, on_commander_deleted 等命令定义平台在特定事件发生时的行为。
  • 区域定义
    • 使用 zone, zone_set 命令定义与平台相关的区域。
  • 导航错误
    • 使用 navigation_errors 命令定义平台的导航误差。
  • 武器相关命令
    • 使用 weapon_effects, weapon_effects_type 命令定义平台的武器效果。

示例

# 定义一个新的平台类型
platform_type MY_AIRCRAFT_TYPE WSF_PLATFORM
    icon  c-130 # 设置平台的图标
    indestructible  # 设置平台为不可摧毁
    concealment_factor 0.5  # 设置平台的视觉隐蔽系数
    length 20 m  # 设置平台的长度
    width 15 m  # 设置平台的宽度
    height 5 m  # 设置平台的高度
    clear_categories  # 清除任何之前设置的类别
    category air-combat  # 将平台归类为空中战斗类别
    add mover WSF_AIR_MOVER  # 添加移动器WSF_AIR_MOVER  
    end_mover  
end_platform_type

# 定义飞行路线
route myFlightRoute
    position 34.0522N 118.2437W
    speed 500 kts
    position 35.0522N 119.2437W
    altitude 20000 ft
    turn_to_heading 180 deg
    position 36.0522N 120.2437W
    speed 520 kts
end_route

# 创建一个平台实例
platform myAircraft1 MY_AIRCRAFT_TYPE
    side blue  # 指定平台所属的一方
    position 34.0522N 118.2437W  # 设置平台的初始位置
    altitude 10000 ft  # 设置平台的初始高度
    heading 90 deg  # 设置平台的初始航向
    creation_time 5 sec  # 设置平台在模拟中创建的时间
    use_route myFlightRoute  # 指定平台使用的飞行路线 
end_platform

Mover

语法

mover  Mover Types ...
   ... Platform Part Commands ...
   update_interval <time-reference>
   update_time_tolerance <time-reference>
end_mover

命令

  • 基础结构mover 定义开始,必须以 end_mover 结束。
  • 移动器类型(Mover Types): 可以是多种预定义的移动器类型,每种类型定义了平台在模拟运行时的移动方式。WSF中存在多种预定义的移动器类型,例如:
    • WSF_SUBSURFACE_MOVER
    • WSF_P6DOF_MOVER
    • WSF_FORMATION_FLYER
    • WSF_GUIDED_MOVER
  • 平台命令: 这些命令是所有平台部件共有的,例如:
    • automatic_recovery_time <time-value>:定义从损伤状态1.0(完全损伤)到排队恢复经过的时间。
    • aux_data ... end_aux_data:为对象定义辅助数据。
    • category <name>:声明对象是指定类别的成员。
    • criticalnon_critical:如果关键部件损坏,平台将从模拟中移除。
    • damage_factor <unit-value>:部件的初始损伤系数。
    • debugno_debug:启用或禁用调试。
    • group_join <group-name>group_leave <group-name>:添加或从指定组中移除平台。
    • is_a_type_of <type-name>:定义对象也是指定类型的成员。
    • broken:声明部件完全损坏,不可恢复。
    • operationalnon_operational:定义对象的操作状态。
    • restorablenon_restorable:定义部件从损伤中恢复的能力。
  • 特定命令
    • update_interval <time-reference>:指定模拟调用移动器的时间间隔,如果为零,则仅在需要确定包含平台的位置时调用。
    • update_time_tolerance <time-reference>:如果自上次更新以来的时间小于或等于此值,则移动器将忽略更新。

示例

# 定义飞行路线
route myRoute
    position 34.0522N 118.2437W altitude 10000 ft
    speed 500 kts
    position 35.0522N 119.2437W
end_route

# 定义移动器
mover MY_AIR_MOVER WSF_AIR_MOVER
    update_interval 5 sec
    update_time_tolerance 1 sec
    use_route myRoute
end_mover

# 定义平台类型
platform_type MY_PLANE_TYPE WSF_PLATFORM
    icon myPlaneIcon
end_platform_type

# 创建平台实例
platform myPlaneInstance MY_PLANE_TYPE
    position 34.0522N 118.2437W
    side blue
end_platform

Route

路线是航点的集合,这些航点为使用路线(例如:WSF_AIR_MOVER、WSF_GROUND_MOVER、WSF_ROAD_MOVER和WSF_SURFACE_MOVER)的移动者定义路径或路线,或定义route_network内路线的一部分。

语法

独立定义

route
   # Commands
   navigation
      # Navigation Commands
      label ...
      position ...
      mgrs_coordinate ...
      offset ...
      turn_left ...
      turn_right ...
      turn_to_heading ...
      goto ...

      # Waypoint Commands
      altitude ...
      depth ...
      heading ...
      turn ...
      speed ...
      linear_acceleration ...
      radial_acceleration ...
      bank_angle_limit ...
      turn_g_limit ...
      climb_rate ...
      dive_rate ...
      pause_time ...
      execute ...
      extrapolate ...
      stop ...
      remove ...
      switch_on_passing ...
      switch_on_approach ...
      distance ...
      time ...
      time_to_point ...
      node_id ...
      aux_data ... end_aux_data
   end_navigation

   # Auxiliary Data Commands
   aux_data ... end_aux_data

   # Route Insertion Commands
   transform_route ...
   transform_absolute_route ...
end_route

在一个平台中定义

# Define a route on a platform.
platform ...
   route
      ...
   end_route
end_platform

定义一个route引用类型

# Define a route type that can be referenced by the use_route command of the platform or route_network
# commands, or by transform_route or transform_absolute_route commands.
#
# These occur outside platform definitions.

route <name>
   ...
end_route

命令

  • 路由定义
    • 每个路由定义以 route 开始,并且必须以 end_route 结束。
  • 导航命令块(Navigation Commands):
    • 使用 navigation 关键字定义一个导航命令块,该块包含用于输入路由航点和其他导航数据的命令。
  • 辅助数据(Auxiliary Data Commands):
    • 使用 aux_data ... end_aux_data 为路由定义辅助数据。
  • 路由插入命令(Route Insertion Commands):
    • 使用 transform_routetransform_absolute_routeinsert_routeinsert_offset_route 命令在当前路由点插入另一个路由。
  • 航点命令(Waypoint Commands):
    • 航点可以通过以下命令之一开始:
      • 特定的纬度和经度(position
      • 相对于当前位置的偏移(offset
      • 转向命令(turn_leftturn_rightturn_to_heading
      • 跳转到另一个标记的航点(goto
  • 标记航点(Label Waypoints):
    • 使用 label <string> 将字符串标签与紧随其后的航点定义关联。
  • 设置航点位置
    • 使用 position <latitude-value> <longitude-value> 指定航点的纬度和经度。
  • MGRS 坐标
    • 使用 mgrs_coordinate <MGRS-value> 以 Military Grid Reference System 格式指定航点坐标。
  • 偏移航点
    • 使用 offset <x-offset> <y-offset> <length-units> 相对于当前平台位置设置航点。
  • 转向命令
    • 使用 turn_left <angle-value>turn_right <angle-value> 实现指定的航向角度变化。
    • 使用 turn_to_heading <angle-value> 实现指定的绝对航向角度。
  • 跳转至标记航点
    • 使用 goto <string> 跳转到当前路由中具有指定标签的航点。
  • 航点命令
    • 包括 altitudedepthheadingturnspeedlinear_accelerationradial_accelerationbank_angle_limitturn_g_limitclimb_ratedive_rate 等,用于指定航点的特定行为。
  • 暂停时间
    • 使用 pause_time <time-value> 指定达到航点时停止移动的时间。
  • 执行脚本或回调
    • 使用 execute <script-name> <callback-name> 指定达到航点时执行的脚本或回调。
  • 航点结束行为
    • 使用 extrapolatestopremove 指示当航点被遇到且路由中没有更多航点时移动器应采取的行为。
  • 切换条件
    • 使用 switch_on_passingswitch_on_approach 定义移动器应何时声明已到达航点并开始向下一个航点移动。
  • 距离和时间
    • 使用 distance <length-value>time <time-value> 指定在执行特定转向命令时移动的持续时间或距离。
  • 时间到点
    • 使用 time_to_point <time-value> 指定从上一个航点到当前航点所需的时间。
  • 节点 ID
    • 使用 node_id <string> 仅当路由是 route_network 的一部分时使用。
  • 辅助数据
    • 使用 aux_data ... end_aux_data 为航点定义辅助数据。
  • 插入路由
    • 使用 insert_routeinsert_offset_route 将已定义的路由类型中的航点转换并插入到当前路由定义中。
  • 转换绝对路由
    • 使用 transform_absolute_route 将指定的路由平移并插入到当前路由中。
  • 弃用命令
    • transform_route 命令已被 insert_route 替代。

示例

# 定义飞行路径
route complexFlightPath
    # 起始航点
    navigation
        position 34.0522N 118.2437W
        altitude 10000 ft
        heading 270 deg
        speed 300 kts
    end_navigation

    # 转向航点
    navigation
        turn_to_heading 90 deg
    end_navigation

    # 最后一个航点,设置结束行为
    navigation
        position 35.0522N 119.2437W
        stop
    end_navigation
end_route

# 定义移动器 PLANE_AIR_MOVER,使用 WSF_AIR_MOVER 类型
mover PLANE_AIR_MOVER WSF_AIR_MOVER
    operational  # 启用状态
    update_interval 3 sec  # 更新间隔为3秒
    use_route complexFlightPath  # 使用定义的飞行路径
end_mover

# 定义平台类型MINI_PLANE,使用WSF_PLATFORM类型  
platform_type MINI_PLANE WSF_PLATFORM  
  icon c-130 # 使用C-130图标  
  add mover PLANE_AIR_MOVER  # 添加移动器PLANE_AIR_MOVER  
  end_mover      
end_platform_type  

# 创建平台实例 myAircraft 使用 MINI_PLANE 类型
platform myAircraft MINI_PLANE
end_platform

在这里插入图片描述

实战

模拟一个名为blue_player的飞机按照预定路线飞行,并输出相关的传感器检测事件。

# *******************  
#     Demo  
# *******************  
#    
# 定义第一个飞行路线route1  
route route1        
    position 29:25:19.64n 29:59:52.34e altitude 1500.00 ft  # 起始位置  
    speed 1000 kts  # 飞行速度1000节  
    position 30:24:24.76n 30:32:39.14e altitude 1500.00 ft  # 第二个位置点  
    insert_route route2  # 在此处插入第二个飞行路线route2  
end_route   
  
# 定义第二个飞行路线route2  
route route2        
    position 30:24:24.76n 30:32:39.14e altitude 1500.00 ft  # 起始位置(与route1的第二个位置点相同)  
    speed 1000 kts  # 飞行速度1000节  
    position 30:40:37.43n 30e altitude 1500.00 ft  # 终点位置(经度未指定分钟和秒,默认为0)  
end_route   
  
# 定义移动器PLANE_AIR_MOVER,使用WSF_AIR_MOVER类型  
mover PLANE_AIR_MOVER WSF_AIR_MOVER  
   operational  # 启用状态  
   update_interval 3 sec  # 更新间隔为3秒  
   use_route route1  # 使用route1作为飞行路线  
end_mover  
      
# 定义平台类型MINI_PLANE,使用WSF_PLATFORM类型  
platform_type MINI_PLANE WSF_PLATFORM  
  icon c-130 # 使用C-130图标  
  add mover PLANE_AIR_MOVER  # 添加移动器PLANE_AIR_MOVER  
  end_mover      
end_platform_type  
  
# 创建MINI_PLANE类型的平台blue_player  
platform blue_player MINI_PLANE  
  position 29:25:58.80n 29:59:37.88e altitude 1500.00 ft  # 初始位置  
  side blue  # 所属方为蓝色  
end_platform  
    
# 配置事件输出  
event_output    
  file output/demo.evt  # 输出文件路径  
  disable all  # 禁用所有事件输出  
  enable SENSOR_DETECTION_ATTEMPT  # 启用传感器检测尝试事件  
  enable SENSOR_TRACK_INITIATED  # 启用传感器跟踪开始事件  
  enable SENSOR_TRACK_UPDATED  # 启用传感器跟踪更新事件  
end_event_output    
    
# 设置模拟结束时间  
end_time 7 min  # 模拟持续7分钟

在这里插入图片描述

Weapon

语法

weapon <name> <type>
   ... Platform Part Commands ...
   ... Articulated Part Commands ...

   on | off

   update_interval

   launch_computer ...

   quantity ...
   maximum_quantity ...

   firing_delay ...
   firing_interval ...
   salvo_interval ...
   maximum_request_count ...

   automatic_target_cueing ...
   cue_to_predicted_intercept ...

   unknown_target_range ...
   unknown_target_altitude ...

   reload_increment ...
   reload_inventory ...
   reload_threshold ...
   reload_time ...
   inhibit_while_reloading ...

   weapon_effects ...
end_weapon

命令

  • 基础结构
    • 每个武器定义以 weapon <name> <type> 开始,并以 end_weapon 结束。
  • 状态控制
    • 使用 onoff 命令设置武器在模拟开始时的初始状态。
  • 更新间隔
    • 使用 update_interval <time-reference> 命令设置武器的更新间隔。
  • 发射计算机
    • 使用 launch_computer <type> 命令为需要的武器类型指定发射计算机。
  • 数量控制
    • 使用 quantity <real-reference> 命令设置初始可用的弹药数量。
    • 使用 maximum_quantity <real-reference> 命令设置武器上可能存在的最大弹药数量。
  • 射击控制
    • 使用 firing_delay <random-time-reference> 命令设置射击请求发起后到第一次(或唯一一次)射击之间的延迟时间。
    • 使用 firing_interval <random-time-reference> 命令设置武器再次射击前的最小时间间隔。
    • 使用 salvo_interval <random-time-reference> 命令设置多发射击请求中每发子弹之间的时间间隔。
    • 使用 maximum_request_count <integer-value> 命令设置同时激活的多发射击请求的最大数量。
  • 自动目标指示
    • 使用 automatic_target_cueing <boolean-value> 命令设置是否自动指示目标。
    • 使用 cue_to_predicted_intercept <boolean-value> 命令设置武器是指向目标当前位置还是预测的交战位置。
  • 未知目标处理
    • 使用 unknown_target_range <length-reference> 命令设置在未指定目标轨迹或轨迹信息不足以确定位置时使用的射程。
    • 使用 unknown_target_altitude <length-reference> 命令设置在确定目标位置时使用的海拔高度。
  • 装填控制
    • 使用 reload_increment <real-reference> 命令设置装填事件中从外部补给弹夹(ERM)添加到武器的弹药数量。
    • 使用 reload_inventory <real-reference> 命令设置来自外部补给弹夹(ERM)的弹药补给量。
    • 使用 reload_threshold <real-reference> 命令设置开始装填事件的弹药数量。
    • 使用 reload_time <random-time-reference> 命令设置从开始装填到装填完成的时间。
    • 使用 inhibit_while_reloading <boolean-value> 命令设置在装填过程中是否禁止射击。
  • 武器效果
    • 使用 weapon_effects <string-reference> 命令指定用于确定武器效果的武器效果类型。

示例

# 定义蓝方飞机的逃避路线
route evasionRouteBlue
    # 蓝方飞机起始位置,设置高度为10000英尺
    position 34.0522N 118.2437W altitude 10000 ft
    # 设置初始速度为500节
    speed 500 kts
    # 蓝方飞机向西飞行至指定坐标点
    position 34.5522N 118.7437W
    # 蓝方飞机转向180度航向
    turn_to_heading 180 deg
    # 继续飞行至指定坐标点
    position 35.0522N 119.2437W
    # 提高速度至520节
    speed 520 kts
    # 蓝方飞机转向270度航向,准备与红方飞机交战
    turn_to_heading 270 deg
    # 飞行至最终坐标点
    position 35.5522N 119.7437W
end_route

# 定义红方飞机的逃避路线
route evasionRouteRed
    # 红方飞机起始位置,设置高度为10000英尺
    position 36.0522N 120.2437W altitude 10000 ft
    # 设置初始速度为500节
    speed 500 kts
    # 红方飞机向东飞行至指定坐标点
    position 35.5522N 119.7437W
    # 红方飞机转向0度航向
    turn_to_heading 0 deg
    # 继续飞行至指定坐标点
    position 35.0522N 119.2437W
    # 提高速度至520节
    speed 520 kts
    # 红方飞机转向90度航向,准备与蓝方飞机交战
    turn_to_heading 90 deg
    # 飞行至最终坐标点
    position 34.5522N 118.7437W
end_route

# 定义蓝方飞机的移动器
mover BLUE_AIR_MOVER WSF_AIR_MOVER
    # 更新间隔设置为5秒
    update_interval 5 sec  
    # 时间容忍度设置为1秒
    update_time_tolerance 1 sec  
    # 使用蓝方逃避路线
    use_route evasionRouteBlue  
end_mover

# 定义红方飞机的移动器
mover RED_AIR_MOVER WSF_AIR_MOVER
    # 更新间隔设置为5秒
    update_interval 5 sec  
    # 时间容忍度设置为1秒
    update_time_tolerance 1 sec  
    # 使用红方逃避路线
    use_route evasionRouteRed  
end_mover

# 定义蓝方飞机的平台类型
platform_type BLUE_PLANE_TYPE WSF_PLATFORM
    # 使用C-130飞机图标
    icon c-130  
    # 设置隐蔽系数为0.8
    concealment_factor 0.8  
    # 指定蓝方飞机的移动器
    mover BLUE_AIR_MOVER  
    end_mover
    # 定义蓝方飞机携带的AIM-9导弹
    weapon AIM-9-BLUE AIM-9  
    end_weapon
end_platform_type

# 定义红方飞机的平台类型
platform_type RED_PLANE_TYPE WSF_PLATFORM
    # 使用C-130飞机图标
    icon c-130  
    # 设置隐蔽系数为0.8
    concealment_factor 0.8  
    # 指定红方飞机的移动器
    mover RED_AIR_MOVER  
    end_mover
    # 定义红方飞机携带的AIM-9导弹
    weapon AIM-9-RED AIM-9  
    end_weapon
end_platform_type

# 定义AIM-9导弹的武器效果
weapon_effects AIM-9_EFFECT WSF_SPHERICAL_LETHALITY
    # 允许附带损害
    allow_incidental_damage  
    # 设置最小杀伤半径为30米
    minimum_radius   30.0 m  
    # 设置最大杀伤半径为35米
    maximum_radius   35.0 m  
    # 设置最大伤害值为1.0
    maximum_damage   1.0  
    # 设置最小伤害值为0.1
    minimum_damage   0.1  
    # 设置阈值伤害为0.2
    threshold_damage 0.2  
    # 设置指数为1.0
    exponent         1.0  
end_weapon_effects

# 定义AIM-9导弹
weapon AIM-9 WSF_EXPLICIT_WEAPON
    # 指定从红方飞机发射
    launched_platform_type RED_PLANE_TYPE  
    # 使用定义的AIM-9导弹效果
    weapon_effects         AIM-9_EFFECT  
    # 设置武器类别
    category               1000_POUNDER  
    category               glide_bomb_unit  
end_weapon

# 创建蓝方飞机实例
platform bluePlane BLUE_PLANE_TYPE
    # 设置蓝方飞机的初始位置
    position 34.0522N 118.2437W  
    # 指定蓝方飞机属于蓝方
    side blue  
    # 定义蓝方飞机携带的AIM-9导弹
    weapon AIM-9-BLUE  
    # 设置导弹数量为4
    quantity 4  
    # 设置射击间隔为2秒
    firing_interval 2 sec  
    end_weapon
end_platform

# 创建红方飞机实例
platform redPlane RED_PLANE_TYPE
    # 设置红方飞机的初始位置
    position 36.0522N 120.2437W  
    # 指定红方飞机属于红方
    side red  
    # 定义红方飞机携带的AIM-9导弹
    weapon AIM-9-RED  
    # 设置导弹数量为4
    quantity 4  
    # 设置射击间隔为2秒
    firing_interval 2 sec  
    end_weapon
end_platform

# 事件输出配置
event_output  
    # 指定事件输出文件
    file output/demo.evt  
    # 禁用所有事件
    disable all  
end_event_output  

# 模拟结束时间
end_time 30 min  # 模拟时间为30分钟

在这里插入图片描述

Sensor

语法

命令

示例

三、Warlock

在这里插入图片描述

📌 [ 笔者 ]   文艺倾年
📃 [ 更新 ]   2024.8.15
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值