В этом примере показано, как выполнить смешанный Mu-Synthesis с musyn
команда в Robust Control Toolbox™. Здесь musyn
используется, чтобы спроектировать устойчивый контроллер для двух систем массового пружинного демпфера с неопределенностью в пружинной жесткости, соединяющей эти две массы. Этот пример взят из бумаги "Устойчивая производительность смешанного Mu-Synthesis для массово-пружинной системы с неопределенностью жесткости", Д. Баррос, С. Фекри и М. Атэнс, 2 005 средиземноморских Конференций по Управлению.
Рассмотрите систему массового пружинного демпфера в рисунке 1. Spring k2
и демпфер b2
присоединены к стене и массовому m2
. Массовый m2
также присоединен к массовому m1
через пружинный k1
и демпфер b1
. Масса 2 затронута силой воздействия f2
. Системой управляют через силу f1
действие на массовый m1
.
Наша цель проекта состоит в том, чтобы использовать силу управления f1
ослаблять эффект воздействия f2
на положении массового m2
. Сила f1
непосредственно не действует на массовый m2
, скорее это действует через пружинную жесткость k1
. Следовательно любая неопределенность в пружинной жесткости k1
сделает проблему управления более трудной. Проблема управления формулируется как:
Контроллер измеряет шумное смещение массового m2
и прикладывает силу управления f1
. Шум датчика, Wn
, моделируется как постоянные 0.001.
Команда привода оштрафована фактором 0.1 в низкой частоте, и фактор 10 в высокой частоте с частотой среза 100 рад/с (отфильтруйте Wu
).
Модульная величина, фильтр окраски первого порядка, Wdist
, на воздействии имеет полюс на уровне 0,25 рад/с.
Цель производительности состоит в том, чтобы ослабить воздействие на массовом m2
фактором 80 ниже 0,1 рад/с.
Номинальной стоимостью системных параметров является m1=1
, m2=2
, k2=1
, b1=0.05
, b2=0.05
, и k1=2
.
Wn = tf(0.001); Wu = 10*tf([1 10],[1 1000]); Wdist = tf(0.25,[1 0.25],'inputname','dist','outputname','f2'); Wp = 80*tf(0.1,[1 0.1]); m1 = 1; m2 = 2; k2 = 1; b1 = 0.05; b2 = 0.05;
Значение пружинной жесткости k1
сомнительно. Это имеет номинальную стоимость 2, и ее значение может варьироваться между 1,2 и 2.8.
k1 = ureal('k1',2,'Range',[1.2 2.8]);
Существует также tau
с временной задержкой между приводом, которым управляют, обеспечивают
f1
и его приложение к массовому m1
. Максимальная задержка составляет 0,06 секунды. Пренебрежение этой задержки вводит мультипликативную ошибку exp(-s*tau)-1
. Эта ошибка может быть обработана как несмоделированная динамика, ограниченная в величине фильтром высоких частот Wunmod = 2.6*s/(s + 40)
:
tau = ss(1,'InputDelay',0.06); Wunmod = 2.6*tf([1 0],[1 40]); bodemag(tau-1,Wunmod,logspace(0,3,200)); title('Multiplicative Time-Delay Error: Actual vs. Bound') legend('Actual','Bound','Location','NorthWest')
Создайте неопределенную модель в пространстве состояний объекта с силой управления f1
и воздействие f2
как входные параметры.
a1c = [0 0 -1/m1 1/m2]'*k1; a2c = [0 0 1/m1 -1/m2]'*k1 + [0 0 0 -k2/m2]'; a3c = [1 0 -b1/m1 b1/m2]'; a4c = [0 1 b1/m1 -(b1+b2)/m2]'; A = [a1c a2c a3c a4c]; plant = ss(A,[0 0;0 0;1/m1 0;0 1/m2],[0 1 0 0],[0 0]); plant.StateName = {'z1';'z2';'z1dot';'z2dot'}; plant.OutputName = {'z2'};
Добавьте несмоделированную динамику задержки в первом входе объекта.
Delta = ultidyn('Delta',[1 1]); plant = plant * append(1+Delta*Wunmod,1); plant.InputName = {'f1','f2'};
Постройте Предвещать ответ от f1 до z2 для 20 демонстрационных значений неопределенности. Неопределенность на значении k1 вызывает колебания собственных частот режимов объекта.
bode(plant(1,1),{0.1,4})
Мы используем следующую структуру в синтезе контроллера:
Рисунок 2
Используйте connect
создать соответствующее соединение разомкнутого цикла IC
. Обратите внимание на то, что IC
неопределенная модель с неопределенными переменными k1
и Delta
.
Wu.u = 'f1'; Wu.y = 'Wu'; Wp.u = 'z2'; Wp.y = 'Wp'; Wn.u = 'noise'; Wn.y = 'Wn'; S = sumblk('z2n = z2 + Wn'); IC = connect(plant,Wdist,Wu,Wp,Wn,S,{'dist','noise','f1'},{'Wp','Wu','z2n'})
IC = Uncertain continuous-time state-space model with 3 outputs, 3 inputs, 8 states. The model uncertainty consists of the following blocks: Delta: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences k1: Uncertain real, nominal = 2, range = [1.2,2.8], 1 occurrences Type "IC.NominalValue" to see the nominal value, "get(IC)" to see all properties, and "IC.Uncertainty" to interact with the uncertain elements.
Можно использовать команду musyn
синтезировать устойчивый контроллер для соединения разомкнутого цикла IC
. По умолчанию, musyn
обработки все неопределенные действительные параметры, в этом примере k1
, как объединяют неопределенность. Вспомните тот k1
действительный параметр с номинальной стоимостью 2 и область значений между 1,2 и 2.8. В комплексном Mu-Synthesis это заменяется комплексным неопределенным параметром, варьирующимся по диску, сосредоточенному в 2 и с радиусом 0.8. График ниже сравнивает область значений k1 значений, когда k1 обработан как действительный (красный x) по сравнению с комплексом (синий *).
k1c = ucomplex('k1c',2,'Radius',0.8); % complex approximation % Plot 80 samples of the real and complex parameters k1samp = usample(k1,80); k1csamp = usample(k1c,80); plot(k1samp(:),0*k1samp(:),'rx',real(k1csamp(:)),imag(k1csamp(:)),'b*') hold on % Draw value ranges for real and complex k1 plot(k1.Nominal,0,'rx',[1.2 2.8],[0 0],'r-','MarkerSize',14,'LineWidth',2) the=0:0.02*pi:2*pi; z=sin(the)+sqrt(-1)*cos(the); plot(real(0.8*z+2),imag(0.8*z),'b') hold off % Plot formatting axis([1 3 -1 1]), axis square ylabel('Imaginary'), xlabel('Real') title('Real vs. complex uncertainty model for k1')
Синтезируйте устойчивый контроллер Kc
использование комплексного Mu-Synthesis (обрабатывающий k1
как комплексный параметр).
[Kc,mu_c,infoc] = musyn(IC,1,1);
D-K ITERATION SUMMARY: ----------------------------------------------------------------- Robust performance Fit order ----------------------------------------------------------------- Iter K Step Peak MU D Fit D 1 2.954 2.455 2.483 16 2 1.146 1.145 1.155 18 3 1.086 1.086 1.09 18 4 1.083 1.082 1.084 18 5 1.085 1.085 1.086 18 Best achieved robust performance: 1.08
Обратите внимание на то, что mu_c
превышает 1 так контроллер Kc
сбои, чтобы надежно достигнуть желаемого уровня производительности.
Смешанный Mu-Synthesis составляет неопределенные действительные параметры непосредственно в процессе синтеза. Включите смешанный Mu-Synthesis путем установки MixedMU
опция к 'on'
.
opt = musynOptions('MixedMU','on'); [Km,mu_m] = musyn(IC,1,1,opt);
DG-K ITERATION SUMMARY: ------------------------------------------------------------------- Robust performance Fit order ------------------------------------------------------------------- Iter K Step Peak MU DG Fit D G 1 2.954 2.081 2.366 16 8 2 1.756 1.496 1.999 14 8 3 0.9774 1.148 1.583 20 8 4 1.006 1.003 1.116 18 8 5 0.8931 0.9565 1.044 20 8 6 0.8944 0.9276 0.9459 20 8 7 0.8935 0.9146 0.946 20 8 8 0.8937 0.9054 0.9181 20 8 9 0.8862 0.8974 0.9247 18 8 10 0.8882 0.8914 0.9056 20 8 Best achieved robust performance: 0.891
Смешанный Mu-Synthesis может найти контроллер, который достигает желаемой производительности и целей робастности. Сравнение ответов разомкнутого цикла показывает что смешанный-mu контроллер Km
дает меньше запаса по фазе около 3 рад/с, потому что он только должен принять меры против действительных изменений k1
.
clf % Note: Negative sign because interconnection in Fig 2 uses positive feedback bode(-Kc*plant.NominalValue(1,1),'b',-Km*plant.NominalValue(1,1),'r',{1e-2,1e2}) grid legend('P*Kc - complex mu loop gain','P*Km - mixed mu loop gain','location','SouthWest')
Сравнение этих двух контроллеров указывает что, используя в своих интересах "реальность" k1
результаты в лучшем выполнении, большем количестве устойчивого контроллера.
Оценить худший случай производительность с обратной связью Kc
и Km
, сформируйте соединение с обратной связью рисунка 2 и используйте команду wcgain
определить, как большой норма воздействия к ошибке может добраться для заданной неопределенности объекта.
clpKc = lft(IC,Kc); clpKm = lft(IC,Km); [maxgainKc,badpertKc] = wcgain(clpKc); maxgainKc
maxgainKc = struct with fields: LowerBound: 2.1528 UpperBound: 2.1576 CriticalFrequency: 1.4310
[maxgainKm,badpertKm] = wcgain(clpKm); maxgainKm
maxgainKm = struct with fields: LowerBound: 0.8850 UpperBound: 0.8883 CriticalFrequency: 0.1372
Смешанный-mu контроллер Km
имеет усиление худшего случая 0,88 в то время как комплексный-mu контроллер Kc
имеет усиление худшего случая 2,2, или в 2.5 раза больше.
Сравнить производительность подавления помех Kc
и Km
, сначала создайте модели с обратной связью передачи от входного воздействия dist
к f2
, f1
, и z2
(положение массового m2
)
Km.u = 'z2'; Km.y = 'f1'; clsimKm = connect(plant,Wdist,Km,'dist',{'f2','f1','z2'}); Kc.u = 'z2'; Kc.y = 'f1'; clsimKc = connect(plant,Wdist,Kc,'dist',{'f2','f1','z2'});
Введите белый шум в фильтр lowpass Wdist
симулировать входное воздействие f2
. Номинальная производительность с обратной связью двух проектов почти идентична.
t = 0:.01:100; dist = randn(size(t)); yKc = lsim(clsimKc.Nominal,dist,t); yKm = lsim(clsimKm.Nominal,dist,t); % Plot subplot(311) plot(t,yKc(:,3),'b',t,yKm(:,3),'r') title('Nominal Disturbance Rejection Response') ylabel('z2') subplot(312) plot(t,yKc(:,2),'b',t,yKm(:,2),'r') ylabel('f1 (control)') legend('Kc','Km','Location','NorthWest') subplot(313) plot(t,yKc(:,1),'k') ylabel('f2 (disturbance)') xlabel('Time (sec)')
Затем сравните худшие варианты для Kc
и Km
путем установки неопределенности объекта на значения худшего случая вычисляется с wcgain
.
clsimKc_wc = usubs(clsimKc,badpertKc); clsimKm_wc = usubs(clsimKm,badpertKm); yKc_wc = lsim(clsimKc_wc,dist,t); yKm_wc = lsim(clsimKm_wc,dist,t); subplot(211) plot(t,yKc_wc(:,3),'b',t,yKm_wc(:,3),'r') title('Worse-Case Disturbance Rejection Response') ylabel('z2') subplot(212) plot(t,yKc_wc(:,2),'b',t,yKm_wc(:,2),'r') ylabel('f1 (control)') legend('Kc','Km','Location','NorthWest')
Это показывает что смешанный-mu контроллер Km
значительно превосходит по характеристикам Kc
в худшем варианте. Путем использования факта, что k1
действительно, смешанный-mu контроллер может поставить лучшую производительность в равной робастности.
Смешанный-mu контроллер Km
имеет относительно старший разряд по сравнению с объектом. Чтобы получить более простой контроллер, используйте musyn
настраивающая возможность фиксированного порядка. Это использует hinfstruct
вместо hinfsyn
для шага синтеза. Можно попробовать различные порядки найти самый простой контроллер, который обеспечивает устойчивую производительность. Например, попытайтесь настроить контроллер пятого порядка. Используйте опцию "RandomStart", чтобы запустить несколько циклов Mu-Synthesis, каждый начинающий с различного начального значения K
.
K = tunableSS('K',5,1,1); % 5th-order tunable state-space model opt = musynOptions('MixedMU','on','MaxIter',20,'RandomStart',2); rng(0), [CL,mu_f] = musyn(lft(IC,K),opt);
=== Synthesis 1 of 3 ============================================ DG-K ITERATION SUMMARY: ------------------------------------------------------------------- Robust performance Fit order ------------------------------------------------------------------- Iter K Step Peak MU DG Fit D G 1 22.04 15 15.16 10 6 2 6.583 6.509 6.935 16 6 3 6.411 6.341 6.57 16 6 4 3.494 3.994 6.011 16 8 5 2.646 2.556 2.712 20 8 6 2.171 2.156 2.365 16 8 7 1.469 1.468 1.911 18 8 8 1.213 1.223 1.578 18 8 9 1.1 1.109 1.369 18 8 10 1.085 1.084 1.103 20 8 11 1.048 1.047 1.144 20 8 12 1.029 1.029 1.092 20 8 13 1.042 1.041 1.056 18 8 14 1.016 1.015 1.102 18 8 15 1.029 1.028 1.051 16 8 16 1.022 1.021 1.053 18 8 Best achieved robust performance: 1.01 === Synthesis 2 of 3 ============================================ DG-K ITERATION SUMMARY: ------------------------------------------------------------------- Robust performance Fit order ------------------------------------------------------------------- Iter K Step Peak MU DG Fit D G 1 3.012 2.003 2.285 20 8 2 1.74 1.73 2.006 16 8 3 1.171 1.196 1.389 18 8 4 1.063 1.063 1.121 18 8 5 1.036 1.035 1.058 16 8 6 1.022 1.022 1.069 18 8 7 1.021 1.021 1.025 18 8 8 1.02 1.02 1.036 18 8 Best achieved robust performance: 1.02 === Synthesis 3 of 3 ============================================ DG-K ITERATION SUMMARY: ------------------------------------------------------------------- Robust performance Fit order ------------------------------------------------------------------- Iter K Step Peak MU DG Fit D G 1 3.511 3.398 3.399 16 8 2 2.156 2.242 2.738 18 8 3 1.624 1.624 1.63 20 8 4 1.199 1.336 1.796 20 8 5 1.261 1.26 1.261 20 8 6 1.145 1.155 1.388 18 8 7 1.124 1.123 1.328 20 8 8 1.084 1.082 1.101 20 8 9 1.051 1.05 1.25 18 8 10 1.052 1.051 1.065 20 8 11 1.019 1.018 1.104 16 8 12 1.038 1.037 1.075 18 8 13 1.024 1.022 1.073 18 8 Best achieved robust performance: 1.02
Лучший контроллер почти поставляет желаемую устойчивую производительность (устойчивая производительность mu_f
близко к 1). Сравните эти два контроллера.
clf, bode(Km,getBlockValue(CL,'K')) legend('Full order','5th order')