В этом примере показано, как настроить контроллер фиксированной структуры для нескольких режимов работы установки.
В этом примере рассматривается отказоустойчивое управление полетом пассажирского реактивного самолета, находящегося в неработоспособном состоянии в лифте и приводах элерона. Система управления полетом должна поддерживать стабильность и соответствовать требованиям к производительности и комфорту как в номинальном режиме работы, так и в ухудшенных условиях, когда некоторые исполнительные механизмы более не эффективны из-за повреждения поверхности управления. Порывы ветра должны быть ослаблены во всех условиях. Это применение иногда называют надежным управлением, поскольку безопасность самолета должна поддерживаться в экстремальных условиях полета.
Система управления моделируется в 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 ];
Контроллер должен:
Обеспечение хорошей производительности отслеживания в 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