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

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

Фон

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

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

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

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

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

  • 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:

Диагональные веса и являются основными настраивающими кнопками для торговой скорости отклика и управляют усилием и подчеркиванием некоторых каналов по другим. Используйте требование WeightedVariance, чтобы выразить эту функцию стоимости и ослабить вес производительности фактором 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.99977, Iterations = 307

Получите значения усиления и моделируйте ответы на команды шага в 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.99588, Iterations = 471

Оптимальная производительность (квадратный корень из стоимости LQG) незначительно хуже, чем для настройки номинала (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

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

Больше о