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中可视化创建的雷达特性:

2_1.png

这里利用内联表创建的雷达特性是这样一个不规则的特性,红色突出部分表示更容易被传感器检测到。

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

4. 传感器

2_2.png

刚才雷达特性是平台被雷达传感器检测到的情况。传感器又可以分为不同种,红外传感器、雷达传感器、光学传感器等等;总的目标就是探测敌方平台的动向,然后生成对应的轨迹,输出给我方其他平台/指挥部,然后决定是否对其进行打击或者采取其他行动。
首先需要一个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跟踪雷达,用于锁定目标,实现精确制导,比如打击
  • 然后给该平台配置武器,武器就不细讲了

2_3.png

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函数。显示打击范围

4_1.png