diff --git a/docs/figs/opt_stiff_micro_station_compliance.pdf b/docs/figs/opt_stiff_micro_station_compliance.pdf new file mode 100644 index 0000000..bdce311 Binary files /dev/null and b/docs/figs/opt_stiff_micro_station_compliance.pdf differ diff --git a/docs/figs/opt_stiff_micro_station_compliance.png b/docs/figs/opt_stiff_micro_station_compliance.png new file mode 100644 index 0000000..001859f Binary files /dev/null and b/docs/figs/opt_stiff_micro_station_compliance.png differ diff --git a/docs/figs/opt_stiffness_micro_station_dvf.pdf b/docs/figs/opt_stiffness_micro_station_dvf.pdf new file mode 100644 index 0000000..e19575f Binary files /dev/null and b/docs/figs/opt_stiffness_micro_station_dvf.pdf differ diff --git a/docs/figs/opt_stiffness_micro_station_dvf.png b/docs/figs/opt_stiffness_micro_station_dvf.png new file mode 100644 index 0000000..f850600 Binary files /dev/null and b/docs/figs/opt_stiffness_micro_station_dvf.png differ diff --git a/docs/figs/opt_stiffness_micro_station_fx_dx.pdf b/docs/figs/opt_stiffness_micro_station_fx_dx.pdf new file mode 100644 index 0000000..689303a Binary files /dev/null and b/docs/figs/opt_stiffness_micro_station_fx_dx.pdf differ diff --git a/docs/figs/opt_stiffness_micro_station_fx_dx.png b/docs/figs/opt_stiffness_micro_station_fx_dx.png new file mode 100644 index 0000000..2beacab Binary files /dev/null and b/docs/figs/opt_stiffness_micro_station_fx_dx.png differ diff --git a/docs/figs/opt_stiffness_micro_station_fz_dz.pdf b/docs/figs/opt_stiffness_micro_station_fz_dz.pdf new file mode 100644 index 0000000..01857c1 Binary files /dev/null and b/docs/figs/opt_stiffness_micro_station_fz_dz.pdf differ diff --git a/docs/figs/opt_stiffness_micro_station_fz_dz.png b/docs/figs/opt_stiffness_micro_station_fz_dz.png new file mode 100644 index 0000000..f49d279 Binary files /dev/null and b/docs/figs/opt_stiffness_micro_station_fz_dz.png differ diff --git a/docs/figs/opt_stiffness_micro_station_iff.pdf b/docs/figs/opt_stiffness_micro_station_iff.pdf new file mode 100644 index 0000000..44244d9 Binary files /dev/null and b/docs/figs/opt_stiffness_micro_station_iff.pdf differ diff --git a/docs/figs/opt_stiffness_micro_station_iff.png b/docs/figs/opt_stiffness_micro_station_iff.png new file mode 100644 index 0000000..7b6e10a Binary files /dev/null and b/docs/figs/opt_stiffness_micro_station_iff.png differ diff --git a/docs/figs/opt_stiffness_payload_freq_all.pdf b/docs/figs/opt_stiffness_payload_freq_all.pdf new file mode 100644 index 0000000..8ab6e52 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_freq_all.pdf differ diff --git a/docs/figs/opt_stiffness_payload_freq_all.png b/docs/figs/opt_stiffness_payload_freq_all.png new file mode 100644 index 0000000..af52014 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_freq_all.png differ diff --git a/docs/figs/opt_stiffness_payload_freq_fx_dx.pdf b/docs/figs/opt_stiffness_payload_freq_fx_dx.pdf new file mode 100644 index 0000000..eecd642 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_freq_fx_dx.pdf differ diff --git a/docs/figs/opt_stiffness_payload_freq_fx_dx.png b/docs/figs/opt_stiffness_payload_freq_fx_dx.png new file mode 100644 index 0000000..0516a00 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_freq_fx_dx.png differ diff --git a/docs/figs/opt_stiffness_payload_freq_fz_dz.pdf b/docs/figs/opt_stiffness_payload_freq_fz_dz.pdf new file mode 100644 index 0000000..54820b8 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_freq_fz_dz.pdf differ diff --git a/docs/figs/opt_stiffness_payload_freq_fz_dz.png b/docs/figs/opt_stiffness_payload_freq_fz_dz.png new file mode 100644 index 0000000..b83d069 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_freq_fz_dz.png differ diff --git a/docs/figs/opt_stiffness_payload_impedance_fz_dz.pdf b/docs/figs/opt_stiffness_payload_impedance_fz_dz.pdf new file mode 100644 index 0000000..b5a0820 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_impedance_fz_dz.pdf differ diff --git a/docs/figs/opt_stiffness_payload_impedance_fz_dz.png b/docs/figs/opt_stiffness_payload_impedance_fz_dz.png new file mode 100644 index 0000000..64f71dd Binary files /dev/null and b/docs/figs/opt_stiffness_payload_impedance_fz_dz.png differ diff --git a/docs/figs/opt_stiffness_payload_mass_all.pdf b/docs/figs/opt_stiffness_payload_mass_all.pdf new file mode 100644 index 0000000..e144e83 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_mass_all.pdf differ diff --git a/docs/figs/opt_stiffness_payload_mass_all.png b/docs/figs/opt_stiffness_payload_mass_all.png new file mode 100644 index 0000000..f0dbba8 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_mass_all.png differ diff --git a/docs/figs/opt_stiffness_payload_mass_fz_dz.pdf b/docs/figs/opt_stiffness_payload_mass_fz_dz.pdf new file mode 100644 index 0000000..652ef40 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_mass_fz_dz.pdf differ diff --git a/docs/figs/opt_stiffness_payload_mass_fz_dz.png b/docs/figs/opt_stiffness_payload_mass_fz_dz.png new file mode 100644 index 0000000..03777f6 Binary files /dev/null and b/docs/figs/opt_stiffness_payload_mass_fz_dz.png differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.pdf b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.pdf new file mode 100644 index 0000000..ebe06ce Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.pdf differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.png b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.png new file mode 100644 index 0000000..a4aaa5f Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.png differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.pdf b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.pdf new file mode 100644 index 0000000..f95e002 Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.pdf differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.png b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.png new file mode 100644 index 0000000..ab37448 Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.png differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.pdf b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.pdf new file mode 100644 index 0000000..c9cb3d7 Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.pdf differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.png b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.png new file mode 100644 index 0000000..78a8804 Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.png differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.pdf b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.pdf new file mode 100644 index 0000000..d06fe24 Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.pdf differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.png b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.png new file mode 100644 index 0000000..69b3f62 Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.png differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_task_space.gif b/docs/figs/opt_stiffness_plant_dynamics_task_space.gif new file mode 100644 index 0000000..686c12f Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_task_space.gif differ diff --git a/docs/figs/opt_stiffness_plant_dynamics_task_space_colors.gif b/docs/figs/opt_stiffness_plant_dynamics_task_space_colors.gif new file mode 100644 index 0000000..24d96da Binary files /dev/null and b/docs/figs/opt_stiffness_plant_dynamics_task_space_colors.gif differ diff --git a/docs/figs/opt_stiffness_wz_coupling.pdf b/docs/figs/opt_stiffness_wz_coupling.pdf new file mode 100644 index 0000000..9b73ae7 Binary files /dev/null and b/docs/figs/opt_stiffness_wz_coupling.pdf differ diff --git a/docs/figs/opt_stiffness_wz_coupling.png b/docs/figs/opt_stiffness_wz_coupling.png new file mode 100644 index 0000000..5cbd350 Binary files /dev/null and b/docs/figs/opt_stiffness_wz_coupling.png differ diff --git a/docs/figs/opt_stiffness_wz_dvf.pdf b/docs/figs/opt_stiffness_wz_dvf.pdf new file mode 100644 index 0000000..856ea15 Binary files /dev/null and b/docs/figs/opt_stiffness_wz_dvf.pdf differ diff --git a/docs/figs/opt_stiffness_wz_dvf.png b/docs/figs/opt_stiffness_wz_dvf.png new file mode 100644 index 0000000..2f92674 Binary files /dev/null and b/docs/figs/opt_stiffness_wz_dvf.png differ diff --git a/docs/figs/opt_stiffness_wz_fx_dx.pdf b/docs/figs/opt_stiffness_wz_fx_dx.pdf new file mode 100644 index 0000000..05ff1a6 Binary files /dev/null and b/docs/figs/opt_stiffness_wz_fx_dx.pdf differ diff --git a/docs/figs/opt_stiffness_wz_fx_dx.png b/docs/figs/opt_stiffness_wz_fx_dx.png new file mode 100644 index 0000000..a56331f Binary files /dev/null and b/docs/figs/opt_stiffness_wz_fx_dx.png differ diff --git a/docs/figs/opt_stiffness_wz_iff.pdf b/docs/figs/opt_stiffness_wz_iff.pdf new file mode 100644 index 0000000..8e7b3c9 Binary files /dev/null and b/docs/figs/opt_stiffness_wz_iff.pdf differ diff --git a/docs/figs/opt_stiffness_wz_iff.png b/docs/figs/opt_stiffness_wz_iff.png new file mode 100644 index 0000000..aa0f70d Binary files /dev/null and b/docs/figs/opt_stiffness_wz_iff.png differ diff --git a/mat/conf_log.mat b/mat/conf_log.mat index d414598..55d5306 100644 Binary files a/mat/conf_log.mat and b/mat/conf_log.mat differ diff --git a/mat/conf_simscape.mat b/mat/conf_simscape.mat index cf06d4f..89e5ee7 100644 Binary files a/mat/conf_simscape.mat and b/mat/conf_simscape.mat differ diff --git a/mat/controller.mat b/mat/controller.mat index dc55887..d4d745e 100644 Binary files a/mat/controller.mat and b/mat/controller.mat differ diff --git a/mat/nass_disturbances.mat b/mat/nass_disturbances.mat index 559bb75..cb32942 100644 Binary files a/mat/nass_disturbances.mat and b/mat/nass_disturbances.mat differ diff --git a/mat/nass_references.mat b/mat/nass_references.mat index 283dd6b..aef6423 100644 Binary files a/mat/nass_references.mat and b/mat/nass_references.mat differ diff --git a/mat/optimal_stiffness_micro_station_compliance.mat b/mat/optimal_stiffness_micro_station_compliance.mat index 53ed532..5cf7707 100644 Binary files a/mat/optimal_stiffness_micro_station_compliance.mat and b/mat/optimal_stiffness_micro_station_compliance.mat differ diff --git a/mat/stages.mat b/mat/stages.mat index dbe5f4b..044adc8 100644 Binary files a/mat/stages.mat and b/mat/stages.mat differ diff --git a/matlab/nass_model.slx b/matlab/nass_model.slx index 6a4a6af..742cb7e 100644 Binary files a/matlab/nass_model.slx and b/matlab/nass_model.slx differ diff --git a/org/optimal_stiffness.org b/org/optimal_stiffness.org index f9ca328..0f5d64f 100644 --- a/org/optimal_stiffness.org +++ b/org/optimal_stiffness.org @@ -57,7 +57,9 @@ The overall goal is to design a nano-hexapod that will allow the highest possibl <> ** Introduction :ignore: +In this section, we look at the effect of the spindle rotation speed on the plant dynamics. +The rotation speed will have an effect due to the Coriolis effect. ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -90,12 +92,13 @@ We initialize all the stages with the default parameters. initializeMirror(); #+end_src -The worst case scenario is a rotation speed of 60rpm with a payload mass of 10Kg. +We use a sample mass of 10kg. #+begin_src matlab initializeSample('mass', 10); #+end_src -We don't include gravity nor disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. +We don't include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. +We however include gravity. #+begin_src matlab initializeSimscapeConfiguration('gravity', true); initializeDisturbances('enable', false); @@ -116,10 +119,12 @@ We don't include gravity nor disturbances in this model as it adds complexity to #+end_src ** Identification when rotating at maximum speed +We identify the dynamics for the following spindle rotation speeds =Rz_rpm=: #+begin_src matlab Rz_rpm = linspace(0, 60, 6); #+end_src +And for the following nano-hexapod actuator stiffness =Ks=: #+begin_src matlab Ks = logspace(3,9,7); % [N/m] #+end_src @@ -165,7 +170,12 @@ We don't include gravity nor disturbances in this model as it adds complexity to load('mat/optimal_stiffness_Gk_wz.mat'); #+end_src -Change of dynamics for IFF +We plot the change of dynamics due to the change of the spindle rotation speed (from 0rpm to 60rpm): +- Figure [[fig:opt_stiffness_wz_iff]]: from actuator force $\tau$ to force sensor $\tau_m$ (IFF plant) +- Figure [[fig:opt_stiffness_wz_dvf]]: from actuator force $\tau$ to actuator relative displacement $d\mathcal{L}$ (Decentralized positioning plant) +- Figure [[fig:opt_stiffness_wz_fx_dx]]: from force in the task space $\mathcal{F}_x$ to sample displacement $\mathcal{X}_x$ (Centralized positioning plant) +- Figure [[fig:opt_stiffness_wz_coupling]]: from force in the task space $\mathcal{F}_x$ to sample displacement $\mathcal{X}_y$ (coupling of the centralized positioning plant) + #+begin_src matlab :exports none freqs = logspace(-2, 3, 1000); @@ -206,7 +216,15 @@ Change of dynamics for IFF xlim([freqs(1), freqs(end)]); #+end_src -Change of dynamics for DVF +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_wz_iff.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_wz_iff +#+caption: Change of dynamics from actuator $\tau$ to actuator force sensor $\tau_m$ for a spindle rotation speed from 0rpm to 60rpm ([[./figs/opt_stiffness_wz_iff.png][png]], [[./figs/opt_stiffness_wz_iff.pdf][pdf]]) +[[file:figs/opt_stiffness_wz_iff.png]] + #+begin_src matlab :exports none freqs = logspace(-2, 3, 1000); @@ -247,9 +265,17 @@ Change of dynamics for DVF xlim([freqs(1), freqs(end)]); #+end_src -Change of dynamics from $F_x$ to $D_x$. +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_wz_dvf.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_wz_dvf +#+caption: Change of dynamics from actuator force $\tau$ to actuator displacement $d\mathcal{L}$ for a spindle rotation speed from 0rpm to 60rpm ([[./figs/opt_stiffness_wz_dvf.png][png]], [[./figs/opt_stiffness_wz_dvf.pdf][pdf]]) +[[file:figs/opt_stiffness_wz_dvf.png]] + #+begin_src matlab :exports none - freqs = logspace(-1, 3, 1000); + freqs = logspace(-2, 3, 1000); figure; @@ -288,7 +314,15 @@ Change of dynamics from $F_x$ to $D_x$. xlim([freqs(1), freqs(end)]); #+end_src -Change of coupling from $F_x$ to $D_y$ with the rotating speed. +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_wz_fx_dx.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_wz_fx_dx +#+caption: Change of dynamics from force $\mathcal{F}_x$ to displacement $\mathcal{X}_x$ for a spindle rotation speed from 0rpm to 60rpm ([[./figs/opt_stiffness_wz_fx_dx.png][png]], [[./figs/opt_stiffness_wz_fx_dx.pdf][pdf]]) +[[file:figs/opt_stiffness_wz_fx_dx.png]] + #+begin_src matlab :exports none freqs = logspace(-1, 3, 1000); @@ -309,9 +343,18 @@ Change of coupling from $F_x$ to $D_y$ with the rotating speed. set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]'); xlim([freqs(1), freqs(end)]); - legend('location', 'northeast'); + legend('location', 'southeast'); #+end_src +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_wz_coupling.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_wz_coupling +#+caption: Change of Coupling from force $\mathcal{F}_x$ to displacement $\mathcal{X}_y$ for a spindle rotation speed from 0rpm to 60rpm ([[./figs/opt_stiffness_wz_coupling.png][png]], [[./figs/opt_stiffness_wz_coupling.pdf][pdf]]) +[[file:figs/opt_stiffness_wz_coupling.png]] + ** Conclusion :ignore: #+begin_important The leg stiffness should be at higher than $k_i = 10^4\ [N/m]$ such that the main resonance frequency does not shift too much when rotating. @@ -375,7 +418,7 @@ We put nothing on top of the micro-hexapod. #+end_src And we identify the dynamics from forces/torques applied on the micro-hexapod top platform to the motion of the micro-hexapod top platform at the same point. -#+begin_src matlab :exports noone +#+begin_src matlab :exports none %% Name of the Simulink File mdl = 'nass_model'; @@ -385,11 +428,13 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Compliance/Dm'], 1, 'output'); io_i = io_i + 1; % Absolute displacement of the top platform %% Run the linearization - Gm = linearize(mdl, io, 0); + Gm = linearize(mdl, io); Gm.InputName = {'Fmx', 'Fmy', 'Fmz', 'Mmx', 'Mmy', 'Mmz'}; Gm.OutputName = {'Dx', 'Dy', 'Dz', 'Drx', 'Dry', 'Drz'}; #+end_src +The diagonal element of the identified Micro-Station compliance matrix are shown in Figure [[fig:opt_stiff_micro_station_compliance]]. + #+begin_src matlab :exports none labels = {'$D_x/F_{x}$', '$D_y/F_{y}$', '$D_z/F_{z}$', '$R_{x}/M_{x}$', '$R_{y}/M_{y}$', '$R_{R}/M_{z}$'}; @@ -398,9 +443,8 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to figure; hold on; - plot(freqs, abs(squeeze(freqresp(Gm(1, 1), freqs, 'Hz'))), 'k-', 'DisplayName', labels{1}); - for i = 2:6 - plot(freqs, abs(squeeze(freqresp(Gm(1, i), freqs, 'Hz'))), 'DisplayName', labels{i}); + for i = 1:6 + plot(freqs, abs(squeeze(freqresp(Gm(i, i), freqs, 'Hz'))), 'DisplayName', labels{i}); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); @@ -410,7 +454,7 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to #+end_src #+header: :tangle no :exports results :results none :noweb yes -#+begin_src matlab :var filepath="figs/opt_stiff_micro_station_compliance.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +#+begin_src matlab :var filepath="figs/opt_stiff_micro_station_compliance.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png") <> #+end_src @@ -419,6 +463,25 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to [[file:figs/opt_stiff_micro_station_compliance.png]] ** Identification of the dynamics with a rigid micro-station +We now identify the dynamics when the micro-station is rigid. +This is equivalent of identifying the dynamics of the nano-hexapod when fixed to a rigid ground. +#+begin_src matlab :exports none + initializeGround('type', 'rigid'); + initializeGranite('type', 'rigid'); + initializeTy('type', 'rigid'); + initializeRy('type', 'rigid'); + initializeRz('type', 'rigid'); + initializeMicroHexapod('type', 'rigid'); + + initializeAxisc('type', 'rigid'); + initializeMirror('type', 'rigid'); +#+end_src + +We also choose the sample to be rigid and to have a mass of 10kg. +#+begin_src matlab + initializeSample('type', 'rigid', 'mass', 10); +#+end_src + #+begin_src matlab :exports none initializeReferences(); initializeDisturbances(); @@ -440,26 +503,11 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'En'); io_i = io_i + 1; #+end_src +As before, we identify the dynamics for the following actuator stiffnesses: #+begin_src matlab Ks = logspace(3,9,7); % [N/m] #+end_src -#+begin_src matlab - initializeSample('type', 'rigid', 'mass', 10); -#+end_src - -#+begin_src matlab - initializeGround('type', 'rigid'); - initializeGranite('type', 'rigid'); - initializeTy('type', 'rigid'); - initializeRy('type', 'rigid'); - initializeRz('type', 'rigid'); - initializeMicroHexapod('type', 'rigid'); - - initializeAxisc('type', 'rigid'); - initializeMirror('type', 'rigid'); -#+end_src - #+begin_src matlab :exports none Gmr_iff = {zeros(length(Ks))}; Gmr_dvf = {zeros(length(Ks))}; @@ -487,7 +535,9 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to #+end_src ** Identification of the dynamics with a flexible micro-station -#+begin_src matlab +We now initialize all the micro-station stages to be flexible. +And we identify the dynamics of the nano-hexapod. +#+begin_src matlab :exports none initializeGround(); initializeGranite(); initializeTy(); @@ -536,7 +586,13 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to load('mat/optimal_stiffness_micro_station_compliance.mat'); #+end_src -The IFF plant only changes when the stiffness is $10^7 [N/m]$ or higher. +We plot the change of dynamics due to the compliance of the Micro-Station. +The solid curves are corresponding to the nano-hexapod without the micro-station, and the dashed curves with the micro-station: +- Figure [[fig:opt_stiffness_micro_station_iff]]: from actuator force $\tau$ to force sensor $\tau_m$ (IFF plant) +- Figure [[fig:opt_stiffness_micro_station_dvf]]: from actuator force $\tau$ to actuator relative displacement $d\mathcal{L}$ (Decentralized positioning plant) +- Figure [[fig:opt_stiffness_micro_station_fx_dx]]: from force in the task space $\mathcal{F}_x$ to sample displacement $\mathcal{X}_x$ (Centralized positioning plant) +- Figure [[fig:opt_stiffness_micro_station_fz_dz]]: from force in the task space $\mathcal{F}_z$ to sample displacement $\mathcal{X}_z$ (Centralized positioning plant) + #+begin_src matlab :exports none freqs = logspace(-1, 3, 1000); @@ -569,13 +625,21 @@ The IFF plant only changes when the stiffness is $10^7 [N/m]$ or higher. ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-270, 90]); yticks([-360:90:360]); - legend('location', 'northwest'); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); #+end_src -DVF plant +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_micro_station_iff.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_micro_station_iff +#+caption: Change of dynamics from actuator $\tau$ to actuator force sensor $\tau_m$ for a spindle rotation speed from 0rpm to 60rpm ([[./figs/opt_stiffness_micro_station_iff.png][png]], [[./figs/opt_stiffness_micro_station_iff.pdf][pdf]]) +[[file:figs/opt_stiffness_micro_station_iff.png]] + #+begin_src matlab :exports none freqs = logspace(-1, 3, 1000); @@ -597,21 +661,32 @@ DVF plant hold on; for i = 1:length(Ks) set(gca,'ColorOrderIndex',i); - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_dvf{i}('Dnlm1', 'Fnl1'), freqs, 'Hz')))), '-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_dvf{i}('Dnlm1', 'Fnl1'), freqs, 'Hz')))), '-', ... + 'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i))); set(gca,'ColorOrderIndex',i); - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_dvf{i}('Dnlm1', 'Fnl1'), freqs, 'Hz')))), '--'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_dvf{i}('Dnlm1', 'Fnl1'), freqs, 'Hz')))), '--', ... + 'HandleVisibility', 'off'); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-270, 90]); yticks([-360:90:360]); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); #+end_src -X direction +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_micro_station_dvf.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_micro_station_dvf +#+caption: Change of dynamics from actuator force $\tau$ to actuator displacement $d\mathcal{L}$ for a spindle rotation speed from 0rpm to 60rpm ([[./figs/opt_stiffness_micro_station_dvf.png][png]], [[./figs/opt_stiffness_micro_station_dvf.pdf][pdf]]) +[[file:figs/opt_stiffness_micro_station_dvf.png]] + #+begin_src matlab :exports none freqs = logspace(-1, 3, 1000); @@ -633,21 +708,32 @@ X direction hold on; for i = 1:length(Ks) set(gca,'ColorOrderIndex',i); - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-', ... + 'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i))); set(gca,'ColorOrderIndex',i); - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '--'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '--', ... + 'HandleVisibility', 'off'); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-270, 90]); yticks([-360:90:360]); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); #+end_src -Z direction +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_micro_station_fx_dx.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_micro_station_fx_dx +#+caption: Change of dynamics from force $\mathcal{F}_x$ to displacement $\mathcal{X}_x$ for a spindle rotation speed from 0rpm to 60rpm ([[./figs/opt_stiffness_micro_station_fx_dx.png][png]], [[./figs/opt_stiffness_micro_station_fx_dx.pdf][pdf]]) +[[file:figs/opt_stiffness_micro_station_fx_dx.png]] + #+begin_src matlab :exports none freqs = logspace(-1, 3, 1000); @@ -669,21 +755,38 @@ Z direction hold on; for i = 1:length(Ks) set(gca,'ColorOrderIndex',i); - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ez', 'Fz'), freqs, 'Hz')))), '-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ez', 'Fz'), freqs, 'Hz')))), '-', ... + 'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i))); set(gca,'ColorOrderIndex',i); - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ez', 'Fz'), freqs, 'Hz')))), '--'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ez', 'Fz'), freqs, 'Hz')))), '--', ... + 'HandleVisibility', 'off'); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-270, 90]); yticks([-360:90:360]); + legend('location', 'southwest'); 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/opt_stiffness_micro_station_fz_dz.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_micro_station_fz_dz +#+caption: Change of dynamics from force $\mathcal{F}_z$ to displacement $\mathcal{X}_z$ for a spindle rotation speed from 0rpm to 60rpm ([[./figs/opt_stiffness_micro_station_fz_dz.png][png]], [[./figs/opt_stiffness_micro_station_fz_dz.pdf][pdf]]) +[[file:figs/opt_stiffness_micro_station_fz_dz.png]] + ** Conclusion :ignore: +#+begin_important + The dynamics of the nano-hexapod is not affected by the micro-station dynamics (compliance) when the stiffness of the legs is less than $10^6\ [N/m]$. + When the nano-hexapod is stiff ($k>10^7\ [N/m]$), the compliance of the micro-station appears in the primary plant. +#+end_important + * Payload "Impedance" Effect <> @@ -709,7 +812,7 @@ Z direction ** Initialization We initialize all the stages with the default parameters. -#+begin_src matlab +#+begin_src matlab :exports none initializeGround(); initializeGranite(); initializeTy(); @@ -720,14 +823,14 @@ We initialize all the stages with the default parameters. initializeMirror(); #+end_src -We don't include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. +We don't include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. :exports none #+begin_src matlab - initializeSimscapeConfiguration('gravity', true); initializeDisturbances('enable', false); #+end_src We set the controller type to Open-Loop, and we do not need to log any signal. #+begin_src matlab + initializeSimscapeConfiguration('gravity', true); initializeController(); initializeLoggingConfiguration('log', 'none'); initializeReferences(); @@ -746,6 +849,7 @@ We set the controller type to Open-Loop, and we do not need to log any signal. #+end_src ** Identification of the dynamics while change the payload dynamics +We make the following change of payload dynamics: - Change of mass: from 1kg to 50kg - Change of resonance frequency: from 50Hz to 500Hz - The damping ratio of the payload is fixed to $\xi = 0.2$ @@ -800,7 +904,7 @@ We then identify the dynamics for the following payload resonance frequencies =F for i = 1:length(Ks) for j = 1:length(Fs) initializeNanoHexapod('k', Ks(i)); - initializeSample('mass', 20, 'freq', Fs(j)*ones(6,1)); + initializeSample('mass', 10, 'freq', Fs(j)*ones(6,1)); G = linearize(mdl, io); G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; @@ -825,11 +929,11 @@ We then identify the dynamics for the following payload resonance frequencies =F 'Gf_iff', 'Gf_dvf', 'Gf_err'); #+end_src -** TODO Change of optimal gain for decentralized control +** TODO Change of optimal gain for decentralized control :noexport: For each payload, compute the optimal gain for the IFF control. The optimal value corresponds to critical damping to *all* the 6 modes of the nano-hexapod. -#+begin_src matlab +#+begin_src matlab :exports none load('mat/optimal_stiffness_Gm_Gf.mat'); #+end_src @@ -1023,16 +1127,91 @@ Change of payload resonance frequency #+end_src ** Change of dynamics for the primary controller -For each stiffness, plot the total spread of dynamics. - -#+begin_src matlab +#+begin_src matlab :exports none load('mat/optimal_stiffness_Gm_Gf.mat'); #+end_src *** Frequency variation -Same payload mass, but different stiffness resulting in different resonance frequency. +We here compare the dynamics for the same payload mass, but different stiffness resulting in different resonance frequency of the payload: +- Figure [[fig:opt_stiffness_payload_freq_fz_dz]]: dynamics from a force $\mathcal{F}_z$ applied in the task space in the vertical direction to the vertical displacement of the sample $\mathcal{X}_z$ for both a very soft and a very stiff nano-hexapod. +- Figure [[fig:opt_stiffness_payload_freq_all]]: same, but for all tested nano-hexapod stiffnesses + +We can see two mass lines for the soft nano-hexapod (Figure [[fig:opt_stiffness_payload_freq_fz_dz]]): +- The first mass line corresponds to $\frac{1}{(m_n + m_p)s^2}$ where $m_p = 10\ [kg]$ is the mass of the payload and $m_n = 15\ [Kg]$ is the mass of the nano-hexapod top platform and attached mirror +- The second mass line corresponds to $\frac{1}{m_n s^2}$ +- The zero corresponds to the resonance of the payload alone (fixed nano-hexapod's top platform) + +#+begin_src matlab :exports none + i = 1; + + freqs = logspace(-1, 3, 1000); + + figure; + + ax1 = subplot(2, 2, 1); + hold on; + for j = 1:length(Fs) + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); + end + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) + + ax2 = subplot(2, 2, 3); + hold on; + for j = 1:length(Fs) + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz')))), '-', ... + 'DisplayName', sprintf('$\\omega_0 = %.0f$ [Hz]', Fs(j))); + end + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); + ylim([-270, 90]); + yticks([-360:90:360]); + legend('location', 'southwest'); + + linkaxes([ax1,ax2],'x'); + xlim([freqs(1), freqs(end)]); + + i = 7; + + ax1 = subplot(2, 2, 2); + hold on; + for j = 1:length(Fs) + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); + end + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) + + ax2 = subplot(2, 2, 4); + hold on; + for j = 1:length(Fs) + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz')))), '-', ... + 'DisplayName', sprintf('$\\omega_0 = %.0f$ [Hz]', Fs(j))); + end + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); + ylim([-270, 90]); + yticks([-360:90:360]); + legend('location', 'southwest'); + + 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/opt_stiffness_payload_freq_fz_dz.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_payload_freq_fz_dz +#+caption: Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload resonance frequency, both for a soft nano-hexapod and a stiff nano-hexapod ([[./figs/opt_stiffness_payload_freq_fz_dz.png][png]], [[./figs/opt_stiffness_payload_freq_fz_dz.pdf][pdf]]) +[[file:figs/opt_stiffness_payload_freq_fz_dz.png]] -All curves #+begin_src matlab :exports none freqs = logspace(-1, 3, 1000); @@ -1043,7 +1222,7 @@ All curves for i = 1:length(Ks) for j = 1:length(Fs) set(gca,'ColorOrderIndex',i); - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-'); + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); end end hold off; @@ -1056,10 +1235,10 @@ All curves for j = 1:length(Fs) set(gca,'ColorOrderIndex',i); if j == 1 - plot(freqs, 180/pi*angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... - 'DisplayName', sprintf('$K = %.0e$ [N/m]', Ks(i))); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz')))), '-', ... + 'DisplayName', sprintf('$K = %.0e$ [N/m]', Ks(i))); else - plot(freqs, 180/pi*angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz')))), '-', ... 'HandleVisibility', 'off'); end end @@ -1067,189 +1246,103 @@ All curves hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northeast'); + ylim([-270, 90]); + yticks([-360:90:360]); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); #+end_src -X direction -#+begin_src matlab :exports none - i = 1; - - freqs = logspace(-1, 3, 1000); - - figure; - - ax1 = subplot(2, 2, 1); - hold on; - for j = 1:length(Fs) - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-'); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); - title(sprintf('$k = %.0e$ [N/m]', Ks(i))) - - ax2 = subplot(2, 2, 3); - hold on; - for j = 1:length(Fs) - plot(freqs, 180/pi*angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... - 'DisplayName', sprintf('$\\omega_0 = %.0f$ [Hz]', Fs(j))); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northeast'); - - linkaxes([ax1,ax2],'x'); - xlim([freqs(1), freqs(end)]); - - i = 7; - - ax1 = subplot(2, 2, 2); - hold on; - for j = 1:length(Fs) - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-'); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); - title(sprintf('$k = %.0e$ [N/m]', Ks(i))) - - ax2 = subplot(2, 2, 4); - hold on; - for j = 1:length(Fs) - plot(freqs, 180/pi*angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... - 'DisplayName', sprintf('$\\omega_0 = %.0f$ [Hz]', Fs(j))); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northeast'); - - linkaxes([ax1,ax2],'x'); - xlim([freqs(1), freqs(end)]); +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_payload_freq_all.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> #+end_src -Z direction: -We can see two mass lines for the soft nano-hexapod: -- The first mass line corresponds to $\frac{1}{(m_n + m_p)s^2}$ where $m_p = 20\ [kg]$ is the mass of the payload and $m_n = 15\ [Kg]$ is the mass of the nano-hexapod top platform and attached mirror -- The second mass line corresponds to $\frac{1}{m_n s^2}$ - -#+begin_src matlab :exports none - i = 1; - - freqs = logspace(-1, 3, 1000); - - figure; - - ax1 = subplot(2, 2, 1); - hold on; - for j = 1:length(Fs) - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); - title(sprintf('$k = %.0e$ [N/m]', Ks(i))) - - ax2 = subplot(2, 2, 3); - hold on; - for j = 1:length(Fs) - plot(freqs, 180/pi*angle(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-', ... - 'DisplayName', sprintf('$\\omega_0 = %.0f$ [Hz]', Fs(j))); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northeast'); - - linkaxes([ax1,ax2],'x'); - xlim([freqs(1), freqs(end)]); - - i = 7; - - ax1 = subplot(2, 2, 2); - hold on; - for j = 1:length(Fs) - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); - title(sprintf('$k = %.0e$ [N/m]', Ks(i))) - - ax2 = subplot(2, 2, 4); - hold on; - for j = 1:length(Fs) - plot(freqs, 180/pi*angle(squeeze(freqresp(Gf_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-', ... - 'DisplayName', sprintf('$\\omega_0 = %.0f$ [Hz]', Fs(j))); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northeast'); - - linkaxes([ax1,ax2],'x'); - xlim([freqs(1), freqs(end)]); -#+end_src +#+name: fig:opt_stiffness_payload_freq_all +#+caption: Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload resonance frequency ([[./figs/opt_stiffness_payload_freq_all.png][png]], [[./figs/opt_stiffness_payload_freq_all.pdf][pdf]]) +[[file:figs/opt_stiffness_payload_freq_all.png]] *** Mass variation -All mixed, X direction +We here compare the dynamics for different payload mass with the same resonance frequency (100Hz): +- Figure [[fig:opt_stiffness_payload_mass_fz_dz]]: dynamics from a force $\mathcal{F}_z$ applied in the task space in the vertical direction to the vertical displacement of the sample $\mathcal{X}_z$ for both a very soft and a very stiff nano-hexapod. +- Figure [[fig:opt_stiffness_payload_mass_all]]: same, but for all tested nano-hexapod stiffnesses + +We can see here that for the soft nano-hexapod: +- the first resonance $\omega_n$ is changing with the mass of the payload as $\omega_n = \sqrt{\frac{k_n}{m_p + m_n}}$ with $k_p$ the stiffness of the nano-hexapod, $m_p$ the payload's mass and $m_n$ the mass of the nano-hexapod top platform +- the first mass line corresponding to $\frac{1}{(m_p + m_n)s^2}$ is changing with the payload mass +- the zero at 100Hz is not changing as it corresponds to the resonance of the payload itself +- the second mass line does not change + #+begin_src matlab :exports none freqs = logspace(-1, 3, 1000); figure; - ax1 = subplot(2, 1, 1); + i = 1; + + ax1 = subplot(2, 2, 1); hold on; - for i = 1:length(Ks) - for j = 1:length(Ms) - set(gca,'ColorOrderIndex',i); - plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-'); - end + for j = 1:length(Ms) + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) - ax2 = subplot(2, 1, 2); + ax2 = subplot(2, 2, 3); hold on; - for i = 1:length(Ks) - for j = 1:length(Ms) - set(gca,'ColorOrderIndex',i); - if j == 1 - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... - 'DisplayName', sprintf('$K = %.0e$ [N/m]', Ks(i))); - else - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... - 'HandleVisibility', 'off'); - end - end + for j = 1:length(Ms) + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz')))), '-'); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northeast'); + ylim([-270, 90]); + yticks([-360:90:360]); + + linkaxes([ax1,ax2],'x'); + xlim([freqs(1), freqs(end)]); + + i = 7; + + ax1 = subplot(2, 2, 2); + hold on; + for j = 1:length(Ms) + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); + end + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) + + ax2 = subplot(2, 2, 4); + hold on; + for j = 1:length(Ms) + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz')))), '-', ... + 'DisplayName', sprintf('$m_p = %.0f$ [kg]', Ms(j))); + end + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); + ylim([-270, 90]); + yticks([-360:90:360]); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); #+end_src -All mixed, Z direction +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_payload_mass_fz_dz.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_payload_mass_fz_dz +#+caption: Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload mass, both for a soft nano-hexapod and a stiff nano-hexapod ([[./figs/opt_stiffness_payload_mass_fz_dz.png][png]], [[./figs/opt_stiffness_payload_mass_fz_dz.pdf][pdf]]) +[[file:figs/opt_stiffness_payload_mass_fz_dz.png]] + #+begin_src matlab :exports none freqs = logspace(-1, 3, 1000); @@ -1273,10 +1366,10 @@ All mixed, Z direction for j = 1:length(Ms) set(gca,'ColorOrderIndex',i); if j == 1 - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-', ... + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz')))), '-', ... 'DisplayName', sprintf('$K = %.0e$ [N/m]', Ks(i))); else - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-', ... + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz')))), '-', ... 'HandleVisibility', 'off'); end end @@ -1284,26 +1377,42 @@ All mixed, Z direction hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northeast'); + ylim([-270, 90]); + yticks([-360:90:360]); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); #+end_src -Z direction +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_payload_mass_all.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_payload_mass_all +#+caption: Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload mass ([[./figs/opt_stiffness_payload_mass_all.png][png]], [[./figs/opt_stiffness_payload_mass_all.pdf][pdf]]) +[[file:figs/opt_stiffness_payload_mass_all.png]] + +*** Total variation +We now plot the total change of dynamics due to change of the payload (Figure [[fig:opt_stiffness_payload_impedance_fz_dz]]): +- mass from 1kg to 50kg +- main resonance from 50Hz to 500Hz + #+begin_src matlab :exports none + i = 1; + freqs = logspace(-1, 3, 1000); figure; - i = 1; - ax1 = subplot(2, 2, 1); hold on; + for j = 1:length(Fs) + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + end for j = 1:length(Ms) - plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); @@ -1312,14 +1421,17 @@ Z direction ax2 = subplot(2, 2, 3); hold on; + for j = 1:length(Fs) + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); for j = 1:length(Ms) - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + end end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); + ylim([-270, 90]); + yticks([-360:90:360]); linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); @@ -1328,8 +1440,11 @@ Z direction ax1 = subplot(2, 2, 2); hold on; + for j = 1:length(Fs) + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + end for j = 1:length(Ms) - plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-'); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); @@ -1338,48 +1453,6 @@ Z direction ax2 = subplot(2, 2, 4); hold on; - for j = 1:length(Ms) - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_err{i,j}('Ez', 'Fz'), freqs, 'Hz'))), '-', ... - 'DisplayName', sprintf('$m_p = %.0f$ [kg]', Ms(j))); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northeast'); - - linkaxes([ax1,ax2],'x'); - xlim([freqs(1), freqs(end)]); -#+end_src - -*** Total variation -Total change of dynamics due to change of the payload: -- mass from 1kg to 50kg -- main resonance from 50Hz to 500Hz - -For a soft nano-hexapod -#+begin_src matlab :exports none - i = 1; - - freqs = logspace(-1, 3, 1000); - - figure; - - ax1 = subplot(2, 1, 1); - hold on; - for j = 1:length(Fs) - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); - end - for j = 1:length(Ms) - plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); - - ax2 = subplot(2, 1, 2); - hold on; for j = 1:length(Fs) plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); for j = 1:length(Ms) @@ -1396,45 +1469,20 @@ For a soft nano-hexapod xlim([freqs(1), freqs(end)]); #+end_src -For a stiff nano-hexapod -#+begin_src matlab :exports none - i = 7; - - freqs = logspace(-1, 3, 1000); - - figure; - - ax1 = subplot(2, 1, 1); - hold on; - for j = 1:length(Fs) - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); - end - for j = 1:length(Ms) - plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); - - ax2 = subplot(2, 1, 2); - hold on; - for j = 1:length(Fs) - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); - for j = 1:length(Ms) - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); - end - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-270, 90]); - yticks([-360:90:360]); - - linkaxes([ax1,ax2],'x'); - xlim([freqs(1), freqs(end)]); +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_payload_impedance_fz_dz.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> #+end_src +#+name: fig:opt_stiffness_payload_impedance_fz_dz +#+caption: Dynamics from $\mathcal{F}_z$ to $\mathcal{X}_z$ for varying payload dynamics, both for a soft nano-hexapod and a stiff nano-hexapod ([[./figs/opt_stiffness_payload_impedance_fz_dz.png][png]], [[./figs/opt_stiffness_payload_impedance_fz_dz.pdf][pdf]]) +[[file:figs/opt_stiffness_payload_impedance_fz_dz.png]] + ** Conclusion :ignore: +#+begin_important + +#+end_important + * Total Change of dynamics #+begin_src matlab :exports none load('mat/optimal_stiffness_Gm_Gf.mat'); @@ -1442,13 +1490,19 @@ For a stiff nano-hexapod load('mat/optimal_stiffness_Gk_wz.mat'); #+end_src +We now consider the total change of nano-hexapod dynamics due to: - =Gk_wz_err= - Change of spindle rotation speed -- =Gf_err= - Change of payload resonance -- =Gm_err= - Change of payload mass -- =Gmr_err= - Rigid Micro-Station -- =Gmf_err= - Flexible Micro-Station +- =Gf_err= and =Gm_err= - Change of payload resonance +- =Gmf_err= and =Gmr_err= - Micro-Station compliance + +The obtained dynamics are shown: +- Figure [[fig:opt_stiffness_plant_dynamics_fx_dx_k_1e3]] for a stiffness $k = 10^3\ [N/m]$ +- Figure [[fig:opt_stiffness_plant_dynamics_fx_dx_k_1e5]] for a stiffness $k = 10^5\ [N/m]$ +- Figure [[fig:opt_stiffness_plant_dynamics_fx_dx_k_1e7]] for a stiffness $k = 10^7\ [N/m]$ +- Figure [[fig:opt_stiffness_plant_dynamics_fx_dx_k_1e9]] for a stiffness $k = 10^9\ [N/m]$ + +And finally, in Figures [[fig:opt_stiffness_plant_dynamics_task_space]] and [[fig:opt_stiffness_plant_dynamics_task_space_colors]] are shown an animation of the change of dynamics with the nano-hexapod's stiffness. -Soft nano-hexapod #+begin_src matlab :exports none i = 1; @@ -1494,24 +1548,29 @@ Soft nano-hexapod hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) legend('location', 'southwest'); ax2 = subplot(2, 1, 2); hold on; for j = 1:length(Rz_rpm) - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); end for j = 1:length(Fs) - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + set(gca,'ColorOrderIndex',2); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); end % =Gm_err= - Change of payload mass for j = 1:length(Ms) - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + set(gca,'ColorOrderIndex',3); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); end + set(gca,'ColorOrderIndex',4); % =Gmr_err= - Rigid Micro-Station - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); % =Gmf_err= - Flexible Micro-Station - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); @@ -1522,8 +1581,17 @@ Soft nano-hexapod xlim([freqs(1), freqs(end)]); #+end_src +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_plant_dynamics_fx_dx_k_1e3 +#+caption: Total variation of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$. Nano-hexapod leg's stiffness is equal to $k = 10^3\ [N/m]$ ([[./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.png][png]], [[./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.pdf][pdf]]) +[[file:figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.png]] + #+begin_src matlab :exports none - i = 1; + i = 3; freqs = logspace(-1, 3, 1000); @@ -1532,43 +1600,64 @@ Soft nano-hexapod ax1 = subplot(2, 1, 1); hold on; % =Gf_err= - Change of payload resonance - for j = 1:length(Fs) - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(Gf_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Payload Freq'); + for j = 2:length(Fs) + set(gca,'ColorOrderIndex',1); + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); end % =Gm_err= - Change of payload mass - for j = 1:length(Ms) - plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + set(gca,'ColorOrderIndex',2); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Payload Mass'); + for j = 2:length(Ms) + set(gca,'ColorOrderIndex',2); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); end - % Spindle Rotation Speed - for j = 1:length(Rz_rpm) - plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + % =Gm_err= - Change of payload mass + set(gca,'ColorOrderIndex',3); + plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Rotationg Speed'); + for j = 2:length(Rz_rpm) + set(gca,'ColorOrderIndex',3); + plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); end + set(gca,'ColorOrderIndex',4); % =Gmr_err= - Rigid Micro-Station - plot(freqs, abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Rigid $\mu$-station'); % =Gmf_err= - Flexible Micro-Station - plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Flexible $\mu$-station'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) + legend('location', 'southwest'); ax2 = subplot(2, 1, 2); hold on; - % =Gf_err= - Change of payload resonance + for j = 1:length(Rz_rpm) + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + end for j = 1:length(Fs) - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + set(gca,'ColorOrderIndex',2); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); end % =Gm_err= - Change of payload mass for j = 1:length(Ms) - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); - end - % Spindle Rotation Speed - for j = 1:length(Rz_rpm) - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + set(gca,'ColorOrderIndex',3); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); end + set(gca,'ColorOrderIndex',4); % =Gmr_err= - Rigid Micro-Station - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); % =Gmf_err= - Flexible Micro-Station - plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); @@ -1579,36 +1668,343 @@ Soft nano-hexapod xlim([freqs(1), freqs(end)]); #+end_src -Comparison with initial TF -#+begin_src matlab :exports none - i = 1; +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src - G0 = abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))); +#+name: fig:opt_stiffness_plant_dynamics_fx_dx_k_1e5 +#+caption: Total variation of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$. Nano-hexapod leg's stiffness is equal to $k = 10^5\ [N/m]$ ([[./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.png][png]], [[./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.pdf][pdf]]) +[[file:figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.png]] + +#+begin_src matlab :exports none + i = 5; freqs = logspace(-1, 3, 1000); figure; + ax1 = subplot(2, 1, 1); hold on; % =Gf_err= - Change of payload resonance + plot(freqs, abs(squeeze(freqresp(Gf_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Payload Freq'); + for j = 2:length(Fs) + set(gca,'ColorOrderIndex',1); + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); + end + % =Gm_err= - Change of payload mass + set(gca,'ColorOrderIndex',2); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Payload Mass'); + for j = 2:length(Ms) + set(gca,'ColorOrderIndex',2); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); + end + % =Gm_err= - Change of payload mass + set(gca,'ColorOrderIndex',3); + plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Rotationg Speed'); + for j = 2:length(Rz_rpm) + set(gca,'ColorOrderIndex',3); + plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); + end + set(gca,'ColorOrderIndex',4); + % =Gmr_err= - Rigid Micro-Station + plot(freqs, abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Rigid $\mu$-station'); + % =Gmf_err= - Flexible Micro-Station + plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Flexible $\mu$-station'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) + legend('location', 'southwest'); + + ax2 = subplot(2, 1, 2); + hold on; + for j = 1:length(Rz_rpm) + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + end for j = 1:length(Fs) - plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))./G0, 'k-'); + set(gca,'ColorOrderIndex',2); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); end % =Gm_err= - Change of payload mass for j = 1:length(Ms) - plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))./G0, 'k-'); - end - % Spindle Rotation Speed - for j = 1:length(Rz_rpm) - plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))./G0, 'k-'); + set(gca,'ColorOrderIndex',3); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); end + set(gca,'ColorOrderIndex',4); + % =Gmr_err= - Rigid Micro-Station + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); % =Gmf_err= - Flexible Micro-Station - plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))./G0, 'k-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]'); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); + ylim([-270, 90]); + yticks([-360:90:360]); + + linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); - ylim([1e-2, 1e2]) #+end_src -- [ ] Make a gif with the stiffness varying +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_plant_dynamics_fx_dx_k_1e7 +#+caption: Total variation of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$. Nano-hexapod leg's stiffness is equal to $k = 10^7\ [N/m]$ ([[./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.png][png]], [[./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.pdf][pdf]]) +[[file:figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.png]] + +#+begin_src matlab :exports none + i = 7; + + freqs = logspace(-1, 3, 1000); + + figure; + + ax1 = subplot(2, 1, 1); + hold on; + % =Gf_err= - Change of payload resonance + plot(freqs, abs(squeeze(freqresp(Gf_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Payload Freq'); + for j = 2:length(Fs) + set(gca,'ColorOrderIndex',1); + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); + end + % =Gm_err= - Change of payload mass + set(gca,'ColorOrderIndex',2); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Payload Mass'); + for j = 2:length(Ms) + set(gca,'ColorOrderIndex',2); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); + end + % =Gm_err= - Change of payload mass + set(gca,'ColorOrderIndex',3); + plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,1}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Rotationg Speed'); + for j = 2:length(Rz_rpm) + set(gca,'ColorOrderIndex',3); + plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'HandleVisibility', 'off'); + end + set(gca,'ColorOrderIndex',4); + % =Gmr_err= - Rigid Micro-Station + plot(freqs, abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Rigid $\mu$-station'); + % =Gmf_err= - Flexible Micro-Station + plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-', ... + 'DisplayName', 'Flexible $\mu$-station'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) + legend('location', 'southwest'); + + ax2 = subplot(2, 1, 2); + hold on; + for j = 1:length(Rz_rpm) + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + end + for j = 1:length(Fs) + set(gca,'ColorOrderIndex',2); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + end + % =Gm_err= - Change of payload mass + for j = 1:length(Ms) + set(gca,'ColorOrderIndex',3); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + end + set(gca,'ColorOrderIndex',4); + % =Gmr_err= - Rigid Micro-Station + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + % =Gmf_err= - Flexible Micro-Station + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); + ylim([-270, 90]); + yticks([-360:90:360]); + + 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/opt_stiffness_plant_dynamics_fx_dx_k_1e9.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:opt_stiffness_plant_dynamics_fx_dx_k_1e9 +#+caption: Total variation of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$. Nano-hexapod leg's stiffness is equal to $k = 10^9\ [N/m]$ ([[./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.png][png]], [[./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.pdf][pdf]]) +[[file:figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.png]] + +#+NAME: fig:opt_stiffness_plant_dynamics_task_space +#+HEADER: :tangle no :exports results :results value file raw replace :noweb yes +#+begin_src matlab + h = figure; + filename = 'figs/opt_stiffness_plant_dynamics_task_space.gif'; + + for i = 1:length(Ks) + clf(h) + ax1 = subplot(2, 1, 1); + hold on; + for j = 1:length(Fs) + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + end + for j = 1:length(Ms) + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + end + for j = 1:length(Rz_rpm) + plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + end + plot(freqs, abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz'))), 'k-'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + ylim([1e-10, 1e-1]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) + + ax2 = subplot(2, 1, 2); + hold on; + for j = 1:length(Rz_rpm) + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + end + for j = 1:length(Fs) + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + end + for j = 1:length(Ms) + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + end + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), 'k-'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); + ylim([-270, 90]); + yticks([-360:90:360]); + + linkaxes([ax1,ax2],'x'); + xlim([freqs(1), freqs(end)]); + + set(h, 'visible', 'off'); + set(h, 'pos', [0, 0, 1200, 800]); + drawnow; + + % Capture the plot as an image + frame = getframe(h); + im = frame2im(frame); + [imind,cm] = rgb2ind(im,256); + + % Write to the GIF File + if i == 1 + imwrite(imind,cm,filename,'gif','DelayTime',1.0,'Loopcount',inf); + else + imwrite(imind,cm,filename,'gif','DelayTime',1.0,'WriteMode','append'); + end + end + + set(h, 'visible', 'on'); + ans = filename; +#+end_src + +#+NAME: fig:opt_stiffness_plant_dynamics_task_space +#+CAPTION: Variability of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$ with varying nano-hexapod stiffness +#+RESULTS: fig:opt_stiffness_plant_dynamics_task_space +[[file:figs/opt_stiffness_plant_dynamics_task_space.gif]] + +#+NAME: fig:opt_stiffness_plant_dynamics_task_space_colors +#+HEADER: :tangle no :exports results :results value file raw replace :noweb yes +#+begin_src matlab + h = figure; + filename = 'figs/opt_stiffness_plant_dynamics_task_space_colors.gif'; + + for i = 1:length(Ks) + clf(h) + ax1 = subplot(2, 1, 1); + hold on; + for j = 1:length(Fs) + set(gca,'ColorOrderIndex',1); + plot(freqs, abs(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-'); + end + for j = 1:length(Ms) + set(gca,'ColorOrderIndex',2); + plot(freqs, abs(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-'); + end + for j = 2:length(Rz_rpm) + set(gca,'ColorOrderIndex',3); + plot(freqs, abs(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz'))), '-'); + end + set(gca,'ColorOrderIndex',4); + plot(freqs, abs(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-'); + plot(freqs, abs(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz'))), '-'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + ylim([1e-10, 1e-1]); + title(sprintf('$k = %.0e$ [N/m]', Ks(i))) + + ax2 = subplot(2, 1, 2); + hold on; + for j = 1:length(Rz_rpm) + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gk_wz_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + end + for j = 1:length(Fs) + set(gca,'ColorOrderIndex',2); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gf_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + end + for j = 1:length(Ms) + set(gca,'ColorOrderIndex',3); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gm_err{i,j}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + end + set(gca,'ColorOrderIndex',4); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmr_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gmf_err{i}('Ex', 'Fx'), freqs, 'Hz')))), '-'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); + ylim([-270, 90]); + yticks([-360:90:360]); + + linkaxes([ax1,ax2],'x'); + xlim([freqs(1), freqs(end)]); + + set(h, 'visible', 'off'); + set(h, 'pos', [0, 0, 1200, 800]); + drawnow; + + % Capture the plot as an image + frame = getframe(h); + im = frame2im(frame); + [imind,cm] = rgb2ind(im,256); + + % Write to the GIF File + if i == 1 + imwrite(imind,cm,filename,'gif','DelayTime',1.0,'Loopcount',inf); + else + imwrite(imind,cm,filename,'gif','DelayTime',1.0,'WriteMode','append'); + end + end + + set(h, 'visible', 'on'); + ans = filename; +#+end_src + +#+NAME: fig:opt_stiffness_plant_dynamics_task_space_colors +#+CAPTION: Variability of the dynamics from $\mathcal{F}_x$ to $\mathcal{X}_x$ with varying nano-hexapod stiffness +#+RESULTS: fig:opt_stiffness_plant_dynamics_task_space_colors +[[file:figs/opt_stiffness_plant_dynamics_task_space_colors.gif]]