Update uncertainty analysis to micro-hexapod pose

This commit is contained in:
2020-04-01 16:17:13 +02:00
parent 1c27850fc3
commit 4613c74ef3
11 changed files with 1074 additions and 10 deletions

View File

@@ -45,12 +45,12 @@
The goal of this document is to study how the dynamics of the system is changing with the experimental conditions.
These experimental conditions are:
- Sample mass (from 1Kg to 50Kg)
- Sample dynamics (mostly main resonance frequency)
- The spindle angle
- The spindle rotation speed (from 1rpm to 60rpm)
- The tilt angle (from -3 to 3 degrees)
- The scans of the translation stage
- Section [[sec:variability_sample_mass]]: Sample mass (from 1Kg to 50Kg)
- Section [[sec:variability_sample_freq]]: Sample dynamics (mostly main resonance frequency)
- Section [[sec:variability_spindle_angle]]: The spindle angle
- Section [[sec:variability_rotation_speed]]: The spindle rotation speed (from 1rpm to 60rpm)
- Section [[sec:variability_tilt_angle]]: The tilt angle (from -3 to 3 degrees)
- Section [[sec:micro_hexapod_pose]]: Pose of the micro-hexapod
We are interested in the dynamics from the nano-hexapod actuators to:
- the sensors included in the nano-hexapod (force sensor, relative motion sensor)
@@ -60,6 +60,8 @@ The variability of the dynamics is studied for two nano-hexapod concepts:
- a soft nano-hexapod
- a stiff nano-hexapod
The conclusions are drawn in Section [[sec:conclusion]]
* Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
@@ -548,7 +550,7 @@ We identify the dynamics for the following sample resonance frequency.
The following transfer functions are shown:
- Figure [[fig:dynamics_variability_iff_sample_w]]: From actuator forces to force sensors in each nano-hexapod's leg
- Figure [[fig:dynamics_variability_dvf_sample_w]]: From actuator forces to relative displacement of each nano-hexapod's leg
- Figure [[fig:dynamics_variability_err_x_sample_w]]: From forces applied in the task space by the nano-hexapod to displacement of the sample in the X direction
- Figure [[fig:dynamics_variability_err_sample_w]]: From forces applied in the task space by the nano-hexapod to displacement of the sample in the X direction
#+begin_src matlab :exports none
freqs = logspace(-1, 3, 1000);
@@ -850,7 +852,7 @@ We identify the dynamics for the following Tilt stage angles.
The following transfer functions are shown:
- Figure [[fig:dynamics_variability_iff_spindle_angle]]: From actuator forces to force sensors in each nano-hexapod's leg
- Figure [[fig:dynamics_variability_err_x_spindle_angle]]: From forces applied in the task space by the nano-hexapod to displacement of the sample in the X direction
- Figure [[fig:dynamics_variability_err_spindle_angle]]: From forces applied in the task space by the nano-hexapod to displacement of the sample in the X direction
#+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000);
@@ -1478,7 +1480,7 @@ We identify the dynamics for the following Tilt stage angles.
The following transfer functions are shown:
- Figure [[fig:dynamics_variability_iff_tilt_angle]]: From actuator forces to force sensors in each nano-hexapod's leg
- Figure [[fig:dynamics_variability_err_x_tilt_angle]]: From forces applied in the task space by the nano-hexapod to displacement of the sample in the X direction
- Figure [[fig:dynamics_variability_err_tilt_angle]]: From forces applied in the task space by the nano-hexapod to displacement of the sample in the X direction
#+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000);
@@ -1623,8 +1625,248 @@ The following transfer functions are shown:
The tilt angle has no visible effect on the dynamics.
#+end_important
* Conclusion
* Variation of the micro-hexapod pose
<<sec:micro_hexapod_pose>>
** Introduction :ignore:
** Identification :ignore:
We initialize all the stages with the default parameters.
#+begin_src matlab :exports none :noweb yes
<<init-sim>>
<<init-identification>>
initializeSample('mass', 1);
#+end_src
We identify the dynamics for the following translations of the micro-hexapod in the X direction.
#+begin_src matlab
Tx_amplitudes = [0, 5e-3, 10e-3]; % [m]
#+end_src
#+begin_src matlab :exports none
nano_hexapod = initializeNanoHexapod('actuator', 'lorentz');
Gry_vc_iff = {zeros(length(Tx_amplitudes))};
Gry_vc_dvf = {zeros(length(Tx_amplitudes))};
Gry_vc_err = {zeros(length(Tx_amplitudes))};
for i = 1:length(Tx_amplitudes)
initializeMicroHexapod('AP', [Tx_amplitudes(i) 0 0]);
initializeReferences('Dh_type', 'constant', 'Dh_pos', [Tx_amplitudes(i) 0 0 0 0 0])
%% Run the linearization
G = linearize(mdl, io, 1e-3);
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gtx_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gtx_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gtx_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
end
#+end_src
#+begin_src matlab :exports none
nano_hexapod = initializeNanoHexapod('actuator', 'piezo');
Gtx_pz_iff = {zeros(length(Tx_amplitudes))};
Gtx_pz_dvf = {zeros(length(Tx_amplitudes))};
Gtx_pz_err = {zeros(length(Tx_amplitudes))};
for i = 1:length(Tx_amplitudes)
initializeMicroHexapod('AP', [Tx_amplitudes(i) 0 0]);
initializeReferences('Dh_type', 'constant', 'Dh_pos', [Tx_amplitudes(i) 0 0 0 0 0])
%% Run the linearization
G = linearize(mdl, io, 1e-3);
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gtx_pz_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gtx_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gtx_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
end
#+end_src
#+begin_src matlab :exports none
save('./mat/dynamics_variability_Tx.mat', 'Tx_amplitudes', ...
'Gtx_vc_iff', 'Gtx_vc_dvf', 'Gtx_vc_err', ...
'Gtx_pz_iff', 'Gtx_pz_dvf', 'Gtx_pz_err');
#+end_src
** Plots :ignore:
#+begin_src matlab :exports none
load('./mat/dynamics_variability_Tx.mat');
#+end_src
#+begin_src matlab :exports none
freqs = logspace(-1, 2, 1000);
figure;
ax1 = subplot(2, 2, 1);
hold on;
for i = 1:length(Gtx_vc_iff)
plot(freqs, abs(squeeze(freqresp(Gtx_vc_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
title('Soft Nano-Hexapod');
ax2 = subplot(2, 2, 3);
hold on;
for i = 1:length(Gtx_vc_iff)
plot(freqs, 180/pi*angle(squeeze(freqresp(Gtx_vc_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz'))), ...
'DisplayName', sprintf('$T_x = %.0f$ [m]', 1e3*Tx_amplitudes(i)));
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)]);
freqs = logspace(0, 3, 1000);
ax1 = subplot(2, 2, 2);
hold on;
for i = 1:length(Gtx_pz_iff)
plot(freqs, abs(squeeze(freqresp(Gtx_pz_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
title('Stiff Nano-Hexapod');
ax2 = subplot(2, 2, 4);
hold on;
for i = 1:length(Gtx_pz_iff)
plot(freqs, 180/pi*angle(squeeze(freqresp(Gtx_pz_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz'))), ...
'DisplayName', sprintf('$T_x = %.0f$ [m]', 1e3*Tx_amplitudes(i)));
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
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/dynamics_variability_iff_micro_hexapod_x.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:dynamics_variability_iff_micro_hexapod_x
#+caption: Variability of the dynamics from the actuator force to the force sensor with the Tilt stage Angle ([[./figs/dynamics_variability_iff_micro_hexapod_x.png][png]], [[./figs/dynamics_variability_iff_micro_hexapod_x.pdf][pdf]])
[[file:figs/dynamics_variability_iff_micro_hexapod_x.png]]
#+begin_src matlab :exports none
freqs = logspace(-1, 3, 1000);
figure;
ax1 = subplot(2, 2, 1);
hold on;
for i = 1:length(Gtx_vc_err)
plot(freqs, abs(squeeze(freqresp(Gtx_vc_err{i}('Erx', 'Mx'), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Soft Nano-Hexapod');
ax2 = subplot(2, 2, 3);
hold on;
for i = 1:length(Gtx_vc_err)
plot(freqs, 180/pi*angle(squeeze(freqresp(Gtx_vc_err{i}('Erx', 'Mx'), freqs, 'Hz'))), ...
'DisplayName', sprintf('$T_x = %.0f$ [m]', 1e3*Tx_amplitudes(i)));
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)]);
freqs = logspace(0, 3, 1000);
ax1 = subplot(2, 2, 2);
hold on;
for i = 1:length(Gtx_pz_err)
plot(freqs, abs(squeeze(freqresp(Gtx_pz_err{i}('Erx', 'Mx'), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Stiff Nano-Hexapod');
ax2 = subplot(2, 2, 4);
hold on;
for i = 1:length(Gtx_pz_err)
plot(freqs, 180/pi*angle(squeeze(freqresp(Gtx_pz_err{i}('Erx', 'Mx'), freqs, 'Hz'))), ...
'DisplayName', sprintf('$T_x = %.0f$ [m]', 1e3*Tx_amplitudes(i)));
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
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/dynamics_variability_err_micro_hexapod_x.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:dynamics_variability_err_micro_hexapod_x
#+caption: Variability of the dynamics from the actuator force in the task space to the displacement of the sample ([[./figs/dynamics_variability_err_micro_hexapod_x.png][png]], [[./figs/dynamics_variability_err_micro_hexapod_x.pdf][pdf]])
[[file:figs/dynamics_variability_err_micro_hexapod_x.png]]
** Conclusion :ignore:
#+begin_important
The pose of the micro-hexapod has negligible effect on the dynamics.
#+end_important
* Conclusion
<<sec:conclusion>>
#+begin_important
From all the experimental condition studied, the only ones that have significant effect on the dynamics are:
- the *sample mass*
- the *resonance frequency of the sample*
- the *rotation speed* of the spindle
| | Soft | Stiff |
|------------------+-------------------------------------------------+-------------------------|
| Sample Mass | Localized effect on the resonance of the sample | Effect on all the modes |
| Sample Resonance | Localized effect at the resonance of the sample | Effect on all the modes |
| Rotation Speed | Greatly influences the dynamics and coupling | No effect |
#+end_important
* Useful Blocks :noexport: