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

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

Фон

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

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

Система управления моделируется в 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, alpha и beta в номинальном режиме работы с адекватным развязыванием трех осей

  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.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) $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

Похожие примеры

Подробнее о

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