Skip to content

AFSIM

简述

先进的模拟、集成和建模框架(AFSIM) “Advanced Framework for Simulation, Integration and Modeling (AFSIM)” 是一个面向对象的C++库,用于创建模拟,以模型在地理背景下的平台交互。在模拟中,顶级对象称为平台(也叫主体、实体或参与者)。可以把平台想象成一个简单的主体,系统和属性都附加在上面。平台可以代表车辆(地面、空中、太空、表面、地下)、建筑物或生物等。交互包括传感器探测、碰撞和通信等。

核心应用

INFO

使用AFSIM库的应用程序可以利用AFSIM输入系统来加载系统属性、填充仿真实体并对仿真进行控制。AFSIM的核心应用包括但不限于:

  • 后处理与报告生成(Post Processing & Report Generation)
  • post_processor:此应用负责处理仿真结果数据,生成报告和可视化图表,帮助用户理解仿真过程和结果。 传感器覆盖范围与天线增益图创建(Sensor Coverage & Antenna Gain Plot Creation)
  • sensor_plot:该工具用于分析和可视化传感器在仿真环境中的覆盖范围以及天线的增益情况,对于评估传感器性能和通信能力至关重要。
  • 武器交战分析支持(Weapon Engagement Analysis Support)
  • engage:此应用专注于武器交战过程的仿真和分析,能够模拟不同武器系统之间的交互,评估其效能和准确性。
  • 武器模型开发支持(Weapon Model Development Support)
  • weapon_tools:提供一系列工具和接口,支持用户开发和验证新的武器模型,确保这些模型在仿真环境中能够准确反映实际性能。
  • 任务分析/基准仿真应用(Mission Analysis / Baseline Simulation Application)
  • mission(或可能以其他名称命名,如mission_analyzer或baseline_sim等):这是AFSIM框架中用于执行具体任务分析和基准仿真的核心应用。它允许用户定义任务场景、配置仿真参数,并运行仿真以评估任务执行效果。通过该应用,用户可以深入了解不同任务条件下的平台性能、资源需求和作战效能。、

构建工具:

CMake

介绍:CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),并且输出对应的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 🔗官网 安装:根据官网进行安装即可,比较简单,这里不再赘述。

Microsoft Visual Studio

介绍:Visual Studio IDE 是一个创意启动板,可用于编辑、调试和生成代码,然后发布应用。除了大多数 IDE 都提供的标准编辑器和调试器之外,Visual Studio 还包括编译器、代码补全工具、图形设计器以及许多其他功能,以增强软件开发过程。 下载 🔗官网 安装:根据官网进行安装即可,比较简单,这里不再赘述。如果是个人使用,社区版就够用了,我这里下载社区版。

软件获取

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

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

软件 AFSIM | wizard.exe

img

  • 启动:

应用程序布局将打开。以下列表是布局中可用组件的子集:

  1. 菜单
  2. 工具栏
  3. 项目浏览器
  4. 平台选项
  5. 中央显示区
  6. 输出面板
  7. 平台浏览器
  • 显示和控制

向导的中央地图显示为用户提供了调整地理视图以增强场景构建时可视化的能力。地图显示可以通过以下鼠标控制进行调整:

  1. ‘左键单击 + 拖动’ - 用鼠标光标平移地图。
  2. ‘双击左键’ - 放大地图,以鼠标光标为中心。
  3. ‘鼠标滚轮’ - 以鼠标光标为中心放大和缩小地图。
  4. ‘中键单击 + 拖动’ - 旋转和倾斜视图。
  • 场景输出

向导的输出详细信息通过在场景中编写的命令进行控制。

常见的输出格式如下:

直接在向导的输出视图中显示的基于文本的控制台输出。

  1. .csv 和 .evt 事件输出文件。
  2. .log 文件,提供有关场景执行的详细信息,适用于各种WSF工具。
  3. .aer(AFSIM事件重放)文件,可以提供给Mystic进行模拟可视化和分析。

事件、日志和AFSIM事件录制文件默认保存在工作目录中,并且在输出已启用的场景被模拟后,可以在向导的项目浏览器中查看。

可以通过从向导视图菜单访问项目浏览器,并在输出文件夹中打开适当的文件来查看输出文件。

场景和项目

场景或项目可以加载到 Wizard 中。

场景可以与 Mission 和 Warlock 一起进行模拟,但项目只能从 Wizard 中打开。

创建新项目和场景文件

  1. 启动 Wizard。
  2. 在 Wizard 启动窗口中,点击右下角的“新建…”按钮。
  3. 导航到所需的工作目录。
  4. 创建一个名为 Simple Flight 的新目录。
  5. 在 Simple Flight 文件夹中,创建一个新的项目文件并保存为 simple_flight.afproj。
  6. 在 Wizard 文件菜单中,点击“新建文件…”。
  7. 输入 simple_flight.txt 并点击“确定”。
  8. Wizard 将自动打开 simple_flight.txt 进行编辑。
  9. 该文件也会出现在 Wizard 的项目浏览器中。右键单击该文件以打开其上下文菜单。
  10. 选择“设置为启动文件” Set as Startup File,或添加到启动文件 Add to Startup Files 可支持语法高亮提示。

