Действительный Mu-Analysis

Этот пример показывает, как использовать 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: Му ограничивает для Самолета с помощью нижней границы итерации степени.

Анализ устойчивости: усложните действительную неуверенность

Один способ упорядочить эту устойчивую проблему устойчивости состоит в том, чтобы добавить небольшое количество комплексной неуверенности к действительной параметрической неуверенности с помощью команды 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: границы Му для Самолета с помощью итерации степени + усложняют нижнюю границу.

Анализ устойчивости: основанная на усилении нижняя граница

Для некоторых проблем сумма сложности, необходимой, чтобы упорядочить нижнюю границу значительно, изменяет проблему, и необходимо использовать основанную на усилении нижнюю границу вместо этого. Установите '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: Му ограничивает для Самолета с помощью основанной на усилении нижней границы.