Этот пример показывает, как использовать Robust Control Toolbox™ для анализа робастности неопределенной системы с только действительной параметрической неопределенностью. Вы вычисляете запасы устойчивости для твердого транспортного самолета с кузовом с помощью выхода закона управления с обратной связью. Для получения дополнительной информации о модели см. «Практический подход к анализу робастности с воздухоплавательными применениями» Г. Феррера. Анализ устойчивости для систем с только реальной параметрической неопределенностью может вызвать числовые трудности. В этом примере вы сравниваете три метода для вычисления запасов устойчивости для систем с только реальной параметрической неопределенностью.
Модель твердого тела большого транспортного самолета имеет четыре состояния, два входа и четыре выхода. Состояниями являются боковая кромка (бета), скорость крена (p), скорость рыскания (r) и угол крена (phi). Входами являются отклонение руля направления (deltap) и отклонение элерона (deltar). Выходы: боковое ускорение (ny), скорость крена (p), скорость рыскания (r) и угол крена (phi). Уравнения состояния зависят от 14 аэродинамических коэффициентов, каждый коэффициент имеет 10-процентную неопределенность.
Создайте неопределенности для аэродинамических коэффициентов.
deg2rad = pi/180; % conversion factor from degs to radians rad2deg = 1/deg2rad; % conversion factor from radians to degs gV = 0.146418; % g/V tan_theta0 = 0.14; % tan(theta0) alpha0 = 8*deg2rad; % (rad) Ybeta = ureal('Ybeta',-0.082,'Percentage',10); Yp = ureal('Yp',0.010827,'Percentage',10); Yr = ureal('Yr',0.060268,'Percentage',10); Ydeltap = ureal('Ydeltap',0.002,'Percentage',10); Ydeltar = ureal('Ydeltar',0.0118,'Percentage',10); Lbeta = ureal('Lbeta',-0.84,'Percentage',10); Lp = ureal('Lp',-0.76,'Percentage',10); Lr = ureal('Lr',0.74,'Percentage',10); Ldeltap = ureal('Ldeltap',0.095,'Percentage',10); Ldeltar = ureal('Ldeltar',0.06,'Percentage',10); Nbeta = ureal('Nbeta',0.092,'Percentage',10); Np = ureal('Np',-0.23,'Percentage',10); Nr = ureal('Nr',-0.114,'Percentage',10); Ndeltar = ureal('Ndeltar',-0.151,'Percentage',10);
Уравнения состояния для динамики самолета твёрдого тела:
A = [Ybeta (Yp+sin(alpha0)) (Yr-cos(alpha0)) gV; ...
Lbeta Lp Lr 0; Nbeta Np Nr 0; 0 1 tan_theta0 0];
B = [Ydeltap Ydeltar; Ldeltap Ldeltar; 0 Ndeltar; 0 0];
C = -1/gV*deg2rad*[Ybeta Yp Yr 0];
C = [C; zeros(3,1) eye(3)];
D = -1/gV*deg2rad*[Ydeltap Ydeltar];
D = [D; zeros(3,2)];
AIRCRAFT = ss(A,B,C,D);
Модель самолета имеет приводы для руля направления и элерона. Каждый привод моделируется с помощью системы второго порядка, и полученная динамика добавляется к входу модели твердого тела. P
- разомкнутый контур модель самолета и приводов.
N1 = [-1.77, 399]; D1 = [1 48.2 399]; deltap_act = tf(N1,D1); N2 = [2.6 -1185 27350]; D2 = [1 77.7 3331 27350]; deltar_act = tf(N2,D2); P = AIRCRAFT*blkdiag(deltap_act,deltar_act);
Используется закон регулирования постоянной выходной обратной связи, и замкнутый цикл создается с помощью команды обратной связи.
K = [-629.8858 11.5254 3.3110 9.4278; ...
285.9496 0.3693 -2.6301 -0.5489];
CLOOP = feedback(P,K);
Можно использовать robstab
вычислить надежные запасы устойчивости для этой системы. Этот пример фокусируется на методах вычисления нижних границ на mu
, что эквивалентно вычислению верхней границы запаса устойчивости. По умолчанию robstab
использует комбинацию итерации степени и нижнюю границу на основе усиления для вычисления mu
нижняя граница. Сначала исследуйте итерацию степени. 'm' опции для mussv
используется для принудительного robstab
для использования только итерации степени.
ropt = robOptions('Mussv','m5','VaryFrequency','on'); [SM1,WCU1,INFO1] = robstab(CLOOP,ropt);
Итерация степени является быстрой и обычно обеспечивает хорошие ограничения для проблем со сложной неопределенностью. Однако он имеет тенденцию плохо работать для систем с только реальной параметрической неопределенностью. В этом примере итерация степени находит нижнюю границу в нуле для mu
на большинстве частот. Таким образом, верхняя граница запаса устойчивости не предоставляет никакой информации.
semilogx(INFO1.Frequency,1./INFO1.Bounds) xlim([1e-3 1e3])
Фигура 1: Ограничения Mu для самолетов, использующих нижнюю границу итерации степени.
Один из способов упорядочить эту устойчивую задачу устойчивости - добавить небольшое количество комплексной неопределенности к действительной параметрической неопределенности с помощью complexify
команда. Увеличение alpha
увеличивает сложность задачи.
alpha = 0.05; CLOOP_c = complexify(CLOOP,alpha);
Существует компромисс при усложнении реальной неопределенности. Увеличение суммы alpha
комплексной неопределенности улучшает обусловленность итерации степени, таким образом увеличивая вероятность сходимости. Однако, если вы выбираете alpha
слишком большой, тогда вы изменяете проблему достаточно, чтобы дестабилизирующее возмущение для измененной задачи могло быть далеко не дестабилизирующим для исходной задачи.
[SM2,WC2,INFO2] = robstab(CLOOP_c,ropt);
На график показан верхний/нижний mu
ограничения для комплексной задачи. Верхняя граница относительно неизменна комплексизацией, и поэтому комплексизация не существенно изменяет проблему.
semilogx(INFO2.Frequency,1./INFO2.Bounds) xlim([1e-3 1e3])
Фигура 2: Ограничения Mu для самолетов, использующих итерацию степени + комплексифицируйте нижнюю границу.
Для некоторых задач количество сложности, необходимой для упорядочения нижней границы, значительно изменяет задачу, и вместо этого следует использовать нижнюю границу, основанную на усилении. Установите 'g' как mussv
опция принудительного robstab
использовать нижнюю границу, основанную на усилении. Обратите внимание, что этот подход является более медленным в вычислительном отношении по сравнению с использованием итерации степени и комплексизации.
ropt = robOptions('Mussv','g','VaryFrequency','on'); [SM3,WC3,INFO3] = robstab(CLOOP,ropt); semilogx(INFO3.Frequency,1./INFO3.Bounds) xlim([1e-3 1e3])
Фигура 3: Ограничения Mu для самолетов, использующих нижнюю границу, основанную на усилении.