为了保持大型项目的可扩展性,该项目包含一个或多个大型场景,重要的是要了解启动文件的作用。启动文件通常包括以下一个或多个内容

  • 从 Wizard 运行场景 然后,Mission 将模拟该场景,并在此情况下将所有输出直接打印到命令行以及 mission.log 文件中。

注意:如果 Mission 的执行不如预期,请确保在系统环境变量中设置了 AFSIM 安装路径。

命令:mission simple_flight.txt

要通过 Wizard 从 Mission 运行场景,首先确保在 Wizard 的模拟执行工具栏 MISSION_TOOLBAR 中,运行按钮左侧显示“Mission”。 Mission 接下来,单击运行按钮,然后在 Wizard 的输出小部件中观察控制台输出。

shell
execute at_time 0.1 sec absolute
   writeln("Hello ...");
end_execute

OptionsTools菜单

  • 模型查看器 - 用于查看应用程序中可用的模型的窗口。
  • 战斗管理 - 管理平台的工具。
  • 录制视频 - 切换视频录制。
  • 截图 - 捕获屏幕截图。
  • 记分板 - 显示在仿真中发生的武器交战的摘要信息。
  • 通信可视化 - 显示通信网络上的活动。

更多介绍

基本类型

  1. int 一个 32 位整数:

int prime5 = 11;

  1. bool 一个布尔值。可以是“true”或“false”:

bool isTrue = true;

  1. double 一个双精度浮点值:

double gravity = 9.8;

  1. string 一串字符:

string text = "Hello World";

移动路线:Route

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

语法

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

## 飞行路线名称,最终可以动态绑定到mover:移动器中
mover
  ...
  use_route <name>
end_mover
shell
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
  • Demo
shell
# 定义蓝方玩家,类型为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
#定义平台类型
platform_type MINI_PLANE WSF_PLATFORM
  icon c-130 # 使用C-130的图标
  mover WSF_AIR_MOVER end_mover # 使用WSF_AIR_MOVER作为移动器
end_platform_type
shell
# 定义飞行路线
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

## 飞行路线名称,最终可以动态绑定到mover:移动器中
## use_route myFlightRoute
shell
# 定义飞行路线:<路线名称>
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
shell
# *******************  
#     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  # 第二个位置点  
    #过期语法 transform_route route2
    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分钟

移动器:mover

基础结构: mover 定义开始,必须以 end_mover 结束。 移动器类型(Mover Types): 可以是多种预定义的移动器类型,每种类型定义了平台在模拟运行时的移动方式。

  • WSF中存在多种预定义的移动器类型,例如:
  • WSF_AIR_MOVER
  • WSF_SUBSURFACE_MOVER
  • WSF_P6DOF_MOVER
  • WSF_FORMATION_FLYER
  • WSF_GUIDED_MOVER

语法

语法详情
  1. 平台命令: 这些命令是所有平台部件共有的,例如:
  • automatic_recovery_time <time-value>:定义从损伤状态1.0(完全损伤)到排队恢复经过的时间。
  • aux_data ... end_aux_data:为对象定义辅助数据。
  • category <name>:声明对象是指定类别的成员。
  • critical 或 non_critical:如果关键部件损坏,平台将从模拟中移除。
  • damage_factor <unit-value>:部件的初始损伤系数。
  • debug 或 no_debug:启用或禁用调试。
  • group_join <group-name> 或 group_leave <group-name>:添加或从指定组中移除平台。
  • is_a_type_of <type-name>:定义对象也是指定类型的成员。
  • broken:声明部件完全损坏,不可恢复。
  • operational 或 non_operational:定义对象的操作状态。
  • restorable 或 non_restorable:定义部件从损伤中恢复的能力。
  1. 特定命令:
  • update_interval <time-reference>:指定模拟调用移动器的时间间隔,如果为零,则仅在需要确定包含平台的位置时调用。
  • update_time_tolerance <time-reference>:如果自上次更新以来的时间小于或等于此值,则移动器将忽略更新。
常用关键词说明
update_interval指定模拟调用移动器的时间间隔,如果为零,则仅在需要确定包含平台的位置时调用
update_time_tolerance如果自上次更新以来的时间小于或等于此值,则移动器将忽略更新
shell
platform_type  <name> <type>
  ...
  mover WSF_AIR_MOVER  end_mover
end_platform_type
shell
mover <name> WSF_AIR_MOVER
    update_interval 5 sec
    update_time_tolerance 1 sec
    # 可以绑定一个路线
    use_route myRoute
end_mover

Demo

shell
platform_type MY_TYPE_NAME WSF_PLATFORM
  icon c-130
  mover WSF_AIR_MOVER end_mover
end_platform_type
shell
# 定义飞行路线
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

