Started the stiffness analysis / noise budgeting

This commit is contained in:
Thomas Dehaeze 2020-04-07 15:26:29 +02:00
parent e2e09955bf
commit ae89d0ea19
19 changed files with 2785 additions and 433 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

View File

@ -4,7 +4,7 @@
"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-04-01 mer. 17:19 -->
<!-- 2020-04-07 mar. 14:55 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simscape Model of the Nano-Active-Stabilization-System</title>
@ -249,7 +249,7 @@
<li><a href="#org0605048">10. Effect of support&rsquo;s compliance on the plant dynamics (link)</a></li>
<li><a href="#orge777d0f">11. Effect of the payload&rsquo;s &ldquo;impedance&rdquo; on the plant dynamics (link)</a></li>
<li><a href="#orga323881">12. Effect of Experimental conditions on the plant dynamics (link)</a></li>
<li><a href="#org1adf7f6">13. Optimal Stiffness of the nano-hexapod (link)</a></li>
<li><a href="#orge7b9b41">13. Optimal Stiffness of the nano-hexapod to reduce plant uncertainty (link)</a></li>
<li><a href="#org14a10e8">14. Active Damping Techniques on the full Simscape Model (link)</a></li>
<li><a href="#orgd818a00">15. Control of the Nano-Active-Stabilization-System (link)</a></li>
<li><a href="#org361f405">16. Useful Matlab Functions (link)</a></li>
@ -407,8 +407,8 @@ Conclusion are drawn about what experimental conditions are critical on the vari
</div>
</div>
<div id="outline-container-org1adf7f6" class="outline-2">
<h2 id="org1adf7f6"><span class="section-number-2">13</span> Optimal Stiffness of the nano-hexapod (<a href="optimal_stiffness.html">link</a>)</h2>
<div id="outline-container-orge7b9b41" class="outline-2">
<h2 id="orge7b9b41"><span class="section-number-2">13</span> Optimal Stiffness of the nano-hexapod to reduce plant uncertainty (<a href="uncertainty_optimal_stiffness.html">link</a>)</h2>
</div>
<div id="outline-container-org14a10e8" class="outline-2">
@ -444,7 +444,7 @@ These functions are all defined <a href="./functions.html">here</a>.
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-01 mer. 17:19</p>
<p class="date">Created: 2020-04-07 mar. 14:55</p>
</div>
</body>
</html>

View File

