diff --git a/docs/figs/example_impedance_mass_spring_damper.pdf b/docs/figs/example_impedance_mass_spring_damper.pdf new file mode 100644 index 0000000..7fd1c47 Binary files /dev/null and b/docs/figs/example_impedance_mass_spring_damper.pdf differ diff --git a/docs/figs/example_impedance_mass_spring_damper.png b/docs/figs/example_impedance_mass_spring_damper.png new file mode 100644 index 0000000..faad5fc Binary files /dev/null and b/docs/figs/example_impedance_mass_spring_damper.png differ diff --git a/docs/figs/general_payload_impdeance.pdf b/docs/figs/general_payload_impdeance.pdf new file mode 100644 index 0000000..c5b57f6 Binary files /dev/null and b/docs/figs/general_payload_impdeance.pdf differ diff --git a/docs/figs/general_payload_impdeance.png b/docs/figs/general_payload_impdeance.png new file mode 100644 index 0000000..d531424 Binary files /dev/null and b/docs/figs/general_payload_impdeance.png differ diff --git a/docs/figs/general_payload_with_isolator.pdf b/docs/figs/general_payload_with_isolator.pdf new file mode 100644 index 0000000..134e7b1 Binary files /dev/null and b/docs/figs/general_payload_with_isolator.pdf differ diff --git a/docs/figs/general_payload_with_isolator.png b/docs/figs/general_payload_with_isolator.png new file mode 100644 index 0000000..b675f80 Binary files /dev/null and b/docs/figs/general_payload_with_isolator.png differ diff --git a/docs/figs/inverse_multiplicative_payload_uncertainty_c.pdf b/docs/figs/inverse_multiplicative_payload_uncertainty_c.pdf new file mode 100644 index 0000000..93b5215 Binary files /dev/null and b/docs/figs/inverse_multiplicative_payload_uncertainty_c.pdf differ diff --git a/docs/figs/inverse_multiplicative_payload_uncertainty_c.png b/docs/figs/inverse_multiplicative_payload_uncertainty_c.png new file mode 100644 index 0000000..9280935 Binary files /dev/null and b/docs/figs/inverse_multiplicative_payload_uncertainty_c.png differ diff --git a/docs/figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.pdf b/docs/figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.pdf new file mode 100644 index 0000000..ef51895 Binary files /dev/null and b/docs/figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.pdf differ diff --git a/docs/figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.png b/docs/figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.png new file mode 100644 index 0000000..7c66dd2 Binary files /dev/null and b/docs/figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.png differ diff --git a/docs/figs/inverse_multiplicative_payload_uncertainty_m.pdf b/docs/figs/inverse_multiplicative_payload_uncertainty_m.pdf new file mode 100644 index 0000000..f01e5d4 Binary files /dev/null and b/docs/figs/inverse_multiplicative_payload_uncertainty_m.pdf differ diff --git a/docs/figs/inverse_multiplicative_payload_uncertainty_m.png b/docs/figs/inverse_multiplicative_payload_uncertainty_m.png new file mode 100644 index 0000000..b442b88 Binary files /dev/null and b/docs/figs/inverse_multiplicative_payload_uncertainty_m.png differ diff --git a/docs/figs/inverse_multiplicative_payload_uncertainty_norm_k.pdf b/docs/figs/inverse_multiplicative_payload_uncertainty_norm_k.pdf new file mode 100644 index 0000000..d89e500 Binary files /dev/null and b/docs/figs/inverse_multiplicative_payload_uncertainty_norm_k.pdf differ diff --git a/docs/figs/inverse_multiplicative_payload_uncertainty_norm_k.png b/docs/figs/inverse_multiplicative_payload_uncertainty_norm_k.png new file mode 100644 index 0000000..0aa863f Binary files /dev/null and b/docs/figs/inverse_multiplicative_payload_uncertainty_norm_k.png differ diff --git a/docs/figs/inverse_multiplicative_uncertainty_payload_few_k.pdf b/docs/figs/inverse_multiplicative_uncertainty_payload_few_k.pdf new file mode 100644 index 0000000..7a2f069 Binary files /dev/null and b/docs/figs/inverse_multiplicative_uncertainty_payload_few_k.pdf differ diff --git a/docs/figs/inverse_multiplicative_uncertainty_payload_few_k.png b/docs/figs/inverse_multiplicative_uncertainty_payload_few_k.png new file mode 100644 index 0000000..24fd1be Binary files /dev/null and b/docs/figs/inverse_multiplicative_uncertainty_payload_few_k.png differ diff --git a/docs/figs/nominal_payload_compliance_dynamics.pdf b/docs/figs/nominal_payload_compliance_dynamics.pdf new file mode 100644 index 0000000..5ac6f1a Binary files /dev/null and b/docs/figs/nominal_payload_compliance_dynamics.pdf differ diff --git a/docs/figs/nominal_payload_compliance_dynamics.png b/docs/figs/nominal_payload_compliance_dynamics.png new file mode 100644 index 0000000..524280e Binary files /dev/null and b/docs/figs/nominal_payload_compliance_dynamics.png differ diff --git a/docs/figs/payload_impedance_uncertainty.pdf b/docs/figs/payload_impedance_uncertainty.pdf new file mode 100644 index 0000000..79cf62e Binary files /dev/null and b/docs/figs/payload_impedance_uncertainty.pdf differ diff --git a/docs/figs/payload_impedance_uncertainty.png b/docs/figs/payload_impedance_uncertainty.png new file mode 100644 index 0000000..a1cb8e9 Binary files /dev/null and b/docs/figs/payload_impedance_uncertainty.png differ diff --git a/docs/figs/plant_dynamics_uncertainty_payload_variability.pdf b/docs/figs/plant_dynamics_uncertainty_payload_variability.pdf new file mode 100644 index 0000000..c4552c9 Binary files /dev/null and b/docs/figs/plant_dynamics_uncertainty_payload_variability.pdf differ diff --git a/docs/figs/plant_dynamics_uncertainty_payload_variability.png b/docs/figs/plant_dynamics_uncertainty_payload_variability.png new file mode 100644 index 0000000..5325045 Binary files /dev/null and b/docs/figs/plant_dynamics_uncertainty_payload_variability.png differ diff --git a/docs/figs/plant_uncertainty_impedance_payload.pdf b/docs/figs/plant_uncertainty_impedance_payload.pdf new file mode 100644 index 0000000..795701a Binary files /dev/null and b/docs/figs/plant_uncertainty_impedance_payload.pdf differ diff --git a/docs/figs/plant_uncertainty_impedance_payload.png b/docs/figs/plant_uncertainty_impedance_payload.png new file mode 100644 index 0000000..f599c87 Binary files /dev/null and b/docs/figs/plant_uncertainty_impedance_payload.png differ diff --git a/org/uncertainty_payload.org b/org/uncertainty_payload.org new file mode 100644 index 0000000..bbf0da3 --- /dev/null +++ b/org/uncertainty_payload.org @@ -0,0 +1,1026 @@ +#+TITLE: Effect of Uncertainty on the payload's dynamics on the isolation platform dynamics +:DRAWER: +#+STARTUP: overview + +#+LANGUAGE: en +#+EMAIL: dehaeze.thomas@gmail.com +#+AUTHOR: Dehaeze Thomas + +#+HTML_LINK_HOME: ./index.html +#+HTML_LINK_UP: ./index.html + +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+HTML_MATHJAX: align: center tagside: right font: TeX + +#+PROPERTY: header-args:matlab :session *MATLAB* +#+PROPERTY: header-args:matlab+ :comments org +#+PROPERTY: header-args:matlab+ :results none +#+PROPERTY: header-args:matlab+ :exports both +#+PROPERTY: header-args:matlab+ :eval no-export +#+PROPERTY: header-args:matlab+ :output-dir figs +#+PROPERTY: header-args:matlab+ :tangle no +#+PROPERTY: header-args:matlab+ :mkdirp yes + +#+PROPERTY: header-args:shell :eval no-export + +#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}") +#+PROPERTY: header-args:latex+ :imagemagick t :fit yes +#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150 +#+PROPERTY: header-args:latex+ :imoutoptions -quality 100 +#+PROPERTY: header-args:latex+ :results file raw replace +#+PROPERTY: header-args:latex+ :buffer no +#+PROPERTY: header-args:latex+ :eval no-export +#+PROPERTY: header-args:latex+ :exports results +#+PROPERTY: header-args:latex+ :mkdirp yes +#+PROPERTY: header-args:latex+ :output-dir figs +#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png") +:END: + +* Introduction :ignore: +In this document we will consider an *isolation platform* (e.g. the nano-hexapod) with a *payload* on top (e.g. the the sample to be positioned). + +The goal is to study: +- how does the dynamics of the payload influence the dynamics of the isolation platform +- similarly: how does the uncertainty on the payload's dynamics will be transferred to uncertainty on the plant +- what design choice should be made in order to minimize the resulting uncertainty on the plant + +Two models are made to study these effects: +- In section [[sec:introductory_example]], simple mass-spring-damper systems are chosen to model both the isolation platform and the payload +- In section [[sec:arbitrary_dynamics]], we consider arbitrary payload dynamics with multiplicative input uncertainty to study the unmodelled dynamics of the payload + +* Simple Introductory Example +<> + +** Introduction :ignore: +Let's consider the system shown in Figure [[fig:2dof_system_stiffness_uncertainty_payload]] consisting of: +- An *isolation platform* represented by a mass $m$, a stiffness $k$ and a dashpot $c$ and an actuator $F$ +- A *payload* represented by a mass $m^\prime$, a stiffness $k^\prime$ and a dashpot $c^\prime$ + +The goal is to stabilize $x$ using $F$ in spite of uncertainty on the payload mechanical properties. + +#+begin_src latex :file 2dof_system_stiffness_uncertainty_payload.pdf + \begin{tikzpicture} + % ==================== + % Parameters + % ==================== + \def\massw{2.2} % Width of the masses + \def\massh{0.8} % Height of the masses + \def\spaceh{1.2} % Height of the springs/dampers + \def\dispw{0.3} % Width of the dashed line for the displacement + \def\disph{0.5} % Height of the arrow for the displacements + \def\bracs{0.05} % Brace spacing vertically + \def\brach{-10pt} % Brace shift horizontaly + % ==================== + + + % ==================== + % Ground + % ==================== + \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); + \draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0) coordinate(dlow); + % \draw[->] (0.5*\massw+0.5*\dispw, 0) -- ++(0, \disph) node[right]{$x_{w}$}; + + % ==================== + % Micro Station + % ==================== + \begin{scope}[shift={(0, 0)}] + % Mass + \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m$}; + + % Spring, Damper, and Actuator + \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k$}; + \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c$}; + \draw[actuator] ( 0.4*\massw, 0) -- (0.4*\massw, \spaceh) node[midway, left=0.1](F){$F$}; + + % Displacements + \draw[dashed] (0.5*\massw, \spaceh) -- ++(\dispw, 0); + \draw[->] (0.5*\massw+0.5*\dispw, \spaceh) -- ++(0, \disph) node[right]{$x$}; + + % Legend + \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % + (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % + node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Isolation\\Platform}; + \end{scope} + + % ==================== + % Nano Station + % ==================== + \begin{scope}[shift={(0, \spaceh+\massh)}] + % Mass + \draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m^\prime$}; + + % Spring, Damper, and Actuator + \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k^\prime$}; + \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c^\prime$}; + + % Displacements + \draw[dashed] (0.5*\massw, \spaceh) -- ++(\dispw, 0) coordinate(dhigh); + \draw[->] (0.5*\massw+0.5*\dispw, \spaceh) -- ++(0, \disph) node[right]{$x^\prime$}; + + % Legend + \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % + (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % + node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Payload}; + \end{scope} + \end{tikzpicture} +#+end_src + +#+name: fig:2dof_system_stiffness_uncertainty_payload +#+caption: Two degrees-of-freedom system +#+RESULTS: +[[file:figs/2dof_system_stiffness_uncertainty_payload.png]] + +** Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +** Equations of motion +If we write the equation of motion of the system in Figure [[fig:2dof_system_stiffness_uncertainty_payload]], we obtain: +\begin{align} + ms^2 x &= F - (cs + k) x + (c^\prime s + k^\prime) (x^\prime - x) \\ + m^\prime s^2 x^\prime &= - (c^\prime s + k^\prime) (x^\prime - x) +\end{align} + +After eliminating $x^\prime$, we obtain: +#+name: eq:plant_simple_system +\begin{equation} + \frac{x}{F} = \frac{m^\prime s^2 + c^\prime s + k^\prime}{(ms^2 + cs + k)(m^\prime s^2 + c^\prime s + k^\prime) + m^\prime s^2(c^\prime s + k^\prime)} +\end{equation} + +** Initialization of the payload dynamics +Let the payload have: +- a nominal mass of $m^\prime = 50\ [kg]$ +- a nominal stiffness of $k^\prime = 5 \cdot 10^6\ [N/m]$ +- a nominal damping of $c^\prime = 3 \cdot 10^3\ [N/(m/s)]$ + +#+begin_src matlab + mpi = 50; + kpi = 5e6; + cpi = 3e3; + + kpi = (2*pi*50)^2*mpi; + cpi = 0.2*sqrt(kpi*mpi); +#+end_src + +Let's also consider some uncertainty in those parameters: +#+begin_src matlab + mp = ureal('m', mpi, 'Range', [1, 100]); + cp = ureal('c', cpi, 'Percentage', 30); + kp = ureal('k', kpi, 'Percentage', 30); +#+end_src + +The compliance of the payload without the isolation platform is $\frac{1}{m^\prime s^2 + c^\prime s + k^\prime}$ and its bode plot is shown in Figure [[fig:nominal_payload_compliance_dynamics]]. + +One can see that the payload has a resonance frequency of $\omega_0^\prime = 250\ Hz$. + +#+begin_src matlab :exports none + Gps = usample(1/(mp*s^2 + cp*s + kp), 50); + + freqs = logspace(1, 3, 1000); + + figure; + + ax1 = subplot(2,1,1); + hold on; + for i = 1:length(Gps) + plot(freqs, abs(squeeze(freqresp(Gps(:,:,i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + plot(freqs, abs(squeeze(freqresp(1/(mpi*s^2 + cpi*s + kpi), freqs, 'Hz'))), 'k-'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + ylabel('Magnitude [dB]'); + + ax2 = subplot(2,1,2); + hold on; + for i = 1:length(Gps) + plot(freqs, 180/pi*angle(squeeze(freqresp(Gps(:,:,i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + plot(freqs, 180/pi*angle(squeeze(freqresp(1/(mpi*s^2 + cpi*s + kpi), freqs, 'Hz'))), 'k-'); + hold off; + set(gca,'xscale','log'); + yticks(-360:90:180); + ylim([-270 90]); + xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); + + linkaxes([ax1,ax2],'x'); + xlim([freqs(1), freqs(end)]); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/nominal_payload_compliance_dynamics.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:nominal_payload_compliance_dynamics +#+caption: Nominal compliance of the payload ([[./figs/nominal_payload_compliance_dynamics.png][png]], [[./figs/nominal_payload_compliance_dynamics.pdf][pdf]]) +[[file:figs/nominal_payload_compliance_dynamics.png]] +** Initialization of the isolation platform +Let's first fix the mass of the isolation platform: +#+begin_src matlab + m = 10; +#+end_src + +And we generate three isolation platforms: +- A soft one with $\omega_0 = 0.1 \omega_0^\prime = 5\ Hz$ +- A medium stiff one with $\omega_0 = \omega_0^\prime = 50\ Hz$ +- A stiff one with $\omega_0 = 10 \omega_0^\prime = 500\ Hz$ + +#+begin_src matlab :exports none + k_soft = m*(2*pi*5)^2; + c_soft = 0.1*sqrt(m*k_soft); + G_soft = (mp*s^2 + cp*s + kp)/(mp*s^2*(cp*s + kp) + (m*s^2 + c_soft*s + k_soft)*(mp*s^2 + cp*s + kp)); + + k_mid = m*(2*pi*50)^2; + c_mid = 0.1*sqrt(m*k_mid); + G_mid = (mp*s^2 + cp*s + kp)/(mp*s^2*(cp*s + kp) + (m*s^2 + c_mid*s + k_mid)*(mp*s^2 + cp*s + kp)); + + k_stiff = m*(2*pi*500)^2; + c_stiff = 0.1*sqrt(m*k_stiff); + G_stiff = (mp*s^2 + cp*s + kp)/(mp*s^2*(cp*s + kp) + (m*s^2 + c_stiff*s + k_stiff)*(mp*s^2 + cp*s + kp)); +#+end_src + +** Comparison +The obtained dynamics from $F$ to $x$ for the three isolation platform are shown in Figure [[fig:plant_dynamics_uncertainty_payload_variability]]. + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + Gs_soft = usample(G_soft, 10); + Gs_mid = usample(G_mid, 10); + Gs_stiff = usample(G_stiff, 10); + + figure; + + ax1 = subplot(2,3,1); + hold on; + for i = 1:length(Gs_soft) + plot(freqs, abs(squeeze(freqresp(Gs_soft(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + ylabel('Magnitude [m/N]'); + title('$\omega_0 \ll \omega_0^\prime$'); + hold off; + + ax4 = subplot(2,3,4); + hold on; + for i = 1:length(Gs_soft) + plot(freqs, 180/pi*angle(squeeze(freqresp(Gs_soft(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca,'xscale','log'); + yticks(-360:90:180); + ylim([-270 90]); + ylabel('Phase [deg]'); + hold off; + + ax2 = subplot(2,3,2); + hold on; + for i = 1:length(Gs_mid) + plot(freqs, abs(squeeze(freqresp(Gs_mid(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + title('$\omega_0 \approx \omega_0^\prime$'); + hold off; + + ax5 = subplot(2,3,5); + hold on; + for i = 1:length(Gs_mid) + plot(freqs, 180/pi*angle(squeeze(freqresp(Gs_mid(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca,'xscale','log'); + yticks(-360:90:180); + ylim([-270 90]); + xlabel('Frequency [Hz]'); + hold off; + + ax3 = subplot(2,3,3); + hold on; + for i = 1:length(Gs_stiff) + plot(freqs, abs(squeeze(freqresp(Gs_stiff(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + title('$\omega_0 \gg \omega_0^\prime$'); + hold off; + + ax6 = subplot(2,3,6); + hold on; + for i = 1:length(Gs_stiff) + plot(freqs, 180/pi*angle(squeeze(freqresp(Gs_stiff(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca,'xscale','log'); + yticks(-360:90:180); + ylim([-270 90]); + hold off; + + linkaxes([ax1,ax2,ax3,ax4,ax5,ax6],'x'); + xlim([freqs(1), freqs(end)]); + + linkaxes([ax1,ax2,ax3],'y'); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/plant_dynamics_uncertainty_payload_variability.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:plant_dynamics_uncertainty_payload_variability +#+caption: Obtained plant for the three isolation platforms considered ([[./figs/plant_dynamics_uncertainty_payload_variability.png][png]], [[./figs/plant_dynamics_uncertainty_payload_variability.pdf][pdf]]) +[[file:figs/plant_dynamics_uncertainty_payload_variability.png]] + +** Conclusion +#+begin_important + The stiff platform dynamics does not seems to depend on the dynamics of the payload. +#+end_important + +* Generalization to arbitrary dynamics +<> +** Introduction +Let's now consider a general payload described by its *impedance* $G^\prime(s) = \frac{x}{F^\prime}$ as shown in Figure [[fig:general_payload_impdeance]]. + +#+begin_note +Note here that we use the term /impedance/, however, the mechanical impedance is usually defined as the ratio of the velocity over the force $\dot{x}/F^\prime$. We should refer to /resistance/ instead of /impedance/. +#+end_note + +#+begin_src latex :file general_payload_impdeance.pdf + \begin{tikzpicture} + \def\massw{2.2} % Width of the masses + \def\massh{0.8} % Height of the masses + \def\spaceh{1.2} % Height of the springs/dampers + \def\dispw{0.3} % Width of the dashed line for the displacement + \def\disph{0.5} % Height of the arrow for the displacements + \def\bracs{0.05} % Brace spacing vertically + \def\brach{-10pt} % Brace shift horizontaly + + \node[piezo={2.2}{3}{10}] (piezo) at (0, 0){}; + \draw[] ($(piezo.north)+(-1.2, 0)$) -- ++(2.4, 0); + \draw[] ($(piezo.south)+(-1.2, 0)$) -- ++(2.4, 0); + \draw[dashed] (piezo.south east) -- ++(\dispw, 0) coordinate(dhigh); + \draw[->] ($(piezo.south east)+(0.5*\dispw, 0)$) -- ++(0, \disph) node[right]{$x$}; + \draw[->] (piezo.south) node[branch]{} -- ++(0, -1) node[above right]{$F^\prime$}; + + \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % + ($(piezo.south west) + (-10pt, 0)$) -- ($(piezo.north west) + (-10pt, 0)$) % + node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{General Payload}; + \end{tikzpicture} +#+end_src + +#+name: fig:general_support_compliance +#+caption: General support +#+RESULTS: +[[file:figs/general_payload_impdeance.png]] + +Now let's consider the system consisting of a mass-spring-system (the isolation platform) supporting the general payload as shown in Figure [[fig:general_payload_with_isolator]]. +#+begin_src latex :file general_payload_with_isolator.pdf + \begin{tikzpicture} + \def\massw{2.2} % Width of the masses + \def\massh{0.8} % Height of the masses + \def\spaceh{1.2} % Height of the springs/dampers + \def\dispw{0.3} % Width of the dashed line for the displacement + \def\disph{0.5} % Height of the arrow for the displacements + \def\bracs{0.05} % Brace spacing vertically + \def\brach{-10pt} % Brace shift horizontaly + + % Mass + \draw[fill=white] (-0.5*\massw, \spaceh) rectangle node[left=6pt]{$m$} (0.5*\massw, \spaceh+\massh); + + % Spring, Damper, and Actuator + \draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k$}; + \draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c$}; + \draw[actuator] ( 0.4*\massw, 0) -- (0.4*\massw, \spaceh) node[midway, left=0.1](F){$F$}; + + % Ground + \draw (-0.5*\massw, 0) -- (0.5*\massw, 0); + + % Displacements + \draw[dashed] (0.5*\massw, \spaceh+\massh) -- ++(\dispw, 0) coordinate(dhigh); + \draw[->] (0.5*\massw+0.5*\dispw, \spaceh+\massh) -- ++(0, \disph) node[right]{$x$}; + + % Legend + \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % + (-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) % + node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Isolation\\Platform}; + + \begin{scope}[shift={(0, \spaceh+\massh)}] + \node[piezo={2.2}{1.5}{6}, anchor=south] (piezo) at (0, 0){}; + \draw[->] (0,0)node[branch]{} -- ++(0, -0.6)node[above right]{$F^\prime$} + + \draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] % + ($(piezo.south west) + (-10pt, 0)$) -- ($(piezo.north west) + (-10pt, 0)$) % + node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Payload}; + \end{scope} + \end{tikzpicture} +#+end_src + +#+name: fig:general_payload_with_isolator +#+caption: Mass-Spring-Damper (isolation platform) supporting a general payload +#+RESULTS: +[[file:figs/general_payload_with_isolator.png]] + +** Equations of motion +We have to following equations of motion: +\begin{align} + ms^2 x &= F - (cs + k) x - F^\prime \\ + F^\prime &= G^\prime(s) x +\end{align} + +And by eliminating $F^\prime$, we find the plant dynamics $G(s) = \frac{x}{F}$. + +#+begin_important +\begin{equation} + \frac{x}{F} = \frac{1}{ms^2 + cs + k + G^\prime(s)} \label{eq:plant_dynamics_general_payload} +\end{equation} +#+end_important + +We can learn few things about the obtained transfer function: +- the zeros of $x/F$ will be the poles of $G^\prime(s)$. +- if the impedance of the payload is small $|G^\prime(s)| \ll |ms^2 + cs + k|$, then the payload will have small influence on the obtained dynamics + +** Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src +** Impedance $G^\prime(s)$ of a mass-spring-damper payload +In order to verify that the formula is correct, let's take the same mass-spring-damper system used in the system shown in Figure [[fig:2dof_system_stiffness_uncertainty_payload]]: +\begin{align*} + m^\prime s^2 x^\prime &= (x - x^\prime) (c^\prime s + k^\prime) \\ + F^\prime &= (x - x^\prime) (c^\prime s + k^\prime) +\end{align*} + +By eliminating $x^\prime$ of the equations, we obtain: +#+begin_important +\begin{equation} + G^\prime(s) = \frac{F^\prime}{x} = \frac{m^\prime s^2 (c^\prime s + k)}{m^\prime s^2 + c^\prime s + k^\prime} \label{eq:impedance_mass_spring_damper} +\end{equation} + +The impedance of a 1dof mass-spring-damper system is described by Eq. [[eq:impedance_mass_spring_damper]]. +#+end_important + +And we obtain +\begin{align*} + \frac{x}{F} &= \frac{1}{ms^2 + cs + k + G^\prime(s)} \\ + &= \frac{1}{ms^2 + cs + k + \frac{m^\prime s^2 (c^\prime s + k)}{m^\prime s^2 + c^\prime s + k^\prime}} \\ + &= \frac{m^\prime s^2 + c^\prime s + k^\prime}{(ms^2 + cs + k) (m^\prime s^2 + c^\prime s + k^\prime) + m^\prime s^2 (c^\prime s + k)} +\end{align*} + +Which is the same transfer function that was obtained in section [[sec:introductory_example]] (Eq. [[eq:plant_simple_system]]). + +The impedance of the mass-spring-damper system is shown in Figure [[fig:example_impedance_mass_spring_damper]]. +- Before the resonance frequency $\omega_0^\prime$, the impedance follows the mass line +- After the resonance, the impedance will follow the stiffness line (depending on the relative values of the stiffness and damping) +- At high frequency, it will follow the damping line + +#+begin_src matlab :exports none + mp = 50; + kp = 1e7; + cp = 5e3; + + freqs = logspace(1, 3, 1000); + + figure; + hold on; + plot(freqs, abs(squeeze(freqresp(mp*s^2*(cp*s+kp)/(mp*s^2+cp*s+kp), freqs, 'Hz'))), 'k-', 'HandleVisibility', 'off'); + plot(freqs, abs(squeeze(freqresp(mp*s^2, freqs, 'Hz'))), '--', 'DisplayName', 'Mass Line'); + plot(freqs, abs(squeeze(freqresp(cp*s, freqs, 'Hz'))), '--', 'DisplayName', 'Damping Line'); + plot(freqs, abs(squeeze(freqresp(tf(kp), freqs, 'Hz'))), '--', 'DisplayName', 'Stiffness Line'); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Impedance [N/m]'); + hold off; + legend('location', 'southeast'); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/example_impedance_mass_spring_damper.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:example_impedance_mass_spring_damper +#+caption: Example of the impedance of a mass-spring-damper system ([[./figs/example_impedance_mass_spring_damper.png][png]], [[./figs/example_impedance_mass_spring_damper.pdf][pdf]]) +[[file:figs/example_impedance_mass_spring_damper.png]] + +** First Analytical analysis +To summarize, we consider: +- an Isolation platform represented by a mass $m$, a damper $c$ and a stiffness $k$. + This system resonate at $\omega_0 = \sqrt{\frac{k}{m}}$ +- A payload represented by a mass $m^\prime$, a damper $c^\prime$ and a stiffness $k^\prime$. + The payload resonate at $\omega_0^\prime = \sqrt{\frac{k^\prime}{m^\prime}}$ + +The "impedance" of the payload is represented by: +\[ G^\prime(s) = \frac{m^\prime s^2 (c^\prime s + k^\prime)}{m^\prime s^2 + c^\prime s + k^\prime} \] + +And the plant is: +\[ G(s) = \frac{x}{F} = \frac{1}{ms^2 + cs + k + G^\prime(s)} \] + +Let's write the asymptotic behavior of $|G^\prime(j\omega)|$: +- $\lim_{\omega \to 0} |G^\prime(j\omega)| = m^\prime s^2$ +- $|G^\prime(j\omega_0)| = \frac{k^\prime \sqrt{1 + (2\xi^\prime)^2}}{2 \xi^\prime}$ +- $\lim_{\omega \to \infty} |G^\prime(j\omega)| = c^\prime s + k$ + +Let's find some conditions in order to have that the dynamics of the payload does not influence to much the dynamics of the plant: +\[ |G^\prime(s)| \ll |ms^2 + cs + k| \] + +Let's take the case of a *stiff payload* ($\omega_0^\prime \gg \omega_0$). + +Below $\omega_0$, the condition becomes: +\[ |G^\prime(s)| \ll k \Leftrightarrow m^\prime \omega_0^2 \ll k \Leftrightarrow m^\prime \ll m \] +The *payload mass should be small with respect to the isolation platform mass*. + +Above $\omega_0$: +\[ |G^\prime(j\omega)| \ll m \omega^2 \] + +Until $\omega_0^\prime$, we have $m^\prime \ll m$ which is the same condition as before. +Above $\omega_0^\prime$, we obtain $|jc^\prime \omega + k| \ll m \omega^2$. + +#+begin_important +When using a soft isolation platform and a stiff payload such that the payload resonate above the first resonance of the isolation platform, the mass of the payload should be small compared to the isolation platform mass in order to not disturb the dynamics of the isolation platform. +#+end_important + +** Impedance of the Payload and Dynamical Uncertainty +We model the payload by a mass-spring-damper model with some uncertainty. + +Let the payload have: +- a nominal mass of $m^\prime = 50\ [kg]$ +- a nominal stiffness of $k^\prime = 5 \cdot 10^6\ [N/m]$ +- a nominal damping of $c^\prime = 3 \cdot 10^3\ [N/(m/s)]$ + +The main resonance of the payload is then $\omega^\prime = \sqrt{\frac{m^\prime}{k^\prime}} \approx 50\ Hz$. + +#+begin_src matlab + m0 = 10; + c0 = 3e2; + k0 = 5e5; + + Gp0 = (m0*s^2 * (c0*s + k0))/(m0*s^2 + c0*s + k0); +#+end_src + +Let's represent the uncertainty on the impedance of the payload by a multiplicative uncertainty (Figure [[fig:input_uncertainty_set]]): +\[ G^\prime(s) = G_0^\prime(s)(1 + w_I^\prime(s)\Delta_I(s)) \quad |\Delta_I(j\omega)| < 1\ \forall \omega \] + +This could represent *unmodelled dynamics* or unknown parameters of the payload. + +#+name: fig:input_uncertainty_set +#+caption: Input Multiplicative Uncertainty +#+RESULTS: +[[file:figs/input_uncertainty_set.png]] + +We choose a simple uncertainty weight: +\[ w_I(s) = \frac{\tau s + r_0}{(\tau/r_\infty) s + 1} \] +where $r_0$ is the relative uncertainty at steady-state, $1/\tau$ is the frequency at which the relative uncertainty reaches $100\ \%$, and $r_\infty$ is the magnitude of the weight at high frequency. + +The parameters are defined below. +#+begin_src matlab + r0 = 0.5; + tau = 1/(50*2*pi); + rinf = 10; + + wI = (tau*s + r0)/((tau/rinf)*s + 1); +#+end_src + +We then generate a complex $\Delta$. +#+begin_src matlab + DeltaI = ucomplex('A',0); +#+end_src + +We generate the uncertain plant $G^\prime(s)$. +#+begin_src matlab + Gp = Gp0*(1+wI*DeltaI); +#+end_src + +A set of uncertainty payload's impedance transfer functions is shown in Figure [[fig:payload_impedance_uncertainty]]. + +#+begin_src matlab :exports none + Gps = usample(Gp, 50); + + freqs = logspace(-1, 4, 1000); + + figure; + hold on; + plot(freqs, abs(squeeze(freqresp(Gp0, freqs, 'Hz'))), 'k--'); + for i = 1:length(Gps) + plot(freqs, abs(squeeze(freqresp(Gps(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + xlabel('Frequency [Hz]'); + ylabel('Magnitude [dB]'); + hold off; +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/payload_impedance_uncertainty.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:payload_impedance_uncertainty +#+caption: Uncertainty of the payload's impedance ([[./figs/payload_impedance_uncertainty.png][png]], [[./figs/payload_impedance_uncertainty.pdf][pdf]]) +[[file:figs/payload_impedance_uncertainty.png]] + +** Effect of the Isolation platform Stiffness +Let's first fix the mass of the isolation platform: +#+begin_src matlab + m = 20; +#+end_src + +And we generate three isolation platforms: +- A soft one with $\omega_0 = 5\ Hz$ +- A medium stiff one with $\omega_0 = 50\ Hz$ +- A stiff one with $\omega_0 = 500\ Hz$ + +Soft Isolation Platform: +#+begin_src matlab + k_soft = m*(2*pi*5)^2; + c_soft = 0.1*sqrt(m*k_soft); + + G_soft = 1/(m*s^2 + c_soft*s + k_soft + Gp); +#+end_src + +Mid Isolation Platform +#+begin_src matlab + k_mid = m*(2*pi*50)^2; + c_mid = 0.1*sqrt(m*k_mid); + + G_mid = 1/(m*s^2 + c_mid*s + k_mid + Gp); +#+end_src + +Stiff Isolation Platform +#+begin_src matlab + k_stiff = m*(2*pi*500)^2; + c_stiff = 0.1*sqrt(m*k_stiff); + + G_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + Gp); +#+end_src + +The obtained transfer functions $x/F$ for each of the three platforms are shown in Figure [[fig:plant_uncertainty_stiffness_isolator]]. +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + Gs_soft = usample(G_soft, 10); + Gs_mid = usample(G_mid, 10); + Gs_stiff = usample(G_stiff, 10); + + figure; + + ax1 = subplot(2,3,1); + hold on; + for i = 1:length(Gs_soft) + plot(freqs, abs(squeeze(freqresp(Gs_soft(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + ylabel('Magnitude [m/N]'); + hold off; + title('$\omega_0 \ll \omega_0^\prime$'); + + ax4 = subplot(2,3,4); + hold on; + for i = 1:length(Gs_soft) + plot(freqs, 180/pi*angle(squeeze(freqresp(Gs_soft(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca,'xscale','log'); + yticks(-360:90:180); + ylim([-180 180]); + ylabel('Phase [deg]'); + hold off; + + ax2 = subplot(2,3,2); + hold on; + for i = 1:length(Gs_mid) + plot(freqs, abs(squeeze(freqresp(Gs_mid(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + hold off; + title('$\omega_0 \approx \omega_0^\prime$'); + + ax5 = subplot(2,3,5); + hold on; + for i = 1:length(Gs_mid) + plot(freqs, 180/pi*angle(squeeze(freqresp(Gs_mid(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca,'xscale','log'); + yticks(-360:90:180); + ylim([-180 180]); + xlabel('Frequency [Hz]'); + hold off; + + ax3 = subplot(2,3,3); + hold on; + for i = 1:length(Gs_stiff) + plot(freqs, abs(squeeze(freqresp(Gs_stiff(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + hold off; + title('$\omega_0 \gg \omega_0^\prime$'); + + ax6 = subplot(2,3,6); + hold on; + for i = 1:length(Gs_stiff) + plot(freqs, 180/pi*angle(squeeze(freqresp(Gs_stiff(:, :, i), freqs, 'Hz'))), '-', 'color', [0, 0, 0, 0.2]); + end + set(gca,'xscale','log'); + yticks(-360:90:180); + ylim([-180 180]); + hold off; + + linkaxes([ax1,ax2,ax3,ax4,ax5,ax6],'x'); + xlim([freqs(1), freqs(end)]); + + linkaxes([ax1,ax2,ax3],'y'); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/plant_uncertainty_impedance_payload.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:plant_uncertainty_impedance_payload +#+caption: Obtained plant for the three isolators ([[./figs/plant_uncertainty_impedance_payload.png][png]], [[./figs/plant_uncertainty_impedance_payload.pdf][pdf]]) +[[file:figs/plant_uncertainty_impedance_payload.png]] + +** Equivalent Inverse Multiplicative Uncertainty +Let's express the uncertainty of the plant $x/F$ as a function of the parameters as well as of the uncertainty on the platform's compliance: +\begin{align*} + \frac{x}{F} &= \frac{1}{ms^2 + cs + k + G_0^\prime(s)(1 + w_I(s)\Delta(s))}\\ + &= \frac{1}{ms^2 + cs + k + G_0^\prime(s)} \cdot \frac{1}{1 + \frac{G_0^\prime(s) w_I(s)}{ms^2 + cs + k + G_0^\prime(s)} \Delta(s)}\\ +\end{align*} + +#+begin_important +We can the plant dynamics that as an inverse multiplicative uncertainty (Figure [[fig:inverse_uncertainty_set]]): +\begin{equation} + \frac{x}{F} = G_0(s) (1 + w_{iI}(s) \Delta(s))^{-1} +\end{equation} +with: +- $G_0(s) = \frac{1}{ms^2 + cs + k + G_0^\prime(s)}$ +- $w_{iI}(s) = \frac{G_0^\prime(s) w_I(s)}{ms^2 + cs + k + G_0^\prime(s)} = G_0(s) G_0^\prime(s) w_I(s)$ +#+end_important + +#+name: fig:inverse_uncertainty_set +#+caption: Inverse Multiplicative Uncertainty +#+RESULTS: +[[file:figs/inverse_uncertainty_set.png]] + +** Reduce the Uncertainty on the plant +*** Introduction :ignore: +Now that we know the expression of the uncertainty on the plant, we can wonder what parameters of the isolation platform would lower the plant uncertainty, or at least bring the uncertainty to reasonable level. + +The uncertainty of the plant is described by an inverse multiplicative uncertainty with the following weight: +\[ w_{iI}(s) = \frac{G_0^\prime(s) w_I(s)}{ms^2 + cs + k + G_0^\prime(s)} \] + +Let's study separately the effect of the platform's mass, damping and stiffness. + +*** Effect of the platform's stiffness $k$ +Let's fix $\xi = \frac{c}{2\sqrt{km}} = 0.1$, $m = 100\ [kg]$ and see the evolution of $|w_{iI}(j\omega)|$ with $k$. + +This is first shown for few values of the stiffness $k$ in figure [[fig:inverse_multiplicative_uncertainty_payload_few_k]] + +#+begin_src matlab :exports none + m = 20; + freqs = logspace(0, 3, 1000); + + figure; + hold on; + for k = logspace(3,9,7) + c = 0.1*sqrt(m*k); + G0 = 1/(m*s^2 + c*s + k + Gp0); + plot(freqs, abs(squeeze(freqresp(G0*Gp0*wI, freqs, 'Hz'))), 'DisplayName', sprintf('$k = %.0e$', k)) + end + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + xlabel('Frequency [Hz]'); ylabel('Uncertainty'); + hold off; + legend('location', 'southeast'); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/inverse_multiplicative_uncertainty_payload_few_k.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:inverse_multiplicative_uncertainty_payload_few_k +#+caption: Norm of the inverse multiplicative uncertainty weight for various values of the the isolation platform's stiffness ([[./figs/inverse_multiplicative_uncertainty_payload_few_k.png][png]], [[./figs/inverse_multiplicative_uncertainty_payload_few_k.pdf][pdf]]) +[[file:figs/inverse_multiplicative_uncertainty_payload_few_k.png]] + +The norm of the uncertainty weight $|w_iI(j\omega)|$ is displayed as a function of $\omega$ and $k$ in Figure [[fig:inverse_multiplicative_payload_uncertainty_norm_k]]. + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + m = 20; + + Ks = logspace(3, 9, 100); + + wiI_k = zeros(length(freqs), length(Ks)); + + for i = 1:length(Ks) + k = Ks(i); + c = 0.1*sqrt(m*k); + + G0 = 1/(m*s^2 + c*s + k + Gp0); + + wiI_k(:, i) = abs(squeeze(freqresp(G0*Gp0*wI, freqs, 'Hz'))); + end +#+end_src + +#+begin_src matlab :exports none + figure; + surf(freqs, Ks, wiI_k', 'FaceColor', 'interp', 'EdgeColor', 'none') + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'ZScale', 'log'); + xlabel('Frequency [Hz]'); ylabel('Platform Stiffness [N/m]'); zlabel('$|w_{iI}(j\omega)|$'); + xlim([freqs(1), freqs(end)]); ylim([Ks(1), Ks(end)]); + view([0 0 1]); + colorbar('location', 'west'); + set(gca,'ColorScale','log') + caxis([1e-3, 1]); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/inverse_multiplicative_payload_uncertainty_norm_k.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:inverse_multiplicative_payload_uncertainty_norm_k +#+caption: Evolution of the norm of the uncertainty weight $|w_{iI}(j\omega)|$ as a function of the platform's stiffness $k$ ([[./figs/inverse_multiplicative_payload_uncertainty_norm_k.png][png]], [[./figs/inverse_multiplicative_payload_uncertainty_norm_k.pdf][pdf]]) +[[file:figs/inverse_multiplicative_payload_uncertainty_norm_k.png]] + +Instead of plotting as a function of the platform's stiffness, we can plot as a function of $\omega_0/\omega_0^\prime$ where: +- $\omega_0$ is the resonance of the platform alone +- $\omega_0^\prime$ is the resonance of the support alone + +The obtain plot is shown in Figure [[fig:inverse_multiplicative_payload_uncertainty_k_normalized_frequency]]. +In that case, we can see that with a platform's resonance frequency 10 times higher than the resonance of the payload, we get less than $1\%$ uncertainty until some fairly high frequency. + +#+begin_src matlab :exports none + Ws = sqrt(Ks./m); + Wn = Ws./sqrt(k0/m0); % Normalized Frequency + + figure; + contour(freqs, Wn, wiI_k', [0.001, 0.01, 0.1, 1], 'LineWidth', 2, 'ShowText', 'on') + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + xlabel('Frequency [Hz]'); ylabel('Normalized Frequency $\frac{\omega_0}{\omega_0^\prime}$'); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:inverse_multiplicative_payload_uncertainty_k_normalized_frequency +#+caption: Evolution of the norm of the uncertainty weight $|w_{iI}(j\omega)|$ as a function of the frequency ratio $\omega_0/\omega_0^\prime$ ([[./figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.png][png]], [[./figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.pdf][pdf]]) +[[file:figs/inverse_multiplicative_payload_uncertainty_k_normalized_frequency.png]] + +*** Effect of the platform's damping $c$ +Let's fix $k = 10^7\ [N/m]$, $m = 100\ [kg]$ and see the evolution of $|w_{iI}(j\omega)|$ with the isolation platform damping $c$ (Figure [[fig:inverse_multiplicative_payload_uncertainty_c]]). + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + m = 20; + xi = logspace(-2, 1, 100); + + wiI_c_soft = zeros(length(freqs), length(xi)); + wiI_c_mid = zeros(length(freqs), length(xi)); + wiI_c_stiff = zeros(length(freqs), length(xi)); + for i = 1:length(xi) + k = m*(2*pi*5)^2; + c = 2*xi(i)*sqrt(m*k); + G0 = 1/(m*s^2 + c*s + k + Gp0); + wiI_c_soft(:, i) = abs(squeeze(freqresp(G0*Gp0*wI, freqs, 'Hz'))); + + k = m*(2*pi*50)^2; + c = 2*xi(i)*sqrt(m*k); + G0 = 1/(m*s^2 + c*s + k + Gp0); + wiI_c_mid(:, i) = abs(squeeze(freqresp(G0*Gp0*wI, freqs, 'Hz'))); + + k = m*(2*pi*500)^2; + c = 2*xi(i)*sqrt(m*k); + G0 = 1/(m*s^2 + c*s + k + Gp0); + wiI_c_stiff(:, i) = abs(squeeze(freqresp(G0*Gp0*wI, freqs, 'Hz'))); + end +#+end_src + +#+begin_src matlab :exports none + figure; + + ax1 = subplot(1, 3, 1); + surf(freqs, xi, wiI_c_soft', 'FaceColor', 'interp', 'EdgeColor', 'none') + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Damping Ratio'); + title('$\omega_0 \ll \omega_0^\prime$'); + view([0 0 1]); + set(gca,'ColorScale','log') + caxis([1e-3, 1]); + + ax2 = subplot(1, 3, 2); + surf(freqs, xi, wiI_c_mid', 'FaceColor', 'interp', 'EdgeColor', 'none') + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + xlabel('Frequency [Hz]'); + title('$\omega_0 \approx \omega_0^\prime$'); + view([0 0 1]); + set(gca,'ColorScale','log') + caxis([1e-3, 1]); + + ax3 = subplot(1, 3, 3); + surf(freqs, xi, wiI_c_stiff', 'FaceColor', 'interp', 'EdgeColor', 'none') + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + title('$\omega_0 \gg \omega_0^\prime$'); + view([0 0 1]); + set(gca,'ColorScale','log') + colorbar('location', 'west'); + caxis([1e-3 1e0]); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/inverse_multiplicative_payload_uncertainty_c.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:inverse_multiplicative_payload_uncertainty_c +#+caption: Evolution of the norm of the uncertainty weight $|w_{iI}(j\omega)|$ as a function of the platform's damping ratio $\xi$ ([[./figs/inverse_multiplicative_payload_uncertainty_c.png][png]], [[./figs/inverse_multiplicative_payload_uncertainty_c.pdf][pdf]]) +[[file:figs/inverse_multiplicative_payload_uncertainty_c.png]] + +*** Effect of the platform's mass $m$ +Let's fix $k = 10^7\ [N/m]$, $\xi = \frac{c}{2\sqrt{km}} = 0.1$ and see the evolution of $|w_{iI}(j\omega)|$ with the payload mass $m$ (Figure [[fig:inverse_multiplicative_payload_uncertainty_m]]). + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + Ms = logspace(0, 3, 100); + + wiI_m_soft = zeros(length(freqs), length(Ms)); + wiI_m_stiff = zeros(length(freqs), length(Ms)); + + for i = 1:length(Ms) + m = Ms(i); + + k = 5e4; + c = 2*0.1*sqrt(m*k); + G0 = 1/(m*s^2 + c*s + k + Gp0); + wiI_m_soft(:, i) = abs(squeeze(freqresp(G0*Gp0*wI, freqs, 'Hz'))); + + k = 5e7; + c = 2*0.1*sqrt(m*k); + G0 = 1/(m*s^2 + c*s + k + Gp0); + wiI_m_stiff(:, i) = abs(squeeze(freqresp(G0*Gp0*wI, freqs, 'Hz'))); + end +#+end_src + +#+begin_src matlab :exports none + figure; + + ax1 = subplot(1, 2, 1); + surf(freqs, Ms, wiI_m_soft', 'FaceColor', 'interp', 'EdgeColor', 'none') + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Platform Mass [kg]'); + xlabel('Frequency [Hz]'); + title('$\omega_0 \ll \omega_0^\prime$'); + view([0 0 1]); + set(gca,'ColorScale','log') + caxis([1e-3, 1]); + + ax2 = subplot(1, 2, 2); + surf(freqs, Ms, wiI_m_stiff', 'FaceColor', 'interp', 'EdgeColor', 'none') + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + title('$\omega_0 \gg \omega_0^\prime$'); + xlabel('Frequency [Hz]'); + view([0 0 1]); + colorbar('location', 'west'); + set(gca,'ColorScale','log') + caxis([1e-3, 1]); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/inverse_multiplicative_payload_uncertainty_m.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:inverse_multiplicative_payload_uncertainty_m +#+caption: Evolution of the norm of the uncertainty weight $|w_{iI}(j\omega)|$ as a function of the payload mass $m$ ([[./figs/inverse_multiplicative_payload_uncertainty_m.png][png]], [[./figs/inverse_multiplicative_payload_uncertainty_m.pdf][pdf]]) +[[file:figs/inverse_multiplicative_payload_uncertainty_m.png]] + +** Conclusion +#+begin_important +As was expected from Eq. [[eq:plant_dynamics_general_payload]], it is usually a good idea to maximize the mass, damping and stiffness of the isolation platform in order to be less sensible to the payload dynamics. + +The best thing to do is to have a stiff isolation platform. + +If a soft isolation platform is to be used, it is first a good idea to damp the isolation platform as shown in Figure [[fig:inverse_multiplicative_payload_uncertainty_c]]. +This can make the uncertainty quite low until the first resonance of the payload. +In that case, maximizing the stiffness of the payload is a good idea. +#+end_important