В этом примере показано, как настроить контроллер фиксированной структуры для нескольких рабочих режимов объекта.
Этот пример имеет дело с отказоустойчивым управлением полетом пассажирских струйных отключений электричества перенесения в приводах элерона и лифте. Система управления полетом должна обеспечить устойчивость и соответствовать эффективности и требованиям комфорта и в номинальной операции и в ухудшенных условиях, где некоторые приводы являются более не эффективными должные управлять поверхностным нарушением. Порывы ветра должны быть облегчены во всех условиях. Это приложение иногда называется надежным управлением, когда безопасность полета должна быть обеспечена в экстремальных условиях рейса.
Система управления моделируется в 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 ];
Контроллер должен:
Обеспечьте хорошую эффективность отслеживания в mu, альфе и бете в номинальном рабочем режиме с соответствующим разъединением этих трех осей
Обеспечьте эффективность в присутствии порыва ветра 10 миль в час
Ограничьте устойчивость и ухудшение эффективности перед лицом отключения электричества привода.
Чтобы описать первое требование, можно использовать подобную 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.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) незначительно хуже, чем для настройки номинала (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
TuningGoal.Variance
| TuningGoal.WeightedVariance
| slTuner
(Simulink Control Design) | systune (slTuner)
(Simulink Control Design)