Add study about spurious resonance

This commit is contained in:
Thomas Dehaeze 2021-04-28 09:50:11 +02:00
parent 335df6b6dd
commit a980b834bb
12 changed files with 4711 additions and 434 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
figs/svd_plant_spurious.pdf Normal file

Binary file not shown.

BIN
figs/svd_plant_spurious.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
matlab/suspended_mass.slx Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -2178,6 +2178,14 @@ It is structured as follow:
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
addpath('matlab')
#+end_src
#+begin_src matlab
freqs = logspace(-1, 2, 1000);
#+end_src
** Test Model
<<sec:decoupling_comp_model>>
Let's consider a parallel manipulator with several collocated actuator/sensors pairs.
@ -2292,7 +2300,6 @@ exportFig('figs/coupled_plant_bode.pdf', 'width', 'full', 'height', 'tall');
#+name: fig:coupled_plant_bode
#+caption: Magnitude of the coupled plant.
#+attr_latex: :width 0.3\linewidth
#+RESULTS:
[[file:figs/coupled_plant_bode.png]]
@ -2753,12 +2760,11 @@ exportFig('figs/svd_plant.pdf', 'width', 'wide', 'height', 'normal');
#+RESULTS:
[[file:figs/svd_plant.png]]
** Further Notes
*** Robustness of the decoupling strategies?
** Robustness of the decoupling strategies?
*** Introduction :ignore:
What happens if we add an additional resonance in the system (Figure [[fig:model_test_decoupling_spurious_res]]).
What happens if we have an additional resonance in the system (Figure [[fig:model_test_decoupling_spurious_res]]).
Less actuator than DoF:
Having less actuator than DoF (under-actuated system):
- modal decoupling: can still control first $n$ modes?
- SVD decoupling: does not matter
- Jacobian decoupling: could give poor decoupling?
@ -2767,10 +2773,216 @@ Less actuator than DoF:
#+caption: Plant with spurious resonance (additional DoF)
[[file:figs/model_test_decoupling_spurious_res.png]]
*** Other decoupling strategies
*** Plant
A multi body model of the system in Figure [[fig:model_test_decoupling_spurious_res]] has been made using Simscape.
- DC decoupling: pre-multiply the plant by $G(0)^{-1}$
- full decoupling: pre-multiply the plant by $G(s)^{-1}$
Its parameters are defined below:
#+begin_src matlab
leq = 20e-3; % Equilibrium length of struts [m]
mr = 5; % [kg]
kr = (2*pi*10)^2*mr; % Stiffness [N/m]
cr = 1e1; % Damping [N/(m/s)]
m = 400 - mr; % Mass [kg]
#+end_src
The plant is then identified and shown in Figure [[fig:coupled_plant_bode_spurious]].
The added resonance only slightly modifies the plant around 10Hz.
#+begin_src matlab :exports none
%% Name of the Simulink File
mdl = 'suspended_mass';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/dL'], 1, 'openoutput'); io_i = io_i + 1;
Gr = linearize(mdl, io);
Gr.InputName = {'F1', 'F2', 'F3'};
Gr.OutputName = {'L1', 'L2', 'L3'};
#+end_src
#+begin_src matlab :exports none
figure;
tiledlayout(3, 3, 'TileSpacing', 'None', 'Padding', 'None');
for out_i = 1:3
for in_i = 1:3
nexttile;
hold on;
plot(freqs, abs(squeeze(freqresp(G(out_i,in_i), freqs, 'Hz'))), 'k-', ...
'DisplayName', sprintf('$\\mathcal{L}_%i/\\tau_%i$', out_i, in_i));
plot(freqs, abs(squeeze(freqresp(Gr(out_i,in_i), freqs, 'Hz'))), 'k--', ...
'HandleVisibility', 'off');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlim([1e-1, 2e1]); ylim([1e-6, 1e-2]);
legend('location', 'northeast', 'FontSize', 8);
if in_i == 1
ylabel('Mag. [m/N]')
else
set(gca, 'YTickLabel',[]);
end
if out_i == 3
xlabel('Frequency [Hz]')
else
set(gca, 'XTickLabel',[]);
end
end
end
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/coupled_plant_bode_spurious.pdf', 'width', 'full', 'height', 'tall');
#+end_src
#+name: fig:coupled_plant_bode_spurious
#+caption: Magnitude of the coupled plant without additional mode (solid) and with the additional mode (dashed).
#+RESULTS:
[[file:figs/coupled_plant_bode_spurious.png]]
*** Jacobian Decoupling
The obtained plant is decoupled using the Jacobian matrix.
#+begin_src matlab
Gxr = pinv(J)*Gr*pinv(J');
Gxr.InputName = {'Fx', 'Fy', 'Mz'};
Gxr.OutputName = {'Dx', 'Dy', 'Rz'};
#+end_src
The obtained plant is shown in Figure [[fig:jacobian_plant_spurious]] and is not much different than for the plant without the spurious resonance.
#+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000);
figure;
% Magnitude
hold on;
for i_in = 1:3
for i_out = [i_in+1:3]
plot(freqs, abs(squeeze(freqresp(Gxr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off');
end
end
plot(freqs, abs(squeeze(freqresp(Gxr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_{x,r}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gxr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{x,r}(%d,%d)$', i_in_out, i_in_out));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-7, 1e-1]);
legend('location', 'northeast');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/jacobian_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:jacobian_plant_spurious
#+caption: Plant with spurious resonance decoupled using the Jacobian matrices $G_{x,r}(s)$
#+RESULTS:
[[file:figs/jacobian_plant_spurious.png]]
*** Modal Decoupling
The obtained plant is now decoupled using the modal matrices obtained with the plant not including the added resonance.
#+begin_src matlab
Gmr = inv(Cm)*Gr*inv(Bm);
#+end_src
The obtained decoupled plant is shown in Figure [[fig:modal_plant_spurious]].
Compare to the decoupled plant in Figure [[fig:modal_plant]], the added resonance induces some coupling, especially around the frequency of the added spurious resonance.
#+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000);
figure;
% Magnitude
hold on;
for i_in = 1:3
for i_out = [i_in+1:3]
plot(freqs, abs(squeeze(freqresp(Gmr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off');
end
end
plot(freqs, abs(squeeze(freqresp(Gmr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_{m,r}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gmr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{m,r}(%d,%d)$', i_in_out, i_in_out));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-6, 1e2]);
legend('location', 'northeast');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/modal_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:modal_plant_spurious
#+caption: Modal plant including spurious resonance $G_{m,r}(s)$
#+RESULTS:
[[file:figs/modal_plant_spurious.png]]
*** SVD Decoupling
The SVD decoupling is performed on the new obtained plant.
The decoupling frequency is slightly shifted in order not to interfere too much with the spurious resonance.
#+begin_src matlab
%% Decoupling frequency [rad/s]
wc = 2*pi*7;
%% System's response at the decoupling frequency
H1 = evalfr(Gr, j*wc);
%% Real approximation of G(j.wc)
D = pinv(real(H1'*H1));
H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2))));
[U,S,V] = svd(H1);
Gsvdr = inv(U)*Gr*inv(V');
#+end_src
The obtained plant is shown in Figure [[fig:svd_plant_spurious]].
#+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000);
figure;
% Magnitude
hold on;
for i_in = 1:3
for i_out = [i_in+1:3]
plot(freqs, abs(squeeze(freqresp(Gsvdr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off');
end
end
plot(freqs, abs(squeeze(freqresp(Gsvdr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
'DisplayName', '$G_{svd,r}(i,j)\ i \neq j$');
set(gca,'ColorOrderIndex',1)
for i_in_out = 1:3
plot(freqs, abs(squeeze(freqresp(Gsvdr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{svd,r}(%d,%d)$', i_in_out, i_in_out));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-8, 1e-2]);
legend('location', 'northeast');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/svd_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:svd_plant_spurious
#+caption: SVD decoupled plant including a spurious resonance $G_{svd,r}(s)$
#+RESULTS:
[[file:figs/svd_plant_spurious.png]]
** Conclusion
<<sec:decoupling_conclusion>>
@ -2778,6 +2990,10 @@ Less actuator than DoF:
The three proposed methods clearly have a lot in common as they all tend to make system more decoupled by pre and/or post multiplying by a constant matrix
However, the three methods also differs by a number of points which are summarized in Table [[tab:decoupling_strategies_comp]].
Other decoupling strategies could be included in this study, such as:
- DC decoupling: pre-multiply the plant by $G(0)^{-1}$
- full decoupling: pre-multiply the plant by $G(s)^{-1}$
#+name: tab:decoupling_strategies_comp
#+caption: Comparison of decoupling strategies
#+attr_latex: :environment tabularx :width \linewidth :align lXXX
@ -4067,7 +4283,7 @@ xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
legend('location', 'southwest');
linkaxes([ax1,ax2],'y');
ylim([1e-5, 1e1]);
xlim([1e-1, 1e3]); ylim([1e-5, 1e1]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace

Binary file not shown.