I get a robust controller result using musyn that is empty; “Krob = [ ]”.
Below is a Live Editor script of a simple mass/spring/damper system that I’m trying to design a robust controller using the musyn command. This work follows the example in Zhou and Doyle, Essentials of Robust Control, and www.youtube.com/@artcellCTRL. I am unable to figure out why I get the "Krob = []" output (see the output at the end of the script). The ‘K Step’, ‘Peak MU’, ‘D Fit’ are Inf, and the ‘D’ result is NaN in the D-K interation. I don’t understand what the problem is.
Thanks so much.
clear all;close all;clc;
Simple spring/mass/damper system is described as follows:
This system can be represented by the following differential equation of motion:
and represented by the following continuous time block diagram and state-space representation:
with m = mass of the block, k = spring constant and c = damping coefficient.
We wish to represent the parameters m, k and c with uncertainty using Eta and Delta. Where Delta will be set to vary between 0-1, and Eta will set the limit of the total variation (e.g., maximum percent variation) using the ‘ultidyn’ command:
delta_m = ureal("delta_m",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
delta_k = ureal("deltal_k",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
delta_c = ureal("delta_c",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
%
Setting Eta at 10% maximum variation:
eta_m=0.1;% vary 10%
eta_k=0.1;% vary 10%
eta_c=0.1;% vary 10%
Re-drawing the block diagram to include the variation of the parameters:
Expanding the block diagram for c and k:
Next, we label all of the block connections along with defining the dummy block ap1 to ensure each block I/O have a unique identifier and labeling the 1/s blocks a1 and a2:
ap1=ss(1);
ap1.u=’s1′;
ap1.y=’yx1′;
a1=tf([1],[1 0]);% 1/s term
a1.u=’s2′;
a1.y=’s1′;
%
a2=tf([1],[1 0]);% 1/s term
a2.u=’s8′;
a2.y=’s2′;
Sum1=sumblk(‘s7=s9+u’);
Sum2=sumblk(‘s9=s4+s3’);
Next, we define the LFT of the uncertain parameter blocks:
(See Zhou and Doyle, Essentials of Robust Control pp166)
Next, we define each LFT block and code into Matlab:
MASS:
m0=1;
Mm=[-eta_m, 1;-eta_m/m0, 1/m0 ]; %
Mm_sys=ss(Mm);
Mm_sys.u={‘um’,’s7′};
Mm_sys.y={‘ym’,’s8′};
SPRING CONSTANT, k:
k0=1;
Mk=[k0*eta_k, 0;k0, 1];
Mk_sys=ss(Mk);
Mk_sys.u={‘uk’,’s1′};
Mk_sys.y={‘yk’,’s3′};
DAMPING COEFFICIENT, c0:
c0=1;
Mc=[c0*eta_c, 0;c0, 1];
Mc_sys=ss(Mc);
Mc_sys.u={‘uc’,’s2′};
Mc_sys.y={‘yc’,’s4′};
Next, we re-draw the LFT block diagram and set up the operation of ‘Pulling Out the Deltas’ for the Mu Synthesis architecture:
Pulling Out the Deltas:
Pulling out the deltas, forming the delta matrix block and defining the I/O for the mu synthesis architecture:
Adding a reference input, r and generating an error output of the position state, x1, along with pulling out the velocity state x2 of the system.
%
Sum3=sumblk(‘ye=r-yx1’);
%
ap2=ss(1);
ap2.u=’s2′;
ap2.y=’yx2′;
Now we form the delta block:
delta_mtx=[delta_m, 0, 0;0, delta_c, 0;0 , 0, delta_k];
delta_sys=ss(delta_mtx);
delta_sys.u={‘ym’,’yc’,’yk’};
delta_sys.y={‘um’,’uc’,’uk’};
Next, we connect all of the components to form the Mu Synthesis architecture, adding, for reference, the feedback K block that will be calculated with the musyn command later on:
P1=connect(a1,a2,Mm_sys,Mk_sys,Mc_sys,Sum1,Sum2,ap1,ap2,delta_sys,Sum3, {‘um’,’uc’,’uk’,’u’,’r’},{‘ym’,’yc’,’yk’,’ye’,’u’,’ye’,’yx2′});
For reference, the input/output of the Mu Synthesis block in the Matlab ‘connect’ command is as follows:
Next, to simplify, we ignore the delta terms and allow them to be lumped into the final Mu Synthesis block so we only have w = {‘r’}, and u = {‘u’} as inputs and z = {‘ye’, ‘u’}, and y = {‘ye’, ‘yx2’} as the outputs to form the final Mu Synthesis block P2:
Now we re-write the connect command for P2 (which is the same as the one for P1, but with w = {‘r’}, and u = {‘u’} as inputs and z = {‘ye’, ‘u’}, and y = {‘ye’, ‘yx2’} as the outputs):
P2=connect(a1,a2,Mm_sys,Mk_sys,Mc_sys,Sum1,Sum2,ap1,ap2,delta_sys,Sum3,{‘u’,’r’},{‘ye’,’u’,’ye’,’yx2′});
The resultant connect command I/O and block function is as follows:
Finally, we setup the musyn command by defining the number of outputs, ‘ncont’ and the number of measured states as inputs, ‘nmeas’ of the controller, K and executing the musyn command:
%
ncont = 1; % one control signal, ‘u’
nmeas = 2; % 2 measurement signals,’ye’ and ‘yx2’
%
[Krob,CLperf] = musyn(P2,nmeas,ncont)
After running the script, I get the output shown below. I don’t understand why. I tried changing the mass, damper and spring constant parameters, but I still get the same output.
Any ideas as to what is going on?
************
D-K ITERATION SUMMARY:
—————————————————————–
Robust performance Fit order
—————————————————————–
Iter K Step Peak MU D Fit D
1 Inf Inf Inf NaN
Best achieved robust performance: Inf
Krob =
[]
************Below is a Live Editor script of a simple mass/spring/damper system that I’m trying to design a robust controller using the musyn command. This work follows the example in Zhou and Doyle, Essentials of Robust Control, and www.youtube.com/@artcellCTRL. I am unable to figure out why I get the "Krob = []" output (see the output at the end of the script). The ‘K Step’, ‘Peak MU’, ‘D Fit’ are Inf, and the ‘D’ result is NaN in the D-K interation. I don’t understand what the problem is.
Thanks so much.
clear all;close all;clc;
Simple spring/mass/damper system is described as follows:
This system can be represented by the following differential equation of motion:
and represented by the following continuous time block diagram and state-space representation:
with m = mass of the block, k = spring constant and c = damping coefficient.
We wish to represent the parameters m, k and c with uncertainty using Eta and Delta. Where Delta will be set to vary between 0-1, and Eta will set the limit of the total variation (e.g., maximum percent variation) using the ‘ultidyn’ command:
delta_m = ureal("delta_m",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
delta_k = ureal("deltal_k",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
delta_c = ureal("delta_c",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
%
Setting Eta at 10% maximum variation:
eta_m=0.1;% vary 10%
eta_k=0.1;% vary 10%
eta_c=0.1;% vary 10%
Re-drawing the block diagram to include the variation of the parameters:
Expanding the block diagram for c and k:
Next, we label all of the block connections along with defining the dummy block ap1 to ensure each block I/O have a unique identifier and labeling the 1/s blocks a1 and a2:
ap1=ss(1);
ap1.u=’s1′;
ap1.y=’yx1′;
a1=tf([1],[1 0]);% 1/s term
a1.u=’s2′;
a1.y=’s1′;
%
a2=tf([1],[1 0]);% 1/s term
a2.u=’s8′;
a2.y=’s2′;
Sum1=sumblk(‘s7=s9+u’);
Sum2=sumblk(‘s9=s4+s3’);
Next, we define the LFT of the uncertain parameter blocks:
(See Zhou and Doyle, Essentials of Robust Control pp166)
Next, we define each LFT block and code into Matlab:
MASS:
m0=1;
Mm=[-eta_m, 1;-eta_m/m0, 1/m0 ]; %
Mm_sys=ss(Mm);
Mm_sys.u={‘um’,’s7′};
Mm_sys.y={‘ym’,’s8′};
SPRING CONSTANT, k:
k0=1;
Mk=[k0*eta_k, 0;k0, 1];
Mk_sys=ss(Mk);
Mk_sys.u={‘uk’,’s1′};
Mk_sys.y={‘yk’,’s3′};
DAMPING COEFFICIENT, c0:
c0=1;
Mc=[c0*eta_c, 0;c0, 1];
Mc_sys=ss(Mc);
Mc_sys.u={‘uc’,’s2′};
Mc_sys.y={‘yc’,’s4′};
Next, we re-draw the LFT block diagram and set up the operation of ‘Pulling Out the Deltas’ for the Mu Synthesis architecture:
Pulling Out the Deltas:
Pulling out the deltas, forming the delta matrix block and defining the I/O for the mu synthesis architecture:
Adding a reference input, r and generating an error output of the position state, x1, along with pulling out the velocity state x2 of the system.
%
Sum3=sumblk(‘ye=r-yx1’);
%
ap2=ss(1);
ap2.u=’s2′;
ap2.y=’yx2′;
Now we form the delta block:
delta_mtx=[delta_m, 0, 0;0, delta_c, 0;0 , 0, delta_k];
delta_sys=ss(delta_mtx);
delta_sys.u={‘ym’,’yc’,’yk’};
delta_sys.y={‘um’,’uc’,’uk’};
Next, we connect all of the components to form the Mu Synthesis architecture, adding, for reference, the feedback K block that will be calculated with the musyn command later on:
P1=connect(a1,a2,Mm_sys,Mk_sys,Mc_sys,Sum1,Sum2,ap1,ap2,delta_sys,Sum3, {‘um’,’uc’,’uk’,’u’,’r’},{‘ym’,’yc’,’yk’,’ye’,’u’,’ye’,’yx2′});
For reference, the input/output of the Mu Synthesis block in the Matlab ‘connect’ command is as follows:
Next, to simplify, we ignore the delta terms and allow them to be lumped into the final Mu Synthesis block so we only have w = {‘r’}, and u = {‘u’} as inputs and z = {‘ye’, ‘u’}, and y = {‘ye’, ‘yx2’} as the outputs to form the final Mu Synthesis block P2:
Now we re-write the connect command for P2 (which is the same as the one for P1, but with w = {‘r’}, and u = {‘u’} as inputs and z = {‘ye’, ‘u’}, and y = {‘ye’, ‘yx2’} as the outputs):
P2=connect(a1,a2,Mm_sys,Mk_sys,Mc_sys,Sum1,Sum2,ap1,ap2,delta_sys,Sum3,{‘u’,’r’},{‘ye’,’u’,’ye’,’yx2′});
The resultant connect command I/O and block function is as follows:
Finally, we setup the musyn command by defining the number of outputs, ‘ncont’ and the number of measured states as inputs, ‘nmeas’ of the controller, K and executing the musyn command:
%
ncont = 1; % one control signal, ‘u’
nmeas = 2; % 2 measurement signals,’ye’ and ‘yx2’
%
[Krob,CLperf] = musyn(P2,nmeas,ncont)
After running the script, I get the output shown below. I don’t understand why. I tried changing the mass, damper and spring constant parameters, but I still get the same output.
Any ideas as to what is going on?
************
D-K ITERATION SUMMARY:
—————————————————————–
Robust performance Fit order
—————————————————————–
Iter K Step Peak MU D Fit D
1 Inf Inf Inf NaN
Best achieved robust performance: Inf
Krob =
[]
************ Below is a Live Editor script of a simple mass/spring/damper system that I’m trying to design a robust controller using the musyn command. This work follows the example in Zhou and Doyle, Essentials of Robust Control, and www.youtube.com/@artcellCTRL. I am unable to figure out why I get the "Krob = []" output (see the output at the end of the script). The ‘K Step’, ‘Peak MU’, ‘D Fit’ are Inf, and the ‘D’ result is NaN in the D-K interation. I don’t understand what the problem is.
Thanks so much.
clear all;close all;clc;
Simple spring/mass/damper system is described as follows:
This system can be represented by the following differential equation of motion:
and represented by the following continuous time block diagram and state-space representation:
with m = mass of the block, k = spring constant and c = damping coefficient.
We wish to represent the parameters m, k and c with uncertainty using Eta and Delta. Where Delta will be set to vary between 0-1, and Eta will set the limit of the total variation (e.g., maximum percent variation) using the ‘ultidyn’ command:
delta_m = ureal("delta_m",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
delta_k = ureal("deltal_k",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
delta_c = ureal("delta_c",1,’PlusMinus’,1);% Uncertain LTI dynamics, +/-1
%
Setting Eta at 10% maximum variation:
eta_m=0.1;% vary 10%
eta_k=0.1;% vary 10%
eta_c=0.1;% vary 10%
Re-drawing the block diagram to include the variation of the parameters:
Expanding the block diagram for c and k:
Next, we label all of the block connections along with defining the dummy block ap1 to ensure each block I/O have a unique identifier and labeling the 1/s blocks a1 and a2:
ap1=ss(1);
ap1.u=’s1′;
ap1.y=’yx1′;
a1=tf([1],[1 0]);% 1/s term
a1.u=’s2′;
a1.y=’s1′;
%
a2=tf([1],[1 0]);% 1/s term
a2.u=’s8′;
a2.y=’s2′;
Sum1=sumblk(‘s7=s9+u’);
Sum2=sumblk(‘s9=s4+s3’);
Next, we define the LFT of the uncertain parameter blocks:
(See Zhou and Doyle, Essentials of Robust Control pp166)
Next, we define each LFT block and code into Matlab:
MASS:
m0=1;
Mm=[-eta_m, 1;-eta_m/m0, 1/m0 ]; %
Mm_sys=ss(Mm);
Mm_sys.u={‘um’,’s7′};
Mm_sys.y={‘ym’,’s8′};
SPRING CONSTANT, k:
k0=1;
Mk=[k0*eta_k, 0;k0, 1];
Mk_sys=ss(Mk);
Mk_sys.u={‘uk’,’s1′};
Mk_sys.y={‘yk’,’s3′};
DAMPING COEFFICIENT, c0:
c0=1;
Mc=[c0*eta_c, 0;c0, 1];
Mc_sys=ss(Mc);
Mc_sys.u={‘uc’,’s2′};
Mc_sys.y={‘yc’,’s4′};
Next, we re-draw the LFT block diagram and set up the operation of ‘Pulling Out the Deltas’ for the Mu Synthesis architecture:
Pulling Out the Deltas:
Pulling out the deltas, forming the delta matrix block and defining the I/O for the mu synthesis architecture:
Adding a reference input, r and generating an error output of the position state, x1, along with pulling out the velocity state x2 of the system.
%
Sum3=sumblk(‘ye=r-yx1’);
%
ap2=ss(1);
ap2.u=’s2′;
ap2.y=’yx2′;
Now we form the delta block:
delta_mtx=[delta_m, 0, 0;0, delta_c, 0;0 , 0, delta_k];
delta_sys=ss(delta_mtx);
delta_sys.u={‘ym’,’yc’,’yk’};
delta_sys.y={‘um’,’uc’,’uk’};
Next, we connect all of the components to form the Mu Synthesis architecture, adding, for reference, the feedback K block that will be calculated with the musyn command later on:
P1=connect(a1,a2,Mm_sys,Mk_sys,Mc_sys,Sum1,Sum2,ap1,ap2,delta_sys,Sum3, {‘um’,’uc’,’uk’,’u’,’r’},{‘ym’,’yc’,’yk’,’ye’,’u’,’ye’,’yx2′});
For reference, the input/output of the Mu Synthesis block in the Matlab ‘connect’ command is as follows:
Next, to simplify, we ignore the delta terms and allow them to be lumped into the final Mu Synthesis block so we only have w = {‘r’}, and u = {‘u’} as inputs and z = {‘ye’, ‘u’}, and y = {‘ye’, ‘yx2’} as the outputs to form the final Mu Synthesis block P2:
Now we re-write the connect command for P2 (which is the same as the one for P1, but with w = {‘r’}, and u = {‘u’} as inputs and z = {‘ye’, ‘u’}, and y = {‘ye’, ‘yx2’} as the outputs):
P2=connect(a1,a2,Mm_sys,Mk_sys,Mc_sys,Sum1,Sum2,ap1,ap2,delta_sys,Sum3,{‘u’,’r’},{‘ye’,’u’,’ye’,’yx2′});
The resultant connect command I/O and block function is as follows:
Finally, we setup the musyn command by defining the number of outputs, ‘ncont’ and the number of measured states as inputs, ‘nmeas’ of the controller, K and executing the musyn command:
%
ncont = 1; % one control signal, ‘u’
nmeas = 2; % 2 measurement signals,’ye’ and ‘yx2’
%
[Krob,CLperf] = musyn(P2,nmeas,ncont)
After running the script, I get the output shown below. I don’t understand why. I tried changing the mass, damper and spring constant parameters, but I still get the same output.
Any ideas as to what is going on?
************
D-K ITERATION SUMMARY:
—————————————————————–
Robust performance Fit order
—————————————————————–
Iter K Step Peak MU D Fit D
1 Inf Inf Inf NaN
Best achieved robust performance: Inf
Krob =
[]
************ robust control, musyn MATLAB Answers — New Questions