afsim仿真学习

1. 平台

afsim中每个实体都是一个平台,类似于C++中的类;创建一个平台类似于类的实例化;

# platforms/bomber.txt
platform_type BOMBER WSF_PLATFORM
   icon bomber
   
   mover WSF_AIR_MOVER
   end_mover
   
end_platform_type

platform_type CAR WSF_PLATFORM
   icon bomber
   
   mover WSF_GROUND_MOVER
   end_mover
   
end_platform_type
  • platform_type end_platform_type 表示定义平台类型的脚本代码
  • WSF_PLATFORM 是平台类型,属于顶级模型, 没有需要继承的其它父类模型命令。
  • BOMBER是定义的平台名称,类似C++中的类名。
  • icon bomber 表示平台的显示图标
  • mover 表示平台可以移动,用于构建航线。
  • WSF_AIR_MOVER 表示对应的运动模型;WSF_AIR_MOVER 是 一 种 为 简 化 空 中 载 具 运 动 而 设 计 的 路 线 Mover 。 使 用WSF_AIR_MOVER 的优点在于, 无需了解平台的质量属性、 空气动力学或推进系统即可模拟空体运动。 运动基于为各种参数(如线性加速度、 速度、 G 力、 径向加速度) 设置的最大限制, 但仅适用于水平面的连续运动。 WSF_AIR_MOVER 的限制在于平台的垂直过渡(高度变化) 。 这些过渡是不连续的, 因为不对过渡的垂直俯仰率和垂直加速度进行建模。 如果希望平台具有连续和平滑的垂直和水平过渡, 请使用 WSF_KINEMATIC_MOVER(如果不需要空气动力学、 质量属性、 推进或高度效应) 或 WSF_P6DOF_MOVER( 如果需要真实的基于物理的建模) 。如果是其他类型平台,比如地面的实例(汽车)使用WSF_GROUND_MOVER, 水中的(船)WSF_SURFACE_MOVER, 太空中的(卫星)WSF_SPACE_MOVER。

之后就可以创建对应平台,scenarios/blue_laydown.txt


# File generated by Wizard 2.9.0 on Apr 3, 2025.

platform car_1 CAR
   position 29:52:50.532n 81:43:29.717w
   side blue
   route
      position 29:52:50.53n 81:43:29.72w altitude 0.00 ft agl
         speed 50 mph
      position 30:51:56.73n 81:43:28.21w
   end_route

end_platform

platform car_2 CAR
   position 29:34:05.943n 82:18:35.833w
   side blue
   altitude 0 feet
   heading 90 degrees
  

   route
      label Waypoint-0
      position 29:34:05.943n 82:18:35.833w altitude 0.00 ft
         speed 50 mph
      label Waypoint-1
      position 29:22:39.469n 82:04:18.142w altitude 0.00 ft
      label Waypoint-2
      position 29:02:42.252n 82:13:26.343w altitude 0.00 ft
      label Waypoint-3
      position 29:14:25.707n 82:32:43.637w altitude 0.00 ft
         goto Waypoint-0
   end_route

end_platform

  • platform end_platform 表示创建一个平台脚本代码
  • platform 后面跟平台的名称
  • 最后一个表示平台的类型,就是之前定义的平台类型
  • 下一行表示平台的参数,position表示平台位置;side表示平台所属阵营;altitude表示高度;heading表示角度(顺时针);
  • route end_route表示航线;平台类型如果有mover移动器,就可以给平台指定航线移动,航线有一系列路径点组成,参数分别是,路径点坐标,高度,速度。

1_1-NIzt.png

在左边平台细节中可以利用软件图形化调整平台的参数(阵营、类型、标识、坐标经纬度、海拔、方向等等),更改会同步到txt脚本中。

2. 武器

武器也是一个平台,需要定义,然后配置到需要安装的平台上;

# File generated by Wizard 2.9.0 on Apr 10, 2025.

platform_type ATA-MISSILE WSF_PLATFORM

   icon missile
   
   mover WSF_STRAIGHT_LINE_MOVER
   
      update_interval .5 s
      tof_and_speed  
         0.0 s 700 kts
         20.0 s 500 kts
         40.0 s 300 kts
      end_tof_and_speed   
      
      maximum_lateral_acceleration 9.0 g
      
      guidance_mode lead_pursuit
   end_mover

   processor tracker WSF_PERFECT_TRACKER
      update_interval 1.0 s
   end_processor
   
   processor fuse WSF_AIR_TARGET_FUSE
      max_time_of_flight_to_detonate 3600 s
   end_processor

end_platform_type


weapon_effects ATA-MISSILE-EFFECTS WSF_SPHERICAL_LETHALITY
   minimum_radius 1000 m
   maximum_radius 1200 m
end_weapon_effects

weapon ATA-MISSILE-LAUNCHER WSF_EXPLICIT_WEAPON
   launched_platform_type ATA-MISSILE
   weapon_effects ATA-MISSILE-EFFECTS
end_weapon

一个武器由发射逻辑和打击特效两个部分组成,每一个都是一个平台,先是发射平台

  • mover end_mover 定义武器平台的运动模型;
  • WSF_STRAIGHT_LINE_MOVER 实现了一个用于 WSF_EXPLICIT_WEAPON 的移动器, 该移动器从发射点沿(或多或少) 直线飞行以拦截目标轨迹。 用户无需指定武器的质量属性、 推进或空气动力学表, 但会因此损失一定的保真度。
  • tof_and_speed ... end_tof_and_speed 表示武器运动速度与时间的关系,初始700,20s后变化。。。
  • processor 定义处理器,WSF_PERFECT_TRACKER是完美跟踪器,

发射平台定义后,还需要定义打击特效,

  • weapon_effects end_weapon_effects 表示武器特效。不同武器杀伤范围不同,WSF_SPHERICAL_LETHALITY表示距离杀伤模型,球形杀伤范围。
  • maximum_radius表示武器产生效果的最大斜距。

最终定义武器

  • launched_platform_type 表示发射平台,使用刚才定义的
  • weapon_effects 打击特效,使用刚才定义的

之后修改需要配置武器的平台定义,这里是轰炸机:

# File generated by Wizard 2.9.0 on Apr 3, 2025.

include_once weapons/ata_missile.txt


platform_type BOMBER WSF_PLATFORM
   icon bomber
   
   mover WSF_AIR_MOVER
   end_mover
   
   weapon ata ATA-MISSILE-LAUNCHER
      quantity 4
      maximum_request_count 2
   end_weapon
   
   execute at_time 1000 sec absolute
      Weapon("ata").FireSalvo(MasterTrackList().TrackEntry(0),1);
      Weapon("ata").FireSalvo(MasterTrackList().TrackEntry(1),1);
   end_execute
   
end_platform_type
  • 增加weapon表示刚才定义的武器,
  • quantity 表示拥有武器数量,只有四发子弹
  • maximum_request_count 表示同时最大同时攻击的平台数量
  • execute end_execute 表示执行器,1000s后,执行其中的脚本代码
  • 其中的代码表示,发射子弹攻击track中的对象0,使用1发子弹;TrackEntry(0),1的意思
  • 然后攻击track中的对象1,使用1发子弹。

最终的平台创建代码中增加要攻击的平台对象:

platform bomber_1 BOMBER

   track platform tank_1 end_track
   track platform tank_2 end_track

   position 29:30:46.677n 77:54:38.753w
   ...
end_platform
  • track表示把平台tank_1对象增加到bomber_1的攻击队列中,下一行同理;

到此为止,武器的发射逻辑,击打效果,平台配置武器,定义要攻击的对象。就可以实现攻打了;