exponenta event banner

Отказоустойчивое управление пассажирским самолетом

В этом примере показано, как настроить контроллер фиксированной структуры для нескольких режимов работы установки.

Фон

В этом примере рассматривается отказоустойчивое управление полетом пассажирского реактивного самолета, находящегося в неработоспособном состоянии в лифте и приводах элерона. Система управления полетом должна поддерживать стабильность и соответствовать требованиям к производительности и комфорту как в номинальном режиме работы, так и в ухудшенных условиях, когда некоторые исполнительные механизмы более не эффективны из-за повреждения поверхности управления. Порывы ветра должны быть ослаблены во всех условиях. Это применение иногда называют надежным управлением, поскольку безопасность самолета должна поддерживаться в экстремальных условиях полета.

Модель самолета

Система управления моделируется в Simulink.

addpath(fullfile(matlabroot,'examples','control','main')) % add example data
open_system('faultTolerantAircraft')

Самолет смоделирован как жесткая система «состояние-пространство» 6-го порядка со следующими переменными состояния (единицы измерения для скоростей и град/с для угловых скоростей):

  • Скорость оси u: x-тела

  • w: скорость оси z-тела

  • q: скорость тангажа

  • v: скорость оси y-тела

  • p: скорость крена

  • r: скорость рыскания

Вектор состояния доступен для управления, а также для скорости mu (град ./с), угла альфа атаки (град.) и угла бета бокового среза (град.). Управляющими входами являются отклонения правого лифта, левого лифта, правого элерона, левого элерона и руля направления. Все отклонения в градусах. Лифты сгруппированы симметрично для формирования угла атаки. Элероны сгруппированы антисимметрично для создания движения крена. Это приводит к 3 управляющим действиям, как показано в модели Simulink.

Контроллер состоит из управления состоянием с обратной связью во внутреннем контуре и интегрального действия MIMO во внешнем контуре. Матрицы усиления Ki и Kx 3 на 3 и 3 на 6 соответственно, поэтому контроллер имеет 27 настраиваемых параметров.

Отказы привода

Мы используем матрицу 9x5 для кодирования номинального режима и различных режимов отказа привода. Каждая строка соответствует одному полетному условию, нулевому показывающему отключение соответствующей отклоняющей поверхности.

OutageCases = [...
   1 1 1 1 1; ... % nominal operational mode
   0 1 1 1 1; ... % right elevator outage
   1 0 1 1 1; ... % left elevator outage
   1 1 0 1 1; ... % right aileron outage
   1 1 1 0 1; ... % left aileron outage
   1 0 0 1 1; ... % left elevator and right aileron outage
   0 1 0 1 1; ... % right elevator and right aileron outage
   0 1 1 0 1; ... % right elevator and left aileron outage
   1 0 1 0 1; ... % left elevator and left aileron outage
   ];

Требования к конструкции

Контроллер должен:

  1. Обеспечение хорошей производительности отслеживания в mu, альфа и бета в номинальном режиме работы с адекватным разделением трех осей

  2. Поддерживать работоспособность при порыве ветра 10 миль в час

  3. Ограничение стабильности и ухудшения рабочих характеристик при отключении привода.

Для выражения первого требования можно использовать LQG-подобную функцию затрат, которая штрафует за ошибку интегрированного отслеживания. e и усилия по контролю u:

$$ J = lim_{T \rightarrow \infty} E \left( {1 \over T} \int_0^T \| W_e e \|^2 + \| W_u u \|^2 dt \right) . $$

Диагональные веса$W_e$ и$W_u$ являются основными кнопками настройки для трейдинга отзывчивости и усилий управления и подчеркивания одних каналов над другими. Используйте WeightedVariance требование выразить эту функцию затрат и ослабить вес производительности$W_e$ на коэффициент 2 для сценариев простоев.

We = diag([10 20 15]);   Wu = eye(3);

% Nominal tracking requirement
SoftNom = TuningGoal.WeightedVariance('setpoint',{'e','u'}, blkdiag(We,Wu), []);
SoftNom.Models = 1;    % nominal model

