Update uncertainty analysis to micro-hexapod pose
This commit is contained in:
@@ -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:
|
||||
|
Reference in New Issue
Block a user