【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞

记录一下jsbsim + python + tacview 仿真&可视化:F16起飞任务

import jsbsim
import matplotlib.pyplot as plt

# 初始化 JSBSim
sim = jsbsim.FGFDMExec(None)
sim.set_debug_level(0)
sim.load_model('f16')

# 初始状态(地面起飞)
sim['ic/h-sl-ft'] = 35000
sim['ic/vt-fps'] = 2500
sim['ic/psi-true-deg'] = 0
sim['ic/theta-deg'] = 95  # 适度仰角
sim['ic/lat-gc-deg'] = 41.62513
sim['ic/long-gc-deg'] = 41.59104
sim['ic/roc-fpm'] = 0
sim.run_ic()

# 设置油门和升降舵控制
sim['fcs/throttle-cmd-norm'] = 1.0        # 油门最大

# 仿真时间与步长
dt = sim.get_delta_t()
total_sim_time = 90  # 秒
steps = int(total_sim_time / dt)

# ACMI 文件头信息
reference_time = "2011-06-02T05:00:00Z"
acmi_lines = [
    "FileType=text/acmi/tacview\n",
    "FileVersion=2.2\n",
    f"0,ReferenceTime={reference_time}\n",
    "0,Author=JSBSim2Tacview\n",
    "0,Title=F16 Takeoff\n",
    "0,RecordingTime=60\n",
    "0,Comments=Generated from JSBSim\n",
    "0,DataSource=JSBSim\n",
    "0,DataRecorder=PythonScript\n",
    "0,3000102,Type=Aircraft,Name=F16\n"
]

# 存储用于绘图的高度数据
altitudes_m = []
time_sec = []

# 仿真主循环
for step in range(steps):
    sim['fcs/elevator-cmd-norm'] = 0.2  # 保持抬头
    sim.run()
    t = step * dt

    # 读取参数
    lat = sim["position/lat-gc-deg"]
    lon = sim["position/long-gc-deg"]
    alt_ft = sim["position/h-sl-ft"]
    alt_m = alt_ft * 0.3048
    heading = sim["attitude/psi-deg"]
    pitch = sim["attitude/theta-deg"]
    roll = sim["attitude/phi-deg"]

    # 写入 ACMI
    acmi_lines.append(f"#{t:.2f}\n")
    acmi_lines.append(f"3000102,T={lat}|{lon}|{alt_m:.2f},Heading={heading:.2f},Pitch={pitch:.2f},Roll={roll:.2f},Name=F16\n")

    # 存储高度数据
    altitudes_m.append(alt_m)
    time_sec.append(t)

# 输出 ACMI 文件
with open("F16_takeoff.acmi", "w") as f:
    f.writelines(acmi_lines)

# 绘制高度变化图
plt.figure(figsize=(10, 6))
plt.plot(time_sec, altitudes_m, label="Altitude (m)", color="green")
plt.title("F16 Takeoff Altitude Curve")
plt.xlabel("Time (s)")
plt.ylabel("Altitude (m)")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()

在这里插入图片描述

导出用于 TacView 可视化的 “F16_takeoff.acmi” 文件,并在 TacView 中打开。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值