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