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

ImprovedX15Env - Улучшенная RL-среда для X-15

Обзор

ImprovedX15Env — это улучшенная среда для обучения с подкреплением (RL) для управления продольным каналом экспериментального ракетного самолета North American X-15. Она имеет нормализованные пространства действий/наблюдений, комплексную функцию награды и реалистичные условия завершения эпизода.

Ключевые особенности

  • Нормализованные пространства: Действия и наблюдения нормализованы к [-1, 1]
  • Расширенные наблюдения: [ошибка_тангажа, угловая_скорость, угол_тангажа, предыдущее_действие]
  • LQR-подобная награда: Комплексная функция стоимости, включающая:
  • Точность отслеживания угла тангажа
  • Демпфирование угловой скорости
  • Минимизацию энергии управления
  • Плавность управления (подавление рывков)
  • Реалистичное завершение: Эпизод завершается при выходе за границы полетного режима
  • Визуализация Pygame: Визуализация в реальном времени с графиками телеметрии

Пространство наблюдений

Наблюдение - это 4-мерный вектор (нормализован к [-1, 1]):

  1. pitch_error_norm: Нормализованная ошибка угла тангажа (целевой - текущий)
  2. pitch_rate_norm: Нормализованная угловая скорость тангажа (q)
  3. pitch_angle_norm: Нормализованный угол тангажа (theta)
  4. prev_action_norm: Предыдущее управляющее действие (помогает с плавностью)

Пространство действий

Одно непрерывное действие (нормализовано к [-1, 1]):

  • elevator: Нормализованное отклонение руля высоты
  • -1.0 соответствует -25° (нос вниз)
  • +1.0 соответствует +25° (нос вверх)

Физические ограничения

Среда обеспечивает реалистичные ограничения полетного режима X-15:

  • Макс. угол тангажа: ±30° (экспериментальный самолет с большим диапазоном)
  • Макс. угловая скорость тангажа: ±10°/с
  • Макс. отклонение руля высоты: ±25°

Функция награды

Награда основана на квадратичной функции стоимости (в стиле LQR):

cost = w_pitch * e_theta² + w_q * e_q² + w_action * u² + 
       w_smooth * Δu² + w_jerk * Δ²u²

reward = -cost * reward_scale

Где: - e_theta: Нормализованная ошибка тангажа - e_q: Нормализованная ошибка угловой скорости относительно производной эталона - u: Управляющее действие - Δu: Изменение управления (первая производная) - Δ²u: Рывок управления (вторая производная)

Веса по умолчанию: - w_pitch = 5.0 (основная цель: отслеживание тангажа) - w_q = 0.2 (демпфирование колебаний) - w_action = 0.003 (минимизация энергии) - w_smooth = 0.01 (плавное управление) - w_jerk = 0.001 (уменьшение рывков управления) - reward_scale = 0.1 (стабильность Q-значений)

Штраф за завершение: -100 если угол тангажа превышает ±30°

Пример использования

import numpy as np
from tensoraerospace.envs import ImprovedX15Env
from tensoraerospace.signals import unit_step

# Настройка
dt = 0.01
duration = 10.0
num_steps = int(duration / dt)

# Начальное состояние [u, w, q, theta] в единицах СИ
initial_state = np.array([600.0, 0.0, 0.0, 0.0])

# Эталонный сигнал (скачок тангажа 10° в момент t=1с)
time_array = np.arange(0, duration, dt)
reference_signal = unit_step(
    tp=time_array,
    degree=10.0,
    time_step=1.0,
    output_rad=True,
).reshape(1, -1)

# Создание среды
env = ImprovedX15Env(
    initial_state=initial_state,
    reference_signal=reference_signal,
    number_time_steps=num_steps,
    dt=dt,
    initial_elevator_deg=0.0,
)

# Цикл обучения
obs, info = env.reset()
for _ in range(num_steps):
    action = your_agent.predict(obs)  # Ваш RL-агент
    obs, reward, terminated, truncated, info = env.step(action)

    if terminated or truncated:
        obs, info = env.reset()

Обучение с Stable-Baselines3

from stable_baselines3 import PPO

model = PPO(
    "MlpPolicy", 
    env, 
    verbose=1,
    learning_rate=3e-4,
    n_steps=2048,
    batch_size=64,
    n_epochs=10,
    gamma=0.99,
)

model.learn(total_timesteps=100000)
model.save("ppo_x15")

Сравнение с LinearLongitudinalX15

Особенность LinearLongitudinalX15 ImprovedX15Env
Пространство действий [-60, 60]° [-1, 1] нормализовано
Наблюдения Сырые состояния Нормализованные + ошибка
Награда Простая MSE LQR-стиль с несколькими членами
Завершение Только фикс. шаги Режим + шаги
Визуализация Не реализована Pygame с графиками
Плавность Нет штрафа Явные члены плавности

Рекомендации по настройке

Для различных целей управления настройте веса награды:

Агрессивное отслеживание (быстрый отклик, могут быть колебания):

env.w_pitch = 10.0
env.w_q = 0.1

Плавное управление (медленнее, меньше перерегулирования):

env.w_pitch = 3.0
env.w_smooth = 0.05
env.w_jerk = 0.005

Энергоэффективное:

env.w_action = 0.01
env.w_smooth = 0.02

Технические детали

Вектор состояния (внутренний, единицы СИ): - u: Продольная скорость [м/с] - w: Нормальная скорость [м/с] - q: Угловая скорость тангажа [рад/с] - theta: Угол тангажа [рад]

Модель: Линейная стационарная система (LTI), основанная на данных полетов X-15, дискретизированная с использованием экстраполятора нулевого порядка.

Литература

  1. Оригинальная динамика полета X-15
  2. Модель LongitudinalX15 в tensoraerospace.aerospacemodel
  3. ImprovedB747Env (похожий шаблон проектирования)

См. также

  • LinearLongitudinalX15 - Базовая среда
  • ImprovedB747Env - Похожая улучшенная среда для B747
  • Пример скрипта: example/environments/example-env-x15-improved.py