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