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

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

Фон

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

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

Система управления моделируется в 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:

$$ 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.99944, Iterations = 299

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

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

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

Больше о

Для просмотра документации необходимо авторизоваться на сайте