😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔本文讲解【建模与仿真】一文搞定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/
- 安装:根据官网进行安装即可,比较简单,这里不再赘述。如果是个人使用,社区版就够用了,我这里下载社区版。
- 介绍:Visual Studio IDE 是一个创意启动板,可用于编辑、调试和生成代码,然后发布应用。除了大多数 IDE 都提供的标准编辑器和调试器之外,Visual Studio 还包括编译器、代码补全工具、图形设计器以及许多其他功能,以增强软件开发过程。
软件获取
可以使用以下方法获取 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编译打包运行流程:
- 新建
build
文件夹【一定要与src同级】 - 使用cmake打开源代码(src文件夹)
- configuration
- generate
- open project【如无反应,手动进入build目录下,设置afsim.slm默认启动项为
Microsoft Visual Studio
】 - 配置解决方案为Release【编译后,build文件夹会产生Release文件夹】
解决方案——cmaketargets——ALL BUILD(右键生成)【生成文件在build/Release/下】
解决方案——cmaketargets——INSTALL(右键生成)【生成文件在build/wsf_install/下】
- 把
build/wsf_install/bin/*
复制到build/Release/
下 - 将
resource、demo、document
拷贝到build/
下 - 设置
wizard设为启动项
【解决方案——applications——wizard——右键设为启动项目
】 VS中点击本地调试器
- 选择Demo Browser — air-to-air — Open Project
- 选择Warlock模式启动
- 模拟演示
二、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>
:声明对象是指定类别的成员。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
:定义部件从损伤中恢复的能力。
- 特定命令:
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_route
、transform_absolute_route
、insert_route
或insert_offset_route
命令在当前路由点插入另一个路由。
- 使用
- 航点命令(Waypoint Commands):
- 航点可以通过以下命令之一开始:
- 特定的纬度和经度(
position
) - 相对于当前位置的偏移(
offset
) - 转向命令(
turn_left
、turn_right
或turn_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>
跳转到当前路由中具有指定标签的航点。
- 使用
- 航点命令:
- 包括
altitude
、depth
、heading
、turn
、speed
、linear_acceleration
、radial_acceleration
、bank_angle_limit
、turn_g_limit
、climb_rate
、dive_rate
等,用于指定航点的特定行为。
- 包括
- 暂停时间:
- 使用
pause_time <time-value>
指定达到航点时停止移动的时间。
- 使用
- 执行脚本或回调:
- 使用
execute <script-name> <callback-name>
指定达到航点时执行的脚本或回调。
- 使用
- 航点结束行为:
- 使用
extrapolate
、stop
或remove
指示当航点被遇到且路由中没有更多航点时移动器应采取的行为。
- 使用
- 切换条件:
- 使用
switch_on_passing
或switch_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_route
或insert_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
结束。
- 每个武器定义以
- 状态控制:
- 使用
on
或off
命令设置武器在模拟开始时的初始状态。
- 使用
- 更新间隔:
- 使用
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
❌ [ 勘误 ] /* 暂无 */
📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,
本人也很想知道这些错误,恳望读者批评指正!