www.gusucode.com > robust_featured 案例源码程序 matlab代码 > robust_featured/uss_demo.m
%% Building and Manipulating Uncertain Models % This example shows how to use Robust Control Toolbox(TM) to build % uncertain state-space models and analyze the robustness of feedback % control systems with uncertain elements. % % We will show how to specify uncertain physical parameters and % create uncertain state-space models from these parameters. You will % see how to evaluate the effects of random and worst-case parameter % variations using the functions |usample| and |robstab|. % Copyright 1986-2012 The MathWorks, Inc. %% Two-Cart and Spring System % In this example, we use the following system consisting of two frictionless % carts connected by a spring |k|: % % <<../cartspic.png>> %% % *Figure 1:* Two-cart and spring system. %% % The control input is the force |u1| applied to the left cart. The output % to be controlled is the position |y1| of the right cart. The feedback % control is of the following form: % % $$u_1 = C(s) (r-y_1)$$ % % In addition, we use a triple-lead compensator: % % $$C(s)=100 (s+1)^3/(0.001s+1)^3$$ % % We create this compensator using this code: s = zpk('s'); % The Laplace 's' variable C = 100*ss((s+1)/(.001*s+1))^3; %% Block Diagram Model % The two-cart and spring system is modeled by the block diagram shown below. % % <<../cartslft.png>> %% % *Figure 2:* Block diagram of two-cart and spring model. %% Uncertain Real Parameters % The problem of controlling the carts is complicated by the fact that the % values of the spring constant |k| and cart masses |m1,m2| are known with % only 20% accuracy: $k=1.0 \pm 20\%$ , $m1=1.0 \pm 20\%$ , and $m2=1.0 \pm % 20\%$. To capture this variability, we will create three uncertain real % parameters using th |ureal| function: k = ureal('k',1,'percent',20); m1 = ureal('m1',1,'percent',20); m2 = ureal('m2',1,'percent',20); %% Uncertain Cart Models % We can represent the carts models as follows: % % $$G_1(s) = \frac{1}{m_1 s^2}, \;\;\; G_2(s) = \frac{1}{m_2 s^2}$$ % % Given the uncertain parameters |m1| and |m2|, we will construct uncertain % state-space models (USS) for G1 and G2 as follows: G1 = 1/s^2/m1; G2 = 1/s^2/m2; %% Uncertain Model of a Closed-Loop System % First we'll construct a plant model |P| corresponding to the block % diagram shown above (|P| maps u1 to y1): % Spring-less inner block F(s) F = [0;G1]*[1 -1]+[1;-1]*[0,G2] %% % Connect with the spring k P = lft(F,k) %% % The feedback control u1 = C*(r-y1) operates on the plant |P| as % shown below: % % <<../cartsfeedback.png>> %% % *Figure 3:* Uncertain model of a closed-loop system. %% % We'll use the |feedback| function to compute the closed-loop transfer % from r to y1. % Uncertain open-loop model is L = P*C %% % Uncertain closed-loop transfer from r to y1 is T = feedback(L,1) %% % Note that since |G1| and |G2| are uncertain, both |P| and |T| are % uncertain state-space models. %% Extracting the Nominal Plant % The nominal transfer function of the plant is Pnom = zpk(P.nominal) %% Nominal Closed-Loop Stability % Next, we evaluate the nominal closed-loop transfer function |Tnom|, % and then check that all the poles of the nominal system have negative % real parts: Tnom = zpk(T.nominal); maxrealpole = max(real(pole(Tnom))) %% Robust Stability Margin % Will the feedback loop remain stable for all possible values of |k,m1,m2| % in the specified uncertainty range? We can use the |robstab| function % to answer this question rigorously. % Show report and compute sensitivity opt = robOptions('Display','on','Sensitivity','on'); [StabilityMargin,wcu] = robstab(T,opt); %% % The report indicates that the closed loop can tolerate up to three times as % much variability in |k,m1,m2| before going unstable. It also provides % useful information about the sensitivity of stability to each parameter. % The variable |wcu| contains the smallest destabilizing parameter % variations (relative to the nominal values). wcu %% Worst-Case Performance Analysis % Note that the peak gain across frequency of the closed-loop transfer |T| % is indicative of the level of overshoot in the closed-loop step response. % The closer this gain is to 1, the smaller the overshoot. % We use |wcgain| to compute the worst-case gain |PeakGain| of |T| over the % specified uncertainty range. [PeakGain,wcu] = wcgain(T); PeakGain %% % Substitute the worst-case parameter variation |wcu| into |T| to % compute the worst-case closed-loop transfer |Twc|. Twc = usubs(T,wcu); % Worst-case closed-loop transfer T %% % Finally, pick from random samples of the uncertain parameters and % compare the corresponding closed-loop transfers with the worst-case % transfer |Twc|. Trand = usample(T,4); % 4 random samples of uncertain model T clf subplot(211), bodemag(Trand,'b',Twc,'r',{10 1000}); % plot Bode response subplot(212), step(Trand,'b',Twc,'r',0.2); % plot step response %% % *Figure 4:* Bode diagram and step response. %% % In this analysis, we see that the compensator C performs robustly for the % specified uncertainty on k,m1,m2.