飞机基础知识一 1.3二维平面飞机运动学模型
1.空战博弈编程实现——2 初探JSBSIM2.空战博弈实现——3 gym自定义环境3.空战博弈编程实现——gym+jsbsim4.空战博弈编程实现5.空战编程实现——6 强化学习与控制器6.空战博弈编程实现7——将JSBSI和强化学习算法融合7.博弈论与强化学习 算法 一 MinimaxQ, NashQ ,FFQ8.博弈论与强化学习——基础1 扩展型博弈9.飞机游戏二 空战可视化+强化学习10.gym——1自定义Gym环境并注册11.博弈论与强化学习实战——CFR算法——剪刀石头布12.博弈论与强化学习——— 基础2 马尔科夫博弈13.飞机游戏六 空战强化学习环境6.1DBML 6.1.1DBML 使用14.飞机游戏五 强化学习算法库15.分层强化学习316.飞机游戏三仿真软件 3.2Airsim介绍17.强化学习与控制器18.飞机游戏四 飞机作战场景19.飞机游戏三仿真软件 3.1JSBSim介绍20.飞机游戏 一 飞行基础知识 1.1概念介绍21.空战编程实现1——小雅22.分层强化学习23.问题建模24.多智能体理论25.马尔可夫决策理论
26.飞机基础知识一 1.3二维平面飞机运动学模型
27.飞机游戏六 空战环境 6.1 DBRML 6.1.5 动作空间设置28.飞行基础知识一 1.2飞机的三自由度方程29.中远距空战对战场景30.飞机游戏六空战强化学习环境6.1DBML 6.1.4 DBML+强化学习算法使用31.飞机游戏六空战强化学习环境6.1DBML 6.1.3 DBML+强化学习算法使用32.飞机游戏三仿真软件 3.3 Dogfight介绍 33.飞机游戏六空战强化学习环境 6.1DBML 6.1.2源码阅读与分析飞机基础知识一 1.3二维平面飞机运动学模型
运动学方程
在二维平面上
将飞机视为一个质点
\[\begin{aligned}
& \frac{d x}{d t}=v \cos \psi \\
& \frac{d y}{d t}=v \sin \psi \\
& \frac{d v}{d t}= a \\
& \frac{d \psi}{d t}= \omega \\
\end{aligned}
\]
状态量为 位置 x ,y , 速率 v 速度与x轴的夹角 \(\theta\)
控制量为 加速度大小 \(a\) 和 角加速度大小 \(\omega\)
程序实现
给定初始状态
二维空间坐标值、飞行速率、与x轴夹角
\[x,y,v,\theta
\]
state = [x,y,v,theta]
输入 : 控制量 加速度 和 角加速度
\[a, \omega
\]
control = [a , moega]
代码返回: 下一时间(一个仿真步长)的状态量
完整代码
# -*- coding: utf-8 -*-
"""
@author : zuti
@software : PyCharm
@file : 2_run_func.py
@time : 2023/3/25 14:58
@desc :
"""
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams.update({'font.size': 12})
# 初始姿态
init_velocity, init_theta = 100., np.pi/2
init_x, init_y = 0., 0. # 初始位置
# todo 两个控制量
a = 5. #单位 m/s2
omega = 1 #单位 rad/s2
state = [init_x, init_y, init_velocity, init_theta]
control = [a,omega]
time = 1 # 秒 总时间
n = 10 # 仿真步数
t = np.linspace(0, time, n) # 仿真步长
def update_position(state, control, time=1, n=100):
"""
:param state: 初始状态
:param control: 控制量
:param time: 仿真时长
:param n: 仿真步数
:return:
"""
t = np.linspace(0, time, n) # 仿真步长
dt = t[1] - t[0]
state_list = np.zeros((n, 4)) # 轨迹长度
state_list[0] = state # 轨迹列表第一个元素为初始状态
x,y,velocity, theta = state_list[0]
for k in range(1, n):
a = control[0]
omega = control[1]
velocity = velocity + a * dt
theta= theta+ omega * dt
dx = velocity * np.cos(theta) * dt
dy = velocity * np.sin(theta) * dt
x = x + dx
state_list[k, 0] = x
y = y + dy
state_list[k, 1] = y
state_list[k, 2] = velocity
state_list[k, 3] = theta
return state_list
#测试运动学方程
state_list = update_position(state,control)
print(f'轨迹 {state_list}')
#绘制图像
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax1.plot(state_list[:, 0], state_list[:, 1])
ax1.set_title('trajectory 轨迹')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
ax2 = fig.add_subplot(222)
ax2.plot(state_list[:,2])
ax2.set_title('velocity 速度')
ax3 = fig.add_subplot(223)
ax3.plot(state_list[:,3])
ax3.set_title('theta 航向角')
#plt.savefig('test.jpg')
plt.show()
效果
本文来自博客园,作者:{珇逖},转载请注明原文链接:https://www.cnblogs.com/zuti666/p/17254930.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了