@ -0,0 +1,804 @@
<?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-04-07 mar. 14:57 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Determination of the optimal nano-hexapod&rsquo;s stiffness for reducing the effect of disturbances</title>
<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>
<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>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&amp;dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
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
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="index.html"> UP </a>
|
<a accesskey="H" href="index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Determination of the optimal nano-hexapod&rsquo;s stiffness for reducing the effect of disturbances</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org72be3da">1. Spectral Density of Disturbances label:sec:psd_disturbances</a>
<ul>
<li><a href="#orge84ae10">1.1. Load of the identified disturbances</a></li>
<li><a href="#org0bec7fc">1.2. Plots</a></li>
</ul>
</li>
<li><a href="#orgc44cf7e">2. Effect of disturbances on the position error</a>
<ul>
<li><a href="#org524df41">2.1. Initialization</a></li>
<li><a href="#orgaf88c9f">2.2. Identification</a></li>
<li><a href="#org2b8e5e0">2.3. Plots</a></li>
<li><a href="#org71f73c5">2.4. Save</a></li>
</ul>
</li>
<li><a href="#org6527e58">3. Effect of granite stiffness</a>
<ul>
<li><a href="#orgd3e5fe1">3.1. Analytical Analysis</a></li>
<li><a href="#org9215f81">3.2. Soft Granite</a></li>
<li><a href="#org8878556">3.3. Effect of the Granite transfer function</a></li>
</ul>
</li>
<li><a href="#org8a88fb0">4. Open Loop Budget Error</a>
<ul>
<li><a href="#org2ee8120">4.1. Load of the identified disturbances and transfer functions</a></li>
<li><a href="#orgb1a3177">4.2. Equations</a></li>
<li><a href="#org63eade9">4.3. Results</a></li>
<li><a href="#orgef96b89">4.4. Cumulative Amplitude Spectrum</a></li>
</ul>
</li>
<li><a href="#org34c0f38">5. Closed Loop Budget Error</a>
<ul>
<li><a href="#orgf2d36a1">5.1. Reduction thanks to feedback - Required bandwidth</a></li>
</ul>
</li>
<li><a href="#orgea74617">6. Conclusion</a></li>
</ul>
</div>
</div>
<ul class="org-ul">
<li><a href="#org17d3d6a">1</a></li>
<li><a href="#orgf9e4300">2</a></li>
<li><a href="#orgd4105b6">3</a></li>
<li><a href="#org5d05990">4</a></li>
<li><a href="#orgd3503fb">5</a></li>
</ul>
<ul class="org-ul">
<li><a href="#sec:psd_disturbances">sec:psd_disturbances</a></li>
<li><a href="#sec:effect_disturbances">sec:effect_disturbances</a></li>
<li><a href="#sec:granite_stiffness">sec:granite_stiffness</a></li>
<li><a href="#sec:open_loop_budget_error">sec:open_loop_budget_error</a></li>
<li><a href="#sec:closed_loop_budget_error">sec:closed_loop_budget_error</a></li>
</ul>
<div id="outline-container-org72be3da" class="outline-2">
<h2 id="org72be3da"><span class="section-number-2">1</span> Spectral Density of Disturbances <div id="sec:psd_disturbances"></div></h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org17d3d6a"></a>
</p>
<p>
The level of disturbances has been identified form experiments.
This is detailed in <a href="disturbances.html">this</a> document.
</p>
</div>
<div id="outline-container-orge84ae10" class="outline-3">
<h3 id="orge84ae10"><span class="section-number-3">1.1</span> Load of the identified disturbances</h3>
<div class="outline-text-3" id="text-1-1">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org0bec7fc" class="outline-3">
<h3 id="org0bec7fc"><span class="section-number-3">1.2</span> Plots</h3>
</div>
</div>
<div id="outline-container-orgc44cf7e" class="outline-2">
<h2 id="orgc44cf7e"><span class="section-number-2">2</span> Effect of disturbances on the position error</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orgf9e4300"></a>
</p>
</div>
<div id="outline-container-org524df41" class="outline-3">
<h3 id="org524df41"><span class="section-number-3">2.1</span> Initialization</h3>
<div class="outline-text-3" id="text-2-1">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
</pre>
</div>
<p>
We use a sample mass of 10kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'mass'</span>, 10);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
initializeController();
</pre>
</div>
</div>
</div>
<div id="outline-container-orgaf88c9f" class="outline-3">
<h3 id="orgaf88c9f"><span class="section-number-3">2.2</span> Identification</h3>
<div class="outline-text-3" id="text-2-2">
<p>
Inputs:
</p>
<ul class="org-ul">
<li><code>Dwx</code>: Ground displacement in the \(x\) direction</li>
<li><code>Dwy</code>: Ground displacement in the \(y\) direction</li>
<li><code>Dwz</code>: Ground displacement in the \(z\) direction</li>
<li><code>Fty_x</code>: Forces applied by the Translation stage in the \(x\) direction</li>
<li><code>Fty_z</code>: Forces applied by the Translation stage in the \(z\) direction</li>
<li><code>Frz_z</code>: Forces applied by the Spindle in the \(z\) direction</li>
<li><code>Fd</code>: Direct forces applied at the center of mass of the Payload</li>
</ul>
<div class="org-src-container">
<pre class="src src-matlab">Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'Dwx'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% X Ground motion</span>
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'Dwy'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Y Ground motion</span>
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'Dwz'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Z Ground motion</span>
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'Fty_x'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Parasitic force Ty - X</span>
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'Fty_z'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Parasitic force Ty - Z</span>
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'Frz_z'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Parasitic force Rz - Z</span>
io(io_i) = linio([mdl, <span class="org-string">'/Disturbances'</span>], 1, <span class="org-string">'openinput'</span>, [], <span class="org-string">'Fd'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Direct forces</span>
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Error</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
initializeNanoHexapod(<span class="org-string">'k'</span>, Ks(<span class="org-constant">i</span>));
<span class="org-comment">% Run the linearization</span>
G = linearize(mdl, io);
G.InputName = {<span class="org-string">'Dwx'</span>, <span class="org-string">'Dwy'</span>, <span class="org-string">'Dwz'</span>, <span class="org-string">'Fty_x'</span>, <span class="org-string">'Fty_z'</span>, <span class="org-string">'Frz_z'</span>, <span class="org-string">'Fdx'</span>, <span class="org-string">'Fdy'</span>, <span class="org-string">'Fdz'</span>, <span class="org-string">'Mdx'</span>, <span class="org-string">'Mdy'</span>, <span class="org-string">'Mdz'</span>};
G.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">'Ey'</span>, <span class="org-string">'Ez'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
Gd(<span class="org-constant">i</span>) = {minreal(G)};
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org2b8e5e0" class="outline-3">
<h3 id="org2b8e5e0"><span class="section-number-3">2.3</span> Plots</h3>
<div class="outline-text-3" id="text-2-3">
<p>
Effect of Stages vibration (Filtering).
Effect of Ground motion (Transmissibility).
Direct Forces (Compliance).
</p>
</div>
</div>
<div id="outline-container-org71f73c5" class="outline-3">
<h3 id="org71f73c5"><span class="section-number-3">2.4</span> Save</h3>
<div class="outline-text-3" id="text-2-4">
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./mat/opt_stiffness_disturbances.mat'</span>, <span class="org-string">'Gd'</span>)
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org6527e58" class="outline-2">
<h2 id="org6527e58"><span class="section-number-2">3</span> Effect of granite stiffness</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="orgd4105b6"></a>
</p>
</div>
<div id="outline-container-orgd3e5fe1" class="outline-3">
<h3 id="orgd3e5fe1"><span class="section-number-3">3.1</span> Analytical Analysis</h3>
<div class="outline-text-3" id="text-3-1">
<div id="org8fb9606" class="figure">
<p><img src="figs/2dof_system_granite_stiffness.png" alt="2dof_system_granite_stiffness.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Figure caption</p>
</div>
<p>
If we write the equation of motion of the system in Figure <a href="#org8fb9606">1</a>, we obtain:
</p>
\begin{align}
m^\prime s^2 x^\prime &= (c^\prime s + k^\prime) (x - x^\prime) \\
ms^2 x &= (c^\prime s + k^\prime) (x^\prime - x) + (cs + k) (x_w - x)
\end{align}
<p>
If we note \(d = x^\prime - x\), we obtain:
</p>
\begin{equation}
\label{org4396920}
\frac{d}{x_w} = \frac{-m^\prime s^2 (cs + k)}{ (m^\prime s^2 + c^\prime s + k^\prime) (ms^2 + cs + k) + m^\prime s^2(c^\prime s + k^\prime)}
\end{equation}
</div>
</div>
<div id="outline-container-org9215f81" class="outline-3">
<h3 id="org9215f81"><span class="section-number-3">3.2</span> Soft Granite</h3>
<div class="outline-text-3" id="text-3-2">
<p>
Let&rsquo;s initialize a soft granite that will act as an isolation stage from ground motion.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGranite(<span class="org-string">'K'</span>, 5e5<span class="org-type">*</span>ones(3,1), <span class="org-string">'C'</span>, 5e3<span class="org-type">*</span>ones(3,1));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
initializeNanoHexapod(<span class="org-string">'k'</span>, Ks(<span class="org-constant">i</span>));
G = linearize(mdl, io);
G.InputName = {<span class="org-string">'Dwx'</span>, <span class="org-string">'Dwy'</span>, <span class="org-string">'Dwz'</span>, <span class="org-string">'Fty_x'</span>, <span class="org-string">'Fty_z'</span>, <span class="org-string">'Frz_z'</span>, <span class="org-string">'Fdx'</span>, <span class="org-string">'Fdy'</span>, <span class="org-string">'Fdz'</span>, <span class="org-string">'Mdx'</span>, <span class="org-string">'Mdy'</span>, <span class="org-string">'Mdz'</span>};
G.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">'Ey'</span>, <span class="org-string">'Ez'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
Gdr(<span class="org-constant">i</span>) = {minreal(G)};
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org8878556" class="outline-3">
<h3 id="org8878556"><span class="section-number-3">3.3</span> Effect of the Granite transfer function</h3>
</div>
</div>
<div id="outline-container-org8a88fb0" class="outline-2">
<h2 id="org8a88fb0"><span class="section-number-2">4</span> Open Loop Budget Error</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="org5d05990"></a>
</p>
</div>
<div id="outline-container-org2ee8120" class="outline-3">
<h3 id="org2ee8120"><span class="section-number-3">4.1</span> Load of the identified disturbances and transfer functions</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
load(<span class="org-string">'./mat/opt_stiffness_disturbances.mat'</span>, <span class="org-string">'Gd'</span>)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb1a3177" class="outline-3">
<h3 id="orgb1a3177"><span class="section-number-3">4.2</span> Equations</h3>
</div>
<div id="outline-container-org63eade9" class="outline-3">
<h3 id="org63eade9"><span class="section-number-3">4.3</span> Results</h3>
<div class="outline-text-3" id="text-4-3">
<p>
Effect of all disturbances
</p>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(dist_f.psd_rz)<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Frz_z'</span>), freqs, <span class="org-string">'Hz'</span>))));
<span class="org-keyword">end</span>
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'ASD $\left[\frac{m}{\sqrt{Hz}}\right]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>);
xlim([2, 500]);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgef96b89" class="outline-3">
<h3 id="orgef96b89"><span class="section-number-3">4.4</span> Cumulative Amplitude Spectrum</h3>
<div class="outline-text-3" id="text-4-4">
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_ty<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Fty_z'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>);
xlim([2, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_rz<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Frz_z'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>);
xlim([2, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre>
</div>
<p>
Ground motion
</p>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Dwz'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([2, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ex'</span>, <span class="org-string">'Dwx'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'lin'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([2, 500]);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ey'</span>, <span class="org-string">'Dwy'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'lin'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([2, 500]);
</pre>
</div>
<p>
Sum of all perturbations
</p>
<div class="org-src-container">
<pre class="src src-matlab">psd_tot = zeros(length(freqs), length(Ks));
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>) = dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Dwz'</span> ), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2 <span class="org-type">+</span> ...
dist_f.psd_ty<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Fty_z'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2 <span class="org-type">+</span> ...
dist_f.psd_rz<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Frz_z'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
<span class="org-keyword">end</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>))))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_z$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([1, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org34c0f38" class="outline-2">
<h2 id="org34c0f38"><span class="section-number-2">5</span> Closed Loop Budget Error</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="orgd3503fb"></a>
</p>
</div>
<div id="outline-container-orgf2d36a1" class="outline-3">
<h3 id="orgf2d36a1"><span class="section-number-3">5.1</span> Reduction thanks to feedback - Required bandwidth</h3>
<div class="outline-text-3" id="text-5-1">
<div class="org-src-container">
<pre class="src src-matlab">wc = 1<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span>; <span class="org-comment">% [rad/s]</span>
xic = 0.5;
S = (s<span class="org-type">/</span>wc)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc);
bodeFig({S}, logspace(<span class="org-type">-</span>1,2,1000))
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">wc = [1, 5, 10, 20, 50, 100, 200];
S1 = {zeros(length(wc), 1)};
S2 = {zeros(length(wc), 1)};
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">j</span></span> = <span class="org-constant">1:length(wc)</span>
L = (2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>))<span class="org-type">/</span>s; <span class="org-comment">% Simple integrator</span>
S1{<span class="org-constant">j</span>} = 1<span class="org-type">/</span>(1 <span class="org-type">+</span> L);
L = ((2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>))<span class="org-type">/</span>s)<span class="org-type">^</span>2<span class="org-type">*</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>)<span class="org-type">/</span>2))<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>)<span class="org-type">*</span>2));
S2{<span class="org-constant">j</span>} = 1<span class="org-type">/</span>(1 <span class="org-type">+</span> L);
<span class="org-keyword">end</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-constant">i</span> = 6;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">j</span></span> = <span class="org-constant">1:length(wc)</span>
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>,<span class="org-string">'ColorOrderIndex'</span>,<span class="org-constant">j</span>);
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(abs(squeeze(freqresp(S1{<span class="org-constant">j</span>}, freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2<span class="org-type">.*</span>psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>))))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$\\omega_c = %.0f$ [Hz]'</span>, wc(<span class="org-constant">j</span>)));
<span class="org-keyword">end</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>))))), <span class="org-string">'k-'</span>, ...
<span class="org-string">'DisplayName'</span>, <span class="org-string">'Open-Loop'</span>);
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([0.5, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">wc = logspace(0, 3, 100);
Dz1_rms = zeros(length(Ks), length(wc));
Dz2_rms = zeros(length(Ks), length(wc));
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">j</span></span> = <span class="org-constant">1:length(wc)</span>
L = (2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>))<span class="org-type">/</span>s;
Dz1_rms(<span class="org-constant">i</span>, <span class="org-constant">j</span>) = sqrt(trapz(freqs, abs(squeeze(freqresp(1<span class="org-type">/</span>(1 <span class="org-type">+</span> L), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2<span class="org-type">.*</span>psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>)));
L = ((2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>))<span class="org-type">/</span>s)<span class="org-type">^</span>2<span class="org-type">*</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>)<span class="org-type">/</span>2))<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>)<span class="org-type">*</span>2));
Dz2_rms(<span class="org-constant">i</span>, <span class="org-constant">j</span>) = sqrt(trapz(freqs, abs(squeeze(freqresp(1<span class="org-type">/</span>(1 <span class="org-type">+</span> L), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2<span class="org-type">.*</span>psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>,<span class="org-string">'ColorOrderIndex'</span>,<span class="org-constant">i</span>);
plot(wc, Dz1_rms(<span class="org-constant">i</span>, <span class="org-type">:</span>), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)))
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>,<span class="org-string">'ColorOrderIndex'</span>,<span class="org-constant">i</span>);
plot(wc, Dz2_rms(<span class="org-constant">i</span>, <span class="org-type">:</span>), <span class="org-string">'--'</span>, ...
<span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>)
<span class="org-keyword">end</span>
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Control Bandwidth [Hz]'</span>); ylabel(<span class="org-string">'$E_z\ [m, rms]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>);
xlim([1, 500]);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgea74617" class="outline-2">
<h2 id="orgea74617"><span class="section-number-2">6</span> Conclusion</h2>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-07 mar. 14:57</p>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,848 @@
<?xml version="1.0" encoding="utf-8"?>
<?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-04-07 mar. 14:55 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Determination of the optimal nano-hexapod&rsquo;s stiffness</title>
<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>
<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>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&amp;dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
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
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="index.html"> UP </a>
|
<a accesskey="H" href="index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Determination of the optimal nano-hexapod&rsquo;s stiffness</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org157c07d">1. Spindle Rotation Speed</a>
<ul>
<li><a href="#orgb1e5096">1.1. Initialization</a></li>
<li><a href="#org687bdef">1.2. Identification when rotating at maximum speed</a></li>
<li><a href="#org7dcfddb">1.3. Change of dynamics</a></li>
</ul>
</li>
<li><a href="#org23ddf26">2. Micro-Station Compliance Effect</a>
<ul>
<li><a href="#orgdc8aeea">2.1. Identification of the micro-station compliance</a></li>
<li><a href="#orga44542b">2.2. Identification of the dynamics with a rigid micro-station</a></li>
<li><a href="#org49d6b26">2.3. Identification of the dynamics with a flexible micro-station</a></li>
<li><a href="#org4c1ed79">2.4. Obtained Dynamics</a></li>
</ul>
</li>
<li><a href="#org19559b0">3. Payload &ldquo;Impedance&rdquo; Effect</a>
<ul>
<li><a href="#org67607c3">3.1. Initialization</a></li>
<li><a href="#org73f1c6e">3.2. Identification of the dynamics while change the payload dynamics</a></li>
<li><a href="#orgd7a519b">3.3. Change of dynamics for the primary controller</a>
<ul>
<li><a href="#orgb44d421">3.3.1. Frequency variation</a></li>
<li><a href="#orgfc270b0">3.3.2. Mass variation</a></li>
<li><a href="#org118f0c2">3.3.3. Total variation</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org973d2e3">4. Total Change of dynamics</a></li>
</ul>
</div>
</div>
<p>
As shown before, many parameters other than the nano-hexapod itself do influence the plant dynamics:
</p>
<ul class="org-ul">
<li>The micro-station compliance (studied <a href="uncertainty_support.html">here</a>)</li>
<li>The payload mass and dynamical properties (studied <a href="uncertainty_payload.html">here</a> and <a href="uncertainty_experiment.html">here</a>)</li>
<li>The experimental conditions, mainly the spindle rotation speed (studied <a href="uncertainty_experiment.html">here</a>)</li>
</ul>
<p>
As seen before, the stiffness of the nano-hexapod greatly influence the effect of such parameters.
</p>
<p>
We wish here to see if we can determine an optimal stiffness of the nano-hexapod such that:
</p>
<ul class="org-ul">
<li>Section <a href="#org902923f">1</a>: the change of its dynamics due to the spindle rotation speed is acceptable</li>
<li>Section <a href="#orgabe2ab2">2</a>: the support compliance dynamics is not much present in the nano-hexapod dynamics</li>
<li>Section <a href="#org2bd8390">3</a>: the change of payload impedance has acceptable effect on the plant dynamics</li>
</ul>
<p>
The overall goal is to design a nano-hexapod that will allow the highest possible control bandwidth.
</p>
<div id="outline-container-org157c07d" class="outline-2">
<h2 id="org157c07d"><span class="section-number-2">1</span> Spindle Rotation Speed</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org902923f"></a>
</p>
<p>
In this section, we look at the effect of the spindle rotation speed on the plant dynamics.
</p>
<p>
The rotation speed will have an effect due to the Coriolis effect.
</p>
</div>
<div id="outline-container-orgb1e5096" class="outline-3">
<h3 id="orgb1e5096"><span class="section-number-3">1.1</span> Initialization</h3>
<div class="outline-text-3" id="text-1-1">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
</pre>
</div>
<p>
We use a sample mass of 10kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'mass'</span>, 10);
</pre>
</div>
<p>
We don&rsquo;t include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics.
We however include 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>);
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
initializeController();
</pre>
</div>
</div>
</div>
<div id="outline-container-org687bdef" class="outline-3">
<h3 id="org687bdef"><span class="section-number-3">1.2</span> Identification when rotating at maximum speed</h3>
<div class="outline-text-3" id="text-1-2">
<p>
We identify the dynamics for the following spindle rotation speeds <code>Rz_rpm</code>:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Rz_rpm = linspace(0, 60, 6);
</pre>
</div>
<p>
And for the following nano-hexapod actuator stiffness <code>Ks</code>:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org7dcfddb" class="outline-3">
<h3 id="org7dcfddb"><span class="section-number-3">1.3</span> Change of dynamics</h3>
<div class="outline-text-3" id="text-1-3">
<p>
We plot the change of dynamics due to the change of the spindle rotation speed (from 0rpm to 60rpm):
</p>
<ul class="org-ul">
<li>Figure <a href="#orgfd21b56">2</a>: from actuator force \(\tau\) to force sensor \(\tau_m\) (IFF plant)</li>
<li>Figure <a href="#org2a4cc54">3</a>: from actuator force \(\tau\) to actuator relative displacement \(d\mathcal{L}\) (Decentralized positioning plant)</li>
<li>Figure <a href="#orgbf48d68">4</a>: from force in the task space \(\mathcal{F}_x\) to sample displacement \(\mathcal{X}_x\) (Centralized positioning plant)</li>
<li>Figure <a href="#org16be775">5</a>: from force in the task space \(\mathcal{F}_x\) to sample displacement \(\mathcal{X}_y\) (coupling of the centralized positioning plant)</li>
</ul>
<div id="org039ad8e" class="figure">
<p><img src="figs/opti_stiffness_iff_root_locus.png" alt="opti_stiffness_iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Root Locus plot for IFF control when not rotating (in red) and when rotating at 60rpm (in blue) for 4 different nano-hexapod stiffnesses (<a href="./figs/opti_stiffness_iff_root_locus.png">png</a>, <a href="./figs/opti_stiffness_iff_root_locus.pdf">pdf</a>)</p>
</div>
<div id="orgfd21b56" class="figure">
<p><img src="figs/opt_stiffness_wz_iff.png" alt="opt_stiffness_wz_iff.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Change of dynamics from actuator \(\tau\) to actuator force sensor \(\tau_m\) for a spindle rotation speed from 0rpm to 60rpm (<a href="./figs/opt_stiffness_wz_iff.png">png</a>, <a href="./figs/opt_stiffness_wz_iff.pdf">pdf</a>)</p>
</div>
<div id="org2a4cc54" class="figure">
<p><img src="figs/opt_stiffness_wz_dvf.png" alt="opt_stiffness_wz_dvf.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Change of dynamics from actuator force \(\tau\) to actuator displacement \(d\mathcal{L}\) for a spindle rotation speed from 0rpm to 60rpm (<a href="./figs/opt_stiffness_wz_dvf.png">png</a>, <a href="./figs/opt_stiffness_wz_dvf.pdf">pdf</a>)</p>
</div>
<div id="orgbf48d68" class="figure">
<p><img src="figs/opt_stiffness_wz_fx_dx.png" alt="opt_stiffness_wz_fx_dx.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Change of dynamics from force \(\mathcal{F}_x\) to displacement \(\mathcal{X}_x\) for a spindle rotation speed from 0rpm to 60rpm (<a href="./figs/opt_stiffness_wz_fx_dx.png">png</a>, <a href="./figs/opt_stiffness_wz_fx_dx.pdf">pdf</a>)</p>
</div>
<div id="org16be775" class="figure">
<p><img src="figs/opt_stiffness_wz_coupling.png" alt="opt_stiffness_wz_coupling.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Change of Coupling from force \(\mathcal{F}_x\) to displacement \(\mathcal{X}_y\) for a spindle rotation speed from 0rpm to 60rpm (<a href="./figs/opt_stiffness_wz_coupling.png">png</a>, <a href="./figs/opt_stiffness_wz_coupling.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div class="outline-text-2" id="text-1">
<div class="important">
<p>
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.
For the coupling, it is more difficult to conclude about the minimum required leg stiffness.
</p>
</div>
<div class="notes">
<p>
Note that we can use very soft nano-hexapod if we limit the spindle rotating speed.
</p>
</div>
</div>
</div>
<div id="outline-container-org23ddf26" class="outline-2">
<h2 id="org23ddf26"><span class="section-number-2">2</span> Micro-Station Compliance Effect</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orgabe2ab2"></a>
</p>
<ul class="org-ul">
<li>take the 6dof compliance of the micro-station</li>
<li>simple model + uncertainty</li>
</ul>
</div>
<div id="outline-container-orgdc8aeea" class="outline-3">
<h3 id="orgdc8aeea"><span class="section-number-3">2.1</span> Identification of the micro-station compliance</h3>
<div class="outline-text-3" id="text-2-1">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-string">'compliance'</span>);
</pre>
</div>
<p>
We put nothing on top of the micro-hexapod.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeAxisc(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
initializeMirror(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre>
</div>
<p>
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.
The diagonal element of the identified Micro-Station compliance matrix are shown in Figure <a href="#org6cfb14b">6</a>.
</p>
<div id="org6cfb14b" class="figure">
<p><img src="figs/opt_stiff_micro_station_compliance.png" alt="opt_stiff_micro_station_compliance.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Identified Compliance of the Micro-Station (<a href="./figs/opt_stiff_micro_station_compliance.png">png</a>, <a href="./figs/opt_stiff_micro_station_compliance.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orga44542b" class="outline-3">
<h3 id="orga44542b"><span class="section-number-3">2.2</span> Identification of the dynamics with a rigid micro-station</h3>
<div class="outline-text-3" id="text-2-2">
<p>
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.
We also choose the sample to be rigid and to have a mass of 10kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'mass'</span>, 10);
</pre>
</div>
<p>
As before, we identify the dynamics for the following actuator stiffnesses:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org49d6b26" class="outline-3">
<h3 id="org49d6b26"><span class="section-number-3">2.3</span> Identification of the dynamics with a flexible micro-station</h3>
<div class="outline-text-3" id="text-2-3">
<p>
We now initialize all the micro-station stages to be flexible.
And we identify the dynamics of the nano-hexapod.
</p>
</div>
</div>
<div id="outline-container-org4c1ed79" class="outline-3">
<h3 id="org4c1ed79"><span class="section-number-3">2.4</span> Obtained Dynamics</h3>
<div class="outline-text-3" id="text-2-4">
<p>
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:
</p>
<ul class="org-ul">
<li>Figure <a href="#org71f5400">7</a>: from actuator force \(\tau\) to force sensor \(\tau_m\) (IFF plant)</li>
<li>Figure <a href="#org32aef29">8</a>: from actuator force \(\tau\) to actuator relative displacement \(d\mathcal{L}\) (Decentralized positioning plant)</li>
<li>Figure <a href="#org8a33fed">9</a>: from force in the task space \(\mathcal{F}_x\) to sample displacement \(\mathcal{X}_x\) (Centralized positioning plant)</li>
<li>Figure <a href="#orge9bd08b">10</a>: from force in the task space \(\mathcal{F}_z\) to sample displacement \(\mathcal{X}_z\) (Centralized positioning plant)</li>
</ul>
<div id="org71f5400" class="figure">
<p><img src="figs/opt_stiffness_micro_station_iff.png" alt="opt_stiffness_micro_station_iff.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Change of dynamics from actuator \(\tau\) to actuator force sensor \(\tau_m\) due to the micro-station compliance (<a href="./figs/opt_stiffness_micro_station_iff.png">png</a>, <a href="./figs/opt_stiffness_micro_station_iff.pdf">pdf</a>)</p>
</div>
<div id="org32aef29" class="figure">
<p><img src="figs/opt_stiffness_micro_station_dvf.png" alt="opt_stiffness_micro_station_dvf.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Change of dynamics from actuator force \(\tau\) to actuator displacement \(d\mathcal{L}\) due to the micro-station compliance (<a href="./figs/opt_stiffness_micro_station_dvf.png">png</a>, <a href="./figs/opt_stiffness_micro_station_dvf.pdf">pdf</a>)</p>
</div>
<div id="org8a33fed" class="figure">
<p><img src="figs/opt_stiffness_micro_station_fx_dx.png" alt="opt_stiffness_micro_station_fx_dx.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Change of dynamics from force \(\mathcal{F}_x\) to displacement \(\mathcal{X}_x\) due to the micro-station compliance (<a href="./figs/opt_stiffness_micro_station_fx_dx.png">png</a>, <a href="./figs/opt_stiffness_micro_station_fx_dx.pdf">pdf</a>)</p>
</div>
<div id="orge9bd08b" class="figure">
<p><img src="figs/opt_stiffness_micro_station_fz_dz.png" alt="opt_stiffness_micro_station_fz_dz.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Change of dynamics from force \(\mathcal{F}_z\) to displacement \(\mathcal{X}_z\) due to the micro-station compliance (<a href="./figs/opt_stiffness_micro_station_fz_dz.png">png</a>, <a href="./figs/opt_stiffness_micro_station_fz_dz.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div class="outline-text-2" id="text-2">
<div class="important">
<p>
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.
</p>
</div>
</div>
</div>
<div id="outline-container-org19559b0" class="outline-2">
<h2 id="org19559b0"><span class="section-number-2">3</span> Payload &ldquo;Impedance&rdquo; Effect</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org2bd8390"></a>
</p>
</div>
<div id="outline-container-org67607c3" class="outline-3">
<h3 id="org67607c3"><span class="section-number-3">3.1</span> Initialization</h3>
<div class="outline-text-3" id="text-3-1">
<p>
We initialize all the stages with the default parameters.
We don&rsquo;t include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. :exports none
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
</pre>
</div>
<p>
We set the controller type to Open-Loop, and we do not need to log any signal.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
initializeController();
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
initializeReferences();
</pre>
</div>
</div>
</div>
<div id="outline-container-org73f1c6e" class="outline-3">
<h3 id="org73f1c6e"><span class="section-number-3">3.2</span> Identification of the dynamics while change the payload dynamics</h3>
<div class="outline-text-3" id="text-3-2">
<p>
We make the following change of payload dynamics:
</p>
<ul class="org-ul">
<li>Change of mass: from 1kg to 50kg</li>
<li>Change of resonance frequency: from 50Hz to 500Hz</li>
<li>The damping ratio of the payload is fixed to \(\xi = 0.2\)</li>
</ul>
<p>
We identify the dynamics for the following payload masses <code>Ms</code> and nano-hexapod leg&rsquo;s stiffnesses <code>Ks</code>:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ms = [1, 20, 50]; <span class="org-comment">% [Kg]</span>
Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span>
</pre>
</div>
<p>
We then identify the dynamics for the following payload resonance frequencies <code>Fs</code>:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Fs = [50, 200, 500]; <span class="org-comment">% [Hz]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd7a519b" class="outline-3">
<h3 id="orgd7a519b"><span class="section-number-3">3.3</span> Change of dynamics for the primary controller</h3>
<div class="outline-text-3" id="text-3-3">
</div>
<div id="outline-container-orgb44d421" class="outline-4">
<h4 id="orgb44d421"><span class="section-number-4">3.3.1</span> Frequency variation</h4>
<div class="outline-text-4" id="text-3-3-1">
<p>
We here compare the dynamics for the same payload mass, but different stiffness resulting in different resonance frequency of the payload:
</p>
<ul class="org-ul">
<li>Figure <a href="#org00db693">11</a>: 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.</li>
<li>Figure <a href="#org76716ad">12</a>: same, but for all tested nano-hexapod stiffnesses</li>
</ul>
<p>
We can see two mass lines for the soft nano-hexapod (Figure <a href="#org00db693">11</a>):
</p>
<ul class="org-ul">
<li>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</li>
<li>The second mass line corresponds to \(\frac{1}{m_n s^2}\)</li>
<li>The zero corresponds to the resonance of the payload alone (fixed nano-hexapod&rsquo;s top platform)</li>
</ul>
<div id="org00db693" class="figure">
<p><img src="figs/opt_stiffness_payload_freq_fz_dz.png" alt="opt_stiffness_payload_freq_fz_dz.png" />
</p>
<p><span class="figure-number">Figure 11: </span>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 (<a href="./figs/opt_stiffness_payload_freq_fz_dz.png">png</a>, <a href="./figs/opt_stiffness_payload_freq_fz_dz.pdf">pdf</a>)</p>
</div>
<div id="org76716ad" class="figure">
<p><img src="figs/opt_stiffness_payload_freq_all.png" alt="opt_stiffness_payload_freq_all.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Dynamics from \(\mathcal{F}_z\) to \(\mathcal{X}_z\) for varying payload resonance frequency (<a href="./figs/opt_stiffness_payload_freq_all.png">png</a>, <a href="./figs/opt_stiffness_payload_freq_all.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgfc270b0" class="outline-4">
<h4 id="orgfc270b0"><span class="section-number-4">3.3.2</span> Mass variation</h4>
<div class="outline-text-4" id="text-3-3-2">
<p>
We here compare the dynamics for different payload mass with the same resonance frequency (100Hz):
</p>
<ul class="org-ul">
<li>Figure <a href="#orga1343a7">13</a>: 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.</li>
<li>Figure <a href="#org35aebae">14</a>: same, but for all tested nano-hexapod stiffnesses</li>
</ul>
<p>
We can see here that for the soft nano-hexapod:
</p>
<ul class="org-ul">
<li>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&rsquo;s mass and \(m_n\) the mass of the nano-hexapod top platform</li>
<li>the first mass line corresponding to \(\frac{1}{(m_p + m_n)s^2}\) is changing with the payload mass</li>
<li>the zero at 100Hz is not changing as it corresponds to the resonance of the payload itself</li>
<li>the second mass line does not change</li>
</ul>
<div id="orga1343a7" class="figure">
<p><img src="figs/opt_stiffness_payload_mass_fz_dz.png" alt="opt_stiffness_payload_mass_fz_dz.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Dynamics from \(\mathcal{F}_z\) to \(\mathcal{X}_z\) for varying payload mass, both for a soft nano-hexapod and a stiff nano-hexapod (<a href="./figs/opt_stiffness_payload_mass_fz_dz.png">png</a>, <a href="./figs/opt_stiffness_payload_mass_fz_dz.pdf">pdf</a>)</p>
</div>
<div id="org35aebae" class="figure">
<p><img src="figs/opt_stiffness_payload_mass_all.png" alt="opt_stiffness_payload_mass_all.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Dynamics from \(\mathcal{F}_z\) to \(\mathcal{X}_z\) for varying payload mass (<a href="./figs/opt_stiffness_payload_mass_all.png">png</a>, <a href="./figs/opt_stiffness_payload_mass_all.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org118f0c2" class="outline-4">
<h4 id="org118f0c2"><span class="section-number-4">3.3.3</span> Total variation</h4>
<div class="outline-text-4" id="text-3-3-3">
<p>
We now plot the total change of dynamics due to change of the payload (Figures <a href="#orgf16d005">15</a> and <a href="#org73b8b8a">16</a>):
</p>
<ul class="org-ul">
<li>mass from 1kg to 50kg</li>
<li>main resonance from 50Hz to 500Hz</li>
</ul>
<div id="orgf16d005" class="figure">
<p><img src="figs/opt_stiffness_payload_impedance_all_fz_dz.png" alt="opt_stiffness_payload_impedance_all_fz_dz.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Dynamics from \(\mathcal{F}_z\) to \(\mathcal{X}_z\) for varying payload dynamics, both for a soft nano-hexapod and a stiff nano-hexapod (<a href="./figs/opt_stiffness_payload_impedance_all_fz_dz.png">png</a>, <a href="./figs/opt_stiffness_payload_impedance_all_fz_dz.pdf">pdf</a>)</p>
</div>
<div id="org73b8b8a" class="figure">
<p><img src="figs/opt_stiffness_payload_impedance_fz_dz.png" alt="opt_stiffness_payload_impedance_fz_dz.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Dynamics from \(\mathcal{F}_z\) to \(\mathcal{X}_z\) for varying payload dynamics, both for a soft nano-hexapod and a stiff nano-hexapod (<a href="./figs/opt_stiffness_payload_impedance_fz_dz.png">png</a>, <a href="./figs/opt_stiffness_payload_impedance_fz_dz.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div class="outline-text-2" id="text-3">
<div class="important">
<p>
</p>
</div>
</div>
</div>
<div id="outline-container-org973d2e3" class="outline-2">
<h2 id="org973d2e3"><span class="section-number-2">4</span> Total Change of dynamics</h2>
<div class="outline-text-2" id="text-4">
<p>
We now consider the total change of nano-hexapod dynamics due to:
</p>
<ul class="org-ul">
<li><code>Gk_wz_err</code> - Change of spindle rotation speed</li>
<li><code>Gf_err</code> and <code>Gm_err</code> - Change of payload resonance</li>
<li><code>Gmf_err</code> and <code>Gmr_err</code> - Micro-Station compliance</li>
</ul>
<p>
The obtained dynamics are shown:
</p>
<ul class="org-ul">
<li>Figure <a href="#orgcf64eb6">17</a> for a stiffness \(k = 10^3\ [N/m]\)</li>
<li>Figure <a href="#org175cc57">18</a> for a stiffness \(k = 10^5\ [N/m]\)</li>
<li>Figure <a href="#org998cf87">19</a> for a stiffness \(k = 10^7\ [N/m]\)</li>
<li>Figure <a href="#orgd3db91c">20</a> for a stiffness \(k = 10^9\ [N/m]\)</li>
</ul>
<p>
And finally, in Figures <a href="#orge05feb5">21</a> and <a href="#org17c5c95">22</a> are shown an animation of the change of dynamics with the nano-hexapod&rsquo;s stiffness.
</p>
<div id="orgcf64eb6" class="figure">
<p><img src="figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.png" alt="opt_stiffness_plant_dynamics_fx_dx_k_1e3.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Total variation of the dynamics from \(\mathcal{F}_x\) to \(\mathcal{X}_x\). Nano-hexapod leg&rsquo;s stiffness is equal to \(k = 10^3\ [N/m]\) (<a href="./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.png">png</a>, <a href="./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e3.pdf">pdf</a>)</p>
</div>
<div id="org175cc57" class="figure">
<p><img src="figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.png" alt="opt_stiffness_plant_dynamics_fx_dx_k_1e5.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Total variation of the dynamics from \(\mathcal{F}_x\) to \(\mathcal{X}_x\). Nano-hexapod leg&rsquo;s stiffness is equal to \(k = 10^5\ [N/m]\) (<a href="./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.png">png</a>, <a href="./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e5.pdf">pdf</a>)</p>
</div>
<div id="org998cf87" class="figure">
<p><img src="figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.png" alt="opt_stiffness_plant_dynamics_fx_dx_k_1e7.png" />
</p>
<p><span class="figure-number">Figure 19: </span>Total variation of the dynamics from \(\mathcal{F}_x\) to \(\mathcal{X}_x\). Nano-hexapod leg&rsquo;s stiffness is equal to \(k = 10^7\ [N/m]\) (<a href="./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.png">png</a>, <a href="./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e7.pdf">pdf</a>)</p>
</div>
<div id="orgd3db91c" class="figure">
<p><img src="figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.png" alt="opt_stiffness_plant_dynamics_fx_dx_k_1e9.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Total variation of the dynamics from \(\mathcal{F}_x\) to \(\mathcal{X}_x\). Nano-hexapod leg&rsquo;s stiffness is equal to \(k = 10^9\ [N/m]\) (<a href="./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.png">png</a>, <a href="./figs/opt_stiffness_plant_dynamics_fx_dx_k_1e9.pdf">pdf</a>)</p>
</div>
<div id="orge05feb5" class="figure">
<p><img src="figs/opt_stiffness_plant_dynamics_task_space.gif" alt="opt_stiffness_plant_dynamics_task_space.gif" />
</p>
<p><span class="figure-number">Figure 21: </span>Variability of the dynamics from \(\mathcal{F}_x\) to \(\mathcal{X}_x\) with varying nano-hexapod stiffness</p>
</div>
<div id="org17c5c95" class="figure">
<p><img src="figs/opt_stiffness_plant_dynamics_task_space_colors.gif" alt="opt_stiffness_plant_dynamics_task_space_colors.gif" />
</p>
<p><span class="figure-number">Figure 22: </span>Variability of the dynamics from \(\mathcal{F}_x\) to \(\mathcal{X}_x\) with varying nano-hexapod stiffness</p>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-07 mar. 14:55</p>
</div>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -100,7 +100,7 @@ This effect is studied, and conclusions on what characteristics of the isolation
In this document, the effect of all the experimental conditions (rotation speed, sample mass, ...) on the plant dynamics are studied.
Conclusion are drawn about what experimental conditions are critical on the variability of the plant dynamics.
* Optimal Stiffness of the nano-hexapod ([[file:optimal_stiffness.org][link]])
* Optimal Stiffness of the nano-hexapod to reduce plant uncertainty ([[file:uncertainty_optimal_stiffness.org][link]])
* Active Damping Techniques on the full Simscape Model ([[file:control_active_damping.org][link]])
Active damping techniques are applied to the full Simscape model.

View File

@ -0,0 +1,696 @@
#+TITLE: Determination of the optimal nano-hexapod's stiffness for reducing the effect of disturbances
:DRAWER:
#+STARTUP: overview
#+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas
#+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 ../matlab/optimal_stiffness.m
#+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 file raw replace
#+PROPERTY: header-args:latex+ :buffer no
#+PROPERTY: header-args:latex+ :eval no-export
#+PROPERTY: header-args:latex+ :exports results
#+PROPERTY: header-args:latex+ :mkdirp yes
#+PROPERTY: header-args:latex+ :output-dir figs
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
:END:
* Introduction :ignore:
In this document is studied how the stiffness of the nano-hexapod will impact the effect of disturbances on the position error of the sample.
It is divided in the following sections:
- Section [[sec:psd_disturbances]]: the disturbances are listed and their Power Spectral Densities (PSD) are shown
- Section [[sec:effect_disturbances]]: the transfer functions from disturbances to the position error of the sample are computed for a wide range of nano-hexapod stiffnesses
- Section [[sec:granite_stiffness]]:
- Section [[sec:open_loop_budget_error]]: from both the PSD of the disturbances and the transfer function from disturbances to sample's position errors, we compute the resulting PSD and Cumulative Amplitude Spectrum (CAS)
- Section [[sec:closed_loop_budget_error]]: from a simplistic model is computed the required control bandwidth to reduce the position error to acceptable values
* Disturbances
<<sec:psd_disturbances>>
** Introduction :ignore:
The main disturbances considered here are:
- $D_w$: Ground displacement in the $x$, $y$ and $z$ directions
- $F_{ty}$: Forces applied by the Translation stage in the $x$ and $z$ directions
- $F_{rz}$: Forces applied by the Spindle in the $z$ direction
- $F_d$: Direct forces applied at the center of mass of the Payload
The level of these disturbances has been identified form experiments which are detailed in [[file:disturbances.org][this]] document.
** 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
load('mat/conf_simulink.mat');
open('nass_model.slx')
#+end_src
** Plots :ignore:
The measured Amplitude Spectral Densities (ASD) of these forces are shown in Figures [[fig:opt_stiff_dist_gm]] and [[fig:opt_stiff_dist_fty_frz]].
In this study, the expected frequency content of the direct forces applied to the payload is not considered.
#+begin_src matlab :exports none
load('./mat/dist_psd.mat', 'dist_f');
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(dist_f.f, sqrt(dist_f.psd_gm));
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('$\Gamma_{D_w}$ $\left[\frac{m}{\sqrt{Hz}}\right]$')
xlim([1, 500]);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_dist_gm.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_dist_gm
#+caption: Amplitude Spectral Density of the Ground Displacement ([[./figs/opt_stiff_dist_gm.png][png]], [[./figs/opt_stiff_dist_gm.pdf][pdf]])
[[file:figs/opt_stiff_dist_gm.png]]
#+begin_src matlab :exports none
figure;
hold on;
plot(dist_f.f, sqrt(dist_f.psd_ty), 'DisplayName', '$F_{T_y}$');
plot(dist_f.f, sqrt(dist_f.psd_rz), 'DisplayName', '$F_{R_z}$');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD $\left[\frac{F}{\sqrt{Hz}}\right]$')
legend('Location', 'southwest');
xlim([1, 500]);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_dist_fty_frz.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_dist_fty_frz
#+caption: Amplitude Spectral Density of the "parasitic" forces comming from the Translation stage and the spindle ([[./figs/opt_stiff_dist_fty_frz.png][png]], [[./figs/opt_stiff_dist_fty_frz.pdf][pdf]])
[[file:figs/opt_stiff_dist_fty_frz.png]]
* Effect of disturbances on the position error
<<sec:effect_disturbances>>
** Introduction :ignore:
** 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
load('mat/conf_simulink.mat');
open('nass_model.slx')
#+end_src
** Initialization
We initialize all the stages with the default parameters.
#+begin_src matlab
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
#+end_src
We use a sample mass of 10kg.
#+begin_src matlab
initializeSample('mass', 10);
#+end_src
#+begin_src matlab
initializeSimscapeConfiguration('gravity', true);
initializeDisturbances('enable', false);
initializeLoggingConfiguration('log', 'none');
initializeController();
#+end_src
** Identification
Inputs:
- =Dwx=: Ground displacement in the $x$ direction
- =Dwy=: Ground displacement in the $y$ direction
- =Dwz=: Ground displacement in the $z$ direction
- =Fty_x=: Forces applied by the Translation stage in the $x$ direction
- =Fty_z=: Forces applied by the Translation stage in the $z$ direction
- =Frz_z=: Forces applied by the Spindle in the $z$ direction
- =Fd=: Direct forces applied at the center of mass of the Payload
#+begin_src matlab
Ks = logspace(3,9,7); % [N/m]
#+end_src
#+begin_src matlab :exports none
Gd = {zeros(length(Ks), 1)};
#+end_src
#+begin_src matlab
%% Name of the Simulink File
mdl = 'nass_model';
%% Micro-Hexapod
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Dwx'); io_i = io_i + 1; % X Ground motion
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Dwy'); io_i = io_i + 1; % Y Ground motion
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Dwz'); io_i = io_i + 1; % Z Ground motion
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Fty_x'); io_i = io_i + 1; % Parasitic force Ty - X
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Fty_z'); io_i = io_i + 1; % Parasitic force Ty - Z
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Frz_z'); io_i = io_i + 1; % Parasitic force Rz - Z
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Fd'); io_i = io_i + 1; % Direct forces
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'En'); io_i = io_i + 1; % Position Error
#+end_src
#+begin_src matlab
for i = 1:length(Ks)
initializeNanoHexapod('k', Ks(i));
% Run the linearization
G = linearize(mdl, io);
G.InputName = {'Dwx', 'Dwy', 'Dwz', 'Fty_x', 'Fty_z', 'Frz_z', 'Fdx', 'Fdy', 'Fdz', 'Mdx', 'Mdy', 'Mdz'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gd(i) = {minreal(G)};
end
#+end_src
** Plots
Effect of Stages vibration (Filtering).
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]');
#+end_src
Effect of Ground motion (Transmissibility).
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
ax1 = subplot(3, 1, 1);
hold on;
for i = 1:length(Ks)
plot(freqs, abs(squeeze(freqresp(Gd{i}('Ex', 'Dwx'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/m]');
ax1 = subplot(3, 1, 2);
hold on;
for i = 1:length(Ks)
plot(freqs, abs(squeeze(freqresp(Gd{i}('Ey', 'Dwy'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/m]');
ax1 = subplot(3, 1, 3);
hold on;
for i = 1:length(Ks)
plot(freqs, abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/m]'); xlabel('Frequency [Hz]');
#+end_src
Direct Forces (Compliance).
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, abs(squeeze(freqresp(Gd{i}('Ez', 'Fdz'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]');
#+end_src
** Save
#+begin_src matlab
save('./mat/opt_stiffness_disturbances.mat', 'Gd')
#+end_src
* Effect of granite stiffness
<<sec:granite_stiffness>>
** Analytical Analysis
#+begin_src latex :file 2dof_system_granite_stiffness.pdf
\begin{tikzpicture}
% ====================
% Parameters
% ====================
\def\massw{2.2} % Width of the masses
\def\massh{0.8} % Height of the masses
\def\spaceh{1.2} % Height of the springs/dampers
\def\dispw{0.3} % Width of the dashed line for the displacement
\def\disph{0.5} % Height of the arrow for the displacements
\def\bracs{0.05} % Brace spacing vertically
\def\brach{-10pt} % Brace shift horizontaly
% ====================
% ====================
% Ground
% ====================
\draw (-0.5*\massw, 0) -- (0.5*\massw, 0);
\draw[dashed] (0.5*\massw, 0) -- ++(\dispw, 0) coordinate(dlow);
\draw[->] (0.5*\massw+0.5*\dispw, 0) -- ++(0, \disph) node[right]{$x_{w}$};
% ====================
% Micro Station
% ====================
\begin{scope}[shift={(0, 0)}]
% Mass
\draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m$};
% Spring, Damper, and Actuator
\draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k$};
\draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c$};
% Displacements
\draw[dashed] (0.5*\massw, \spaceh) -- ++(\dispw, 0);
\draw[->] (0.5*\massw+0.5*\dispw, \spaceh) -- ++(0, \disph) node[right]{$x$};
% Legend
\draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] %
(-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) %
node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Granite};
\end{scope}
% ====================
% Nano Station
% ====================
\begin{scope}[shift={(0, \spaceh+\massh)}]
% Mass
\draw[fill=white] (-0.5*\massw, \spaceh) rectangle (0.5*\massw, \spaceh+\massh) node[pos=0.5]{$m^\prime$};
% Spring, Damper, and Actuator
\draw[spring] (-0.4*\massw, 0) -- (-0.4*\massw, \spaceh) node[midway, left=0.1]{$k^\prime$};
\draw[damper] (0, 0) -- ( 0, \spaceh) node[midway, left=0.2]{$c^\prime$};
% Displacements
\draw[dashed] (0.5*\massw, \spaceh) -- ++(\dispw, 0) coordinate(dhigh);
\draw[->] (0.5*\massw+0.5*\dispw, \spaceh) -- ++(0, \disph) node[right]{$x^\prime$};
% Legend
\draw[decorate, decoration={brace, amplitude=8pt}, xshift=\brach] %
(-0.5*\massw, \bracs) -- (-0.5*\massw, \spaceh+\massh-\bracs) %
node[midway,rotate=90,anchor=south,yshift=10pt,align=center]{Positioning\\Stages};
\end{scope}
\end{tikzpicture}
#+end_src
#+name: fig:2dof_system_granite_stiffness
#+caption: Figure caption
#+RESULTS:
[[file:figs/2dof_system_granite_stiffness.png]]
If we write the equation of motion of the system in Figure [[fig:2dof_system_granite_stiffness]], we obtain:
\begin{align}
m^\prime s^2 x^\prime &= (c^\prime s + k^\prime) (x - x^\prime) \\
ms^2 x &= (c^\prime s + k^\prime) (x^\prime - x) + (cs + k) (x_w - x)
\end{align}
If we note $d = x^\prime - x$, we obtain:
#+name: eq:plant_ground_transmissibility
\begin{equation}
\frac{d}{x_w} = \frac{-m^\prime s^2 (cs + k)}{ (m^\prime s^2 + c^\prime s + k^\prime) (ms^2 + cs + k) + m^\prime s^2(c^\prime s + k^\prime)}
\end{equation}
** Soft Granite
Let's initialize a soft granite that will act as an isolation stage from ground motion.
#+begin_src matlab
initializeGranite('K', 5e5*ones(3,1), 'C', 5e3*ones(3,1));
#+end_src
#+begin_src matlab
Ks = logspace(3,9,7); % [N/m]
#+end_src
#+begin_src matlab :exports none
Gdr = {zeros(length(Ks), 1)};
#+end_src
#+begin_src matlab
for i = 1:length(Ks)
initializeNanoHexapod('k', Ks(i));
G = linearize(mdl, io);
G.InputName = {'Dwx', 'Dwy', 'Dwz', 'Fty_x', 'Fty_z', 'Frz_z', 'Fdx', 'Fdy', 'Fdz', 'Mdx', 'Mdy', 'Mdz'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gdr(i) = {minreal(G)};
end
#+end_src
** Effect of the Granite transfer function
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
hold on;
for i = 1:length(Ks)
set(gca,'ColorOrderIndex',i);
plot(freqs, abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
set(gca,'ColorOrderIndex',i);
plot(freqs, abs(squeeze(freqresp(Gdr{i}('Ez', 'Dwz'), freqs, 'Hz'))), '--', ...
'HandleVisibility', 'off');
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/m]'); xlabel('Frequency [Hz]');
legend('location', 'southeast');
#+end_src
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
hold on;
for i = 1:length(Ks)
set(gca,'ColorOrderIndex',i);
plot(freqs, abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
set(gca,'ColorOrderIndex',i);
plot(freqs, abs(squeeze(freqresp(Gdr{i}('Ez', 'Frz_z'), freqs, 'Hz'))), '--', ...
'HandleVisibility', 'off');
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]');
legend('location', 'southeast');
#+end_src
* Open Loop Budget Error
<<sec:open_loop_budget_error>>
** Introduction :ignore:
** 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
load('mat/conf_simulink.mat');
open('nass_model.slx')
#+end_src
** Load of the identified disturbances and transfer functions
#+begin_src matlab
load('./mat/dist_psd.mat', 'dist_f');
load('./mat/opt_stiffness_disturbances.mat', 'Gd')
#+end_src
** Equations
** Results
Effect of all disturbances
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(dist_f.psd_rz).*abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz'))));
end
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD $\left[\frac{m}{\sqrt{Hz}}\right]$')
legend('Location', 'southwest');
xlim([2, 500]);
#+end_src
** Cumulative Amplitude Spectrum
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_ty.*abs(squeeze(freqresp(Gd{i}('Ez', 'Fty_z'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $[m]$')
legend('Location', 'southwest');
xlim([2, 500]); ylim([1e-10 1e-6]);
#+end_src
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_rz.*abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $[m]$')
legend('Location', 'southwest');
xlim([2, 500]); ylim([1e-10 1e-6]);
#+end_src
Ground motion
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
legend('Location', 'northeast');
xlim([2, 500]); ylim([1e-10 1e-6]);
#+end_src
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ex', 'Dwx'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'lin');
xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
legend('Location', 'northeast');
xlim([2, 500]);
#+end_src
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ey', 'Dwy'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'lin');
xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
legend('Location', 'northeast');
xlim([2, 500]);
#+end_src
Sum of all perturbations
#+begin_src matlab
psd_tot = zeros(length(freqs), length(Ks));
for i = 1:length(Ks)
psd_tot(:,i) = dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz' ), freqs, 'Hz'))).^2 + ...
dist_f.psd_ty.*abs(squeeze(freqresp(Gd{i}('Ez', 'Fty_z'), freqs, 'Hz'))).^2 + ...
dist_f.psd_rz.*abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz'))).^2;
end
#+end_src
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(psd_tot(:,i))))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $E_z$ $[m]$')
legend('Location', 'northeast');
xlim([1, 500]); ylim([1e-10 1e-6]);
#+end_src
* Closed Loop Budget Error
<<sec:closed_loop_budget_error>>
** Introduction :ignore:
** Reduction thanks to feedback - Required bandwidth
#+begin_src matlab
wc = 1*2*pi; % [rad/s]
xic = 0.5;
S = (s/wc)/(1 + s/wc);
bodeFig({S}, logspace(-1,2,1000))
#+end_src
#+begin_src matlab
wc = [1, 5, 10, 20, 50, 100, 200];
S1 = {zeros(length(wc), 1)};
S2 = {zeros(length(wc), 1)};
for j = 1:length(wc)
L = (2*pi*wc(j))/s; % Simple integrator
S1{j} = 1/(1 + L);
L = ((2*pi*wc(j))/s)^2*(1 + s/(2*pi*wc(j)/2))/(1 + s/(2*pi*wc(j)*2));
S2{j} = 1/(1 + L);
end
#+end_src
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
i = 6;
for j = 1:length(wc)
set(gca,'ColorOrderIndex',j);
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(abs(squeeze(freqresp(S1{j}, freqs, 'Hz'))).^2.*psd_tot(:,i))))), '-', ...
'DisplayName', sprintf('$\\omega_c = %.0f$ [Hz]', wc(j)));
end
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(psd_tot(:,i))))), 'k-', ...
'DisplayName', 'Open-Loop');
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
legend('Location', 'northeast');
xlim([0.5, 500]); ylim([1e-10 1e-6]);
#+end_src
#+begin_src matlab
wc = logspace(0, 3, 100);
Dz1_rms = zeros(length(Ks), length(wc));
Dz2_rms = zeros(length(Ks), length(wc));
for i = 1:length(Ks)
for j = 1:length(wc)
L = (2*pi*wc(j))/s;
Dz1_rms(i, j) = sqrt(trapz(freqs, abs(squeeze(freqresp(1/(1 + L), freqs, 'Hz'))).^2.*psd_tot(:,i)));
L = ((2*pi*wc(j))/s)^2*(1 + s/(2*pi*wc(j)/2))/(1 + s/(2*pi*wc(j)*2));
Dz2_rms(i, j) = sqrt(trapz(freqs, abs(squeeze(freqresp(1/(1 + L), freqs, 'Hz'))).^2.*psd_tot(:,i)));
end
end
#+end_src
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
set(gca,'ColorOrderIndex',i);
plot(wc, Dz1_rms(i, :), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)))
set(gca,'ColorOrderIndex',i);
plot(wc, Dz2_rms(i, :), '--', ...
'HandleVisibility', 'off')
end
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Control Bandwidth [Hz]'); ylabel('$E_z\ [m, rms]$')
legend('Location', 'southwest');
xlim([1, 500]);
#+end_src
* Conclusion

