F-16 Fighting Falcon — нелинейная 6-DoF угловая динамика¶
Данный модуль предоставляет нелинейную 6-DoF угловую модель F-16 Fighting Falcon, реализованную на чистом Python/NumPy. Модель охватывает полную связанную динамику: продольный, боковой и путевой каналы. Аэродинамические коэффициенты (шесть компонент сил и моментов) интерполируются из таблиц аэродинамической трубы.
Как устроен объект управления¶
Модель описывает полное угловое движение F-16 с тремя независимыми управляющими поверхностями: стабилизатор (руль высоты), элероны и руль направления.
Вектор состояния (14 элементов):
Вектор управления (3 элемента):
| Переменная | Обозначение | Описание |
|---|---|---|
alpha |
\(\alpha\) | Угол атаки, рад |
beta |
\(\beta\) | Угол скольжения, рад |
wx |
\(\omega_x\) | Угловая скорость крена, рад/с |
wy |
\(\omega_y\) | Угловая скорость рыскания, рад/с |
wz |
\(\omega_z\) | Угловая скорость тангажа, рад/с |
gamma |
\(\gamma\) | Угол крена, рад |
psi |
\(\psi\) | Угол рыскания, рад |
theta |
\(\theta\) | Угол тангажа, рад |
stab |
\(\delta_{\text{stab}}\) | Положение стабилизатора, рад |
dstab |
\(\dot{\delta}_{\text{stab}}\) | Скорость стабилизатора, рад/с |
ail |
\(\delta_{\text{ail}}\) | Положение элеронов, рад |
dail |
\(\dot{\delta}_{\text{ail}}\) | Скорость элеронов, рад/с |
dir |
\(\delta_{\text{dir}}\) | Положение руля направления, рад |
ddir |
\(\dot{\delta}_{\text{dir}}\) | Скорость руля направления, рад/с |
| Переменная | Обозначение | Описание |
|---|---|---|
stab_act |
\(\delta_{\text{stab,act}}\) | Команда на стабилизатор, рад |
ail_act |
\(\delta_{\text{ail,act}}\) | Команда на элероны, рад |
dir_act |
\(\delta_{\text{dir,act}}\) | Команда на руль направления, рад |
| Параметр | Обозначение | Значение |
|---|---|---|
| Масса самолёта | \(m\) | 9295.44 кг |
| Длина фюзеляжа | \(l\) | 9.144 м |
| Площадь крыла | \(S\) | 27.87 м² |
| Размах крыла | \(b_A\) | 3.45 м |
| Момент инерции крена | \(J_x\) | 12874.8 кг м² |
| Момент инерции тангажа | \(J_y\) | 85552.1 кг м² |
| Момент инерции рыскания | \(J_z\) | 75673.6 кг м² |
| Центробежный момент инерции | \(J_{xy}\) | 1331.4 кг м² |
| Высота полёта | \(H\) | 3000 м |
| Скорость полёта | \(V\) | 120 м/с |
О единицах измерения
Внутри модели все углы и угловые скорости задаются в радианах.
Математическая модель¶
Аэродинамические силы и моменты¶
На каждом шаге вычисляются шесть аэродинамических коэффициентов из табличных данных:
Силы и моменты в связанной системе координат:
с поправкой на положение центра масс:
Уравнения моментов количества движения¶
где \(\Gamma = J_x J_y - J_{xy}^2\).
Угол атаки и скольжения¶
Кинематика углов Эйлера¶
Модели приводов¶
Каждая управляющая поверхность моделируется как колебательное звено второго порядка с ограничениями по положению и скорости:
| Поверхность | Постоянная времени | Демпфирование | Макс. отклонение | Макс. скорость |
|---|---|---|---|---|
| Стабилизатор | 0.03 с | 0.707 | \(\pm 25°\) | \(\pm 60°/\text{s}\) |
| Элероны | 0.02 с | 0.707 | \(\pm 21.5°\) | \(\pm 80°/\text{s}\) |
| Руль направления | 0.03 с | 0.707 | \(\pm 30°\) | \(\pm 120°/\text{s}\) |
Методы интегрирования¶
Доступны два численных интегратора:
- Euler (по умолчанию) — метод Эйлера первого порядка.
- RK4 — метод Рунге-Кутты 4-го порядка, более высокая точность при том же шаге.
Источник данных¶
- Stevens & Lewis, "Aircraft Control and Simulation".
- Аэродинамические таблицы F-16A по данным аэродинамической трубы, сохранённые в формате NumPy
.npz.
Быстрый старт¶
import numpy as np
from tensoraerospace.aerospacemodel.f16.nonlinear.angular import AngularF16
dt = 0.01
number_time_steps = 500
# Состояние (14 элементов): [alpha, beta, wx, wy, wz, gamma, psi, theta,
# stab, dstab, ail, dail, dir, ddir]
x0 = np.zeros(14)
x0[0] = np.radians(2.0) # начальный alpha = 2 градуса
model = AngularF16(
x0=x0,
selected_state_output=["alpha", "beta", "wz"],
dt=dt,
integrator="rk4",
)
for t in range(number_time_steps - 1):
u = np.array([np.radians(-2.0), 0.0, 0.0]) # [stab, ail, dir] (рад)
state_next = model.run_step(u)
Python API¶
AngularF16(x0, selected_state_output=None, t0=0, dt=0.01, integrator='euler', split_stab=False, track_altitude=False, thrust_mode='constant')
¶
Bases: ModelBase
F-16 with full 6-DoF angular dynamics (numpy version).
Action (default, split_stab=False): [stab_act, ail_act, dir_act] (rad). Action when split_stab=True: [stab_left, stab_right, ail, dir] (rad); differential = (L - R)/2 generates a roll moment via F16AngularParameters.delta_stab_roll_gain.
current_state
property
¶
Most recent state as a flat 1-D ndarray.
