武器
武器是旨在摧毁或干扰敌方平台和系统的物体。
在 AFSIM 中实施了两种武器形式:
- 显式武器
- 隐式武器
显式武器是建模为物理上离开发射平台并作为独立平台进入仿真的武器。例子包括炸弹和导弹。
隐式武器不被建模为离开发射平台的武器。例子包括激光等能量武器和干扰器。弹道武器如火箭、炮兵和迫击炮可以被建模为隐式或显式武器。
AFSIM 提供了多种预定义的武器模型,包括:
- WSF_EXPLICIT_WEAPON
- WSF_IMPLICIT_WEAPON
- WSF_CUED_LASER_WEAPON
- WSF_LASER_WEAPON
- WSF_RF_JAMMER
- WSF_CHAFF_WEAPON
快速入门
可以如下定义一个武器:
weapon SIMPLE_WEAPON WSF_EXPLICIT_WEAPON
end_weapon
不过,单独的武器就像一个骨架。为了有用,必须将其作为平台类型的一部分实现:
platform_type SIMPLE_WEAPON WSF_PLATFORM
weapon self SIMPLE_WEAPON
end_weapon
end_platform_type
现在,如果将以下命令添加到平台或平台类型定义中,其他平台和平台类型可以装备此武器:
add weapon sgm SIMPLE_GUIDED_MISSILE
quantity 1
end_weapon
此时,一个平台可以装备此武器,但这武器并没有任何效果——换句话说,它没有影响。要使武器有效,需创建一个 weapon_effects
块,并将其添加到武器的平台类型定义中,如下所示:
weapon_effects HIT WSF_GRADUATED_LETHALITY
radius_and_pk 40 m 0.7
end_weapon_effects
这定义了武器的作用,但没有定义何时将其执行。可以向武器的平台类型定义中添加一个 WSF_AIR_TARGET_FUSE
元件,以确定其引爆的条件:
platform_type SIMPLE_WEAPON WSF_PLATFORM
...
weapon_effects HIT
end_platform_type
提示:多个引信模型是预定义的。此块可以根据多个因素指定引爆标准,例如与目标的距离、飞行时间、高度等。
现在需要解决的问题是武器如何到达其目标。为了使武器寻求其目标,必须在武器的平台类型定义中定义一个推动器和一个目标处理器:
mover WSF_GUIDED_MOVER aero WSF_AERO total_mass 250 kg fuel_mass 150 kg specific_impulse 90 sec thrust_duration 30 sec end_mover |
processor targeting WSF_GUIDANCE_COMPUTER guide_to_truth true end_processor |
这款武器设计为直接飞向其目标的真实位置。它在消耗燃料的同时加速,当距离目标 10 米时引爆,并具有高致命性。
这款武器现在可以发射。从 Warlock 中,用户现在可以直接使用武器浏览器发射此武器,选择武器所属的平台。或者,为了自动化此过程,用户必须定义武器发射的条件。这可能需要额外的行为和/或高级处理。关于发射武器的接触逻辑的示例实现可参见《在轨迹上发射武器》。
警告:这只是一个出于学习目的提供的简化武器模型。
深入了解
注意:以下步骤假设“simple_flight”场景如《通讯》中所讨论的那样存在。
目前,simple_flight 场景的设置是“cargo-2”在通过空中交通控制(atc)共享碰撞警告消息后将调整航线以适应“cargo-1”。然而,cargo-1 可能是友好的,而 cargo-2 可能是敌对的。以下部分将详细说明造成 cargo-2 向 cargo-1 发射导弹的必要更改和附加内容,而不是改变航线。
添加武器
要实现一个武器并将其提供给“cargo-2”,请完成以下步骤:1 在 Wizard 中打开 simple_flight 场景。
2 创建以下文件:weapon.txt 和 cargo_aircraft_mil.txt。
3 在 cargo_aircraft_mil.txt 中包含 weapon.txt 和 cargo_aircraft.txt,并在 platform_laydown.txt 中包含 cargo_aircraft_mil.txt。
4 在 weapon.txt 中创建一个武器,如下所示:
# weapon.txt - CUI
# A component of the simple_flight demo
weapon_effects PERFECT_HIT WSF_GRADUATED_LETHALITY
radius_and_pk 100 m 1
end_weapon_effects
platform_type SIMPLE_GUIDED_MISSILE WSF_PLATFORM
icon aim-120c
weapon_effects PERFECT_HIT
weapon self SIMPLE_GUIDED_MISSILE
end_weapon
processor targeting WSF_GUIDANCE_COMPUTER
guide_to_truth true
end_processor
processor fuse WSF_AIR_TARGET_FUSE
fuse_function_range 5 m
end_processor
mover WSF_GUIDED_MOVER
aero WSF_AERO
total_mass 250 kg
fuel_mass 150 kg
specific_impulse 90 sec
thrust_duration 30 sec
end_mover
end_platform_type
weapon SIMPLE_GUIDED_MISSILE WSF_EXPLICIT_WEAPON
launched_platform_type SIMPLE_GUIDED_MISSILE
location 0 5 0 m
end_weapon
5 在 cargo_aircraft_mil.txt 中实现一个新的平台类型 CARGO_AIRCRAFT_MIL,从 CARGO_AIRCRAFT 派生,定义如下:
# cargo_aircraft_mil.txt - UNCLASSIFIED//FOUO
# A component of the simple_flight demo
# See AAA_ITAR.txt for distribution and usage.
include_once cargo_aircraft.txt
include_once weapon.txt
#include_once behaviors_mil.txt
platform_type CARGO_AIRCRAFT_MIL CARGO_AIRCRAFT
edit processor task_mgr
behavior_tree
sequence
selector
behavior_node all_clear
behavior_node entity_detected
behavior_node next_selector
end_selector
selector
#behavior_node engage_track
#behavior_node weapon_terminated
end_selector
end_sequence
end_behavior_tree
end_processor
add weapon sgm SIMPLE_GUIDED_MISSILE
quantity 1
end_weapon
end_platform_type
6 请注意 cargo_aircraft_mil.txt 中的注释“include”文件和“行为节点”。这些将在“在轨迹上发射武器”中实现。
7 在 platform_laydown.txt 中更新 cargo-2 的平台定义,以实现 CARGO_AIRCRAFT_MIL,如下所示:
platform cargo-2 CARGO_AIRCRAFT_MIL
...
end_platform
注意:如“快速入门”中提到的,并在第 6 步中提到,这种武器一旦发射便拥有所需的一切。要自动化武器发射,需要额外的处理,如下节所实现。
在轨迹上发射武器
现在,用户可以直接从 Warlock 的武器浏览器向 cargo-1 发射此武器。要手动发射武器,请完成以下步骤:
1 在 Warlock 中运行 simple_flight。
2 将仿真时间推进到 1000 秒。
3 选择 cargo-2。
4 从视图菜单中打开 Warlock 的武器浏览器。
5 当检测到 cargo-1 的轨迹时,点击武器浏览器中的“新目标”。
![]() ![]() |
6 使用光标按钮在武器浏览器中选择地图显示上的轨迹,或直接输入轨迹编号,以选择 sgm 的目标轨迹。
7 点击武器浏览器中的“发射”以发射 sgm。
8 注意,一个新的平台被创建以表示 sgm。它将寻求其目标并在到达时引爆。
9 注意 cargo-2 没有改变其航线,尽管收到了 cargo-1 的警告。这是因为 CARGO_AIRCRAFT_MIL 的任务处理器中实施了修改过的行为树。
通过改变 cargo-2 的行为,这一过程也可以自动化。要自动化此过程,请完成以下步骤:
1 创建一个新的文件 behaviors_mil.txt。
2 在 cargo_aircraft_mil.txt 中移除注释,以包含新的 behaviors_mil.txt 文件。
3 向 behaviors_mil.txt 添加以下行为定义:
behavior engage_track
precondition
bool collisionExpected = PLATFORM.AuxDataBool("collisionExpected");
bool trackListEmpty = PLATFORM.TrackList("track_proc").Empty();
WsfWeapon wep = PLATFORM.WeaponEntry(0);
return (collisionExpected && !trackListEmpty &&
wep.QuantityRemaining() > 0);
end_precondition
execute
WsfPlatform plat = PLATFORM;
WsfLocalTrack track = plat.TrackList("track_proc")[0];
if (track.Target().IsValid())
{
writeln(plat.Name(), " Report: Engage");
writeln("\t- Weapon: ", plat.WeaponEntry(0).Name());
writeln("\t- Track: ", track.TrackId(), "\n");
plat.SetCurrentTarget(track);
plat.WeaponEntry(0).Fire(track);
}
end_execute
end_behavior
behavior weapon_terminated
precondition
WsfPlatform plat = PLATFORM;
WsfTrack targetTrack = plat.CurrentTargetTrack();
return (targetTrack.IsValid() &&
(PLATFORM.TimeSinceWeaponLastTerminatedFor(targetTrack.TrackId()) > 0));
end_precondition
execute
WsfPlatform plat = PLATFORM;
writeln(plat.Name(), " Report: Weapon Terminated");
writeln("\t- Weapon: ", plat.WeaponEntry(0).Name());
writeln("\t- Track: ", plat.CurrentTargetTrack().TrackId());
writeln("\t- Time: ", TIME_NOW, " s\n");
plat.SetAuxData("collisionExpected", false);
end_execute
end_behavior
4 编辑 cargo_aircraft_mil.txt,以移除 CARGO_AIRCRAFT_MIL 任务处理器重新定义中的评论,以启用 engage_track 和 weapon_terminated 行为。
通过这些增补,在 Warlock 或 Mission 中模拟 simple_flight 时,cargo-2 将保持在航线上,尽管收到了 cargo-1 的警告,并将在 cargo-1 处于其 AIR_RADAR 范围内时,向其轨迹发射 sgm。
警告:这只是一个出于学习目的提供的简化武器模型。自动化行为同样是为了学习目的,因此不应被视为现实操作或模拟操作的战略建议。
概要
武器可以简单建模,如本模块中所示。然而,AFSIM 支持以更高的精度建模和模拟武器行为。武器还可以根据需要包含通信、传感器和其他平台部件等附加特性。