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

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

Фон

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

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

Система управления моделируется в 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.9998, Iterations = 301

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

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

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

Больше о

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