% Tracking requirement for outage conditions
SoftOut = TuningGoal.WeightedVariance('setpoint',{'e','u'}, blkdiag(We/2,Wu), []);
SoftOut.Models = 2:9;  % outage scenarios

Для уменьшения порывов ветра, ограничить дисперсию сигнала ошибки e из-за белого шума wg движущая модель порыва ветра. Снова используйте менее строгие требования для сценариев простоев.

% Nominal gust alleviation requirement
HardNom = TuningGoal.Variance('wg','e',0.02);
HardNom.Models = 1;

% Gust alleviation requirement for outage conditions
HardOut = TuningGoal.Variance('wg','e',0.1);
HardOut.Models = 2:9;

Настройка контроллера для номинального полета

Установите скорость порыва ветра на 10 миль в час и инициализируйте настраиваемую обратную связь и усиление интеграторов контроллера.

GustSpeed = 10;
Ki = eye(3);
Kx = zeros(3,6);

Используйте slTuner для настройки задачи настройки. Перечислите блоки, подлежащие настройке, и укажите девять условий полета путем изменения outage переменная в модели Simulink. Поскольку изменять скалярные параметры можно только в slTuner, независимо указать значения, принятые каждой записью outage вектор.

OutageData = struct(...
   'Name',{'outage(1)','outage(2)','outage(3)','outage(4)','outage(5)'},...
   'Value',mat2cell(OutageCases,9,[1 1 1 1 1]));
ST0 = slTuner('faultTolerantAircraft',{'Ki','Kx'},OutageData);

Использовать systune для настройки коэффициентов усиления контроллера в соответствии с номинальными требованиями. Относитесь к облегчению порывов ветра как к жесткому ограничению.

[ST,fSoft,gHard]  = systune(ST0,SoftNom,HardNom);
Final: Soft = 22.6, Hard = 0.99989, Iterations = 296

Извлеките значения усиления и смоделируйте ответы на команды шага в mu, alpha, beta для номинальных и ухудшенных условий полета. Все моделирования включают эффекты порыва ветра, а красная кривая является номинальной реакцией.

Ki = getBlockValue(ST, 'Ki');  Ki = Ki.d;
Kx = getBlockValue(ST, 'Kx');  Kx = Kx.d;

% Bank-angle setpoint simulation
plotResponses(OutageCases,1,0,0);

% Angle-of-attack setpoint simulation
plotResponses(OutageCases,0,1,0);

% Sideslip-angle setpoint simulation
plotResponses(OutageCases,0,0,1);

Номинальные реакции хорошие, но ухудшение рабочих характеристик недопустимо при отключении привода.

Настройка контроллера для нарушенного полета

Для повышения надежности перенастройте коэффициент усиления контроллера, чтобы удовлетворить номинальные требования для номинальной установки, а также смягчить требования для всех восьми сценариев простоев.

[ST,fSoft,gHard]  = systune(ST0,[SoftNom;SoftOut],[HardNom;HardOut]);
Final: Soft = 25.7, Hard = 0.99966, Iterations = 489

Оптимальная производительность (квадратный корень от стоимости LQG) $J$лишь немного хуже, чем для номинальной настройки (26 против 23). Извлеките значения коэффициента усиления и повторите моделирование (красная кривая - номинальный отклик).

Ki = getBlockValue(ST, 'Ki');  Ki = Ki.d;
Kx = getBlockValue(ST, 'Kx');  Kx = Kx.d;

% Bank-angle setpoint simulation
plotResponses(OutageCases,1,0,0);

% Angle-of-attack setpoint simulation
plotResponses(OutageCases,0,1,0);

% Sideslip-angle setpoint simulation
plotResponses(OutageCases,0,0,1);

Теперь контроллер обеспечивает приемлемую производительность для всех сценариев простоев, рассматриваемых в этом примере. Конструкция может быть дополнительно усовершенствована путем добавления таких спецификаций, как минимальные пределы устойчивости и пределы усиления, чтобы избежать насыщения скорости привода.

rmpath(fullfile(matlabroot,'examples','control','main')) % remove example data

Связанные примеры

Подробнее