3. 雷达特性
监测平台配备雷达传感器,然后,其他被检测目标定义雷达特性(表示如何被探测到)
# File generated by Wizard 2.9.0 on Apr 3, 2025.
platform_type CAR WSF_PLATFORM
icon car
sensor ACQ WSF_RADAR_SENSOR
on
one_m2_detect_range 300 km
frame_time 1 sec
transmitter
power 1000 kW
frequency 3000 mHz
end_transmitter
end_sensor
mover WSF_GROUND_MOVER
end_mover
end_platform_type
首先,给蓝方car配备了雷达传感器sensor,传感器具体参数下节再说。这里直接定义使用。
之后,需要给红方轰炸机配备雷达特性,表示被检测到的情况。
# File generated by Wizard 2.9.0 on Apr 3, 2025.
include_once weapons/ata_missile.txt
radar_signature BOMBER_RADAR_SIG
state default
inline_table dbsm 24 5
-90.0 -30.0 0.0 30.0 90.0
-180.0 20.0 20.0 0.0 20.0 20.0
-145.0 20.0 20.0 0.0 20.0 20.0
-140.0 20.0 20.0 40.0 20.0 20.0
-135.0 20.0 20.0 40.0 20.0 20.0
-130.0 20.0 20.0 0.0 20.0 20.0
-95.0 20.0 20.0 0.0 20.0 20.0
-90.0 20.0 20.0 40.0 20.0 20.0
-85.0 20.0 20.0 0.0 20.0 20.0
-50.0 20.0 20.0 0.0 20.0 20.0
-45.0 20.0 20.0 40.0 20.0 20.0
-35.0 20.0 20.0 40.0 20.0 20.0
-30.0 20.0 20.0 0.0 20.0 20.0
30.0 20.0 20.0 0.0 20.0 20.0
35.0 20.0 20.0 40.0 20.0 20.0
45.0 20.0 20.0 40.0 20.0 20.0
50.0 20.0 20.0 0.0 20.0 20.0
85.0 20.0 20.0 0.0 20.0 20.0
90.0 20.0 20.0 40.0 20.0 20.0
95.0 20.0 20.0 0.0 20.0 20.0
130.0 20.0 20.0 0.0 20.0 20.0
135.0 20.0 20.0 40.0 20.0 20.0
140.0 20.0 20.0 40.0 20.0 20.0
145.0 20.0 20.0 0.0 20.0 20.0
180.0 20.0 20.0 0.0 20.0 20.0
end_inline_table
end_radar_signature
radar_signature BOMBER_RADAR_SIG2
state default
constant 1 m2
state fire
constant 1000 m2
end_radar_signature
platform_type BOMBER WSF_PLATFORM
icon bomber
radar_signature BOMBER_RADAR_SIG2
mover WSF_AIR_MOVER
end_mover
weapon ata ATA-MISSILE-LAUNCHER
quantity 4
maximum_request_count 2
end_weapon
execute at_time 50 sec absolute
Weapon("ata").FireSalvo(MasterTrackList().TrackEntry(0),1);
Weapon("ata").FireSalvo(MasterTrackList().TrackEntry(1),1);
SetRadarSigState("fire");
end_execute
execute at_time 55 sec absolute
SetRadarSigState("default");
end_execute
end_platform_type
- radar_signature 表示定义雷达特性,BOMBER_RADAR_SIG是定义的第一个雷达特性。用一个内联表表示在各个角度上的特性(也就是说,这个平台各个方向角度被探测到的情况各不相同)
可以在Wizard中可视化创建的雷达特性:

这里利用内联表创建的雷达特性是这样一个不规则的特性,红色突出部分表示更容易被传感器检测到。
之后又定义了个BOMBER_RADAR_SIG2雷达特性,这是一个规则的球型,constant 1 m2表示半径,专业术语是RCS雷达反射截面大小,越大越容易被检测。而BOMBER_RADAR_SIG2又分了两个阶段,不同阶段RCS大小不一样,默认的是1平方米大小,比较小。但在50s轰炸机开火后,雷达特性状态变成了fire,此试RCS大小突增,变成了1000;然后55s时候恢复到默认状态。这个过程表示,一旦平台开火,就会立刻被敌方雷达传感器检测到。
4. 传感器

