Removed DVF from the study (replace with passive)

This commit is contained in:
Thomas Dehaeze 2020-06-29 10:22:52 +02:00
parent 66714c6974
commit 75e3dacd71
19 changed files with 112 additions and 596 deletions

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 222 KiB

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 309 KiB

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -29,7 +29,6 @@
- Section [[sec:iff_pure_int]]
- Section [[sec:iff_pseudo_int]]
- Section [[sec:iff_parallel_stiffness]]
- Section [[sec:dvf]]
- Section [[sec:comparison]]
- Section [[sec:notations]]
@ -215,7 +214,6 @@ Define the rotating speed for the Simscape Model.
#+begin_src matlab :exports none
Kiff = tf(zeros(2));
Kdvf = tf(zeros(2));
kp = 0; % Parallel Stiffness [N/m]
cp = 0; % Parallel Damping [N/(m/s)]
@ -492,7 +490,6 @@ The rotation speed is set to $\Omega = 0.1 \omega_0$.
#+begin_src matlab :exports none
Kiff = tf(zeros(2));
Kdvf = tf(zeros(2));
#+end_src
#+begin_src matlab
@ -1294,7 +1291,6 @@ The same transfer function from $[F_u, F_v]$ to $[f_u, f_v]$ is written down fro
#+begin_src matlab :exports none
Kiff = tf(zeros(2));
Kdvf = tf(zeros(2));
#+end_src
#+begin_src matlab
@ -1897,280 +1893,6 @@ Let's take $k_p = 5 m \Omega^2$ and find the optimal IFF control gain $g$ such t
exportFig('figs-inkscape/root_locus_opt_gain_iff_kp.pdf', 'width', 'wide', 'height', 'tall', 'png', false, 'pdf', false, 'svg', true);
#+end_src
* Direct Velocity Feedback
:PROPERTIES:
:header-args:matlab+: :tangle matlab/s5_dvf.m
:header-args:matlab+: :comments org :mkdirp yes
:END:
<<sec:dvf>>
** Introduction :ignore:
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
addpath('./matlab/');
addpath('./src/');
#+end_src
** Schematic
#+name: fig:system_dvf
#+caption: Figure caption
[[file:figs-tikz/system_dvf.png]]
** Equations
The sensed relative velocity are equal to:
#+begin_important
\begin{equation}
\begin{bmatrix} \dot{d}_u \\ \dot{d}_v \end{bmatrix} =
\bm{G}_v
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
\begin{equation}
\begin{bmatrix} \dot{d}_u \\ \dot{d}_v \end{bmatrix} =
\frac{s}{k} \frac{1}{G_{vp}}
\begin{bmatrix}
G_{vz} & G_{vc} \\
-G_{vc} & G_{vz}
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
With:
\begin{align}
G_{vp} &= \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2 \\
G_{vz} &= \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \\
G_{vc} &= 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0}
\end{align}
#+end_important
** Plant Parameters
Let's define initial values for the model.
#+begin_src matlab
k = 1; % Actuator Stiffness [N/m]
c = 0.05; % Actuator Damping [N/(m/s)]
m = 1; % Payload mass [kg]
#+end_src
#+begin_src matlab
xi = c/(2*sqrt(k*m));
w0 = sqrt(k/m); % [rad/s]
#+end_src
#+begin_src matlab :exports none
kp = 0; % [N/m]
cp = 0; % [N/(m/s)]
#+end_src
** Comparison of the Analytical Model and the Simscape Model
The rotating speed is set to $\Omega = 0.1 \omega_0$.
#+begin_src matlab
W = 0.1*w0;
#+end_src
#+begin_src matlab :exports none
Kiff = tf(zeros(2));
Kdvf = tf(zeros(2));
#+end_src
#+begin_src matlab
open('rotating_frame.slx');
#+end_src
And the transfer function from $[F_u, F_v]$ to $[v_u, v_v]$ is identified using the Simscape model.
#+begin_src matlab
%% Name of the Simulink File
mdl = 'rotating_frame';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/G'], 1, 'openoutput'); io_i = io_i + 1;
#+end_src
#+begin_src matlab
Gdvf = linearize(mdl, io, 0);
%% Input/Output definition
Gdvf.InputName = {'Fu', 'Fv'};
Gdvf.OutputName = {'Vu', 'Vv'};
#+end_src
The same transfer function from $[F_u, F_v]$ to $[v_u, v_v]$ is written down from the analytical model.
#+begin_src matlab
Gdvf_th = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))^2 + (2*W*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2), 2*W*s/(w0^2) ; ...
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
Gdvf_th.InputName = {'Fu', 'Fv'};
Gdvf_th.OutputName = {'vu', 'vv'};
#+end_src
The two are compared in Figure [[fig:plant_iff_comp_simscape_analytical]] and found to perfectly match.
#+begin_src matlab :exports none
freqs = logspace(-1, 1, 1000);
figure;
ax1 = subplot(2, 2, 1);
hold on;
plot(freqs, abs(squeeze(freqresp(Gdvf(1,1), freqs))), '-')
plot(freqs, abs(squeeze(freqresp(Gdvf_th(1,1), freqs))), '--')
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'XTickLabel',[]); ylabel('Magnitude [$\frac{m/s}{N}$]');
title('$v_u/F_u$, $v_v/F_v$');
ax3 = subplot(2, 2, 3);
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(Gdvf(1,1), freqs))), '-')
plot(freqs, 180/pi*angle(squeeze(freqresp(Gdvf_th(1,1), freqs))), '--')
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [rad/s]'); ylabel('Phase [deg]');
yticks(-180:90:180);
ylim([-180 180]);
hold off;
ax2 = subplot(2, 2, 2);
hold on;
plot(freqs, abs(squeeze(freqresp(Gdvf(1,2), freqs))), '-')
plot(freqs, abs(squeeze(freqresp(Gdvf_th(1,2), freqs))), '--')
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'XTickLabel',[]); ylabel('Magnitude [$\frac{m/s}{N}$]');
title('$v_u/F_v$, $v_v/F_u$');
ax4 = subplot(2, 2, 4);
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(Gdvf(1,2), freqs))), '-')
plot(freqs, 180/pi*angle(squeeze(freqresp(Gdvf_th(1,2), freqs))), '--')
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [rad/s]'); ylabel('Phase [deg]');
yticks(-180:90:180);
ylim([-180 180]);
hold off;
linkaxes([ax1,ax2,ax3,ax4],'x');
xlim([freqs(1), freqs(end)]);
linkaxes([ax1,ax2],'y');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/plant_dvf_comp_simscape_analytical.pdf', 'width', 'full', 'height', 'full');
#+end_src
#+name: fig:plant_dvf_comp_simscape_analytical
#+caption: Comparison of the transfer functions from $[F_u, F_v]$ to $[v_u, v_v]$ between the Simscape model and the analytical one
#+RESULTS:
[[file:figs/plant_dvf_comp_simscape_analytical.png]]
** Root Locus
The Decentralized Direct Velocity Feedback controller consist of a pure gain on the diagonal:
\begin{equation}
K_{\text{DVF}}(s) = g \begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
\end{equation}
The corresponding Root Locus plots for the following rotating speeds are shown in Figure [[fig:root_locus_dvf]].
#+begin_src matlab
Ws = [0, 0.2, 0.7, 1.1]*w0; % Rotating Speeds [rad/s]
#+end_src
It is shown that for rotating speed $\Omega < \omega_0$, the closed loop system is unconditionally stable and arbitrary damping can be added to the poles.
#+begin_src matlab :exports none
gains = logspace(-2, 1, 100);
figure;
hold on;
for W_i = 1:length(Ws)
W = Ws(W_i);
Gdvf = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))^2 + (2*W*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2), 2*W*s/(w0^2) ; ...
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
set(gca,'ColorOrderIndex',W_i);
plot(real(pole(Gdvf)), imag(pole(Gdvf)), 'x', ...
'DisplayName', sprintf('$\\Omega = %.2f \\omega_0 $', W/w0));
set(gca,'ColorOrderIndex',W_i);
plot(real(tzero(Gdvf)), imag(tzero(Gdvf)), 'o', ...
'HandleVisibility', 'off');
for g = gains
set(gca,'ColorOrderIndex',W_i);
cl_poles = pole(feedback(Gdvf, g*eye(2)));
plot(real(cl_poles), imag(cl_poles), '.', ...
'HandleVisibility', 'off');
end
end
hold off;
axis square;
xlim([-2, 0.5]); ylim([0, 2.5]);
xlabel('Real Part'); ylabel('Imaginary Part');
legend('location', 'northwest');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/root_locus_dvf.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:root_locus_dvf
#+caption: Root Locus for the Decentralized Direct Velocity Feedback controller. Several rotating speed are shown.
#+RESULTS:
[[file:figs/root_locus_dvf.png]]
#+begin_src matlab :exports none :tangle no
gains = logspace(-2, 1, 1000);
figure;
hold on;
for W_i = 1:length(Ws)
W = Ws(W_i);
Gdvf = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))^2 + (2*W*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2), 2*W*s/(w0^2) ; ...
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
set(gca,'ColorOrderIndex',W_i);
plot(real(pole(Gdvf)), imag(pole(Gdvf)), 'x', ...
'DisplayName', sprintf('$\\Omega = %.2f \\omega_0 $', W/w0));
set(gca,'ColorOrderIndex',W_i);
plot(real(tzero(Gdvf)), imag(tzero(Gdvf)), 'o', ...
'HandleVisibility', 'off');
poles_dvf = rootLocusPolesSorted(Gdvf, eye(2), gains, 'd_max', 1e-4);
for p_i = 1:size(poles_dvf, 2)
set(gca,'ColorOrderIndex', W_i);
plot(real(poles_dvf(:, p_i)), imag(poles_dvf(:, p_i)), '-', ...
'HandleVisibility', 'off');
end
end
hold off;
axis square;
xlim([-2, 0.5]); ylim([0, 2.5]);
xlabel('Real Part'); ylabel('Imaginary Part');
legend('location', 'northwest');
#+end_src
#+begin_src matlab :tangle no :exports none :results none
exportFig('figs-inkscape/root_locus_dvf.pdf', 'width', 'wide', 'height', 'tall', 'png', false, 'pdf', false, 'svg', true);
#+end_src
* Comparison
:PROPERTIES:
:header-args:matlab+: :tangle matlab/s6_act_damp_comparison.m
@ -2241,13 +1963,6 @@ IFF With parallel Stiffness
k = k + kp;
#+end_src
DVF
#+begin_src matlab
Gdvf = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))^2 + (2*W*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2), 2*W*s/(w0^2) ; ...
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
#+end_src
#+begin_src matlab :exports none
figure;
@ -2281,20 +1996,6 @@ DVF
plot(real(cl_poles), imag(cl_poles), '.', ...
'HandleVisibility', 'off');
end
set(gca,'ColorOrderIndex',3);
plot(real(pole(Gdvf)), imag(pole(Gdvf)), 'x', ...
'DisplayName', 'DVF');
set(gca,'ColorOrderIndex',3);
plot(real(tzero(Gdvf)), imag(tzero(Gdvf)), 'o', ...
'HandleVisibility', 'off');
for g = gains
Kdvf = g*eye(2);
cl_poles = pole(feedback(Gdvf, Kdvf));
set(gca,'ColorOrderIndex',3);
plot(real(cl_poles), imag(cl_poles), '.', ...
'HandleVisibility', 'off');
end
hold off;
axis square;
xlim([-1.2, 0.05]); ylim([0, 1.25]);
@ -2308,7 +2009,7 @@ DVF
#+end_src
#+name: fig:comp_root_locus
#+caption: Root Locus plot - Comparison of IFF with additional high pass filter, IFF with additional parallel stiffness and DVF
#+caption: Root Locus plot - Comparison of IFF with additional high pass filter, IFF with additional parallel stiffness
#+RESULTS:
[[file:figs/comp_root_locus.png]]
@ -2317,7 +2018,6 @@ DVF
poles_iff_hpf = rootLocusPolesSorted(Giff, 1/(s + wi)*eye(2), gains, 'd_max', 1e-4);
poles_iff_kp = rootLocusPolesSorted(Giff_kp, 1/s*eye(2), gains, 'd_max', 1e-4);
poles_dvf = rootLocusPolesSorted(Gdvf, eye(2), gains, 'd_max', 1e-4);
figure;
@ -2345,18 +2045,6 @@ DVF
plot(real(poles_iff_kp(:, p_i)), imag(poles_iff_kp(:, p_i)), '-', ...
'HandleVisibility', 'off');
end
set(gca,'ColorOrderIndex',3);
plot(real(pole(Gdvf)), imag(pole(Gdvf)), 'x', ...
'DisplayName', 'DVF');
set(gca,'ColorOrderIndex',3);
plot(real(tzero(Gdvf)), imag(tzero(Gdvf)), 'o', ...
'HandleVisibility', 'off');
for p_i = 1:size(poles_dvf, 2)
set(gca,'ColorOrderIndex',3);
plot(real(poles_dvf(:, p_i)), imag(poles_dvf(:, p_i)), '-', ...
'HandleVisibility', 'off');
end
hold off;
axis square;
xlim([-1.2, 0.05]); ylim([0, 1.25]);
@ -2408,28 +2096,10 @@ In order to compare to three considered Active Damping techniques, gains that yi
end
#+end_src
#+begin_src matlab :exports none
%% Direct Velocity Feedback
gains = logspace(0, 2, 100);
opt_zeta_dvf = 0;
opt_gain_dvf = 0;
for g = gains
Kdvf = g*eye(2);
[w, zeta] = damp(minreal(feedback(Gdvf, Kdvf)));
if min(zeta) > opt_zeta_dvf && all(zeta > 0) && min(zeta) < 0.85
opt_zeta_dvf = min(zeta);
opt_gain_dvf = g;
end
end
#+end_src
The obtained damping ratio and control are shown below.
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable([opt_zeta_iff, opt_zeta_kp, opt_zeta_dvf; opt_gain_iff, opt_gain_kp, opt_gain_dvf]', {'Modified IFF', 'IFF with $k_p$', 'DVF'}, {'Obtained $\xi$', 'Control Gain'}, ' %.2f ');
data2orgtable([opt_zeta_iff, opt_zeta_kp; opt_gain_iff, opt_gain_kp]', {'Modified IFF', 'IFF with $k_p$'}, {'Obtained $\xi$', 'Control Gain'}, ' %.2f ');
#+end_src
#+RESULTS:
@ -2437,24 +2107,19 @@ The obtained damping ratio and control are shown below.
|----------------+----------------+--------------|
| Modified IFF | 0.83 | 2.0 |
| IFF with $k_p$ | 0.83 | 2.01 |
| DVF | 0.85 | 1.67 |
** Transmissibility
** Passive Damping - Critical Damping
#+begin_src matlab
c_opt = 2*sqrt(k*m);
#+end_src
** Transmissibility And Compliance
<<sec:comp_transmissibilty>>
#+begin_src matlab
open('rotating_frame.slx');
#+end_src
*** Open Loop :ignore:
#+begin_src matlab :exports none
Kdvf = tf(zeros(2));
Kiff = tf(zeros(2));
kp = 0;
cp = 0;
#+end_src
#+begin_src matlab
%% Name of the Simulink File
mdl = 'rotating_frame';
@ -2462,23 +2127,57 @@ The obtained damping ratio and control are shown below.
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/dw'], 1, 'input'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/fd'], 1, 'input'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Meas'], 1, 'output'); io_i = io_i + 1;
#+end_src
*** Open Loop :ignore:
#+begin_src matlab :exports none
Kiff = tf(zeros(2));
kp = 0;
cp = 0;
#+end_src
#+begin_src matlab
Tol = linearize(mdl, io, 0);
G_ol = linearize(mdl, io, 0);
%% Input/Output definition
Tol.InputName = {'Dwx', 'Dwy'};
Tol.OutputName = {'Dx', 'Dy'};
G_ol.InputName = {'Dwx', 'Dwy', 'Fdx', 'Fdy'};
G_ol.OutputName = {'Dx', 'Dy'};
#+end_src
*** Passive Damping
#+begin_src matlab
kp = 0;
cp = 0;
#+end_src
#+begin_src matlab
c_old = c;
c = c_opt;
#+end_src
#+begin_src matlab :exports none
Kiff = tf(zeros(2));
#+end_src
#+begin_src matlab
G_pas = linearize(mdl, io, 0);
%% Input/Output definition
G_pas.InputName = {'Dwx', 'Dwy', 'Fdx', 'Fdy'};
G_pas.OutputName = {'Dx', 'Dy'};
#+end_src
#+begin_src matlab
c = c_old;
#+end_src
*** Pseudo Integrator IFF :ignore:
#+begin_src matlab :exports none
kp = 0;
cp = 0;
Kdvf = tf(zeros(2));
#+end_src
#+begin_src matlab
@ -2486,11 +2185,11 @@ The obtained damping ratio and control are shown below.
#+end_src
#+begin_src matlab
Tiff = linearize(mdl, io, 0);
G_iff = linearize(mdl, io, 0);
%% Input/Output definition
Tiff.InputName = {'Dwx', 'Dwy'};
Tiff.OutputName = {'Dx', 'Dy'};
G_iff.InputName = {'Dwx', 'Dwy', 'Fdx', 'Fdy'};
G_iff.OutputName = {'Dx', 'Dy'};
#+end_src
*** IFF With parallel Stiffness :ignore:
@ -2503,36 +2202,12 @@ The obtained damping ratio and control are shown below.
Kiff = opt_gain_kp/s*tf(eye(2));
#+end_src
#+begin_src matlab :exports none
Kdvf = tf(zeros(2));
#+end_src
#+begin_src matlab
Tiff_kp = linearize(mdl, io, 0);
G_kp = linearize(mdl, io, 0);
%% Input/Output definition
Tiff_kp.InputName = {'Dwx', 'Dwy'};
Tiff_kp.OutputName = {'Dx', 'Dy'};
#+end_src
*** DVF :ignore:
#+begin_src matlab :exports none
kp = 0;
cp = 0;
Kiff = tf(zeros(2));
#+end_src
#+begin_src matlab
Kdvf = opt_gain_kp*tf(eye(2));
#+end_src
#+begin_src matlab
Tdvf = linearize(mdl, io, 0);
%% Input/Output definition
Tdvf.InputName = {'Dwx', 'Dwy'};
Tdvf.OutputName = {'Dx', 'Dy'};
G_kp.InputName = {'Dwx', 'Dwy', 'Fdx', 'Fdy'};
G_kp.OutputName = {'Dx', 'Dy'};
#+end_src
*** Transmissibility :ignore:
@ -2541,13 +2216,13 @@ The obtained damping ratio and control are shown below.
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(Tiff(1,1), freqs))), ...
plot(freqs, abs(squeeze(freqresp(G_iff({'Dx'}, {'Dwx'}), freqs))), ...
'DisplayName', 'IFF + HPF')
plot(freqs, abs(squeeze(freqresp(Tiff_kp(1,1), freqs))), ...
plot(freqs, abs(squeeze(freqresp(G_kp( {'Dx'}, {'Dwx'}), freqs))), ...
'DisplayName', 'IFF + $k_p$')
plot(freqs, abs(squeeze(freqresp(Tdvf(1,1), freqs))), ...
'DisplayName', 'DVF')
plot(freqs, abs(squeeze(freqresp(Tol(1,1), freqs))), 'k-', ...
plot(freqs, abs(squeeze(freqresp(G_pas({'Dx'}, {'Dwx'}), freqs))), ...
'DisplayName', 'Passive')
plot(freqs, abs(squeeze(freqresp(G_ol( {'Dx'}, {'Dwx'}), freqs))), 'k-', ...
'DisplayName', 'Open-Loop')
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
@ -2568,110 +2243,19 @@ The obtained damping ratio and control are shown below.
exportFig('figs-inkscape/comp_transmissibility.pdf', 'width', 'half', 'height', 'tall', 'png', false, 'pdf', false, 'svg', true);
#+end_src
** Compliance
<<sec:comp_compliance>>
*** Open Loop :ignore:
#+begin_src matlab :exports none
Kdvf = tf(zeros(2));
Kiff = tf(zeros(2));
kp = 0;
cp = 0;
#+end_src
#+begin_src matlab
%% Name of the Simulink File
mdl = 'rotating_frame';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/fd'], 1, 'input'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Meas'], 1, 'output'); io_i = io_i + 1;
#+end_src
#+begin_src matlab
Col = linearize(mdl, io, 0);
%% Input/Output definition
Col.InputName = {'Fdx', 'Fdy'};
Col.OutputName = {'Dx', 'Dy'};
#+end_src
*** Pseudo Integrator IFF :ignore:
#+begin_src matlab :exports none
kp = 0;
cp = 0;
Kdvf = tf(zeros(2));
#+end_src
#+begin_src matlab
Kiff = opt_gain_iff/(wi + s)*tf(eye(2));
#+end_src
#+begin_src matlab
Ciff = linearize(mdl, io, 0);
%% Input/Output definition
Ciff.InputName = {'Fdx', 'Fdy'};
Ciff.OutputName = {'Dx', 'Dy'};
#+end_src
*** IFF With parallel Stiffness :ignore:
#+begin_src matlab
kp = 5*m*W^2;
cp = 0.01;
#+end_src
#+begin_src matlab
Kiff = opt_gain_kp/s*tf(eye(2));
#+end_src
#+begin_src matlab :exports none
Kdvf = tf(zeros(2));
#+end_src
#+begin_src matlab
Ciff_kp = linearize(mdl, io, 0);
%% Input/Output definition
Ciff_kp.InputName = {'Fdx', 'Fdy'};
Ciff_kp.OutputName = {'Dx', 'Dy'};
#+end_src
*** DVF :ignore:
#+begin_src matlab :exports none
kp = 0;
cp = 0;
Kiff = tf(zeros(2));
#+end_src
#+begin_src matlab
Kdvf = opt_gain_kp*tf(eye(2));
#+end_src
#+begin_src matlab
Cdvf = linearize(mdl, io, 0);
%% Input/Output definition
Cdvf.InputName = {'Fdx', 'Fdy'};
Cdvf.OutputName = {'Dx', 'Dy'};
#+end_src
*** Compliance :ignore:
#+begin_src matlab :exports none
freqs = logspace(-2, 1, 1000);
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(Ciff(1,1), freqs))), ...
plot(freqs, abs(squeeze(freqresp(G_iff({'Dx'}, {'Fdx'}), freqs))), ...
'DisplayName', 'IFF + HPF')
plot(freqs, abs(squeeze(freqresp(Ciff_kp(1,1), freqs))), ...
plot(freqs, abs(squeeze(freqresp(G_kp( {'Dx'}, {'Fdx'}), freqs))), ...
'DisplayName', 'IFF + $k_p$')
plot(freqs, abs(squeeze(freqresp(Cdvf(1,1), freqs))), ...
'DisplayName', 'DVF')
plot(freqs, abs(squeeze(freqresp(Col(1,1), freqs))), 'k-', ...
plot(freqs, abs(squeeze(freqresp(G_pas({'Dx'}, {'Fdx'}), freqs))), ...
'DisplayName', 'Passive')
plot(freqs, abs(squeeze(freqresp(G_ol( {'Dx'}, {'Fdx'}), freqs))), 'k-', ...
'DisplayName', 'Open-Loop')
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');

Binary file not shown.

View File

@ -516,70 +516,6 @@ The overall stiffness $k$ stays constant:
| file:figs/root_locus_iff_kps.pdf | file:figs/root_locus_opt_gain_iff_kp.pdf |
| <<fig:root_locus_iff_kps>> Three values of $k_p$ | <<fig:root_locus_opt_gain_iff_kp>> $k_p = 5 m \Omega^2$, optimal damping is shown |
* Direct Velocity Feedback :noexport:
** System Schematic and Control Architecture
# Basic Idea of DVF
# Equation with the control law: pure gain
\begin{equation}
K_V(s) = g
\end{equation}
#+name: fig:system_dvf
#+caption: System with relative velocity sensors and with decentralized controllers $K_V$
#+attr_latex: :scale 1
[[file:figs/system_dvf.pdf]]
# Equivalent System is the same as Figure 1 (as increasing "c")
# Thus very much equivalent as adding passive elements such as dashpot
** Equations
# Write the equations
\begin{equation}
\begin{bmatrix} v_u \\ v_v \end{bmatrix} =
\bm{G}_v
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
\begin{equation}
\begin{bmatrix} v_u \\ v_v \end{bmatrix} =
\frac{1}{k} \frac{1}{G_{vp}}
\begin{bmatrix}
G_{vz} & G_{vc} \\
-G_{vc} & G_{vz}
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
With:
\begin{subequations}
\begin{align}
G_{vp} &= \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2 \\
G_{vz} &= s \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right) \\
G_{vc} &= 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0}
\end{align}
\end{subequations}
# Show that the rotation have somehow less impact on the plant than for IFF
# Eventually add a bode plot to show the effect of the rotation speed
** Relative Direct Velocity Feedback
# Unconditionally stable
# Arbitrary Damping can be added to the poles
#+name: fig:root_locus_dvf
#+caption: Root Locus for Decentralized Direct Velocity Feedback for several rotational speeds $\Omega$
#+attr_latex: :scale 1
[[file:figs/root_locus_dvf.pdf]]
* Comparison of the Proposed Active Damping Techniques for Rotating Positioning Stages
** Physical Comparison

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2020-06-26 ven. 17:28
% Created 2020-06-29 lun. 10:22
% Intended LaTeX compiler: pdflatex
\documentclass{ISMA_USD2020}
\usepackage[utf8]{inputenc}
@ -53,7 +53,7 @@
}
\section{Introduction}
\label{sec:org4effc95}
\label{sec:org8a431d3}
\label{sec:introduction}
Controller Poles are shown by black crosses (
\begin{tikzpicture} \node[cross out, draw=black, minimum size=1ex, line width=2pt, inner sep=0pt, outer sep=0pt] at (0, 0){}; \end{tikzpicture}
@ -64,9 +64,9 @@ This paper has been published
The Matlab code that was use to obtain the results are available in \cite{dehaeze20_activ_dampin_rotat_posit_platf}.
\section{Dynamics of Rotating Positioning Platforms}
\label{sec:org5eef93b}
\label{sec:org6c19606}
\subsection{Model of a Rotating Positioning Platform}
\label{sec:org905e0e5}
\label{sec:orga59b20f}
To study how the rotation of positioning platforms does affect the use of force feedback, a simple model is developed.
It represents an X-Y positioning stage on top of a Rotating Stage and is schematically represented in Figure \ref{fig:system}.
@ -96,7 +96,7 @@ The position of the payload is represented by \((d_u, d_v)\) expressed in the ro
\end{figure}
\subsection{Equations of Motion}
\label{sec:org08efe1c}
\label{sec:orgad9d82d}
To obtain of equation of motion for the system represented in Figure \ref{fig:system}, the Lagrangian equations are used:
\begin{equation}
\label{eq:lagrangian_equations}
@ -129,13 +129,12 @@ The rotation of the XY positioning platform induces two Gyroscopic effects:
\end{itemize}
\subsection{Transfer Functions in the Laplace domain}
\label{sec:org6daa125}
\label{sec:orgb80a7b8}
To study the dynamics of the system, the differential equations of motions \eqref{eq:eom_coupled} are transformed in the Laplace domain and the transfer functions from \([F_u,\ F_v]\) to \([d_u,\ d_v]\) are obtained:
\begin{equation}
\label{eq:Gd_mimo_tf}
\begin{bmatrix} d_u \\ d_v \end{bmatrix} = \bm{G}_d \begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
with \(\bm{G}_d\) a \(2 \times 2\) transfer function matrix
\begin{equation}
\label{eq:Gd_m_k_c}
@ -156,11 +155,11 @@ One can verify that without rotation (\(\Omega = 0\)) the system becomes equival
\end{subequations}
\subsection{Change of Variables / Parameters for the study}
\label{sec:orgda057f2}
\label{sec:org97136f3}
In order to make this study less dependent on the system parameters, the following change of variable is performed:
\begin{itemize}
\item \(\omega_0 = \sqrt{\frac{k}{m}}\): Natural frequency of the mass-spring system in \(\si{\radian/\s}\)
\item \(\omega_0 = \sqrt{\frac{k}{m}}\): Undamped natural frequency of the mass-spring system in \(\si{\radian/\s}\)
\item \(\xi = \frac{c}{2 \sqrt{k m}}\): Damping ratio
\end{itemize}
@ -182,7 +181,7 @@ During the rest of this study, the following parameters are used for numerical a
\end{itemize}
\subsection{System Dynamics and Campbell Diagram}
\label{sec:org9c94a4d}
\label{sec:orgf368845}
The poles of \(\bm{G}_d\) are the complex solutions \(p\) of
\begin{equation}
\left( \frac{p^2}{{\omega_0}^2} + 2 \xi \frac{p}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{p}{\omega_0} \right)^2 = 0
@ -192,19 +191,17 @@ Supposing small damping (\(\xi \ll 1\)), two pairs of complex conjugate poles ar
\begin{subequations}
\label{eq:pole_values}
\begin{align}
p_{+} &= - \xi \omega_0 \left( 1 + \frac{\Omega}{\omega_0} \right) \pm j \left( \omega_0 + \Omega \right) \\
p_{-} &= - \xi \omega_0 \left( 1 - \frac{\Omega}{\omega_0} \right) \pm j \left( \omega_0 - \Omega \right)
p_{+} &= - \xi \omega_0 \left( 1 + \frac{\Omega}{\omega_0} \right) \pm j \omega_0 \left( 1 + \frac{\Omega}{\omega_0} \right) \\
p_{-} &= - \xi \omega_0 \left( 1 - \frac{\Omega}{\omega_0} \right) \pm j \omega_0 \left( 1 - \frac{\Omega}{\omega_0} \right)
\end{align}
\end{subequations}
When the rotation speed in non-null, the resonance frequency is split into two pairs of complex conjugate poles.
The real part and complex part of these two pairs of complex conjugate poles are represented in Figure \ref{fig:campbell_diagram} as a function of the rotational speed \(\Omega\).
As the rotation speed increases, \(p_{+}\) goes to higher frequencies and \(p_{-}\) to lower frequencies.
When the rotational speed \(\Omega\) reaches \(\omega_0\), the real part \(p_{-}\) is positive meaning the system becomes unstable.
The stiffness of the X-Y stage is too low to hold to rotating payload hence the instability.
Stiff positioning platforms should be used if high rotational speeds or heavy payloads are used.
This is graphically represented with the Campbell Diagram in Figure \ref{fig:campbell_diagram}.
When the rotational speed \(\Omega\) reaches \(\omega_0\), the real part \(p_{-}\) becomes positive rendering the system unstable.
Physically, the negative stiffness term induced by centrifugal forces exceeds the spring stiffness.
Thus, stiff positioning platforms should be used when working at high rotational speeds.
\begin{figure}[htbp]
\begin{subfigure}[c]{0.4\linewidth}
@ -221,8 +218,8 @@ This is graphically represented with the Campbell Diagram in Figure \ref{fig:cam
Looking at the transfer function matrix \(\bm{G}_d\) \eqref{eq:Gd_w0_xi_k}, one can see it has two distinct terms that can be studied separately:
\begin{itemize}
\item the direct (diagonal) terms
\item the coupling (off-diagonal) terms
\item the direct (diagonal) terms (Figure \ref{fig:plant_compare_rotating_speed_direct})
\item the coupling (off-diagonal) terms (Figure \ref{fig:plant_compare_rotating_speed_coupling})
\end{itemize}
The bode plot of the direct and coupling terms are shown in Figure \ref{fig:plant_compare_rotating_speed} for several rotational speed \(\Omega\).
@ -244,13 +241,13 @@ When the
\centering
\end{figure}
In the rest of this study, \(\Omega < \omega_0\)
In the rest of this study, rotational speeds smaller than the undamped natural frequency of the system are used (\(\Omega < \omega_0\)).
\section{Decentralized Integral Force Feedback}
\label{sec:org729cd5f}
\subsection{System Schematic and Control Architecture}
\label{sec:org87ee3ad}
Force Sensors are added in series with the actuators as shown in Figure \ref{fig:system_iff}.
\label{sec:orge7b2b3c}
\subsection{Force Sensors and Control Architecture}
\label{sec:org2b4254d}
In order to apply Decentralized Integral Force Feedback to the system, force sensors are added in series of the two actuators (Figure \ref{fig:system_iff}).
\begin{figure}[htbp]
\centering
@ -259,7 +256,7 @@ Force Sensors are added in series with the actuators as shown in Figure \ref{fig
\end{figure}
\subsection{Plant Dynamics}
\label{sec:orge10a341}
\label{sec:org59a4f35}
The forces measured by the force sensors are equal to:
\begin{equation}
\label{eq:measured_force}
@ -315,13 +312,13 @@ It increases with the rotational speed \(\Omega\).
\end{figure}
\subsection{Decentralized Integral Force Feedback}
\label{sec:org1d15108}
\label{sec:orgf040b7e}
\begin{equation}
K_F(s) = g \cdot \frac{1}{s}
\end{equation}
Also, as one zero has a positive real part, the \textbf{IFF control is no more unconditionally stable}.
Also, as one zero has a positive real part, the IFF control is no more unconditionally stable.
This is due to the fact that the zeros of the plant are the poles of the closed loop system with an infinite gain.
Thus, for some finite IFF gain, one pole will have a positive real part and the system will be unstable.
@ -335,20 +332,20 @@ At low frequency, the gain is very large and thus no force is transmitted betwee
This means that at low frequency, the system is decoupled (the force sensor removed) and thus the system is unstable.
\section{Integral Force Feedback with High Pass Filters}
\label{sec:org95ed1b6}
\label{sec:org5533f47}
\subsection{Modification of the Control Low}
\label{sec:orgfadc2c2}
\label{sec:orge3f4cc0}
\begin{equation}
K_{F}(s) = g \cdot \frac{1}{s} \cdot \underbrace{\frac{s/\omega_i}{1 + s/\omega_i}}_{\text{HPF}} = g \cdot \frac{1}{s + \omega_i}
\end{equation}
\subsection{Feedback Analysis}
\label{sec:org6ef2134}
\label{sec:orgd0fed6b}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/loop_gain_modified_iff.pdf}
\caption{\label{fig:loop_gain_modified_iff}Bode Plot of the Loop Gain for IFF with and without the HPF}
\caption{\label{fig:loop_gain_modified_iff}Bode Plot of the Loop Gain for IFF with and without the HPF, \(\Omega = 0.1 \omega_0\)}
\end{figure}
\begin{equation}
@ -358,16 +355,16 @@ This means that at low frequency, the system is decoupled (the force sensor remo
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/root_locus_modified_iff.pdf}
\caption{\label{fig:root_locus_modified_iff}Root Locus for IFF with and without the HPF}
\caption{\label{fig:root_locus_modified_iff}Root Locus for IFF with and without the HPF, \(\Omega = 0.1 \omega_0\)}
\end{figure}
\subsection{Optimal Cut-Off Frequency}
\label{sec:org23e0758}
\label{sec:org4740973}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/root_locus_wi_modified_iff.pdf}
\caption{\label{fig:root_locus_wi_modified_iff}Root Locus for several HPF cut-off frequencies \(\omega_i\)}
\caption{\label{fig:root_locus_wi_modified_iff}Root Locus for several HPF cut-off frequencies \(\omega_i\), \(\Omega = 0.1 \omega_0\)}
\end{figure}
\begin{figure}[htbp]
@ -377,9 +374,9 @@ This means that at low frequency, the system is decoupled (the force sensor remo
\end{figure}
\section{Integral Force Feedback with Parallel Springs}
\label{sec:org6947a77}
\label{sec:org1b53815}
\subsection{Stiffness in Parallel with the Force Sensor}
\label{sec:org9a80ee7}
\label{sec:org3a8c426}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/system_parallel_springs.pdf}
@ -387,7 +384,7 @@ This means that at low frequency, the system is decoupled (the force sensor remo
\end{figure}
\subsection{Plant Dynamics}
\label{sec:org14f5b78}
\label{sec:orgf26a6f4}
We define an adimensional parameter \(\alpha\), \(0 \le \alpha < 1\), that describes the proportion of the stiffness in parallel with the actuator and force sensor:
\begin{subequations}
@ -419,7 +416,7 @@ The overall stiffness \(k\) stays constant:
\end{equation}
\subsection{Effect of the Parallel Stiffness on the Plant Dynamics}
\label{sec:org4b26266}
\label{sec:org6a55282}
\begin{equation}
\begin{aligned}
\alpha > \frac{\Omega^2}{{\omega_0}^2} \\
@ -430,17 +427,17 @@ The overall stiffness \(k\) stays constant:
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/plant_iff_kp.pdf}
\caption{\label{fig:plant_iff_kp}Bode Plot of \(f_u/F_u\) without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\)}
\caption{\label{fig:plant_iff_kp}Bode Plot of \(f_u/F_u\) without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\), \(\Omega = 0.1 \omega_0\)}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/root_locus_iff_kp.pdf}
\caption{\label{fig:root_locus_iff_kp}Root Locus for IFF without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\)}
\caption{\label{fig:root_locus_iff_kp}Root Locus for IFF without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\), \(\Omega = 0.1 \omega_0\)}
\end{figure}
\subsection{Optimal Parallel Stiffness}
\label{sec:orgfd42bdb}
\label{sec:org358dd73}
\begin{figure}[htbp]
\begin{subfigure}[c]{0.49\linewidth}
\includegraphics[width=\linewidth]{figs/root_locus_iff_kps.pdf}
@ -450,30 +447,29 @@ The overall stiffness \(k\) stays constant:
\includegraphics[width=\linewidth]{figs/root_locus_opt_gain_iff_kp.pdf}
\caption{\label{fig:root_locus_opt_gain_iff_kp} \(k_p = 5 m \Omega^2\), optimal damping is shown}
\end{subfigure}
\caption{\label{fig:root_locus_iff_kps_opt}Root Locus for IFF when parallel stiffness is used}
\caption{\label{fig:root_locus_iff_kps_opt}Root Locus for IFF when parallel stiffness is used, \(\Omega = 0.1 \omega_0\)}
\centering
\end{figure}
\section{Comparison of the Proposed Active Damping Techniques for Rotating Positioning Stages}
\label{sec:org67dd4e8}
\label{sec:org3cc6699}
\subsection{Physical Comparison}
\label{sec:orgf742b29}
\label{sec:orgc34b986}
\subsection{Attainable Damping}
\label{sec:orgdb615c3}
\label{sec:org993a1d7}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/comp_root_locus.pdf}
\caption{\label{fig:comp_root_locus}Root Locus for the three proposed decentralized active damping techniques: IFF with HFP, IFF with parallel springs, and relative DVF}
\caption{\label{fig:comp_root_locus}Root Locus for the three proposed decentralized active damping techniques: IFF with HFP, IFF with parallel springs, and relative DVF, \(\Omega = 0.1 \omega_0\)}
\end{figure}
\subsection{Transmissibility and Compliance}
\label{sec:org59532ce}
\label{sec:org0674052}
\begin{figure}[htbp]
@ -485,16 +481,16 @@ The overall stiffness \(k\) stays constant:
\includegraphics[width=\linewidth]{figs/comp_transmissibility.pdf}
\caption{\label{fig:comp_transmissibility} Compliance}
\end{subfigure}
\caption{\label{fig:comp_active_damping}Comparison of the three proposed Active Damping Techniques}
\caption{\label{fig:comp_active_damping}Comparison of the two proposed Active Damping Techniques, \(\Omega = 0.1 \omega_0\)}
\centering
\end{figure}
\section{Conclusion}
\label{sec:orgde4f24d}
\label{sec:orgba18ca5}
\label{sec:conclusion}
\section*{Acknowledgment}
\label{sec:org3284e1c}
\label{sec:org4c68ce2}
\bibliography{ref.bib}
\end{document}