沙盘客头像
关注
AFSIM 示例解读(03)· 六自由度飞行仿真 six_dof(下):机场运作与弹道导弹投送封面图

AFSIM 示例解读(03)· 六自由度飞行仿真 six_dof(下):机场运作与弹道导弹投送

能力标签:起降建模 / 跑道占用 / 助推段弹道 / 多阶段机动 / 阶段切换

这个 demo 在展示什么

上篇讲了 P6DOF 的"飞行"。但 six_dof 能力真正有意思的是它把 P6DOF 用到了两种带阶段切换的场景:

  1. 机场运作:飞机不是凭空出现在巡航高度,而是从跑道起飞、爬升、任务、进近、降落。这涉及跑道占用、起飞窗口、起落航线。
  2. 弹道导弹投送:导弹先靠火箭助推(动力段),关机后进入无动力的弹道滑行(再入段)。同一枚弹,前后两段的机动模型完全不同。

这两类场景的共同点是:一个平台在其生命周期里会切换"怎么动"。这正是 AFSIM 多 mover / 阶段 movers 机制要解决的。

核心机制一:阶段切换的两种实现

切换事件
(关机/离地/触地)

一个平台
生命周期

阶段一:动力/滑跑
mover 参数集 A

阶段二:滑行/巡航
mover 参数集 B

统一平台状态
对外暴露

无论起降还是导弹,本质都是"一个平台在不同时间用不同机动规则"。在 AFSIM 里你有两条路:

  1. 多 mover 列表:给平台挂多个 mover,用脚本/事件控制哪个生效。
  2. 单 mover + 脚本:在 WSF_SCRIPT_PROCESSORon_update 钩子里根据时间/状态改 mover 参数。

简单场景用 1,复杂状态机用 2。

真实可跑的最小片段(AFSIM 2.9 语法,示意)

机场起降在 AFSIM 里不是特殊 movers,而是 P6DOF mover + 一段描述起降的航线(route)+ 控制逻辑的组合。下面用三段式写清"滑跑→离场→巡航":

six_dof_type my_fighter_type              # 飞机类型(同 02,示意)
   mass               8000 kg
   reference_area     25 m2
   thrust_max         90000 N
end_six_dof_type

platform_type BLUE_FIGHTER WSF_PLATFORM
   side blue
   mover WSF_P6DOF_MOVER
      six_dof_type    my_fighter_type
      update_interval 0.05 sec
   end_mover
end_platform_type

platform ac_01 BLUE_FIGHTER
   position 30.0n 30.0e altitude 0 m msl             # 跑道头,地面滑跑
   route
      position 30.0n 30.0e altitude 0 m msl speed 0 m/s       # 静止待飞
      position 30.1n 30.0e altitude 0 m msl speed 80 m/s      # 跑道尾,离地前
      position 30.2n 30.1e altitude 300 m msl speed 150 m/s   # 离场点(爬升)
      position 31.0n 31.0e altitude 8000 m msl speed 250 m/s  # 任务点(巡航)
   end_route
end_platform

弹道导弹的两阶段,则用两个 six_dof_type(助推段含推力、滑行段无推力)指向同一平台的不同时刻,或在脚本里于关机时刻切换:

six_dof_type ballistic_booster            # 助推段:含推力曲线
   mass               12000 kg
   reference_area     3 m2
   thrust_max         300000 N
end_six_dof_type

six_dof_type ballistic_glider            # 滑行/再入段:无动力
   mass               4000 kg
   reference_area     3 m2
end_six_dof_type

platform_type TBM WSF_PLATFORM
   side red
   mover WSF_P6DOF_MOVER
      six_dof_type    ballistic_booster  # 初始为助推段
      update_interval 0.02 sec
   end_mover
end_platform_type

platform tbm_01 TBM
   position 40.0n 125.0e altitude 0 m msl
   # 关机时刻由脚本/事件把 six_dof_type 切换为 ballistic_glider
end_platform

核心思路是:把"动力段"和"滑行段"当成同一平台的两个机动状态,切换点就是关机时刻。

关键参数速查

参数所在组件类型 / 单位默认值取值说明调参影响
six_dof_type(助推)mover (P6DOF)类型名含推力的机型数据决定爬升率/射程;推力曲线形状决定弹道
six_dof_type(滑行)mover (P6DOF)类型名无动力机型数据决定再入减速/落点;质量差异影响落速
update_intervalmover (P6DOF)时间 (sec)引擎默认解算步长助推段加速快,步长要更小防发散
route 航点 speedroute速度 (m/s)各航点目标速度起降段速度连贯性决定"接得上"否
切换事件/脚本script_processor逻辑触发阶段切换切换时机错,机动衔接会"跳变"

阶段切换的通用心法

无论是起降还是导弹,本质都是"一个平台在不同时间用不同机动规则"。在 AFSIM 里你有两条路:

  1. 多 mover 列表:给平台挂多个 mover,用脚本/事件控制哪个生效。
  2. 单 mover + 脚本:在 WSF_SCRIPT_PROCESSORon_update 钩子里根据时间/状态改 mover 参数。

简单场景用 1,复杂状态机用 2。

工程实践与常见坑

  • 起降不是 movers 的事,是航线 + 逻辑的事。新手以为有"起飞 mover",其实起降靠 route 航点速度梯度 + 跑道长度约束 + 排队逻辑共同实现。跑道是否被占用、多机能否排队起飞,靠平台可用性管理或外部事件逻辑控制,不在 WSF_P6DOF_MOVER 本身。
  • 阶段切换时机错,轨迹跳变。助推→滑行若切换晚了,平台还带着推力冲出去;切换早了,高度不够掉下来。切换点要对应真实关机时刻,并验证切换前后速度/高度连续。
  • 多 mover 谁生效要明确。给平台挂多个 mover 时,必须脚本显式控制激活哪一个,否则引擎可能一直用第一个,第二阶段机动"没发生"。
  • 别拿 P6DOF 跑整条弹道还指望快。助推+全程再入用细步长解算,导弹多了一样拖慢全局。弹道中段可用更轻的 mover 或增大步长过渡。

小结与下一篇

本篇看了 six_dof 的"重"用法:机场起降和弹道投送,本质都是平台机动规则随时间切换。理解了这点,你对 AFSIM "平台=可演化状态机"的模型会更通透。

下一篇换一种高保真机动:(04)Brawler 高保真气动机动 brawler——它和 P6DOF 思路不同,是靠"查表 + 几何"把战斗机飞得既真实又稳。

下一篇预告:(04)Brawler 高保真气动机动 brawler
下一篇换一种高保真机动:(04)Brawler 高保真气动机动 brawler——它和 P6DOF 思路不同,是靠"查表 + 几何"把战斗机飞得既真实又稳。

下一篇预告:(04)Brawler 高保真气动机动 brawler

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/m0_38014978/article/details/163992973

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--