601 lines
20 KiB
Org Mode
601 lines
20 KiB
Org Mode
#+TITLE: Simulation of Scientific Experiments
|
|
:DRAWER:
|
|
#+STARTUP: overview
|
|
|
|
#+LANGUAGE: en
|
|
#+EMAIL: dehaeze.thomas@gmail.com
|
|
#+AUTHOR: Dehaeze Thomas
|
|
|
|
#+HTML_LINK_HOME: ./index.html
|
|
#+HTML_LINK_UP: ./index.html
|
|
|
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
|
|
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.min.js"></script>
|
|
#+HTML_HEAD: <script type="text/javascript" src="./js/bootstrap.min.js"></script>
|
|
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
|
|
#+HTML_HEAD: <script type="text/javascript" src="./js/readtheorg.js"></script>
|
|
|
|
#+HTML_MATHJAX: align: center tagside: right font: TeX
|
|
|
|
#+PROPERTY: header-args:matlab :session *MATLAB*
|
|
#+PROPERTY: header-args:matlab+ :comments org
|
|
#+PROPERTY: header-args:matlab+ :results none
|
|
#+PROPERTY: header-args:matlab+ :exports both
|
|
#+PROPERTY: header-args:matlab+ :eval no-export
|
|
#+PROPERTY: header-args:matlab+ :output-dir figs
|
|
#+PROPERTY: header-args:matlab+ :tangle no
|
|
#+PROPERTY: header-args:matlab+ :mkdirp yes
|
|
|
|
#+PROPERTY: header-args:shell :eval no-export
|
|
|
|
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
|
|
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
|
|
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
|
|
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
|
|
#+PROPERTY: header-args:latex+ :results raw replace :buffer no
|
|
#+PROPERTY: header-args:latex+ :eval no-export
|
|
#+PROPERTY: header-args:latex+ :exports both
|
|
#+PROPERTY: header-args:latex+ :mkdirp yes
|
|
#+PROPERTY: header-args:latex+ :output-dir figs
|
|
:END:
|
|
|
|
* Introduction :ignore:
|
|
The goal here is to simulate some scientific experiments with the Simscape model when no control is applied to the nano-hexapod.
|
|
|
|
This has several goals:
|
|
- Validate the model
|
|
- Estimate the expected error motion for the experiments
|
|
- Estimate the stroke that we may need for the nano-hexapod
|
|
- Compare with experiments when control is applied
|
|
|
|
The document in organized as follow:
|
|
- In section [[sec:simscape_model]] the Simscape model is initialized
|
|
- In section [[sec:tomo_no_dist]] a tomography experiment is performed where the sample is aligned with the rotation axis. No disturbance is included
|
|
- In section [[sec:tomo_dist]], the same is done but with disturbance included
|
|
- In section [[sec:tomo_hexa_trans]] the micro-hexapod translate the sample such that its center of mass is no longer aligned with the rotation axis. No disturbance is included
|
|
- In section [[sec:ty_scans]], scans with the translation stage are simulated with no perturbation included
|
|
|
|
* Matlab Init :noexport:ignore:
|
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
|
<<matlab-dir>>
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none :results silent :noweb yes
|
|
<<matlab-init>>
|
|
#+end_src
|
|
|
|
#+begin_src matlab :tangle no
|
|
simulinkproject('../');
|
|
#+end_src
|
|
|
|
#+begin_src matlab
|
|
open('nass_model.slx');
|
|
#+end_src
|
|
|
|
* Simscape Model
|
|
<<sec:simscape_model>>
|
|
|
|
We load the shared simulink configuration and we set the =StopTime=.
|
|
#+begin_src matlab
|
|
load('mat/conf_simulink.mat');
|
|
set_param(conf_simulink, 'StopTime', '2');
|
|
#+end_src
|
|
|
|
We first initialize all the stages.
|
|
The nano-hexapod is considered to be a rigid body.
|
|
#+begin_src matlab
|
|
initializeGround();
|
|
initializeGranite();
|
|
initializeTy();
|
|
initializeRy();
|
|
initializeRz();
|
|
initializeMicroHexapod();
|
|
initializeAxisc();
|
|
initializeMirror();
|
|
initializeNanoHexapod('type', 'rigid');
|
|
initializeSample('mass', 1);
|
|
#+end_src
|
|
|
|
We initialize the reference path for all the stages.
|
|
All stage is set to its zero position except the Spindle which is rotating at 60rpm.
|
|
#+begin_src matlab
|
|
initializeReferences('Rz_type', 'rotating', 'Rz_period', 1);
|
|
#+end_src
|
|
|
|
No controller is used (Open Loop).
|
|
#+begin_src matlab
|
|
initializeController('type', 'open-loop');
|
|
#+end_src
|
|
|
|
And we put some gravity.
|
|
#+begin_src matlab
|
|
initializeSimscapeConfiguration('gravity', true);
|
|
#+end_src
|
|
|
|
We log the signals for further analysis.
|
|
#+begin_src matlab
|
|
initializeLoggingConfiguration('log', 'all');
|
|
#+end_src
|
|
|
|
* Tomography Experiment with no disturbances
|
|
<<sec:tomo_no_dist>>
|
|
** Introduction :ignore:
|
|
In this section, a tomography experiment is performed with the sample aligned with the rotation axis.
|
|
No disturbance is included.
|
|
|
|
** Simulation Setup
|
|
And we initialize the disturbances to be equal to zero.
|
|
#+begin_src matlab
|
|
initializeDisturbances(...
|
|
'Dwx', false, ... % Ground Motion - X direction
|
|
'Dwy', false, ... % Ground Motion - Y direction
|
|
'Dwz', false, ... % Ground Motion - Z direction
|
|
'Fty_x', false, ... % Translation Stage - X direction
|
|
'Fty_z', false, ... % Translation Stage - Z direction
|
|
'Frz_z', false ... % Spindle - Z direction
|
|
);
|
|
#+end_src
|
|
|
|
We simulate the model.
|
|
#+begin_src matlab
|
|
sim('nass_model');
|
|
#+end_src
|
|
|
|
And we save the obtained data.
|
|
#+begin_src matlab
|
|
tomo_align_no_dist = simout;
|
|
save('./mat/experiment_tomography.mat', 'tomo_align_no_dist', '-append');
|
|
#+end_src
|
|
|
|
** Analysis
|
|
#+begin_src matlab
|
|
load('./mat/experiment_tomography.mat', 'tomo_align_no_dist');
|
|
t = tomo_align_no_dist.t;
|
|
MTr = tomo_align_no_dist.MTr;
|
|
#+end_src
|
|
|
|
#+begin_src matlab
|
|
Edx = squeeze(MTr(1, 4, :));
|
|
Edy = squeeze(MTr(2, 4, :));
|
|
Edz = squeeze(MTr(3, 4, :));
|
|
% The angles obtained are u-v-w Euler angles (rotations in the moving frame)
|
|
Ery = atan2( squeeze(MTr(1, 3, :)), squeeze(sqrt(MTr(1, 1, :).^2 + MTr(1, 2, :).^2)));
|
|
Erx = atan2(-squeeze(MTr(2, 3, :))./cos(Ery), squeeze(MTr(3, 3, :))./cos(Ery));
|
|
Erz = atan2(-squeeze(MTr(1, 2, :))./cos(Ery), squeeze(MTr(1, 1, :))./cos(Ery));
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none
|
|
figure;
|
|
ax1 = subplot(1, 3, 1);
|
|
plot(t, Edx, 'DisplayName', '$\epsilon_{x}$')
|
|
ylabel('Displacement [m]');
|
|
legend('location', 'northeast');
|
|
|
|
ax2 = subplot(1, 3, 2);
|
|
plot(t, Edy, 'DisplayName', '$\epsilon_{y}$')
|
|
xlabel('Time [s]');
|
|
legend('location', 'northeast');
|
|
|
|
ax3 = subplot(1, 3, 3);
|
|
plot(t, Edz, 'DisplayName', '$\epsilon_{z}$')
|
|
legend('location', 'northeast');
|
|
|
|
linkaxes([ax1,ax2,ax3],'x');
|
|
xlim([2, inf]);
|
|
#+end_src
|
|
|
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
#+begin_src matlab :var filepath="figs/exp_tomo_without_dist_trans.pdf" :var figsize="full-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+NAME: fig:exp_tomo_without_dist_trans
|
|
#+CAPTION: X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances ([[./figs/exp_tomo_without_dist_trans.png][png]], [[./figs/exp_tomo_without_dist_trans.pdf][pdf]])
|
|
[[file:figs/exp_tomo_without_dist_trans.png]]
|
|
|
|
#+begin_src matlab :exports none
|
|
figure;
|
|
ax1 = subplot(1, 3, 1);
|
|
plot(t, Erx, 'DisplayName', '$\epsilon_{\theta x}$')
|
|
ylabel('Rotation [rad]');
|
|
legend('location', 'northeast');
|
|
|
|
ax2 = subplot(1, 3, 2);
|
|
plot(t, Ery, 'DisplayName', '$\epsilon_{\theta y}$')
|
|
xlabel('Time [s]');
|
|
legend('location', 'northeast');
|
|
|
|
ax3 = subplot(1, 3, 3);
|
|
plot(t, Erz, 'DisplayName', '$\epsilon_{\theta z}$')
|
|
legend('location', 'northeast');
|
|
|
|
linkaxes([ax1,ax2,ax3],'x');
|
|
xlim([2, inf]);
|
|
#+end_src
|
|
|
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
#+begin_src matlab :var filepath="figs/exp_tomo_without_dist_rot.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+NAME: fig:exp_tomo_without_dist_rot
|
|
#+CAPTION: X-Y-Z rotations of the sample w.r.t. granite when performing tomography experiment with no disturbances ([[./figs/exp_tomo_without_dist_rot.png][png]], [[./figs/exp_tomo_without_dist_rot.pdf][pdf]])
|
|
[[file:figs/exp_tomo_without_dist_rot.png]]
|
|
|
|
** Conclusion
|
|
#+begin_important
|
|
When everything is aligned, the resulting error motion is very small (nm range) and is quite negligible with respect to the error when disturbances are included.
|
|
This residual error motion probably comes from a small misalignment somewhere.
|
|
#+end_important
|
|
|
|
* Tomography Experiment with included perturbations
|
|
<<sec:tomo_dist>>
|
|
** Introduction :ignore:
|
|
In this section, we also perform a tomography experiment with the sample's center of mass aligned with the rotation axis.
|
|
However this time, we include perturbations such as ground motion and stage vibrations.
|
|
|
|
** Simulation Setup
|
|
We now activate the disturbances.
|
|
#+begin_src matlab
|
|
initializeDisturbances(...
|
|
'Dwx', true, ... % Ground Motion - X direction
|
|
'Dwy', true, ... % Ground Motion - Y direction
|
|
'Dwz', true, ... % Ground Motion - Z direction
|
|
'Fty_x', true, ... % Translation Stage - X direction
|
|
'Fty_z', true, ... % Translation Stage - Z direction
|
|
'Frz_z', true ... % Spindle - Z direction
|
|
);
|
|
#+end_src
|
|
|
|
We simulate the model.
|
|
#+begin_src matlab
|
|
sim('nass_model');
|
|
#+end_src
|
|
|
|
And we save the obtained data.
|
|
#+begin_src matlab
|
|
tomo_align_dist = struct('t', t, 'MTr', MTr);
|
|
save('./mat/experiment_tomography.mat', 'tomo_align_dist', '-append');
|
|
#+end_src
|
|
|
|
** Analysis
|
|
#+begin_src matlab
|
|
load('./mat/experiment_tomography.mat', 'tomo_align_dist');
|
|
t = tomo_align_dist.t;
|
|
MTr = tomo_align_dist.MTr;
|
|
#+end_src
|
|
|
|
#+begin_src matlab
|
|
Edx = squeeze(MTr(1, 4, :));
|
|
Edy = squeeze(MTr(2, 4, :));
|
|
Edz = squeeze(MTr(3, 4, :));
|
|
% The angles obtained are u-v-w Euler angles (rotations in the moving frame)
|
|
Ery = atan2( squeeze(MTr(1, 3, :)), squeeze(sqrt(MTr(1, 1, :).^2 + MTr(1, 2, :).^2)));
|
|
Erx = atan2(-squeeze(MTr(2, 3, :))./cos(Ery), squeeze(MTr(3, 3, :))./cos(Ery));
|
|
Erz = atan2(-squeeze(MTr(1, 2, :))./cos(Ery), squeeze(MTr(1, 1, :))./cos(Ery));
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none
|
|
figure;
|
|
ax1 = subplot(1, 3, 1);
|
|
plot(t, Edx, 'DisplayName', '$\epsilon_{x}$')
|
|
ylabel('Displacement [m]');
|
|
legend('location', 'northeast');
|
|
|
|
ax2 = subplot(1, 3, 2);
|
|
plot(t, Edy, 'DisplayName', '$\epsilon_{y}$')
|
|
xlabel('Time [s]');
|
|
legend('location', 'northeast');
|
|
|
|
ax3 = subplot(1, 3, 3);
|
|
plot(t, Edz, 'DisplayName', '$\epsilon_{z}$')
|
|
legend('location', 'northeast');
|
|
|
|
linkaxes([ax1,ax2,ax3],'x');
|
|
xlim([2, inf]);
|
|
#+end_src
|
|
|
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
#+begin_src matlab :var filepath="figs/exp_tomo_dist_trans.pdf" :var figsize="full-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+NAME: fig:exp_tomo_dist_trans
|
|
#+CAPTION: X-Y-Z translation of the sample w.r.t. the granite when performing tomography experiment with disturbances ([[./figs/exp_tomo_dist_trans.png][png]], [[./figs/exp_tomo_dist_trans.pdf][pdf]])
|
|
[[file:figs/exp_tomo_dist_trans.png]]
|
|
|
|
#+begin_src matlab :exports none
|
|
figure;
|
|
ax1 = subplot(1, 3, 1);
|
|
plot(t, Erx, 'DisplayName', '$\epsilon_{\theta x}$')
|
|
ylabel('Rotation [rad]');
|
|
legend('location', 'northeast');
|
|
|
|
ax2 = subplot(1, 3, 2);
|
|
plot(t, Ery, 'DisplayName', '$\epsilon_{\theta y}$')
|
|
xlabel('Time [s]');
|
|
legend('location', 'northeast');
|
|
|
|
ax3 = subplot(1, 3, 3);
|
|
plot(t, Erz, 'DisplayName', '$\epsilon_{\theta z}$')
|
|
legend('location', 'northeast');
|
|
|
|
linkaxes([ax1,ax2,ax3],'x');
|
|
xlim([2, inf]);
|
|
#+end_src
|
|
|
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
#+begin_src matlab :var filepath="figs/exp_tomo_dist_rot.pdf" :var figsize="full-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+NAME: fig:exp_tomo_dist_rot
|
|
#+CAPTION: X-Y-Z rotations of the sample w.r.t. the granite when performing tomography experiment with disturbances ([[./figs/exp_tomo_dist_rot.png][png]], [[./figs/exp_tomo_dist_rot.pdf][pdf]])
|
|
[[file:figs/exp_tomo_dist_rot.png]]
|
|
|
|
** Conclusion
|
|
|
|
#+begin_important
|
|
Error motion is what expected from the disturbance measurements.
|
|
#+end_important
|
|
|
|
* Tomography when the micro-hexapod is not centered
|
|
<<sec:tomo_hexa_trans>>
|
|
** Introduction :ignore:
|
|
In this section, the sample's center of mass is not aligned with the rotation axis anymore.
|
|
This is due to the fact that the micro-hexapod has performed some displacement.
|
|
|
|
No disturbances are included.
|
|
|
|
** Simulation Setup
|
|
We first set the wanted translation of the Micro Hexapod.
|
|
#+begin_src matlab
|
|
P_micro_hexapod = [0.01; 0; 0]; % [m]
|
|
#+end_src
|
|
|
|
We initialize the reference path.
|
|
#+begin_src matlab
|
|
initializeReferences('Dh_pos', [P_micro_hexapod; 0; 0; 0], 'Rz_type', 'rotating', 'Rz_period', 1);
|
|
#+end_src
|
|
|
|
We initialize the stages.
|
|
#+begin_src matlab
|
|
initializeMicroHexapod('AP', P_micro_hexapod);
|
|
#+end_src
|
|
|
|
And we initialize the disturbances to zero.
|
|
#+begin_src matlab
|
|
initializeDisturbances(...
|
|
'Dwx', false, ... % Ground Motion - X direction
|
|
'Dwy', false, ... % Ground Motion - Y direction
|
|
'Dwz', false, ... % Ground Motion - Z direction
|
|
'Fty_x', false, ... % Translation Stage - X direction
|
|
'Fty_z', false, ... % Translation Stage - Z direction
|
|
'Frz_z', false ... % Spindle - Z direction
|
|
);
|
|
#+end_src
|
|
|
|
We simulate the model.
|
|
#+begin_src matlab
|
|
sim('nass_model');
|
|
#+end_src
|
|
|
|
And we save the obtained data.
|
|
#+begin_src matlab
|
|
tomo_not_align = struct('t', t, 'MTr', MTr);
|
|
save('./mat/experiment_tomography.mat', 'tomo_not_align', '-append');
|
|
#+end_src
|
|
|
|
** Analysis
|
|
#+begin_src matlab
|
|
load('./mat/experiment_tomography.mat', 'tomo_not_align');
|
|
t = tomo_not_align.t;
|
|
MTr = tomo_not_align.MTr;
|
|
#+end_src
|
|
|
|
#+begin_src matlab
|
|
Edx = squeeze(MTr(1, 4, :));
|
|
Edy = squeeze(MTr(2, 4, :));
|
|
Edz = squeeze(MTr(3, 4, :));
|
|
% The angles obtained are u-v-w Euler angles (rotations in the moving frame)
|
|
Ery = atan2( squeeze(MTr(1, 3, :)), squeeze(sqrt(MTr(1, 1, :).^2 + MTr(1, 2, :).^2)));
|
|
Erx = atan2(-squeeze(MTr(2, 3, :))./cos(Ery), squeeze(MTr(3, 3, :))./cos(Ery));
|
|
Erz = atan2(-squeeze(MTr(1, 2, :))./cos(Ery), squeeze(MTr(1, 1, :))./cos(Ery));
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none
|
|
figure;
|
|
ax1 = subplot(1, 3, 1);
|
|
plot(t, Edx, 'DisplayName', '$\epsilon_{x}$')
|
|
ylabel('Displacement [m]');
|
|
legend('location', 'northeast');
|
|
|
|
ax2 = subplot(1, 3, 2);
|
|
plot(t, Edy, 'DisplayName', '$\epsilon_{y}$')
|
|
xlabel('Time [s]');
|
|
legend('location', 'northeast');
|
|
|
|
ax3 = subplot(1, 3, 3);
|
|
plot(t, Edz, 'DisplayName', '$\epsilon_{z}$')
|
|
legend('location', 'northeast');
|
|
|
|
linkaxes([ax1,ax2,ax3],'x');
|
|
xlim([2, inf]);
|
|
#+end_src
|
|
|
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
#+begin_src matlab :var filepath="figs/exp_tomo_offset_trans.pdf" :var figsize="full-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+NAME: fig:exp_tomo_offset_trans
|
|
#+CAPTION: X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances ([[./figs/exp_tomo_offset_trans.png][png]], [[./figs/exp_tomo_offset_trans.pdf][pdf]])
|
|
[[file:figs/exp_tomo_offset_trans.png]]
|
|
|
|
#+begin_src matlab :exports none
|
|
figure;
|
|
ax1 = subplot(1, 3, 1);
|
|
plot(t, Erx, 'DisplayName', '$\epsilon_{\theta x}$')
|
|
ylabel('Rotation [rad]');
|
|
legend('location', 'northeast');
|
|
|
|
ax2 = subplot(1, 3, 2);
|
|
plot(t, Ery, 'DisplayName', '$\epsilon_{\theta y}$')
|
|
xlabel('Time [s]');
|
|
legend('location', 'northeast');
|
|
|
|
ax3 = subplot(1, 3, 3);
|
|
plot(t, Erz, 'DisplayName', '$\epsilon_{\theta z}$')
|
|
legend('location', 'northeast');
|
|
|
|
linkaxes([ax1,ax2,ax3],'x');
|
|
xlim([2, inf]);
|
|
#+end_src
|
|
|
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
#+begin_src matlab :var filepath="figs/exp_tomo_offset_rot.pdf" :var figsize="full-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+NAME: fig:exp_tomo_offset_rot
|
|
#+CAPTION: X-Y-Z rotations of the sample w.r.t. granite when performing tomography experiment with no disturbances ([[./figs/exp_tomo_offset_rot.png][png]], [[./figs/exp_tomo_offset_rot.pdf][pdf]])
|
|
[[file:figs/exp_tomo_offset_rot.png]]
|
|
|
|
** Conclusion
|
|
|
|
#+begin_important
|
|
The main motions are translations in the X direction of the mobile platform (corresponds to the eccentricity of the micro-hexapod) and rotations along the rotating Y axis.
|
|
#+end_important
|
|
|
|
* Raster Scans with the translation stage
|
|
<<sec:ty_scans>>
|
|
** Introduction :ignore:
|
|
In this section, scans with the translation stage are performed.
|
|
|
|
** Simulation Setup
|
|
We set the reference path.
|
|
#+begin_src matlab
|
|
initializeReferences('Dy_type', 'triangular', 'Dy_amplitude', 10e-3, 'Dy_period', 1);
|
|
#+end_src
|
|
|
|
We initialize the stages.
|
|
#+begin_src matlab
|
|
initializeGround();
|
|
initializeGranite();
|
|
initializeTy();
|
|
initializeRy();
|
|
initializeRz();
|
|
initializeMicroHexapod();
|
|
initializeAxisc();
|
|
initializeMirror();
|
|
initializeNanoHexapod('actuator', 'piezo');
|
|
initializeSample('mass', 1);
|
|
#+end_src
|
|
|
|
And we initialize the disturbances to zero.
|
|
#+begin_src matlab
|
|
initializeDisturbances(...
|
|
'Dwx', false, ... % Ground Motion - X direction
|
|
'Dwy', false, ... % Ground Motion - Y direction
|
|
'Dwz', false, ... % Ground Motion - Z direction
|
|
'Fty_x', false, ... % Translation Stage - X direction
|
|
'Fty_z', false, ... % Translation Stage - Z direction
|
|
'Frz_z', false ... % Spindle - Z direction
|
|
);
|
|
#+end_src
|
|
|
|
We simulate the model.
|
|
#+begin_src matlab
|
|
sim('nass_model');
|
|
#+end_src
|
|
|
|
And we save the obtained data.
|
|
#+begin_src matlab
|
|
ty_scan = struct('t', t, 'MTr', MTr);
|
|
save('./mat/experiment_tomography.mat', 'ty_scan', '-append');
|
|
#+end_src
|
|
|
|
** Analysis
|
|
#+begin_src matlab
|
|
load('./mat/experiment_tomography.mat', 'ty_scan');
|
|
t = ty_scan.t;
|
|
MTr = ty_scan.MTr;
|
|
#+end_src
|
|
|
|
#+begin_src matlab
|
|
Edx = squeeze(MTr(1, 4, :));
|
|
Edy = squeeze(MTr(2, 4, :));
|
|
Edz = squeeze(MTr(3, 4, :));
|
|
% The angles obtained are u-v-w Euler angles (rotations in the moving frame)
|
|
Ery = atan2( squeeze(MTr(1, 3, :)), squeeze(sqrt(MTr(1, 1, :).^2 + MTr(1, 2, :).^2)));
|
|
Erx = atan2(-squeeze(MTr(2, 3, :))./cos(Ery), squeeze(MTr(3, 3, :))./cos(Ery));
|
|
Erz = atan2(-squeeze(MTr(1, 2, :))./cos(Ery), squeeze(MTr(1, 1, :))./cos(Ery));
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none
|
|
figure;
|
|
ax1 = subplot(1, 3, 1);
|
|
plot(t, Edx, 'DisplayName', '$\epsilon_{x}$')
|
|
ylabel('Displacement [m]');
|
|
legend('location', 'northeast');
|
|
|
|
ax2 = subplot(1, 3, 2);
|
|
plot(t, Edy, 'DisplayName', '$\epsilon_{y}$')
|
|
xlabel('Time [s]');
|
|
legend('location', 'northeast');
|
|
|
|
ax3 = subplot(1, 3, 3);
|
|
plot(t, Edz, 'DisplayName', '$\epsilon_{z}$')
|
|
legend('location', 'northeast');
|
|
|
|
linkaxes([ax1,ax2,ax3],'x');
|
|
xlim([2, inf]);
|
|
#+end_src
|
|
|
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
#+begin_src matlab :var filepath="figs/exp_ty_scan_trans.pdf" :var figsize="full-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+NAME: fig:exp_ty_scan_trans
|
|
#+CAPTION: X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances ([[./figs/exp_ty_scan_trans.png][png]], [[./figs/exp_ty_scan_trans.pdf][pdf]])
|
|
[[file:figs/exp_ty_scan_trans.png]]
|
|
|
|
#+begin_src matlab :exports none
|
|
figure;
|
|
ax1 = subplot(1, 3, 1);
|
|
plot(t, Erx, 'DisplayName', '$\epsilon_{\theta x}$')
|
|
ylabel('Rotation [rad]');
|
|
legend('location', 'northeast');
|
|
|
|
ax2 = subplot(1, 3, 2);
|
|
plot(t, Ery, 'DisplayName', '$\epsilon_{\theta y}$')
|
|
xlabel('Time [s]');
|
|
legend('location', 'northeast');
|
|
|
|
ax3 = subplot(1, 3, 3);
|
|
plot(t, Erz, 'DisplayName', '$\epsilon_{\theta z}$')
|
|
legend('location', 'northeast');
|
|
|
|
linkaxes([ax1,ax2,ax3],'x');
|
|
xlim([2, inf]);
|
|
#+end_src
|
|
|
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
#+begin_src matlab :var filepath="figs/exp_ty_scan_rot.pdf" :var figsize="full-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+NAME: fig:exp_ty_scan_rot
|
|
#+CAPTION: X-Y-Z rotations of the sample w.r.t. granite when performing tomography experiment with no disturbances ([[./figs/exp_ty_scan_rot.png][png]], [[./figs/exp_ty_scan_rot.pdf][pdf]])
|
|
[[file:figs/exp_ty_scan_rot.png]]
|
|
|
|
** Conclusion
|
|
|
|
#+begin_important
|
|
This is logic that the main error moving is translation along the Y axis and rotation along the X axis.
|
|
In order to reduce the errors, we can make a smoother reference path for the translation stage.
|
|
#+end_important
|