Verifying Robust Stability of a Decentralized Controller - Example
This example shows how to analyze the robust stability of a decentralized networked control system.
The theory behind the analysis technique used here can be found in:
M.C.F. Donkers, W.P.M.H. Heemels, N. van de Wouw and L.L. Hetel, "Stability Analysis of Networked Control Systems Using a Switched Linear Systems Approach", IEEE Transactions on Automatic Control, 56(9), p. 2101-2115, 2011
Contents
Define the Network Control System
The plant is a divided into two subsystems which are given as
with decentralized state feedback
The plant subsystem matrices with corresponding feedback gains are defined as
A1=[0.6 -4.2; 0.1 -2.1]; B1=[0.7 1.9; 0 1]; K1= [1.94 -1.40; -0.56 -0.86]; A2=[-3.2 0.2; 5.3 -0.2]; B2=[0.8; -0.4]; K2 = [1.36 0.81];
and the coupling matrices are given as
Ac1 = [0.1 2.1; 0.01 0]; Ac2 = [0 0; 0 -0.03]; Bc1 = [-0.02; -0.01]; Bc2=[0 0; 0 0];
We can express these two coupled systems as one system with the expression
where
A=[A1 Ac1; Ac2 A2]; B=[B1 Bc1; Bc2 B2]; K= [K1 zeros(2); 0 0 K2];
where K is a decentralized state feedback gain.
The network that the decentralized NCS is operating on has the following characteristics
txIntvls = [0.9, 1.1]; % [min,max] bounds on the sampling time delays = [0, 0.3]; % [min,max] bounds on the delay
Create 'ncs' Object
Now we are ready to create a ncs class variable. To do so, we will first initialize an ncs object by specifying the number of inputs and outputs the plant has. Then we will specifiy the plant, controller and network properties using the variables defined above.
dncs = ncs(3,4);
dncs = dncs.setPlant(A,B,eye(4));
dncs = dncs.setController(K);
dncs = dncs.setNetwork('tPoly',[txIntvls delays]);
NOTE: When an NCS vairable is initialized, quanitzation, network sharing and packet dropouts effects are disabled by default.
NOTE: Creating an NCS variable be also done using the ncsEditor. To open the ncsEditor simply type 'ncsEditor' into the command prompt. Since the matrix variables are defined in the workspace, we can directly input the matrix names into the fields of the ncsEditor GUI.
Determine Robust Stability
Now, using the NCS object dncs in the workspace, we can determine if out system is stable for the GNB, JNF and CH overapproximation techniques. First, we will input the ncs|object into the |isNcsStable function, specifying the approximation tehique as 'GNB'. To create the overapproximation, the GNB algorithm itertively adds gridpoints until either the desired tightness is obtained or the max number of gridpoints is reached. Here, we specify the desired tightness paramter epsU=1e-12 and the max number of gridpoints gridPointMax = 10. Since the epsU parameter is very small, the algorithm will terminate when 10 gridpoints is reached.
dncs.isNcsStable('GNB',[],1e-12,4);
OVERAPPROXIMATION DATA: GNB *OVERAPPROXIMATION USING TIMING UNCERTAINTY POLYGON* Iteration 1, Gridpoints 4 ... eps = 1.2342 -------------------------------------- The maximum value of epsilon = 1.234e+00 Total amount of gridpoints = 4 STABILITY DATA: Number of LMIs needed to verify stability = 4 Solving LMIs... Successfully solved (SeDuMi-1.3) Stability: Guaranteed --------------------------------------------------------------
We can conclude from the output that the GNB technique is able to prove robust stability of this NCS. Specifying 4 gridpoints, results in an overappoximation tightness of 1.234.
NOTE: The above analysis can also be done via the ncsEditor GUI by loading the NCS from ncsExamples.mat into the GUI and clicking on the 'Verify Stability' button.