View File

@ -313,13 +313,14 @@ The output =sample_pos= corresponds to the impact point of the X-ray.
args.type char {mustBeMember(args.type,{'rigid', 'flexible', 'none', 'modal-analysis', 'init'})} = 'flexible'
args.Foffset logical {mustBeNumericOrLogical} = false
args.density (1,1) double {mustBeNumeric, mustBeNonnegative} = 2800 % Density [kg/m3]
args.K (3,1) double {mustBeNumeric, mustBeNonnegative} = [4e9; 3e8; 8e8] % [N/m]
args.C (3,1) double {mustBeNumeric, mustBeNonnegative} = [4.0e5; 1.1e5; 9.0e5] % [N/(m/s)]
args.x0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the X direction [m]
args.y0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the Y direction [m]
args.z0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the Z direction [m]
end
#+end_src
** Structure initialization
:PROPERTIES:
:UNNUMBERED: t
@ -370,8 +371,8 @@ Z-offset for the initial position of the sample with respect to the granite top
:END:
#+begin_src matlab
granite.K = [4e9; 3e8; 8e8]; % [N/m]
granite.C = [4.0e5; 1.1e5; 9.0e5]; % [N/(m/s)]
granite.K = args.K; % [N/m]
granite.C = args.C; % [N/(m/s)]
#+end_src
** Equilibrium position of the each joint.

