环境
对于环境一般有两种,①自己根据动力学模型自己搭一个环境
②调用现成的动力学库搭环境
1.简单动力学模型
一个最简单的环境就是自己根据动力学模型解算状态,下面是一个例子
六自由度运动学方程为
{
x
˙
=
v
cos
γ
sin
ψ
y
˙
=
v
cos
γ
cos
ψ
z
˙
=
v
sin
γ
\begin{cases} \dot{x}=v\cos \gamma \sin \psi\\ \dot{y}=v\cos \gamma \cos \psi\\ \dot{z}=v\sin \gamma\\ \end{cases}
⎩
⎨
⎧x˙=vcosγsinψy˙=vcosγcosψz˙=vsinγ
其中
x
˙
\dot{x}
x˙,
y
˙
\dot{y}
y˙,
z
˙
\dot{z}
z˙分别为x,y,z轴的加速度;
γ
˙
\dot{ \gamma}
γ˙,
ψ
˙
\dot{ \psi}
ψ˙分别为航迹角和航向角。这些变量的意义见下图
运动学方程描述了三个自由度,接下来的动力学方程描述了剩下三个自由度(此处可能不准确,因为并不是欧拉角)
{
v
˙
=
g
(
n
x
−
sin
γ
)
γ
˙
=
g
v
(
n
z
cos
μ
−
cos
γ
)
ψ
˙
=
g
n
z
sin
μ
v
cos
γ
\begin{cases} \dot{v}=g\left( n_x-\sin \gamma \right)\\ \dot{\gamma}=\frac{g}{v}\left( n_z\cos \mu -\cos \gamma \right)\\ \dot{\psi}=\frac{gn_z\sin \mu}{v\cos \gamma}\\ \end{cases}
⎩
⎨
⎧v˙=g(nx−sinγ)γ˙=vg(nzcosμ−cosγ)ψ˙=vcosγgnzsinμ
其中
n
x
n_x
nx表示速度方向的过载,
n
z
n_z
nz表示俯仰方向的过载,
μ
\mu
μ为滚转角
根据这两个方程得到状态转移函数
(
x
,
y
,
z
,
v
,
γ
,
ψ
)
t
+
1
=
f
(
x
,
y
,
z
,
v
,
γ
,
ψ
,
n
x
,
n
z
,
u
)
t
\left( x,y,z,v,\gamma ,\psi \right) _{t+1}=f\left( x,y,z,v,\gamma ,\psi ,n_x,n_z,u \right) _t
(x,y,z,v,γ,ψ)t+1=f(x,y,z,v,γ,ψ,nx,nz,u)t
在python写个求解器再加上绘图就可以完成环境搭建了。
{
v
=
v
0
+
∫
t
0
t
1
g
(
n
x
−
sin
γ
)
d
t
γ
=
γ
0
+
∫
t
0
t
1
g
(
n
y
cos
μ
−
cos
γ
)
v
d
t
ψ
=
ψ
0
+
∫
t
0
t
1
g
n
y
sin
μ
v
cos
γ
d
t
x
=
x
0
+
∫
t
0
t
1
v
cos
γ
cos
ψ
d
t
y
=
y
0
+
∫
t
0
t
1
v
cos
γ
sin
ψ
d
t
z
=
z
0
+
∫
t
0
t
1
v
sin
γ
d
t
\left\{\begin{array}{l}v=v_0+\int_{t_0}^{t_1} g\left(n_x-\sin \gamma\right) d t \\ \gamma=\gamma_0+\int_{t_0}^{t_1} \frac{g\left(n_y \cos \mu-\cos \gamma\right)}{v} d t \\ \psi=\psi_0+\int_{t_0}^{t_1} \frac{g n_y \sin \mu}{v \cos \gamma} d t \\ x=x_0+\int_{t_0}^{t_1} v \cos \gamma \cos \psi d t \\ y=y_0+\int_{t_0}^{t_1} v \cos \gamma \sin \psi d t \\ z=z_0+\int_{t_0}^{t_1} v \sin \gamma d t\end{array}\right.
⎩
⎨
⎧v=v0+∫t0t1g(nx−sinγ)dtγ=γ0+∫t0t1vg(nycosμ−cosγ)dtψ=ψ0+∫t0t1vcosγgnysinμdtx=x0+∫t0t1vcosγcosψdty=y0+∫t0t1vcosγsinψdtz=z0+∫t0t1vsinγdt
优点就是:动力学模型简单,很多飞行器动作都可以直接计算出来,比如让飞行器匀加速匀速上升等都可以通过给定控制量来做到
缺点是:计算过程容易出错,求解器的设计对数学功底要求比较高。
2.基于开源动力学库的环境搭建
针对固定翼飞行器的控制,网上最广泛的是jsbsim库,目前我采用的方案如下
jsbsim库里有很多飞机的模型文件,其飞行器动力学模型复杂但是真实,美国DAPPA举办的阿尔法狗斗项目就基于jsbsim库。
tacview是一个专门的飞行数据回放的可视化软件,只需要将战斗数据生成acmi文件,就可以通过tacview加载该文件看到可视化界面。
市面上还有很多飞行器方面的视景软件,对飞机模型和周围环境加了很多渲染,使得战斗更加真实,这些主要是一些游戏软件,可以作为实验成果的效果展示。
jsbsim库
jsbsim库中的飞机的动力学输入有4个量分别是副翼、升降舵、方向舵和油门,其具体功能见下图
飞机的的状态有16个(可能不止),见下图
该动力学库还有关于飞机结构参数和控制系统的设定,做结构和底层控制的可能会用到,其中F16的参数如下图所示