Перейти к содержанию

Моделирование повреждений ЛА

Подсистема повреждений превращает 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 и другие модели пока не поддерживаются.
  • Аэродинамические поправки не учитывают влияние скоса потока и срывных течений сверх того, что уже закодировано в базовых таблицах данных.
  • Упругость крыла / аэроупругие эффекты не моделируются.
  • Каскадные отказы (когда одно событие вызывает другое) пока не реализованы; их следует явно планировать в профиле повреждений.