平台类型:platform_type

  • 创建新类型:
  1. 使用 platform_type <new-type-name> <source-type-name> 定义一个平台类型。
  2. <new-type-name> 必须是模拟中唯一的新类型名称,通常使用大写。
  3. <source-type-name> 可以是任何已定义的平台类型或 WSF_PLATFORM。
  4. 添加类型的基本属性,图标,属方,移动器
shell
# 定义一个新的平台类型
platform_type MY_AIRCRAFT_TYPE WSF_PLATFORM
    # 设置平台的图标
    icon  c-130 
    # 所属方
    side red
    # 添加移动器WSF_AIR_MOVER
    add mover WSF_AIR_MOVER  end_mover
end_platform_type

武器:weapon

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

以开始 weapon_effects <effects-name> WSF_SPHERICAL_LETHALITY

以结束 end_weapon_effects

shell
# 定义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
  • 定义武器:

以开始 weapon <name> WSF_EXPLICIT_WEAPON

以结束 end_weapon

将上面的武器效果绑定到武器上

shell
weapon AIM-9 WSF_EXPLICIT_WEAPON
    # 指定从红方飞机发射
    launched_platform_type RED_PLANE_TYPE  
    # 使用定义的AIM-9导弹效果
    weapon_effects         <effects-name>  
    # 设置武器类别
    category               1000_POUNDER  
    category               glide_bomb_unit  
end_weapon
  • Demo
完整Demo
shell
# 定义蓝方飞机的逃避路线
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分钟
shell
# 定义蓝方飞机的逃避路线
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
shell
# 定义蓝方飞机的移动器
mover BLUE_AIR_MOVER WSF_AIR_MOVER
    # 更新间隔设置为5秒
    update_interval 5 sec  
    # 时间容忍度设置为1秒
    update_time_tolerance 1 sec  
    # 使用蓝方逃避路线
    use_route evasionRouteBlue  
end_mover
shell
# 定义蓝方飞机的平台类型
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
shell
# 创建蓝方飞机实例
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
shell
# 创建红方飞机实例
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
shell
# 定义红方飞机的逃避路线
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
shell
# 定义红方飞机的移动器
mover RED_AIR_MOVER WSF_AIR_MOVER
    # 更新间隔设置为5秒
    update_interval 5 sec  
    # 时间容忍度设置为1秒
    update_time_tolerance 1 sec  
    # 使用红方逃避路线
    use_route evasionRouteRed  
end_mover
shell
# 定义红方飞机的平台类型
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
shell
# 创建红方飞机实例
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

平台实例:platform

平台实例,最终的实例模型,它具有一下属性:

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

语法

语法详情
shell
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
  • Demo
shell
# 定义一个新的平台类型
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

探测:Sensor

  • 法语

  • Demo

模拟器:Warlock/Mission

  • 法语:

  • Demo

脚本变量:Script_variables

  • 法语
  1. 可以写在platform_type,platform,processor
  2. script_variables开始,以end_script_variables结束
  3. 基础类型:int,string,double
  4. 写在外面的为全局变量
  5. static 修饰的为静态变量,只有一个实例且仅初始化一次的变量
  6. 类型转换
shell
int five = (int) 5.5;
string fivePointFive = (string)5.5;
  • Demo
shell
# 全局变量
script_variables
   double x = 1.0;
end_script_variables

platform_type My_NAME WSF_PLATFROM
    ....
    # 局部变量
    script_variables
       double  INDEX_ONE = 0.1;
       int INDEX_TWO = 2;
       string INDEX_THREE = "ABC";
    enf_script_variables
end_platform_type

脚本函数: Script

  • 法语
  1. 可以写在processor
  2. script开始,以end_script结束
  • Demo
shell
processor My_NAME WSF_SCRIPT_PROCESSOR
    ....
    
    script_variables
       double  INDEX_ONE = 0.1;
       int INDEX_TWO = 2;
       string INDEX_THREE = "ABC";
    enf_script_variables
    
    script bool funName()
     #支持if语句  if(){}
    end_script
end_processor

处理器:Processor

这里写一些实例之间的业务逻辑

  • 法语
shell
processor <processor-name> WSF_SCRIPT_PROCESSOR
    .....
    script_variables
       #可以写多个变量
       ...
    end_script_variables
    
    # 可以写多个函数
    script bool <script-name-1>()
       ...
    end_script
    
    # 可以写多个state
    state <state-name-1>
        # 下一个,可以写多个 next_state,内部 return出去
        next_state <state-name-1>
           return <script-name>
        end_next_state
        ...
    end_state
end_processor
  • Demo
shell
processor My_NAME WSF_SCRIPT_PROCESSOR
    ....
    
    script_variables
       double  INDEX_ONE = 0.1;
       int INDEX_TWO = 2;
       string INDEX_THREE = "ABC";
    enf_script_variables
    
    script bool funName()
     #支持if语句  if(){}
    end_script
end_processor

输出:event_output

shell
# 事件输出配置  
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

shell
# 结束时间  
end_time 7 min  # 模拟时间7分钟

Released under the MIT License.