F4CPitchEnvNormalized — F-4C Phantom II, отслеживание тангажа (нормализованная, RL-совместимая)¶
На этой странице описана среда F4CPitchEnvNormalized, предназначенная для обучения и оценки контроллеров на основе обучения с подкреплением в продольном канале истребителя F-4C Phantom II. Среда предоставляет нормализованный интерфейс наблюдений и действий, формированную награду для точного и плавного отслеживания тангажа, реалистичные условия завершения и опциональную 2D-визуализацию на основе Pygame.
Эталонная реализация находится в tensoraerospace/envs/f4c.py (класс F4CPitchEnvNormalized).
Краткое описание¶
- Пространство наблюдений: 4D, нормализовано в [-1, 1]
- Пространство действий: 1D, нормализовано в [-1, 1] (команда отклонения руля высоты)
- Цель: отслеживание изменяющегося во времени задания по тангажу при сохранении плавности управления
- Награда: квадратичные штрафы за ошибку отслеживания тангажа, рассогласование угловой скорости тангажа с эталонной динамикой, абсолютное воздействие, скорость изменения и рывок воздействия (с масштабированием)
- Завершение: выход за безопасный диапазон тангажа или достижение горизонта по времени
Наблюдение и действие¶
Пусть \(\theta\) -- текущий угол тангажа (рад), \(q\) -- угловая скорость тангажа (рад/с), а \(\theta_{ref}(t)\) -- целевой тангаж.
Наблюдение на шаге \(t\) представляет собой 4-мерный вектор:
где
- \(\theta_{max} = 30°\) (внутри преобразуется в радианы) -- шире, чем у B747/ELV, для учёта высокой маневренности истребителя,
- \(q_{max} = 10°/\text{s}\) (внутри преобразуется в рад/с) -- более высокий предел скорости для истребителя,
- \(u_{t-1} \in [-1, 1]\) -- предыдущая нормализованная команда руля высоты.
Важно: Вектор наблюдений уже нормализован и готов к использованию. Индекс [0] содержит нормализованную ошибку отслеживания тангажа, которая может использоваться непосредственно для пропорционального управления.
Действие -- единственная нормализованная команда \(u_t \in [-1, 1]\). Она отображается в физическое отклонение руля высоты (рад):
которое передаётся непосредственно во внутреннюю модель F-4C в радианах.
Функция награды¶
Среда использует формированную награду с пятью слагаемыми, стимулирующими точность и плавность при штрафовании чрезмерного воздействия. Награда за шаг:
с весами и масштабом по умолчанию:
В реализации также присутствует вес перекрёстного члена \(w_{cross} = 0.0\) (в настоящее время отключён) для возможного связывания ошибок тангажа и угловой скорости в будущем.
Члены ошибки определяются как
где \(\dot\theta_{ref}(t)\) -- конечно-разностная производная эталонного тангажа, вычисленная с шагом моделирования \(\Delta t\). Члены гладкости воздействия используют
Замечания:
- Больший \(w_\theta\) акцентирует точное отслеживание тангажа.
- \(w_q\) демпфирует реакцию относительно наклона эталонного сигнала, снижая перерегулирование и колебания.
- \(w_u, w_{\Delta}, w_{\Delta^2}\) регуляризируют расход энергии и плавность команд, подавляя дребезг.
- Общий масштаб \(s\) удерживает награды в компактном численном диапазоне для стабильности RL.
Завершение и усечение¶
- Аварийное завершение: если \(|\theta| > \theta_{max}\), эпизод завершается досрочно и на этом шаге применяется большой штраф (\(-100\)).
- Усечение: эпизод усекается при достижении заданного горизонта (число временных шагов).
Динамика эпизода¶
На каждом шаге:
- Агент выдаёт \(u_t \in [-1, 1]\).
- Среда ограничивает \(u_t\) диапазоном \([-1, 1]\), отображает в \(\delta_e\) в радианах и продвигает внутреннюю модель F-4C.
- Наблюдение \(\mathbf{o}_{t+1}\) строится с использованием нормализованных сигналов.
- Награда \(r_t\) вычисляется по формуле выше.
- Проверяются условия завершения/усечения.
Пример использования¶
import numpy as np
from tensoraerospace.envs.f4c import F4CPitchEnvNormalized
from tensoraerospace.signals.standard import sinusoid_vertical_shift
from tensoraerospace.utils import generate_time_period, convert_tp_to_sec_tp
dt = 0.01
tn = 200
tp = generate_time_period(tn=tn, dt=dt)
tps = convert_tp_to_sec_tp(tp, dt=dt)
number_time_steps = len(tp)
# Эталон: плавный синусоидальный тангаж в радианах (амплитуда 1 град)
reference_signal = np.reshape(
sinusoid_vertical_shift(
tp=np.asarray(tps), frequency=0.05, amplitude=np.deg2rad(1.0), vertical_shift=0.0
),
(1, -1),
)
# Начальное состояние: [u, w, q, theta] в имперских единицах модели F-4C (фут/с, фут/с, рад, рад)
initial_state = np.array([0, 0, 0, 0], dtype=np.float32)
env = F4CPitchEnvNormalized(
initial_state=initial_state,
reference_signal=reference_signal,
number_time_steps=number_time_steps,
initial_elevator_deg=0.0,
use_initial_action_on_first_step=True,
dt=dt,
)
obs, info = env.reset()
done = False
while not done:
# простое пропорциональное управление по нормализованной ошибке тангажа в [-1, 1]
u = float(np.clip(2.0 * float(obs[0]), -1.0, 1.0))
obs, reward, terminated, truncated, info = env.step(np.array([u], dtype=np.float32))
done = bool(terminated or truncated)
Визуализация¶
Среда включает опциональную 2D-визуализацию на основе Pygame, активируемую вызовом env.render(mode="human"). Рендеринг включает:
- Спрайт самолёта (или резервный треугольник), вращающийся в соответствии с текущим углом тангажа.
- HUD-наложение с номером шага, текущим/целевым тангажом и наградой.
- Индикатор отклонения руля высоты.
- Два графика временных рядов: отслеживание тангажа (эталон vs. фактический) и история руля высоты.
Pygame необходимо установить отдельно (pip install pygame).
Замечания по реализации¶
- Границы нормализации наблюдений (\(\theta_{max} = 30°\), \(q_{max} = 10°/\text{s}\)) шире, чем у B747/ELV, для учёта более высокой маневренности F-4C.
- Предел руля высоты (\(\delta_{e,max} = 20°\)) несколько меньше, чем в некоторых других средах (которые используют 25°), что отражает управляющее усилие F-4C.
- Веса награды доступны как атрибуты экземпляра (
w_pitch,w_q,w_cross,w_action,w_smooth,w_jerk,reward_scale) и могут быть изменены для соответствия конкретным целям управления. - Внутреннее представление состояния следует порядку
[u, w, q, theta](фут/с, фут/с, рад, рад для модели F-4C), но наблюдения нормализованы в[-1, 1].
Литература¶
tensoraerospace/envs/f4c.py-- полная реализация среды- Модель продольной динамики F-4C Phantom II:
tensoraerospace/aerospacemodel/f4c.py