ImprovedX15Env - Улучшенная RL-среда для X-15¶
Обзор¶
ImprovedX15Env — это улучшенная среда для обучения с подкреплением (RL) для управления продольным каналом экспериментального ракетного самолета North American X-15. Она имеет нормализованные пространства действий/наблюдений, комплексную функцию награды и реалистичные условия завершения эпизода.
Ключевые особенности¶
- Нормализованные пространства: Действия и наблюдения нормализованы к [-1, 1]
- Расширенные наблюдения: [ошибка_тангажа, угловая_скорость, угол_тангажа, предыдущее_действие]
- LQR-подобная награда: Комплексная функция стоимости, включающая:
- Точность отслеживания угла тангажа
- Демпфирование угловой скорости
- Минимизацию энергии управления
- Плавность управления (подавление рывков)
- Реалистичное завершение: Эпизод завершается при выходе за границы полетного режима
- Визуализация Pygame: Визуализация в реальном времени с графиками телеметрии
Пространство наблюдений¶
Наблюдение - это 4-мерный вектор (нормализован к [-1, 1]):
- pitch_error_norm: Нормализованная ошибка угла тангажа (целевой - текущий)
- pitch_rate_norm: Нормализованная угловая скорость тангажа (q)
- pitch_angle_norm: Нормализованный угол тангажа (theta)
- 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 с графиками |
| Плавность | Нет штрафа | Явные члены плавности |
Рекомендации по настройке¶
Для различных целей управления настройте веса награды:
Агрессивное отслеживание (быстрый отклик, могут быть колебания):
Плавное управление (медленнее, меньше перерегулирования):
Энергоэффективное:
Технические детали¶
Вектор состояния (внутренний, единицы СИ):
- u: Продольная скорость [м/с]
- w: Нормальная скорость [м/с]
- q: Угловая скорость тангажа [рад/с]
- theta: Угол тангажа [рад]
Модель: Линейная стационарная система (LTI), основанная на данных полетов X-15, дискретизированная с использованием экстраполятора нулевого порядка.
Литература¶
- Оригинальная динамика полета X-15
- Модель LongitudinalX15 в
tensoraerospace.aerospacemodel - ImprovedB747Env (похожий шаблон проектирования)
См. также¶
- LinearLongitudinalX15 - Базовая среда
- ImprovedB747Env - Похожая улучшенная среда для B747
- Пример скрипта:
example/environments/example-env-x15-improved.py