View File

@ -75,8 +75,8 @@ The rotation speed will have an effect due to the Coriolis effect.
#+end_src
#+begin_src matlab
% load('mat/conf_simulink.mat');
% open('nass_model.slx')
load('mat/conf_simulink.mat');
open('nass_model.slx')
#+end_src
** Initialization

View File

@ -4,6 +4,8 @@ arguments
args.type char {mustBeMember(args.type,{'rigid', 'flexible', 'none', 'modal-analysis', 'init'})} = 'flexible'
args.Foffset logical {mustBeNumericOrLogical} = false
args.density (1,1) double {mustBeNumeric, mustBeNonnegative} = 2800 % Density [kg/m3]
args.K (3,1) double {mustBeNumeric, mustBeNonnegative} = [4e9; 3e8; 8e8] % [N/m]
args.C (3,1) double {mustBeNumeric, mustBeNonnegative} = [4.0e5; 1.1e5; 9.0e5] % [N/(m/s)]
args.x0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the X direction [m]
args.y0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the Y direction [m]
args.z0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the Z direction [m]
@ -29,8 +31,8 @@ granite.STEP = './STEPS/granite/granite.STEP';
granite.sample_pos = 0.8; % [m]
granite.K = [4e9; 3e8; 8e8]; % [N/m]
granite.C = [4.0e5; 1.1e5; 9.0e5]; % [N/(m/s)]
granite.K = args.K; % [N/m]
granite.C = args.C; % [N/(m/s)]
if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init')
load('mat/Foffset.mat', 'Fgm');