Моделирование повреждений ЛА¶
Подсистема повреждений превращает F-16 из неизменного объекта управления в объект с переменной во времени динамикой. Она позволяет планировать отказы в ходе симуляции — потерю законцовки крыла, заклинивание рулевых поверхностей, отказ двигателя, структурные изменения — и среда пересчитывает массу, тензор инерции, аэродинамические коэффициенты и эффективность рулевых поверхностей в реальном времени. Управляющий агент с момента срабатывания события повреждения сталкивается с уже другим объектом управления.
В настоящее время поддерживается только для нелинейной модели F-16 —
продольной и
6-DoF угловой. Один и тот же damage_profile
API подключается к обоим вариантам среды и к любому контроллеру /
RL-агенту, который их использует. Линейная модель F-16, B-747 и другие
объекты управления пока вне области поддержки.
Структура документации¶
Тема разбита на три страницы:
- Эта страница — обзор подсистемы, быстрый старт и ограничения.
- Реализация и примеры — устройство
кода (три слоя: посекционная геометрия,
DamageState+ события, физический пересчёт), готовые сценарии, пользовательские профили, случайные профили для RL и проработанные примеры адаптивных агентов iADP и ET-DHP. - Математика моделирования повреждений — все формулы: пересчёт массы / ЦМ / тензора инерции через теорему Гюйгенса–Штейнера, strip-theory дельты для шести аэродинамических коэффициентов, модели отказов рулевых поверхностей и двигателя, итоговые ОДУ 6-DoF с учётом повреждений.
Быстрый старт¶
import numpy as np
from tensoraerospace.aerospacemodel.f16.nonlinear.damage import (
WING_STRIKE_LEFT_TIP,
)
from tensoraerospace.envs.f16.nonlinear_angular import NonlinearAngularF16
env = NonlinearAngularF16(
initial_state=np.zeros(14),
number_time_steps=2000,
damage_profile=WING_STRIKE_LEFT_TIP,
split_stab=True,
)
obs, _ = env.reset()
for _ in range(2000):
obs, r, term, trunc, info = env.step(np.zeros(4))
if info.get("damage_events_triggered"):
print(info["damage_events_triggered"])
Готовый к запуску пример находится в файле example/failure_demos/f16_damage_dogfight_demo.py.
Что моделируется¶
| Класс отказа | Что меняется | Где описано |
|---|---|---|
| Потеря секции (крыло, стабилизатор, киль) | масса \(m\), площадь крыла \(S\), размах \(b\), средняя аэродинамическая хорда (MAC), центр масс \(\mathbf{r}_{cg}\), тензор инерции \(\mathbf{J}\), аэродинамические коэффициенты | код, математика |
| Отказ рулевой поверхности (заклинивание / потеря эффективности / отрыв) | Вектор управления \(\mathbf{u}_{cmd} \to \mathbf{u}_{eff}\) | код, математика |
| Отказ двигателя (частичный / полный) | Эффективная тяга \(T_{eff}\) | код, математика |
| Структурные изменения (сброс груза, обледенение) | \(\Delta\) массы / центра масс / инерции | код |
Ограничения¶
- Линейная модель F-16, B-747 и другие модели пока не поддерживаются.
- Аэродинамические поправки не учитывают влияние скоса потока и срывных течений сверх того, что уже закодировано в базовых таблицах данных.
- Упругость крыла / аэроупругие эффекты не моделируются.
- Каскадные отказы (когда одно событие вызывает другое) пока не реализованы; их следует явно планировать в профиле повреждений.