刚才雷达特性是平台被雷达传感器检测到的情况。传感器又可以分为不同种,红外传感器、雷达传感器、光学传感器等等;总的目标就是探测敌方平台的动向,然后生成对应的轨迹,输出给我方其他平台/指挥部,然后决定是否对其进行打击或者采取其他行动。
首先需要一个common通用配置文件
# File generated by Wizard 2.9.0 on May 3, 2025.
infrared_signature VEHICLE_INFRARED_SIGNATURE
constant 10 watts/steradian
end_infrared_signature
optical_signature VEHICLE_OPTICAL_SIGNATURE
constant 10 m^2
end_optical_signature
radar_signature VEHICLE_RADAR_SIGNATURE
constant 1 m^2
end_radar_signature
filter FILTER_TACTICS WSF_KALMAN_FILTER
range_measurement_sigma 50. m
bearing_measurement_sigma 0.1 deg
elevation_measurement_sigma 0.1 deg
process_noise_sigmas_XYZ 50 50 50
end_filter
comm TEAM_DATALINK WSF_COMM_TRANSCEIVER
transfer_rate 100 mbits/sec
end_comm
- infrared_signature 表示红外特征;在红外频段表现出的能量是 10 W/sr;红外传感器检测该特性时,会根据这个值计算可见距离
- optical_signature 表示光学可见性(可见光反射面积);用于被光学传感器检测
- radar_signature 上一节用到的雷达反射截面RCS;RCS 越大,越容易被雷达探测到。
- filter 表示卡尔曼滤波器;用于构建目标跟踪器,使其能对噪声测量进行滤波,获得稳定轨迹。
- comm 表示通信链路;类似于一个双向收发机。用于传递或者接收检测到的目标轨迹
下面是雷达模型的定义(远程三维搜索雷达):
# File generated by Wizard 2.9.0 on May 3, 2025.
antenna_pattern ACQ_RADAR_ANTENNA
rectangular_pattern
peak_gain 35 dB
minimum_gain -10 db
azimuth_beamwidth 10 deg
elevation_beamwidth 10 deg
end_rectangular_pattern
end_antenna_pattern
sensor ACQ_RADAR WSF_RADAR_SENSOR
one_m2_detect_range 500 nm
maximum_range 1500 nm
antenna_height 5 m
frame_time 10 sec
scan_mode azimuth_and_elevation
azimuth_scan_limits -180 deg 180 deg
elevation_scan_limits 0 deg 50 deg
transmitter
antenna_pattern ACQ_RADAR_ANTENNA
power 1000 kw
frequency 3000 mhz
internal_loss 2 db
end_transmitter
receiver
antenna_pattern ACQ_RADAR_ANTENNA
bandwidth 2 mhz
noise_power -160 dbw
internal_loss 7 db
end_receiver
probability_of_false_alarm 1.0e-6
required_pd 0.5
swerling_case 1
hits_to_establish_track 3 5
hits_to_maintain_track 1 5
track_quality 0.6
reports_range
reports_bearing
reports_elevation
reports_iff
end_sensor
- antenna_pattern 表示天线方向图,表示雷达天线的建模
- sensor 这里定义了具体的雷达实体,一个WSF_RADAR_SENSOR类型的平台
- one_m2_detect_range 表示探测范围
- antenna_height 表示雷达安装高度
- frame_time 表示扫描时间,即10s全方位扫描一次,换而言之,每10s扫描一次同一个地点
- scan_mode 表示扫描模式;定义了水平方向和俯仰方向
- transmitter 表示发射机参数,用了最开始定义的天线模型;以及对应的发射功率,工作频率,噪声损耗;
- receiver 表示雷达得接收机参数,使用同样的天线模型,以及带宽、噪声功率、损耗;
- probability_of_false_alarm 表示检测误警率;然后是雷达要求的探测概率required_pd;以及模拟真实的RCS波动
- hits_to_establish_track 建立航迹需要成功3次探测(一共5次)
- hits_to_maintain_track 维持航迹的要求
- track_quality 航迹质量阈值;低于0.6会被抛弃
- 最后是一些雷达报告的测量字段:距离、方位、俯仰、敌我识别(IFF)
下面再定义一个目标跟踪雷达:
# File generated by Wizard 2.9.0 on May 3, 2025.
antenna_pattern TTR_RADAR_ANTENNA
sine_pattern
peak_gain 35 db
minimum_gain -10.0 db
azimuth_beamwidth 1 deg
elevation_beamwidth 1 deg
end_sine_pattern
end_antenna_pattern
sensor TTR_RADAR WSF_RADAR_SENSOR
selection_mode multiple
slew_mode azimuth_and_elevation
azimuth_slew_limits -180 deg 180 deg
mode_template
one_m2_detect_range 35.0 nm
maximum_range 100.0 nm
antenna_height 4.0 m
transmitter
antenna_pattern TTR_RADAR_ANTENNA
power 1000.0 kw
frequency 9500 mhz
internal_loss 2 db
end_transmitter
receiver
antenna_pattern TTR_RADAR_ANTENNA
bandwidth 500.0 khz
noise_power -160 dbw
internal_loss 7 db
end_receiver
probability_of_false_alarm 1.0e-6
required_pd 0.5
swerling_case 1
reports_range
reports_bearing
reports_elevation
reports_velocity
end_mode_template
mode ACQUIRE
maximum_request_count 1
scan_mode azimuth_and_elevation
azimuth_scan_limits -5 deg 5 deg
elevation_scan_limits -5 deg 5 deg
frame_time 2.0 sec
hits_to_establish_track 3 5
hits_to_maintain_track 1 3
track_quality 0.8
end_mode
mode TRACK
maximum_request_count 6
scan_mode azimuth_and_elevation
azimuth_scan_limits -1 deg 1 deg
elevation_scan_limits -1 deg 1 deg
frame_time 1.0 sec
hits_to_establish_track 3 5
hits_to_maintain_track 1 3
track_quality 1.0
end_mode
end_sensor
- 首先还是天线模型,这里采用超窄波束火控天线得雷达
- 然后依旧是雷达主体,WSF_RADAR_SENSOR
- selection_mode 属性表示选择模式,multiple表示可以同时选择多个目标
- slew_mode 表示雷达可以指向任意方向,全向旋转。
- mode_template 表示模式模板
- one_m2_detect_range 最大检测距离35m
- transmitter 依旧是发射机参数, 功率非常高火控穿透力
- receiver 表示接收器
- 下面的参数与之前的监控雷达相同
- 最后有个mode,表示模式,第一个ACQUIRE表示目标捕获模式:用于从搜索雷达移交的目标附近扫描
- 另一个TRACK表示精准跟踪模式:真正的火控跟踪模式
雷达创建完毕,最后是定义地空导弹平台,使用刚才定义的两个雷达
# File generated by Wizard 2.9.0 on May 3, 2025.
include_once platforms/common.txt
include_once weapons/sam/large_sam.txt
include_once sensors/radar/acq_radar.txt
include_once sensors/radar/ttr_radar.txt
platform_type SINGLE_LARGE_SAM WSF_PLATFORM
icon TWIN_BOX
category ENGAGEMENT
infrared_signature VEHICLE_INFRARED_SIGNATURE
optical_signature VEHICLE_OPTICAL_SIGNATURE
radar_signature VEHICLE_RADAR_SIGNATURE
track_manager
filter FILTER_TACTICS end_filter
end_track_manager
comm cmdr_net TEAM_DATALINK
network_name <local:slave>
internal_link data_mgr
internal_link task_mgr
end_comm
comm sub_net TEAM_DATALINK
network_name <local:master>
internal_link data_mgr
internal_link task_mgr
end_comm
zone full_kinematic
circular
maximum_altitude 30 km
maximum_radius 25 nm
end_zone
sensor acq ACQ_RADAR
on
internal_link data_mgr
end_sensor
sensor ttr TTR_RADAR
end_sensor
weapon sam LARGE_SAM
quantity 16
end_weapon
processor data_mgr WSF_TRACK_PROCESSOR
purge_interval 60 seconds
end_processor
processor task_mgr WSF_TASK_PROCESSOR
end_processor
end_platform_type
- 特征签名(红外/光学/雷达) 用之前定义在commom中的
- track_manager 用于目标跟踪滤波
- 然后是通信链路,这里先不细说,下一节会总结平台间的通信
- full_kinematic 定义活动区域,也就是打击范围
- 接着是重点,配备刚才定义的两个雷达,一个搜索雷达ACQ_RADAR, 通过数据链路data_mgr传递检测到的trace
- 另一个是TTR_RADAR跟踪雷达,用于锁定目标,实现精确制导,比如打击
- 然后给该平台配置武器,武器就不细讲了

