2020-02-25 18:10:20 +01:00
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en" >
< head >
2020-03-17 11:23:39 +01:00
<!-- 2020 - 03 - 17 mar. 11:21 -->
2020-02-25 18:10:20 +01:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
2020-03-17 11:23:39 +01:00
< title > Simulation of Scientific Experiments< / title >
2020-02-25 18:10:20 +01:00
< meta name = "generator" content = "Org mode" / >
< meta name = "author" content = "Dehaeze Thomas" / >
< style type = "text/css" >
<!-- /* --> <![CDATA[/*> <!-- */
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
< / style >
2020-02-25 18:21:17 +01:00
< link rel = "stylesheet" type = "text/css" href = "./css/htmlize.css" / >
< link rel = "stylesheet" type = "text/css" href = "./css/readtheorg.css" / >
< link rel = "stylesheet" type = "text/css" href = "./css/zenburn.css" / >
< script type = "text/javascript" src = "./js/jquery.min.js" > < / script >
< script type = "text/javascript" src = "./js/bootstrap.min.js" > < / script >
< script type = "text/javascript" src = "./js/jquery.stickytableheaders.min.js" > < / script >
< script type = "text/javascript" src = "./js/readtheorg.js" > < / script >
2020-02-25 18:10:20 +01:00
< script type = "text/javascript" >
2020-03-13 17:40:22 +01:00
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050& dn=gpl-3.0.txt GPL-v3-or-Later
2020-02-25 18:10:20 +01:00
<!-- /* --> <![CDATA[/*> <!-- */
2020-03-13 17:40:22 +01:00
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
2020-02-25 18:10:20 +01:00
< / script >
< / head >
< body >
< div id = "org-div-home-and-up" >
2020-02-25 18:21:17 +01:00
< a accesskey = "h" href = "./index.html" > UP < / a >
2020-02-25 18:10:20 +01:00
|
2020-02-25 18:21:17 +01:00
< a accesskey = "H" href = "./index.html" > HOME < / a >
2020-02-25 18:10:20 +01:00
< / div > < div id = "content" >
2020-03-17 11:23:39 +01:00
< h1 class = "title" > Simulation of Scientific Experiments< / h1 >
2020-02-25 18:10:20 +01:00
< div id = "table-of-contents" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
< li > < a href = "#org03b2a76" > 1. Simscape Model< / a > < / li >
< li > < a href = "#org6ed78a0" > 2. Tomography Experiment with no disturbances< / a >
< ul >
2020-03-17 11:23:39 +01:00
< li > < a href = "#org06c656a" > 2.1. Simulation Setup< / a > < / li >
< li > < a href = "#orgc5cbe68" > 2.2. Analysis< / a > < / li >
< li > < a href = "#org6c038f1" > 2.3. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
< li > < a href = "#org16d8e58" > 3. Tomography Experiment with included perturbations< / a >
< ul >
2020-03-17 11:23:39 +01:00
< li > < a href = "#org134f479" > 3.1. Simulation Setup< / a > < / li >
< li > < a href = "#org378d406" > 3.2. Analysis< / a > < / li >
< li > < a href = "#orgc315488" > 3.3. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
< li > < a href = "#org72f01ab" > 4. Tomography when the micro-hexapod is not centered< / a >
< ul >
2020-03-17 11:23:39 +01:00
< li > < a href = "#org0d9f411" > 4.1. Simulation Setup< / a > < / li >
< li > < a href = "#org80c3cd8" > 4.2. Analysis< / a > < / li >
< li > < a href = "#orgb310f81" > 4.3. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
< li > < a href = "#org8fa1632" > 5. Raster Scans with the translation stage< / a >
< ul >
2020-03-17 11:23:39 +01:00
< li > < a href = "#org0ba0ddd" > 5.1. Simulation Setup< / a > < / li >
< li > < a href = "#org140576f" > 5.2. Analysis< / a > < / li >
< li > < a href = "#org26e3394" > 5.3. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
< / ul >
< / div >
< / div >
< p >
2020-03-17 11:23:39 +01:00
The goal here is to simulate some scientific experiments with the Simscape model when no control is applied to the nano-hexapod.
2020-02-25 18:10:20 +01:00
< / p >
< p >
This has several goals:
< / p >
< ul class = "org-ul" >
< li > Validate the model< / li >
< li > Estimate the expected error motion for the experiments< / li >
< li > Estimate the stroke that we may need for the nano-hexapod< / li >
2020-03-17 11:23:39 +01:00
< li > Compare with experiments when control is applied< / li >
2020-02-25 18:10:20 +01:00
< / ul >
< p >
The document in organized as follow:
< / p >
< ul class = "org-ul" >
< li > In section < a href = "#orgfc7d050" > 1< / a > the Simscape model is initialized< / li >
< li > In section < a href = "#org3effbb8" > 2< / a > a tomography experiment is performed where the sample is aligned with the rotation axis. No disturbance is included< / li >
< li > In section < a href = "#org4e7f626" > 3< / a > , the same is done but with disturbance included< / li >
< li > In section < a href = "#orgb31e3fb" > 4< / a > the micro-hexapod translate the sample such that its center of mass is no longer aligned with the rotation axis. No disturbance is included< / li >
< li > In section < a href = "#org6aaeb53" > 5< / a > , scans with the translation stage are simulated with no perturbation included< / li >
< / ul >
< div id = "outline-container-org03b2a76" class = "outline-2" >
< h2 id = "org03b2a76" > < span class = "section-number-2" > 1< / span > Simscape Model< / h2 >
< div class = "outline-text-2" id = "text-1" >
< p >
< a id = "orgfc7d050" > < / a >
< / p >
< p >
We load the shared simulink configuration and we set the < code > StopTime< / code > .
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > load(< span class = "org-string" > 'mat/conf_simulink.mat'< / span > );
2020-03-17 11:23:39 +01:00
< span class = "org-matlab-simulink-keyword" > set_param< / span > (< span class = "org-variable-name" > conf_simulink< / span > , < span class = "org-string" > 'StopTime'< / span > , < span class = "org-string" > '2'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
We first initialize all the stages.
2020-03-17 11:23:39 +01:00
The nano-hexapod is considered to be a rigid body.
2020-02-25 18:10:20 +01:00
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
2020-03-17 11:23:39 +01:00
initializeNanoHexapod(< span class = "org-string" > 'type'< / span > , < span class = "org-string" > 'rigid'< / span > );
2020-02-25 18:10:20 +01:00
initializeSample(< span class = "org-string" > 'mass'< / span > , 1);
< / pre >
< / div >
< p >
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.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeReferences(< span class = "org-string" > 'Rz_type'< / span > , < span class = "org-string" > 'rotating'< / span > , < span class = "org-string" > 'Rz_period'< / span > , 1);
< / pre >
< / div >
2020-03-17 11:23:39 +01:00
< p >
No controller is used (Open Loop).
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeController(< span class = "org-string" > 'type'< / span > , < span class = "org-string" > 'open-loop'< / span > );
< / pre >
< / div >
< p >
And we put some gravity.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeSimscapeConfiguration(< span class = "org-string" > 'gravity'< / span > , < span class = "org-constant" > true< / span > );
< / pre >
< / div >
< p >
We log the signals for further analysis.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeLoggingConfiguration(< span class = "org-string" > 'log'< / span > , < span class = "org-string" > 'all'< / span > );
< / pre >
< / div >
2020-02-25 18:10:20 +01:00
< / div >
< / div >
< div id = "outline-container-org6ed78a0" class = "outline-2" >
< h2 id = "org6ed78a0" > < span class = "section-number-2" > 2< / span > Tomography Experiment with no disturbances< / h2 >
< div class = "outline-text-2" id = "text-2" >
< p >
< a id = "org3effbb8" > < / a >
< / p >
2020-03-17 11:23:39 +01:00
< p >
In this section, a tomography experiment is performed with the sample aligned with the rotation axis.
No disturbance is included.
< / p >
2020-02-25 18:10:20 +01:00
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org06c656a" class = "outline-3" >
< h3 id = "org06c656a" > < span class = "section-number-3" > 2.1< / span > Simulation Setup< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-1" >
< p >
And we initialize the disturbances to be equal to zero.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeDisturbances(...
< span class = "org-string" > 'Dwx'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - X direction< / span >
< span class = "org-string" > 'Dwy'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - Y direction< / span >
< span class = "org-string" > 'Dwz'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - Z direction< / span >
< span class = "org-string" > 'Fty_x'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Translation Stage - X direction< / span >
< span class = "org-string" > 'Fty_z'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Translation Stage - Z direction< / span >
< span class = "org-string" > 'Frz_z'< / span > , < span class = "org-constant" > false< / span > ...< span class = "org-comment" > % Spindle - Z direction< / span >
);
< / pre >
< / div >
< p >
We simulate the model.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-simulink-keyword" > sim< / span > (< span class = "org-string" > 'nass_model'< / span > );
< / pre >
< / div >
< p >
And we save the obtained data.
< / p >
< div class = "org-src-container" >
2020-03-17 11:23:39 +01:00
< pre class = "src src-matlab" > tomo_align_no_dist = simout;
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/experiment_tomography.mat'< / span > , < span class = "org-string" > 'tomo_align_no_dist'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-orgc5cbe68" class = "outline-3" >
< h3 id = "orgc5cbe68" > < span class = "section-number-3" > 2.2< / span > Analysis< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-2" >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/experiment_tomography.mat'< / span > , < span class = "org-string" > 'tomo_align_no_dist'< / span > );
2020-02-25 18:10:20 +01:00
t = tomo_align_no_dist.t;
MTr = tomo_align_no_dist.MTr;
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > Edx = squeeze(MTr(1, 4, < span class = "org-type" > :< / span > ));
Edy = squeeze(MTr(2, 4, < span class = "org-type" > :< / span > ));
Edz = squeeze(MTr(3, 4, < span class = "org-type" > :< / span > ));
< span class = "org-comment" > % The angles obtained are u-v-w Euler angles (rotations in the moving frame)< / span >
Ery = atan2( squeeze(MTr(1, 3, < span class = "org-type" > :< / span > )), squeeze(sqrt(MTr(1, 1, < span class = "org-type" > :< / span > )< span class = "org-type" > .^< / span > 2 < span class = "org-type" > +< / span > MTr(1, 2, < span class = "org-type" > :< / span > )< span class = "org-type" > .^< / span > 2)));
Erx = atan2(< span class = "org-type" > -< / span > squeeze(MTr(2, 3, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery), squeeze(MTr(3, 3, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery));
Erz = atan2(< span class = "org-type" > -< / span > squeeze(MTr(1, 2, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery), squeeze(MTr(1, 1, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery));
< / pre >
< / div >
< div id = "org47272c3" class = "figure" >
< p > < img src = "figs/exp_tomo_without_dist_trans.png" alt = "exp_tomo_without_dist_trans.png" / >
< / p >
< p > < span class = "figure-number" > Figure 1: < / span > X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances (< a href = "./figs/exp_tomo_without_dist_trans.png" > png< / a > , < a href = "./figs/exp_tomo_without_dist_trans.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org72f4825" class = "figure" >
< p > < img src = "figs/exp_tomo_without_dist_rot.png" alt = "exp_tomo_without_dist_rot.png" / >
< / p >
< p > < span class = "figure-number" > Figure 2: < / span > X-Y-Z rotations of the sample w.r.t. granite when performing tomography experiment with no disturbances (< a href = "./figs/exp_tomo_without_dist_rot.png" > png< / a > , < a href = "./figs/exp_tomo_without_dist_rot.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org6c038f1" class = "outline-3" >
< h3 id = "org6c038f1" > < span class = "section-number-3" > 2.3< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-3" >
< div class = "important" >
< p >
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.
< / p >
< / div >
< / div >
< / div >
< / div >
< div id = "outline-container-org16d8e58" class = "outline-2" >
< h2 id = "org16d8e58" > < span class = "section-number-2" > 3< / span > Tomography Experiment with included perturbations< / h2 >
< div class = "outline-text-2" id = "text-3" >
< p >
< a id = "org4e7f626" > < / a >
< / p >
2020-03-17 11:23:39 +01:00
< p >
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.
< / p >
2020-02-25 18:10:20 +01:00
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org134f479" class = "outline-3" >
< h3 id = "org134f479" > < span class = "section-number-3" > 3.1< / span > Simulation Setup< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-1" >
< p >
We now activate the disturbances.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeDisturbances(...
< span class = "org-string" > 'Dwx'< / span > , < span class = "org-constant" > true< / span > , ...< span class = "org-comment" > % Ground Motion - X direction< / span >
< span class = "org-string" > 'Dwy'< / span > , < span class = "org-constant" > true< / span > , ...< span class = "org-comment" > % Ground Motion - Y direction< / span >
< span class = "org-string" > 'Dwz'< / span > , < span class = "org-constant" > true< / span > , ...< span class = "org-comment" > % Ground Motion - Z direction< / span >
< span class = "org-string" > 'Fty_x'< / span > , < span class = "org-constant" > true< / span > , ...< span class = "org-comment" > % Translation Stage - X direction< / span >
< span class = "org-string" > 'Fty_z'< / span > , < span class = "org-constant" > true< / span > , ...< span class = "org-comment" > % Translation Stage - Z direction< / span >
< span class = "org-string" > 'Frz_z'< / span > , < span class = "org-constant" > true< / span > ...< span class = "org-comment" > % Spindle - Z direction< / span >
);
< / pre >
< / div >
< p >
We simulate the model.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-simulink-keyword" > sim< / span > (< span class = "org-string" > 'nass_model'< / span > );
< / pre >
< / div >
< p >
And we save the obtained data.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > tomo_align_dist = struct(< span class = "org-string" > 't'< / span > , t, < span class = "org-string" > 'MTr'< / span > , MTr);
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/experiment_tomography.mat'< / span > , < span class = "org-string" > 'tomo_align_dist'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org378d406" class = "outline-3" >
< h3 id = "org378d406" > < span class = "section-number-3" > 3.2< / span > Analysis< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-2" >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/experiment_tomography.mat'< / span > , < span class = "org-string" > 'tomo_align_dist'< / span > );
2020-02-25 18:10:20 +01:00
t = tomo_align_dist.t;
MTr = tomo_align_dist.MTr;
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > Edx = squeeze(MTr(1, 4, < span class = "org-type" > :< / span > ));
Edy = squeeze(MTr(2, 4, < span class = "org-type" > :< / span > ));
Edz = squeeze(MTr(3, 4, < span class = "org-type" > :< / span > ));
< span class = "org-comment" > % The angles obtained are u-v-w Euler angles (rotations in the moving frame)< / span >
Ery = atan2( squeeze(MTr(1, 3, < span class = "org-type" > :< / span > )), squeeze(sqrt(MTr(1, 1, < span class = "org-type" > :< / span > )< span class = "org-type" > .^< / span > 2 < span class = "org-type" > +< / span > MTr(1, 2, < span class = "org-type" > :< / span > )< span class = "org-type" > .^< / span > 2)));
Erx = atan2(< span class = "org-type" > -< / span > squeeze(MTr(2, 3, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery), squeeze(MTr(3, 3, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery));
Erz = atan2(< span class = "org-type" > -< / span > squeeze(MTr(1, 2, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery), squeeze(MTr(1, 1, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery));
< / pre >
< / div >
< div id = "org5b3411f" class = "figure" >
< p > < img src = "figs/exp_tomo_dist_trans.png" alt = "exp_tomo_dist_trans.png" / >
< / p >
< p > < span class = "figure-number" > Figure 3: < / span > X-Y-Z translation of the sample w.r.t. the granite when performing tomography experiment with disturbances (< a href = "./figs/exp_tomo_dist_trans.png" > png< / a > , < a href = "./figs/exp_tomo_dist_trans.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org7934376" class = "figure" >
< p > < img src = "figs/exp_tomo_dist_rot.png" alt = "exp_tomo_dist_rot.png" / >
< / p >
< p > < span class = "figure-number" > Figure 4: < / span > X-Y-Z rotations of the sample w.r.t. the granite when performing tomography experiment with disturbances (< a href = "./figs/exp_tomo_dist_rot.png" > png< / a > , < a href = "./figs/exp_tomo_dist_rot.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-orgc315488" class = "outline-3" >
< h3 id = "orgc315488" > < span class = "section-number-3" > 3.3< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-3" >
< div class = "important" >
< p >
Error motion is what expected from the disturbance measurements.
< / p >
< / div >
< / div >
< / div >
< / div >
< div id = "outline-container-org72f01ab" class = "outline-2" >
< h2 id = "org72f01ab" > < span class = "section-number-2" > 4< / span > Tomography when the micro-hexapod is not centered< / h2 >
< div class = "outline-text-2" id = "text-4" >
< p >
< a id = "orgb31e3fb" > < / a >
< / p >
2020-03-17 11:23:39 +01:00
< p >
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.
< / p >
< p >
No disturbances are included.
< / p >
2020-02-25 18:10:20 +01:00
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org0d9f411" class = "outline-3" >
< h3 id = "org0d9f411" > < span class = "section-number-3" > 4.1< / span > Simulation Setup< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-1" >
< p >
We first set the wanted translation of the Micro Hexapod.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > P_micro_hexapod = [0.01; 0; 0]; < span class = "org-comment" > % [m]< / span >
< / pre >
< / div >
< p >
We initialize the reference path.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeReferences(< span class = "org-string" > 'Dh_pos'< / span > , [P_micro_hexapod; 0; 0; 0], < span class = "org-string" > 'Rz_type'< / span > , < span class = "org-string" > 'rotating'< / span > , < span class = "org-string" > 'Rz_period'< / span > , 1);
< / pre >
< / div >
< p >
We initialize the stages.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeMicroHexapod(< span class = "org-string" > 'AP'< / span > , P_micro_hexapod);
< / pre >
< / div >
< p >
And we initialize the disturbances to zero.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeDisturbances(...
< span class = "org-string" > 'Dwx'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - X direction< / span >
< span class = "org-string" > 'Dwy'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - Y direction< / span >
< span class = "org-string" > 'Dwz'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - Z direction< / span >
< span class = "org-string" > 'Fty_x'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Translation Stage - X direction< / span >
< span class = "org-string" > 'Fty_z'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Translation Stage - Z direction< / span >
< span class = "org-string" > 'Frz_z'< / span > , < span class = "org-constant" > false< / span > ...< span class = "org-comment" > % Spindle - Z direction< / span >
);
< / pre >
< / div >
< p >
We simulate the model.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-simulink-keyword" > sim< / span > (< span class = "org-string" > 'nass_model'< / span > );
< / pre >
< / div >
< p >
And we save the obtained data.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > tomo_not_align = struct(< span class = "org-string" > 't'< / span > , t, < span class = "org-string" > 'MTr'< / span > , MTr);
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/experiment_tomography.mat'< / span > , < span class = "org-string" > 'tomo_not_align'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org80c3cd8" class = "outline-3" >
< h3 id = "org80c3cd8" > < span class = "section-number-3" > 4.2< / span > Analysis< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-2" >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/experiment_tomography.mat'< / span > , < span class = "org-string" > 'tomo_not_align'< / span > );
2020-02-25 18:10:20 +01:00
t = tomo_not_align.t;
MTr = tomo_not_align.MTr;
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > Edx = squeeze(MTr(1, 4, < span class = "org-type" > :< / span > ));
Edy = squeeze(MTr(2, 4, < span class = "org-type" > :< / span > ));
Edz = squeeze(MTr(3, 4, < span class = "org-type" > :< / span > ));
< span class = "org-comment" > % The angles obtained are u-v-w Euler angles (rotations in the moving frame)< / span >
Ery = atan2( squeeze(MTr(1, 3, < span class = "org-type" > :< / span > )), squeeze(sqrt(MTr(1, 1, < span class = "org-type" > :< / span > )< span class = "org-type" > .^< / span > 2 < span class = "org-type" > +< / span > MTr(1, 2, < span class = "org-type" > :< / span > )< span class = "org-type" > .^< / span > 2)));
Erx = atan2(< span class = "org-type" > -< / span > squeeze(MTr(2, 3, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery), squeeze(MTr(3, 3, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery));
Erz = atan2(< span class = "org-type" > -< / span > squeeze(MTr(1, 2, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery), squeeze(MTr(1, 1, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery));
< / pre >
< / div >
< div id = "org40355c3" class = "figure" >
< p > < img src = "figs/exp_tomo_offset_trans.png" alt = "exp_tomo_offset_trans.png" / >
< / p >
< p > < span class = "figure-number" > Figure 5: < / span > X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances (< a href = "./figs/exp_tomo_offset_trans.png" > png< / a > , < a href = "./figs/exp_tomo_offset_trans.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org3f64362" class = "figure" >
< p > < img src = "figs/exp_tomo_offset_rot.png" alt = "exp_tomo_offset_rot.png" / >
< / p >
< p > < span class = "figure-number" > Figure 6: < / span > X-Y-Z rotations of the sample w.r.t. granite when performing tomography experiment with no disturbances (< a href = "./figs/exp_tomo_offset_rot.png" > png< / a > , < a href = "./figs/exp_tomo_offset_rot.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-orgb310f81" class = "outline-3" >
< h3 id = "orgb310f81" > < span class = "section-number-3" > 4.3< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-3" >
< div class = "important" >
< p >
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.
< / p >
< / div >
< / div >
< / div >
< / div >
< div id = "outline-container-org8fa1632" class = "outline-2" >
< h2 id = "org8fa1632" > < span class = "section-number-2" > 5< / span > Raster Scans with the translation stage< / h2 >
< div class = "outline-text-2" id = "text-5" >
< p >
< a id = "org6aaeb53" > < / a >
< / p >
2020-03-17 11:23:39 +01:00
< p >
In this section, scans with the translation stage are performed.
< / p >
2020-02-25 18:10:20 +01:00
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org0ba0ddd" class = "outline-3" >
< h3 id = "org0ba0ddd" > < span class = "section-number-3" > 5.1< / span > Simulation Setup< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-1" >
< p >
We set the reference path.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeReferences(< span class = "org-string" > 'Dy_type'< / span > , < span class = "org-string" > 'triangular'< / span > , < span class = "org-string" > 'Dy_amplitude'< / span > , 10e< span class = "org-type" > -< / span > 3, < span class = "org-string" > 'Dy_period'< / span > , 1);
< / pre >
< / div >
< p >
We initialize the stages.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 1);
< / pre >
< / div >
< p >
And we initialize the disturbances to zero.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeDisturbances(...
< span class = "org-string" > 'Dwx'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - X direction< / span >
< span class = "org-string" > 'Dwy'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - Y direction< / span >
< span class = "org-string" > 'Dwz'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Ground Motion - Z direction< / span >
< span class = "org-string" > 'Fty_x'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Translation Stage - X direction< / span >
< span class = "org-string" > 'Fty_z'< / span > , < span class = "org-constant" > false< / span > , ...< span class = "org-comment" > % Translation Stage - Z direction< / span >
< span class = "org-string" > 'Frz_z'< / span > , < span class = "org-constant" > false< / span > ...< span class = "org-comment" > % Spindle - Z direction< / span >
);
< / pre >
< / div >
< p >
We simulate the model.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-simulink-keyword" > sim< / span > (< span class = "org-string" > 'nass_model'< / span > );
< / pre >
< / div >
< p >
And we save the obtained data.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > ty_scan = struct(< span class = "org-string" > 't'< / span > , t, < span class = "org-string" > 'MTr'< / span > , MTr);
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/experiment_tomography.mat'< / span > , < span class = "org-string" > 'ty_scan'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org140576f" class = "outline-3" >
< h3 id = "org140576f" > < span class = "section-number-3" > 5.2< / span > Analysis< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-2" >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/experiment_tomography.mat'< / span > , < span class = "org-string" > 'ty_scan'< / span > );
2020-02-25 18:10:20 +01:00
t = ty_scan.t;
MTr = ty_scan.MTr;
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > Edx = squeeze(MTr(1, 4, < span class = "org-type" > :< / span > ));
Edy = squeeze(MTr(2, 4, < span class = "org-type" > :< / span > ));
Edz = squeeze(MTr(3, 4, < span class = "org-type" > :< / span > ));
< span class = "org-comment" > % The angles obtained are u-v-w Euler angles (rotations in the moving frame)< / span >
Ery = atan2( squeeze(MTr(1, 3, < span class = "org-type" > :< / span > )), squeeze(sqrt(MTr(1, 1, < span class = "org-type" > :< / span > )< span class = "org-type" > .^< / span > 2 < span class = "org-type" > +< / span > MTr(1, 2, < span class = "org-type" > :< / span > )< span class = "org-type" > .^< / span > 2)));
Erx = atan2(< span class = "org-type" > -< / span > squeeze(MTr(2, 3, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery), squeeze(MTr(3, 3, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery));
Erz = atan2(< span class = "org-type" > -< / span > squeeze(MTr(1, 2, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery), squeeze(MTr(1, 1, < span class = "org-type" > :< / span > ))< span class = "org-type" > ./< / span > cos(Ery));
< / pre >
< / div >
< div id = "org042610c" class = "figure" >
< p > < img src = "figs/exp_ty_scan_trans.png" alt = "exp_ty_scan_trans.png" / >
< / p >
< p > < span class = "figure-number" > Figure 7: < / span > X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances (< a href = "./figs/exp_ty_scan_trans.png" > png< / a > , < a href = "./figs/exp_ty_scan_trans.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org26a730c" class = "figure" >
< p > < img src = "figs/exp_ty_scan_rot.png" alt = "exp_ty_scan_rot.png" / >
< / p >
< p > < span class = "figure-number" > Figure 8: < / span > X-Y-Z rotations of the sample w.r.t. granite when performing tomography experiment with no disturbances (< a href = "./figs/exp_ty_scan_rot.png" > png< / a > , < a href = "./figs/exp_ty_scan_rot.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-17 11:23:39 +01:00
< div id = "outline-container-org26e3394" class = "outline-3" >
< h3 id = "org26e3394" > < span class = "section-number-3" > 5.3< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-3" >
< div class = "important" >
< p >
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.
< / p >
< / div >
< / div >
< / div >
< / div >
< / div >
< div id = "postamble" class = "status" >
< p class = "author" > Author: Dehaeze Thomas< / p >
2020-03-17 11:23:39 +01:00
< p class = "date" > Created: 2020-03-17 mar. 11:21< / p >
2020-02-25 18:10:20 +01:00
< / div >
< / body >
< / html >