5. 脚本控制器
# File generated by Wizard 2.9.0 on May 9, 2025.
processor BOMBER_WEAPON_RELEASE WSF_SCRIPT_PROCESSOR
script_variables
string weaponName = "red_gps_bomb_1";
string LARmeters = "lar_meters";
Array<bool> tgt_engaged = Array<bool>();
end_script_variables
on_initialize2
for(int i = 0; i<PLATFORM.MasterTrackList().Count();i = i+1)
{
tgt_engaged[i] = false;
}
end_on_initialize2
script bool fireWeapon(WsfTrack tTrack, string tWpn)
bool shot = false;
WsfWeapon tempWeapon = PLATFORM.Weapon(tWpn);
if(tempWeapon.IsValid() && tempWeapon.AuxDataExists(LARmeters))
{
double tempRange = tempWeapon.AuxDataDouble(LARmeters);
if(PLATFORM.SlantRangeTo(tTrack)<tempRange
&& tempWeapon.QuantityRemaining()>0
&& PLATFORM.Altitude() >= 7620)
{
shot = tempWeapon.FireSalvo(tTrack, 2);
}
}
if(shot)
{
writeln(PLATFORM.Name(), " fired ", tWpn, " at ",
tTrack.TargetName(), " at time ", TIME_NOW);
}
return shot;
end_script
update_interval 3.0 s
on_update
for(int i = 0; i<PLATFORM.MasterTrackList().Count(); i += 1)
{
if( !tgt_engaged[i])
{
WsfTrack tempTrack = PLATFORM.MasterTrackList().TrackEntry(i);
if(fireWeapon(tempTrack, weaponName))
{
tgt_engaged[i] = true;
}
}
}
end_on_update
end_processor
之前的武器是到点50s自动发射,afsim提供脚本控制器,可利用脚本逻辑控制武器发射时间,当达到某种条件时,再发射;有点类似于JS和HTML得关系吧。脚本语言类似于C++;但可能没有一些C++得新特性;
上述代码就是实现了个开火逻辑,当有子弹,并且目标在范围内,则进行开火打击;然后每3s检测一次,更新开火逻辑;
之后更改bomber中的武器定义
processor fire-em BOMBER_WEAPON_RELEASE
end_processor
# execute at_time 50 sec absolute
# Weapon("gps").FireSalvo(MasterTrackList().TrackEntry(0),1);
# Weapon("gps").FireSalvo(MasterTrackList().TrackEntry(1),1);
# SetRadarSigState("fire");
# end_execute
注释原本的50s开火逻辑,使用刚才定义的脚本控制器BOMBER_WEAPON_RELEASE,实现条件开火。
刚才是processor得脚本控制器,afsim还提供更基本的script:
# File generated by Wizard 2.9.0 on May 11, 2025.
// script/draw.txt
script void Draw()
WsfWeapon tempWeapon = PLATFORM.Weapon(weaponName);
if(tempWeapon.IsValid() && tempWeapon.AuxDataExists(LARmeters))
{
WsfDraw draw = WsfDraw();
double range = tempWeapon.AuxDataDouble(LARmeters);
draw.SetDuration(3.0);
draw.SetColor(0, 1, 0);
draw.SetEllipseMode("line");
draw.BeginCircle(0.0, range);
draw.Vertex(PLATFORM);
draw.End();
}
end_script
这就是定义了一个画圆得函数draw,画出平台的攻击范围。
然后更新刚才的processor
update_interval 3.0 s
on_update
for(int i = 0; i<PLATFORM.MasterTrackList().Count(); i += 1)
{
if( !tgt_engaged[i])
{
Draw();
WsfTrack tempTrack = PLATFORM.MasterTrackList().TrackEntry(i);
if(fireWeapon(tempTrack, weaponName))
{
tgt_engaged[i] = true;
}
}
}
end_on_update
如果还有未击打目标,就调用draw函数。显示打击范围
