Update links from index and publish html files

This commit is contained in:
Thomas Dehaeze 2020-03-25 19:23:22 +01:00
parent ccfe1a3bb8
commit 27f15fdf78
34 changed files with 3135 additions and 484 deletions

View File

@ -1,11 +1,10 @@
<?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-03-23 lun. 10:05 -->
<!-- 2020-03-25 mer. 19:23 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Cascade Control applied on the Simscape Model</title>
@ -282,14 +281,14 @@ for the JavaScript code in this tag.
<li><a href="#org101bfbc">3. High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</a>
<ul>
<li><a href="#org259240d">3.1. Identification of the damped plant</a></li>
<li><a href="#orgb8ba0cc">3.2. Obtained Plant</a></li>
<li><a href="#org878cff7">3.2. Obtained Plant</a></li>
<li><a href="#orgdea5e17">3.3. Controller Design and Loop Gain</a></li>
</ul>
</li>
<li><a href="#org58f9f32">4. Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</a>
<ul>
<li><a href="#org82ca884">4.1. Identification of the linearized plant</a></li>
<li><a href="#org878cff7">4.2. Obtained Plant</a></li>
<li><a href="#orgb574395">4.2. Obtained Plant</a></li>
<li><a href="#org839cdb3">4.3. Controller Design</a></li>
</ul>
</li>
@ -518,8 +517,8 @@ isstable(Gl)
</div>
</div>
<div id="outline-container-orgb8ba0cc" class="outline-3">
<h3 id="orgb8ba0cc"><span class="section-number-3">3.2</span> Obtained Plant</h3>
<div id="outline-container-org878cff7" class="outline-3">
<h3 id="org878cff7"><span class="section-number-3">3.2</span> Obtained Plant</h3>
<div class="outline-text-3" id="text-3-2">
<p>
The obtain plant is shown in Figure <a href="#org455eb07">5</a>.
@ -616,8 +615,8 @@ isstable(Gx)
</div>
</div>
<div id="outline-container-org878cff7" class="outline-3">
<h3 id="org878cff7"><span class="section-number-3">4.2</span> Obtained Plant</h3>
<div id="outline-container-orgb574395" class="outline-3">
<h3 id="orgb574395"><span class="section-number-3">4.2</span> Obtained Plant</h3>
<div class="outline-text-3" id="text-4-2">
<div id="orge364e46" class="figure">
@ -687,18 +686,47 @@ load(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="o
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">n_av = 4;
han_win = hanning(ceil(length(cascade_hac_lac.Em.En.Data(<span class="org-type">:</span>,1))<span class="org-type">/</span>n_av));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">t = cascade_hac_lac.Em.En.Time;
Ts = t(2)<span class="org-type">-</span>t(1);
[pxx_ol, f] = pwelch(tomo_align_dist.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
[pxx_ca, <span class="org-type">~</span>] = pwelch(cascade_hac_lac.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
<div id="org11aa945" class="figure">
<p><img src="figs/cascade_hac_lac_tomography_psd.png" alt="cascade_hac_lac_tomography_psd.png" />
</p>
<p><span class="figure-number">Figure 9: </span>ASD of the position error (<a href="./figs/cascade_hac_lac_tomography_psd.png">png</a>, <a href="./figs/cascade_hac_lac_tomography_psd.pdf">pdf</a>)</p>
</div>
<div id="org845b982" class="figure">
<p><img src="figs/cascade_hac_lac_tomography_cas.png" alt="cascade_hac_lac_tomography_cas.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Cumulative Amplitude Spectrum of the position error (<a href="./figs/cascade_hac_lac_tomography_cas.png">png</a>, <a href="./figs/cascade_hac_lac_tomography_cas.pdf">pdf</a>)</p>
</div>
<div id="org0151895" class="figure">
<p><img src="figs/cascade_hac_lac_tomography.png" alt="cascade_hac_lac_tomography.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Results of the Tomography Experiment (<a href="./figs/cascade_hac_lac_tomography.png">png</a>, <a href="./figs/cascade_hac_lac_tomography.pdf">pdf</a>)</p>
<p><span class="figure-number">Figure 11: </span>Results of the Tomography Experiment (<a href="./figs/cascade_hac_lac_tomography.png">png</a>, <a href="./figs/cascade_hac_lac_tomography.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-23 lun. 10:05</p>
<p class="date">Created: 2020-03-25 mer. 19:23</p>
</div>
</body>
</html>

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-03-23 lun. 10:05 -->
<!-- 2020-03-25 mer. 19:23 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>HAC-LAC applied on the Simscape Model</title>
@ -278,14 +278,15 @@ for the JavaScript code in this tag.
<li><a href="#orgafbd7d0">2.4. Controller and Loop Gain</a></li>
</ul>
</li>
<li><a href="#orged12a17">3. High Authority Control - \(\bm{K}_\mathcal{X}\)</a>
<li><a href="#org73445c2">3. Uncertainty Improvements thanks to the LAC control</a></li>
<li><a href="#orged12a17">4. High Authority Control - \(\bm{K}_\mathcal{X}\)</a>
<ul>
<li><a href="#orgc22e2f2">3.1. Identification of the damped plant</a></li>
<li><a href="#org6bca8e2">3.2. Controller Design</a></li>
<li><a href="#orgc22e2f2">4.1. Identification of the damped plant</a></li>
<li><a href="#org6bca8e2">4.2. Controller Design</a></li>
</ul>
</li>
<li><a href="#orgb7ffa65">4. Simulation</a></li>
<li><a href="#org448f335">5. Results</a></li>
<li><a href="#orgb7ffa65">5. Simulation</a></li>
<li><a href="#org448f335">6. Results</a></li>
</ul>
</div>
</div>
@ -426,13 +427,40 @@ G_dvf.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-st
</div>
</div>
<div id="outline-container-orged12a17" class="outline-2">
<h2 id="orged12a17"><span class="section-number-2">3</span> High Authority Control - \(\bm{K}_\mathcal{X}\)</h2>
<div id="outline-container-org73445c2" class="outline-2">
<h2 id="org73445c2"><span class="section-number-2">3</span> Uncertainty Improvements thanks to the LAC control</h2>
<div class="outline-text-2" id="text-3">
<div class="org-src-container">
<pre class="src src-matlab">K_dvf_backup = K_dvf;
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">masses = [1, 10, 50]; <span class="org-comment">% [kg]</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">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orged12a17" class="outline-2">
<h2 id="orged12a17"><span class="section-number-2">4</span> High Authority Control - \(\bm{K}_\mathcal{X}\)</h2>
<div class="outline-text-2" id="text-4">
</div>
<div id="outline-container-orgc22e2f2" class="outline-3">
<h3 id="orgc22e2f2"><span class="section-number-3">3.1</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-3-1">
<h3 id="orgc22e2f2"><span class="section-number-3">4.1</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab">Kx = tf(zeros(6));
</pre>
@ -473,8 +501,8 @@ Gx.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">
</div>
<div id="outline-container-org6bca8e2" class="outline-3">
<h3 id="org6bca8e2"><span class="section-number-3">3.2</span> Controller Design</h3>
<div class="outline-text-3" id="text-3-2">
<h3 id="org6bca8e2"><span class="section-number-3">4.2</span> Controller Design</h3>
<div class="outline-text-3" id="text-4-2">
<p>
The controller consists of:
</p>
@ -516,8 +544,8 @@ Kx = Kx<span class="org-type">.*</span>diag(1<span class="org-type">./</span>dia
</div>
<div id="outline-container-orgb7ffa65" class="outline-2">
<h2 id="orgb7ffa65"><span class="section-number-2">4</span> Simulation</h2>
<div class="outline-text-2" id="text-4">
<h2 id="orgb7ffa65"><span class="section-number-2">5</span> Simulation</h2>
<div class="outline-text-2" id="text-5">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>);
@ -541,8 +569,8 @@ save(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="
</div>
<div id="outline-container-org448f335" class="outline-2">
<h2 id="org448f335"><span class="section-number-2">5</span> Results</h2>
<div class="outline-text-2" id="text-5">
<h2 id="org448f335"><span class="section-number-2">6</span> Results</h2>
<div class="outline-text-2" id="text-6">
<p>
Let&rsquo;s load the simulation when no control is applied.
</p>
@ -556,7 +584,7 @@ load(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-23 lun. 10:05</p>
<p class="date">Created: 2020-03-25 mer. 19:23</p>
</div>
</body>
</html>

View File

@ -1,11 +1,10 @@
<?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-03-23 lun. 10:05 -->
<!-- 2020-03-25 mer. 19:22 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Control of the NASS with Voice coil actuators</title>
@ -248,6 +247,16 @@ for the JavaScript code in this tag.
}
/*]]>*///-->
</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">
@ -256,10 +265,537 @@ for the JavaScript code in this tag.
<a accesskey="H" href="./index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Control of the NASS with Voice coil actuators</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org6d5d6b2">1. Initialization</a></li>
<li><a href="#orgf95b045">2. Low Authority Control - Integral Force Feedback \(\bm{K}_\text{IFF}\)</a>
<ul>
<li><a href="#org75ecf55">2.1. Identification</a></li>
<li><a href="#org203d651">2.2. Plant</a></li>
<li><a href="#orgccc21d2">2.3. Root Locus</a></li>
<li><a href="#org1a8ee8a">2.4. Controller and Loop Gain</a></li>
</ul>
</li>
<li><a href="#org2a44e66">3. High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</a>
<ul>
<li><a href="#org989c2e9">3.1. Identification of the damped plant</a></li>
<li><a href="#orgd89dc76">3.2. Obtained Plant</a></li>
<li><a href="#orgd1632cf">3.3. Controller Design and Loop Gain</a></li>
</ul>
</li>
<li><a href="#org5e26e70">4. On the usefulness of the High Authority Control loop / Linearization loop</a>
<ul>
<li><a href="#orge9b2f08">4.1. Identification</a></li>
<li><a href="#orgfab8847">4.2. Plant in the Task space</a></li>
<li><a href="#org18aeea5">4.3. Plant in the Leg&rsquo;s space</a></li>
</ul>
</li>
<li><a href="#org0cd0c63">5. Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</a>
<ul>
<li><a href="#orga960106">5.1. Identification of the linearized plant</a></li>
<li><a href="#org45829b7">5.2. Obtained Plant</a></li>
<li><a href="#org16f56fa">5.3. Controller Design</a></li>
</ul>
</li>
<li><a href="#org0b05a3a">6. Simulation</a></li>
<li><a href="#org16024e0">7. Results</a>
<ul>
<li><a href="#org26b1a39">7.1. Load the simulation results</a></li>
<li><a href="#org0f974ff">7.2. Control effort</a></li>
<li><a href="#orge126fd7">7.3. Load the simulation results</a></li>
</ul>
</li>
</ul>
</div>
</div>
<p>
The goal here is to study the use of a voice coil based nano-hexapod.
That is to say a nano-hexapod with a very small stiffness.
</p>
<div id="org757d77b" class="figure">
<p><img src="figs/cascade_control_architecture.png" alt="cascade_control_architecture.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Cascaded Control consisting of (from inner to outer loop): IFF, Linearization Loop, Tracking Control in the frame of the Legs</p>
</div>
<div id="outline-container-org6d5d6b2" class="outline-2">
<h2 id="org6d5d6b2"><span class="section-number-2">1</span> Initialization</h2>
<div class="outline-text-2" id="text-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>
The nano-hexapod is a voice coil based hexapod and the sample has a mass of 1kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'lorentz'</span>);
initializeSample(<span class="org-string">'mass'</span>, 1);
</pre>
</div>
<p>
We set the references that corresponds to a tomography experiment.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'cascade-hac-lac'</span>);
</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>);
</pre>
</div>
<p>
We log the signals.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Kx = tf(zeros(6));
Kl = tf(zeros(6));
Kiff = tf(zeros(6));
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf95b045" class="outline-2">
<h2 id="orgf95b045"><span class="section-number-2">2</span> Low Authority Control - Integral Force Feedback \(\bm{K}_\text{IFF}\)</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="org224edef"></a>
</p>
</div>
<div id="outline-container-org75ecf55" class="outline-3">
<h3 id="org75ecf55"><span class="section-number-3">2.1</span> Identification</h3>
<div class="outline-text-3" id="text-2-1">
<p>
Let&rsquo;s first identify the plant for the IFF controller.
</p>
<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">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Fnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_iff = linearize(mdl, io, 0);
G_iff.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
G_iff.OutputName = {<span class="org-string">'Fnlm1'</span>, <span class="org-string">'Fnlm2'</span>, <span class="org-string">'Fnlm3'</span>, <span class="org-string">'Fnlm4'</span>, <span class="org-string">'Fnlm5'</span>, <span class="org-string">'Fnlm6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org203d651" class="outline-3">
<h3 id="org203d651"><span class="section-number-3">2.2</span> Plant</h3>
<div class="outline-text-3" id="text-2-2">
<p>
The obtained plant for IFF is shown in Figure <a href="#orga39f9fa">2</a>.
</p>
<div id="orga39f9fa" class="figure">
<p><img src="figs/cascade_vc_iff_plant.png" alt="cascade_vc_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 2: </span>IFF Plant (<a href="./figs/cascade_vc_iff_plant.png">png</a>, <a href="./figs/cascade_vc_iff_plant.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgccc21d2" class="outline-3">
<h3 id="orgccc21d2"><span class="section-number-3">2.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-2-3">
<p>
As seen in the root locus (Figure <a href="#org528b5f0">3</a>, no damping can be added to modes corresponding to the resonance of the micro-station.
</p>
<p>
However, critical damping can be achieve for the resonances of the nano-hexapod as shown in the zoomed part of the root (Figure <a href="#org528b5f0">3</a>, left part).
The maximum damping is obtained for a control gain of \(\approx 70\).
</p>
<div id="org528b5f0" class="figure">
<p><img src="figs/cascade_vc_iff_root_locus.png" alt="cascade_vc_iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Root Locus for the IFF control (<a href="./figs/cascade_vc_iff_root_locus.png">png</a>, <a href="./figs/cascade_vc_iff_root_locus.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org1a8ee8a" class="outline-3">
<h3 id="org1a8ee8a"><span class="section-number-3">2.4</span> Controller and Loop Gain</h3>
<div class="outline-text-3" id="text-2-4">
<p>
We create the \(6 \times 6\) diagonal Integral Force Feedback controller.
The obtained loop gain is shown in Figure <a href="#orgc890275">4</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kiff = <span class="org-type">-</span>70<span class="org-type">/</span>s<span class="org-type">*</span>eye(6);
</pre>
</div>
<div id="orgc890275" class="figure">
<p><img src="figs/cascade_vc_iff_loop_gain.png" alt="cascade_vc_iff_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Obtained Loop gain the IFF Control (<a href="./figs/cascade_vc_iff_loop_gain.png">png</a>, <a href="./figs/cascade_vc_iff_loop_gain.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org2a44e66" class="outline-2">
<h2 id="org2a44e66"><span class="section-number-2">3</span> High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org1d54e1b"></a>
</p>
</div>
<div id="outline-container-org989c2e9" class="outline-3">
<h3 id="org989c2e9"><span class="section-number-3">3.1</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-3-1">
<p>
Let&rsquo;s identify the dynamics from \(\bm{\tau}^\prime\) to \(d\bm{\mathcal{L}}\) as shown in Figure <a href="#org757d77b">1</a>.
</p>
<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">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'output'</span>, [], <span class="org-string">'Dnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Leg Displacement</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gl = linearize(mdl, io, 0);
Gl.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
Gl.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-string">'Dnlm2'</span>, <span class="org-string">'Dnlm3'</span>, <span class="org-string">'Dnlm4'</span>, <span class="org-string">'Dnlm5'</span>, <span class="org-string">'Dnlm6'</span>};
</pre>
</div>
<p>
There are some unstable poles in the Plant with very small imaginary parts.
These unstable poles are probably not physical, and they disappear when taking the minimum realization of the plant.
</p>
<div class="org-src-container">
<pre class="src src-matlab">isstable(Gl)
Gl = minreal(Gl);
isstable(Gl)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd89dc76" class="outline-3">
<h3 id="orgd89dc76"><span class="section-number-3">3.2</span> Obtained Plant</h3>
<div class="outline-text-3" id="text-3-2">
<p>
The obtained dynamics is shown in Figure <a href="#orgd1818fd">5</a>.
</p>
<p>
Few things can be said on the dynamics:
</p>
<ul class="org-ul">
<li>the dynamics of the diagonal elements are almost all the same</li>
<li>the system is well decoupled below the resonances of the nano-hexapod (1Hz)</li>
<li>the dynamics of the diagonal elements are almost equivalent to a critically damped mass-spring-system with some spurious resonances above 50Hz corresponding to the resonances of the micro-station</li>
</ul>
<div id="orgd1818fd" class="figure">
<p><img src="figs/cascade_vc_hac_joint_plant.png" alt="cascade_vc_hac_joint_plant.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Plant for the High Authority Control in the Joint Space (<a href="./figs/cascade_vc_hac_joint_plant.png">png</a>, <a href="./figs/cascade_vc_hac_joint_plant.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgd1632cf" class="outline-3">
<h3 id="orgd1632cf"><span class="section-number-3">3.3</span> Controller Design and Loop Gain</h3>
<div class="outline-text-3" id="text-3-3">
<p>
As the plant is well decoupled, a diagonal plant is designed.
</p>
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
h = 2; <span class="org-comment">% Lead parameter</span>
Kl = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> ...<span class="org-comment"> % Lead</span>
(1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> ...<span class="org-comment"> % Lead</span>
(s <span class="org-type">+</span> 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>10)<span class="org-type">/</span>s <span class="org-type">*</span> ...<span class="org-comment"> % Weak Integrator</span>
(s <span class="org-type">+</span> 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>1)<span class="org-type">/</span>s <span class="org-type">*</span> ...<span class="org-comment"> % Weak Integrator</span>
1<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>10); <span class="org-comment">% Low pass filter after crossover</span>
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kl = Kl<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gl<span class="org-type">*</span>Kl, wc))));
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org5e26e70" class="outline-2">
<h2 id="org5e26e70"><span class="section-number-2">4</span> On the usefulness of the High Authority Control loop / Linearization loop</h2>
<div class="outline-text-2" id="text-4">
<p>
Let&rsquo;s see what happens is we omit the HAC loop and we directly try to control the damped plant using the measurement of the sample with respect to the granite \(\bm{\mathcal{X}}\).
</p>
<p>
We can do that in two different ways:
</p>
<ul class="org-ul">
<li>in the task space as shown in Figure <a href="#orge366d0b">6</a></li>
<li>in the space of the legs as shown in Figure <a href="#orgd23329e">7</a></li>
</ul>
<div id="orge366d0b" class="figure">
<p><img src="figs/control_architecture_iff_X.png" alt="control_architecture_iff_X.png" />
</p>
<p><span class="figure-number">Figure 6: </span>IFF control + primary controller in the task space</p>
</div>
<div id="orgd23329e" class="figure">
<p><img src="figs/control_architecture_iff_L.png" alt="control_architecture_iff_L.png" />
</p>
<p><span class="figure-number">Figure 7: </span>HAC-LAC control architecture in the frame of the legs</p>
</div>
</div>
<div id="outline-container-orge9b2f08" class="outline-3">
<h3 id="orge9b2f08"><span class="section-number-3">4.1</span> Identification</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-iff'</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">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller/HAC-IFF/Kx'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, 0);
G.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</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>};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">isstable(G)
G = <span class="org-type">-</span>minreal(G);
isstable(G)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfab8847" class="outline-3">
<h3 id="orgfab8847"><span class="section-number-3">4.2</span> Plant in the Task space</h3>
<div class="outline-text-3" id="text-4-2">
<p>
The obtained plant is shown in Figure
</p>
<div class="org-src-container">
<pre class="src src-matlab">Gx = G<span class="org-type">*</span>inv(nano_hexapod.J<span class="org-type">'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org18aeea5" class="outline-3">
<h3 id="org18aeea5"><span class="section-number-3">4.3</span> Plant in the Leg&rsquo;s space</h3>
<div class="outline-text-3" id="text-4-3">
<div class="org-src-container">
<pre class="src src-matlab">Gl = nano_hexapod.J<span class="org-type">*</span>G;
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org0cd0c63" class="outline-2">
<h2 id="org0cd0c63"><span class="section-number-2">5</span> Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="orga738520"></a>
</p>
</div>
<div id="outline-container-orga960106" class="outline-3">
<h3 id="orga960106"><span class="section-number-3">5.1</span> Identification of the linearized plant</h3>
<div class="outline-text-3" id="text-5-1">
<p>
We know identify the dynamics between \(\bm{r}_{\mathcal{X}_n}\) and \(\bm{r}_\mathcal{X}\).
</p>
<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">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller/Cascade-HAC-LAC/Kx'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gx = linearize(mdl, io, 0);
Gx.InputName = {<span class="org-string">'rL1'</span>, <span class="org-string">'rL2'</span>, <span class="org-string">'rL3'</span>, <span class="org-string">'rL4'</span>, <span class="org-string">'rL5'</span>, <span class="org-string">'rL6'</span>};
Gx.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>};
</pre>
</div>
<p>
As before, we take the minimum realization.
</p>
<div class="org-src-container">
<pre class="src src-matlab">isstable(Gx)
Gx = <span class="org-type">-</span>minreal(Gx);
isstable(Gx)
</pre>
</div>
</div>
</div>
<div id="outline-container-org45829b7" class="outline-3">
<h3 id="org45829b7"><span class="section-number-3">5.2</span> Obtained Plant</h3>
</div>
<div id="outline-container-org16f56fa" class="outline-3">
<h3 id="org16f56fa"><span class="section-number-3">5.3</span> Controller Design</h3>
<div class="outline-text-3" id="text-5-3">
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>200; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
h = 2; <span class="org-comment">% Lead parameter</span>
Kx = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <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>10)<span class="org-type">/</span>s <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>100)<span class="org-type">/</span>s <span class="org-type">*</span> ...
1<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>500); <span class="org-comment">% For Piezo</span>
<span class="org-comment">% Kx = (1/h) * (1 + s/wc*h)/(1 + s/wc/h) * (s + 2*pi*10)/s * (s + 2*pi*1)/s ; % For voice coil</span>
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kx = Kx<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gx<span class="org-type">*</span>Kx, wc))));
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org0b05a3a" class="outline-2">
<h2 id="org0b05a3a"><span class="section-number-2">6</span> Simulation</h2>
<div class="outline-text-2" id="text-6">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>);
</pre>
</div>
<p>
And we simulate the system.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">cascade_hac_lac_lorentz = simout;
save(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="org-string">'cascade_hac_lac_lorentz'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org16024e0" class="outline-2">
<h2 id="org16024e0"><span class="section-number-2">7</span> Results</h2>
<div class="outline-text-2" id="text-7">
</div>
<div id="outline-container-org26b1a39" class="outline-3">
<h3 id="org26b1a39"><span class="section-number-3">7.1</span> Load the simulation results</h3>
<div class="outline-text-3" id="text-7-1">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>);
load(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="org-string">'cascade_hac_lac'</span>, <span class="org-string">'cascade_hac_lac_lorentz'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org0f974ff" class="outline-3">
<h3 id="org0f974ff"><span class="section-number-3">7.2</span> Control effort</h3>
</div>
<div id="outline-container-orge126fd7" class="outline-3">
<h3 id="orge126fd7"><span class="section-number-3">7.3</span> Load the simulation results</h3>
<div class="outline-text-3" id="text-7-3">
<div class="org-src-container">
<pre class="src src-matlab">n_av = 4;
han_win = hanning(ceil(length(cascade_hac_lac.Em.En.Data(<span class="org-type">:</span>,1))<span class="org-type">/</span>n_av));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">t = cascade_hac_lac.Em.En.Time;
Ts = t(2)<span class="org-type">-</span>t(1);
[pxx_ol, f] = pwelch(tomo_align_dist.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
[pxx_ca, <span class="org-type">~</span>] = pwelch(cascade_hac_lac.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
[pxx_vc, <span class="org-type">~</span>] = pwelch(cascade_hac_lac_lorentz.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-23 lun. 10:05</p>
<p class="date">Created: 2020-03-25 mer. 19:22</p>
</div>
</body>
</html>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 30 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-03-17 mar. 17:30 -->
<!-- 2020-03-25 mer. 19:21 -->
<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>
@ -202,7 +202,30 @@
<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&dn=gpl-3.0.txt GPL-v3-or-Later
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
@ -223,7 +246,6 @@
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
</head>
<body>
@ -245,9 +267,11 @@
<li><a href="#org402c8e6">6. Tuning of the Dynamics of the Simscape model (link)</a></li>
<li><a href="#org4dd191b">7. Disturbances (link)</a></li>
<li><a href="#org6d7e868">8. Tomography Experiment (link)</a></li>
<li><a href="#org3b8f596">9. Active Damping Techniques on the Uni-axial Model (link)</a></li>
<li><a href="#org14a10e8">10. Active Damping Techniques on the full Simscape Model (link)</a></li>
<li><a href="#org361f405">11. Useful Matlab Functions (link)</a></li>
<li><a href="#orgafa75bf">9. Effect of support&rsquo;s compliance uncertainty on the plant (link)</a></li>
<li><a href="#org3b8f596">10. Active Damping Techniques on the Uni-axial Model (link)</a></li>
<li><a href="#org14a10e8">11. Active Damping Techniques on the full Simscape Model (link)</a></li>
<li><a href="#orgd818a00">12. Control of the Nano-Active-Stabilization-System (link)</a></li>
<li><a href="#org361f405">13. Useful Matlab Functions (link)</a></li>
</ul>
</div>
</div>
@ -356,27 +380,39 @@ Tomography experiments are simulated and the results are presented <a href="./ex
</div>
</div>
<div id="outline-container-org3b8f596" class="outline-2">
<h2 id="org3b8f596"><span class="section-number-2">9</span> Active Damping Techniques on the Uni-axial Model (<a href="./active_damping_uniaxial.html">link</a>)</h2>
<div id="outline-container-orgafa75bf" class="outline-2">
<h2 id="orgafa75bf"><span class="section-number-2">9</span> Effect of support&rsquo;s compliance uncertainty on the plant (<a href="uncertainty_support.html">link</a>)</h2>
<div class="outline-text-2" id="text-9">
<p>
In this document, is studied how uncertainty on the micro-station compliance will affect the uncertainty of the isolation platform to be designed.
</p>
</div>
</div>
<div id="outline-container-org3b8f596" class="outline-2">
<h2 id="org3b8f596"><span class="section-number-2">10</span> Active Damping Techniques on the Uni-axial Model (<a href="./active_damping_uniaxial.html">link</a>)</h2>
<div class="outline-text-2" id="text-10">
<p>
Active damping techniques are applied to the Uniaxial Simscape model.
</p>
</div>
</div>
<div id="outline-container-org14a10e8" class="outline-2">
<h2 id="org14a10e8"><span class="section-number-2">10</span> Active Damping Techniques on the full Simscape Model (<a href="control_active_damping.html">link</a>)</h2>
<div class="outline-text-2" id="text-10">
<h2 id="org14a10e8"><span class="section-number-2">11</span> Active Damping Techniques on the full Simscape Model (<a href="control_active_damping.html">link</a>)</h2>
<div class="outline-text-2" id="text-11">
<p>
Active damping techniques are applied to the full Simscape model.
</p>
</div>
</div>
<div id="outline-container-orgd818a00" class="outline-2">
<h2 id="orgd818a00"><span class="section-number-2">12</span> Control of the Nano-Active-Stabilization-System (<a href="control.html">link</a>)</h2>
</div>
<div id="outline-container-org361f405" class="outline-2">
<h2 id="org361f405"><span class="section-number-2">11</span> Useful Matlab Functions (<a href="./functions.html">link</a>)</h2>
<div class="outline-text-2" id="text-11">
<h2 id="org361f405"><span class="section-number-2">13</span> Useful Matlab Functions (<a href="./functions.html">link</a>)</h2>
<div class="outline-text-2" id="text-13">
<p>
Many matlab functions are shared among all the files of the projects.
</p>
@ -389,7 +425,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-03-17 mar. 17:30</p>
<p class="date">Created: 2020-03-25 mer. 19:21</p>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,859 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-03-25 mer. 19:20 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Effect of Uncertainty on the support&rsquo;s dynamics on the isolation platform dynamics</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">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![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;
}
/*]]>*///-->
</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">Effect of Uncertainty on the support&rsquo;s dynamics on the isolation platform dynamics</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgbe6e0b8">1. Simple Introductory Example</a>
<ul>
<li><a href="#orgf5c9fe3">1.1. Equations of motion</a></li>
<li><a href="#org8bd2a4a">1.2. Initialization of the support dynamics</a></li>
<li><a href="#orgefb9b71">1.3. Initialization of the isolation platform</a></li>
<li><a href="#org3bc4ad1">1.4. Comparison</a></li>
<li><a href="#org2200b2c">1.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#orge1d3484">2. Generalization to arbitrary dynamics</a>
<ul>
<li><a href="#org3948d1f">2.1. Introduction</a></li>
<li><a href="#org96daf87">2.2. Equations of motion</a></li>
<li><a href="#orgc20cabb">2.3. Compliance of the Support</a></li>
<li><a href="#orgf1c8c33">2.4. Effect of the Isolation platform Stiffness.</a></li>
<li><a href="#org67810a4">2.5. Equivalent Inverse Multiplicative Uncertainty</a></li>
<li><a href="#org6967854">2.6. Reduce the Uncertainty on the plant</a>
<ul>
<li><a href="#orgafebadd">2.6.1. Effect of the platform&rsquo;s stiffness \(k\)</a></li>
<li><a href="#orgd9a82cb">2.6.2. Effect of the platform&rsquo;s damping \(c\)</a></li>
<li><a href="#orgd2fc303">2.6.3. Effect of the platform&rsquo;s mass \(m\)</a></li>
</ul>
</li>
<li><a href="#org9c46c2a">2.7. Conclusion</a></li>
</ul>
</li>
</ul>
</div>
</div>
<p>
In this document we will consider an <b>isolation platform</b> (e.g. the nano-hexapod) on top of a <b>flexible support</b> (e.g. the micro-station).
</p>
<p>
The goal is to study:
</p>
<ul class="org-ul">
<li>how does the dynamics of the support influence the dynamics of the plant to control</li>
<li>similarly: how does the uncertainty on the support&rsquo;s dynamics will be transferred to uncertainty on the plant</li>
<li>what design choice should be made in order to minimize the resulting uncertainty on the plant</li>
</ul>
<p>
Two models are made to study these effects:
</p>
<ul class="org-ul">
<li>In section <a href="#org232d01f">1</a>, simple mass-spring-damper systems are chosen to model both the isolation platform and the flexible support</li>
<li>In section <a href="#orgb01b074">2</a>, we consider arbitrary support dynamics with multiplicative input uncertainty to study the unmodelled dynamics of the support</li>
</ul>
<div id="outline-container-orgbe6e0b8" class="outline-2">
<h2 id="orgbe6e0b8"><span class="section-number-2">1</span> Simple Introductory Example</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org232d01f"></a>
</p>
<p>
Let&rsquo;s consider the system shown in Figure <a href="#org41bc770">1</a> consisting of:
</p>
<ul class="org-ul">
<li>A <b>support</b> represented by a mass \(m^\prime\), a stiffness \(k^\prime\) and a dashpot \(c^\prime\)</li>
<li>An <b>isolation platform</b> represented by a mass \(m\), a stiffness \(k\) and a dashpot \(c\) and an actuator \(F\)</li>
</ul>
<p>
The goal is to stabilize \(x\) using \(F\) in spite of uncertainty on the support mechanical properties.
</p>
<div id="org41bc770" class="figure">
<p><img src="figs/2dof_system_stiffness_uncertainty.png" alt="2dof_system_stiffness_uncertainty.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Two degrees-of-freedom system</p>
</div>
</div>
<div id="outline-container-orgf5c9fe3" class="outline-3">
<h3 id="orgf5c9fe3"><span class="section-number-3">1.1</span> Equations of motion</h3>
<div class="outline-text-3" id="text-1-1">
<p>
If we write the equation of motion of the system in Figure <a href="#org41bc770">1</a>, we obtain:
</p>
\begin{align}
ms^2 x &= F + (cs + k) (x^\prime - x) \\
m^\prime s^2 x^\prime &= -F - (c^\prime s + k^\prime) x^\prime + (cs + k)(x - x^\prime)
\end{align}
<p>
After eliminating \(x^\prime\), we obtain:
</p>
\begin{equation}
\label{org2d73355}
\frac{x}{F} = \frac{m^\prime s^2 + c^\prime s + k^\prime}{ms^2(cs + k) + (ms^2 + cs + k)(m^\prime s^2 + c^\prime s + k^\prime)}
\end{equation}
</div>
</div>
<div id="outline-container-org8bd2a4a" class="outline-3">
<h3 id="org8bd2a4a"><span class="section-number-3">1.2</span> Initialization of the support dynamics</h3>
<div class="outline-text-3" id="text-1-2">
<p>
Let the support have:
</p>
<ul class="org-ul">
<li>a nominal mass of \(m^\prime = 1000\ [kg]\)</li>
<li>a nominal stiffness of \(k^\prime = 10^8\ [N/m]\)</li>
<li>a nominal damping of \(c^\prime = 10^5\ [N/(m/s)]\)</li>
</ul>
<div class="org-src-container">
<pre class="src src-matlab">mpi = 1e3;
cpi = 5e4;
kpi = 1e8;
</pre>
</div>
<p>
Let&rsquo;s also consider some uncertainty in those parameters:
</p>
<div class="org-src-container">
<pre class="src src-matlab">mp = ureal(<span class="org-string">'m'</span>, mpi, <span class="org-string">'Percentage'</span>, 30);
cp = ureal(<span class="org-string">'c'</span>, cpi, <span class="org-string">'Percentage'</span>, 30);
kp = ureal(<span class="org-string">'k'</span>, kpi, <span class="org-string">'Percentage'</span>, 30);
</pre>
</div>
<p>
The compliance of the support without the isolation platform is \(\frac{1}{m^\prime s^2 + c^\prime s + k^\prime}\) and its bode plot is shown in Figure <a href="#orgf0e5d13">2</a>.
</p>
<p>
One can see that support has a resonance frequency of \(\omega_0^\prime = 50\ Hz\).
</p>
<div id="orgf0e5d13" class="figure">
<p><img src="figs/nominal_support_compliance_dynamics.png" alt="nominal_support_compliance_dynamics.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Nominal compliance of the support (<a href="./figs/nominal_support_compliance_dynamics.png">png</a>, <a href="./figs/nominal_support_compliance_dynamics.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgefb9b71" class="outline-3">
<h3 id="orgefb9b71"><span class="section-number-3">1.3</span> Initialization of the isolation platform</h3>
<div class="outline-text-3" id="text-1-3">
<p>
Let&rsquo;s first fix the mass of the payload to be isolated:
</p>
<div class="org-src-container">
<pre class="src src-matlab">m = 100;
</pre>
</div>
<p>
And we generate three isolation platforms:
</p>
<ul class="org-ul">
<li>A soft one with \(\omega_0 = 0.1 \omega_0^\prime = 5\ Hz\)</li>
<li>A medium stiff one with \(\omega_0 = \omega_0^\prime = 50\ Hz\)</li>
<li>A stiff one with \(\omega_0 = 10 \omega_0^\prime = 500\ Hz\)</li>
</ul>
</div>
</div>
<div id="outline-container-org3bc4ad1" class="outline-3">
<h3 id="org3bc4ad1"><span class="section-number-3">1.4</span> Comparison</h3>
<div class="outline-text-3" id="text-1-4">
<p>
The obtained dynamics from \(F\) to \(x\) for the three isolation platform are shown in Figure <a href="#org5fb09ae">3</a>.
</p>
<div id="org5fb09ae" class="figure">
<p><img src="figs/plant_dynamics_uncertainty_stiff_mid_soft.png" alt="plant_dynamics_uncertainty_stiff_mid_soft.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Obtained plant for the three isolation platforms considered (<a href="./figs/plant_dynamics_uncertainty_stiff_mid_soft.png">png</a>, <a href="./figs/plant_dynamics_uncertainty_stiff_mid_soft.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org2200b2c" class="outline-3">
<h3 id="org2200b2c"><span class="section-number-3">1.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-5">
<div class="important">
<p>
The soft platform dynamics does not seems to depend on the dynamics of the support.
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orge1d3484" class="outline-2">
<h2 id="orge1d3484"><span class="section-number-2">2</span> Generalization to arbitrary dynamics</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orgb01b074"></a>
</p>
</div>
<div id="outline-container-org3948d1f" class="outline-3">
<h3 id="org3948d1f"><span class="section-number-3">2.1</span> Introduction</h3>
<div class="outline-text-3" id="text-2-1">
<p>
Let&rsquo;s now consider a general support described by its <b>compliance</b> \(G^\prime(s) = \frac{x^\prime}{F^\prime}\) as shown in Figure <a href="#orgaa4cf23">4</a>.
</p>
<div id="orgaa4cf23" class="figure">
<p><img src="figs/general_support_compliance.png" alt="general_support_compliance.png" />
</p>
<p><span class="figure-number">Figure 4: </span>General support</p>
</div>
<p>
Now let&rsquo;s consider the system consisting of a mass-spring-system (the isolation platform) on top of a general support as shown in Figure <a href="#org524a33a">5</a>.
</p>
<div id="org524a33a" class="figure">
<p><img src="figs/general_support_with_isolator.png" alt="general_support_with_isolator.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Mass-Spring-Damper system on top of a general support</p>
</div>
</div>
</div>
<div id="outline-container-org96daf87" class="outline-3">
<h3 id="org96daf87"><span class="section-number-3">2.2</span> Equations of motion</h3>
<div class="outline-text-3" id="text-2-2">
<p>
We have to following equations of motion:
</p>
\begin{align}
ms^2 x &= F + (cs + k) (x^\prime - x) \\
F^\prime &= -F + (cs + k)(x - x^\prime) \\
\frac{x^\prime}{F^\prime} &= G^\prime(s)
\end{align}
<p>
And by eliminating \(F^\prime\) and \(x^\prime\), we find the plant dynamics \(G(s) = \frac{x}{F}\).
</p>
<div class="important">
\begin{equation}
\frac{x}{F} = \frac{1}{ms^2 + cs + k + ms^2(cs + k)G^\prime(s)} \label{eq:plant_dynamics_general_support}
\end{equation}
</div>
<p>
In order to verify that the formula is correct, let&rsquo;s take the same mass-spring-damper system used in the system shown in Figure <a href="#org41bc770">1</a>:
\[ \frac{x^\prime}{F^\prime} = \frac{1}{m^\prime s^2 + c^\prime s + k^\prime} \]
</p>
<p>
And we obtain
\[ \frac{x}{F} = \frac{m^\prime s^2 + c^\prime s + k^\prime}{(ms^2 + cs + k)(m^\prime s^2 + c^\prime s + k^\prime) + ms^2(cs + k)} \]
Which is the same transfer function that was obtained in section <a href="#org232d01f">1</a> (Eq. \eqref{org2d73355}).
</p>
</div>
</div>
<div id="outline-container-orgc20cabb" class="outline-3">
<h3 id="orgc20cabb"><span class="section-number-3">2.3</span> Compliance of the Support</h3>
<div class="outline-text-3" id="text-2-3">
<p>
We model the support by a mass-spring-damper model with some uncertainty.
</p>
<p>
The nominal compliance of the support is corresponding to the compliance of a mass-spring-damper system with a mass of \(1000\ kg\) and a stiffness of \(10^8\ [N/m]\).
The main resonance of the support is then \(\omega^\prime = \sqrt{\frac{m^\prime}{k^\prime}} \approx 50\ Hz\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">m0 = 1e3;
c0 = 5e4;
k0 = 1e8;
Gp0 = 1<span class="org-type">/</span>(m0<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c0<span class="org-type">*</span>s <span class="org-type">+</span> k0);
</pre>
</div>
<p>
Let&rsquo;s represent the uncertainty on the compliance of the support by a multiplicative uncertainty (Figure <a href="#orgaaa2d77">6</a>):
\[ G^\prime(s) = G_0^\prime(s)(1 + w_I^\prime(s)\Delta_I(s)) \quad |\Delta_I(j\omega)| < 1\ \forall \omega \]
</p>
<p>
This could represent <b>unmodelled dynamics</b> or unknown parameters of the support.
</p>
<div id="orgaaa2d77" class="figure">
<p><img src="figs/input_uncertainty_set.png" alt="input_uncertainty_set.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Input Multiplicative Uncertainty</p>
</div>
<p>
We choose a simple uncertainty weight:
\[ w_I(s) = \frac{\tau s + r_0}{(\tau/r_\infty) s + 1} \]
where \(r_0\) is the relative uncertainty at steady-state, \(1/\tau\) is the frequency at which the relative uncertainty reaches \(100\ \%\), and \(r_\infty\) is the magnitude of the weight at high frequency.
</p>
<p>
The parameters are defined below.
</p>
<div class="org-src-container">
<pre class="src src-matlab">r0 = 0.5;
tau = 1<span class="org-type">/</span>(50<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span>);
rinf = 10;
wI = (tau<span class="org-type">*</span>s <span class="org-type">+</span> r0)<span class="org-type">/</span>((tau<span class="org-type">/</span>rinf)<span class="org-type">*</span>s <span class="org-type">+</span> 1);
</pre>
</div>
<p>
We then generate a complex \(\Delta\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">DeltaI = ucomplex(<span class="org-string">'A'</span>,0);
</pre>
</div>
<p>
We generate the uncertain plant \(G^\prime(s)\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">Gp = Gp0<span class="org-type">*</span>(1<span class="org-type">+</span>wI<span class="org-type">*</span>DeltaI);
</pre>
</div>
<p>
A set of uncertainty support&rsquo;s compliance transfer functions is shown in Figure <a href="#orgcac0998">7</a>.
</p>
<div id="orgcac0998" class="figure">
<p><img src="figs/compliance_support_uncertainty.png" alt="compliance_support_uncertainty.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Uncertainty of the support&rsquo;s compliance (<a href="./figs/compliance_support_uncertainty.png">png</a>, <a href="./figs/compliance_support_uncertainty.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgf1c8c33" class="outline-3">
<h3 id="orgf1c8c33"><span class="section-number-3">2.4</span> Effect of the Isolation platform Stiffness.</h3>
<div class="outline-text-3" id="text-2-4">
<p>
Let&rsquo;s first fix the mass of the payload to be isolated:
</p>
<div class="org-src-container">
<pre class="src src-matlab">m = 100;
</pre>
</div>
<p>
And we generate three isolation platforms:
</p>
<ul class="org-ul">
<li>A soft one with \(\omega_0 = 5\ Hz\)</li>
<li>A medium stiff one with \(\omega_0 = 50\ Hz\)</li>
<li>A stiff one with \(\omega_0 = 500\ Hz\)</li>
</ul>
<p>
Soft Isolation Platform:
</p>
<div class="org-src-container">
<pre class="src src-matlab">k_soft = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5)<span class="org-type">^</span>2;
c_soft = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_soft);
G_soft = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft)<span class="org-type">*</span>Gp);
</pre>
</div>
<p>
Mid Isolation Platform
</p>
<div class="org-src-container">
<pre class="src src-matlab">k_mid = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50)<span class="org-type">^</span>2;
c_mid = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_mid);
G_mid = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid)<span class="org-type">*</span>Gp);
</pre>
</div>
<p>
Stiff Isolation Platform
</p>
<div class="org-src-container">
<pre class="src src-matlab">k_stiff = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>500)<span class="org-type">^</span>2;
c_stiff = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_stiff);
G_stiff = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff)<span class="org-type">*</span>Gp);
</pre>
</div>
<p>
The obtained transfer functions \(x/F\) for each of the three platforms are shown in Figure <a href="#org89aa89f">8</a>.
</p>
<div id="org89aa89f" class="figure">
<p><img src="figs/plant_uncertainty_stiffness_isolator.png" alt="plant_uncertainty_stiffness_isolator.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Obtained plant for the three isolators (<a href="./figs/plant_uncertainty_stiffness_isolator.png">png</a>, <a href="./figs/plant_uncertainty_stiffness_isolator.pdf">pdf</a>)</p>
</div>
<p>
The obtain result is very similar to the one obtain in section <a href="#org232d01f">1</a>, except for the stiff isolation that experience lot&rsquo;s of uncertainty at high frequency.
This is due to the fact that with the current model, at high frequency, the support&rsquo;s compliance uncertainty is much higher than the previous model.
</p>
</div>
</div>
<div id="outline-container-org67810a4" class="outline-3">
<h3 id="org67810a4"><span class="section-number-3">2.5</span> Equivalent Inverse Multiplicative Uncertainty</h3>
<div class="outline-text-3" id="text-2-5">
<p>
Let&rsquo;s express the uncertainty of the plant \(x/F\) as a function of the parameters as well as of the uncertainty on the platform&rsquo;s compliance:
</p>
\begin{align*}
\frac{x}{F} &= \frac{1}{ms^2 + cs + k + ms^2(cs + k)G_0^\prime(s)(1 + w_I(s)\Delta(s))}\\
&= \frac{1}{ms^2 + cs + k + ms^2(cs + k)G_0^\prime(s) + ms^2(cs + k)G_0^\prime(s) w_I(s)\Delta(s)}\\
&= \frac{1}{ms^2 + cs + k + ms^2(cs + k)G_0^\prime(s)} \cdot \frac{1}{1 + \frac{ms^2(cs + k)G_0^\prime(s) w_I(s)}{ms^2 + cs + k + ms^2(cs + k)G_0^\prime(s)} \Delta(s)}\\
\end{align*}
<p>
We can rewrite that as an inverse multiplicative uncertainty (Figure <a href="#orge738173">9</a>):
</p>
<div class="important">
\begin{equation}
\frac{x}{F} = G_0(s) (1 + w_{iI}(s) \Delta(s))^{-1}
\end{equation}
<p>
with:
</p>
<ul class="org-ul">
<li>\(G_0(s) = \frac{1}{ms^2 + cs + k + ms^2(cs + k)G_0^\prime(s)}\)</li>
<li>\(w_{iI}(s) = \frac{ms^2(cs + k)G_0^\prime(s) w_I(s)}{ms^2 + cs + k + ms^2(cs + k)G_0^\prime(s)} = G_0(s) ms^2(cs + k)G_0^\prime(s) w_I(s)\)</li>
</ul>
</div>
<div id="orge738173" class="figure">
<p><img src="figs/inverse_uncertainty_set.png" alt="inverse_uncertainty_set.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Inverse Multiplicative Uncertainty</p>
</div>
</div>
</div>
<div id="outline-container-org6967854" class="outline-3">
<h3 id="org6967854"><span class="section-number-3">2.6</span> Reduce the Uncertainty on the plant</h3>
<div class="outline-text-3" id="text-2-6">
<p>
Now that we know the expression of the uncertainty on the plant, we can wonder what parameters of the isolation platform would lower the plant uncertainty, or at least bring the uncertainty to reasonable level.
</p>
<p>
The uncertainty of the plant is described by an inverse multiplicative uncertainty with the following weight:
\[ w_{iI}(s) = \frac{ms^2(cs + k)G_0^\prime(s) w_I(s)}{ms^2 + cs + k + ms^2(cs + k)G_0^\prime(s)} \]
</p>
<p>
Let&rsquo;s study separately the effect of the platform&rsquo;s mass, damping and stiffness.
</p>
</div>
<div id="outline-container-orgafebadd" class="outline-4">
<h4 id="orgafebadd"><span class="section-number-4">2.6.1</span> Effect of the platform&rsquo;s stiffness \(k\)</h4>
<div class="outline-text-4" id="text-2-6-1">
<p>
Let&rsquo;s fix \(\xi = \frac{c}{2\sqrt{km}} = 0.1\), \(m = 100\ [kg]\) and see the evolution of \(|w_{iI}(j\omega)|\) with \(k\).
</p>
<p>
This is first shown for few values of the stiffness \(k\) in figure <a href="#org5bc976b">10</a>
</p>
<div id="org5bc976b" class="figure">
<p><img src="figs/inverse_multiplicative_uncertainty_norm_few_k.png" alt="inverse_multiplicative_uncertainty_norm_few_k.png" />
</p>
<p><span class="figure-number">Figure 10: </span>caption (<a href="./figs/inverse_multiplicative_uncertainty_norm_few_k.png">png</a>, <a href="./figs/inverse_multiplicative_uncertainty_norm_few_k.pdf">pdf</a>)</p>
</div>
<p>
The norm of the uncertainty weight \(|w_iI(j\omega)|\) is displayed as a function of \(\omega\) and \(k\) in Figure <a href="#orgb283d43">11</a>.
</p>
<div id="orgb283d43" class="figure">
<p><img src="figs/inverse_multiplicative_uncertainty_norm_k.png" alt="inverse_multiplicative_uncertainty_norm_k.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Evolution of the norm of the uncertainty weight \(|w_{iI}(j\omega)|\) as a function of the platform&rsquo;s stiffness \(k\) (<a href="./figs/inverse_multiplicative_uncertainty_norm_k.png">png</a>, <a href="./figs/inverse_multiplicative_uncertainty_norm_k.pdf">pdf</a>)</p>
</div>
<p>
Instead of plotting as a function of the platform&rsquo;s stiffness, we can plot as a function of \(\omega_0/\omega_0^\prime\) where:
</p>
<ul class="org-ul">
<li>\(\omega_0\) is the resonance of the platform alone</li>
<li>\(\omega_0^\prime\) is the resonance of the support alone</li>
</ul>
<p>
The obtain plot is shown in Figure <a href="#org9adcd50">12</a>.
In that case, we can see that with a platform&rsquo;s resonance frequency 10 times lower than the resonance of the support, we get less than \(1\%\) uncertainty.
</p>
<div id="org9adcd50" class="figure">
<p><img src="figs/inverse_multiplicative_uncertainty_k_normalized_frequency.png" alt="inverse_multiplicative_uncertainty_k_normalized_frequency.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Evolution of the norm of the uncertainty weight \(|w_{iI}(j\omega)|\) as a function of the frequency ratio \(\omega_0/\omega_0^\prime\) (<a href="./figs/inverse_multiplicative_uncertainty_k_normalized_frequency.png">png</a>, <a href="./figs/inverse_multiplicative_uncertainty_k_normalized_frequency.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgd9a82cb" class="outline-4">
<h4 id="orgd9a82cb"><span class="section-number-4">2.6.2</span> Effect of the platform&rsquo;s damping \(c\)</h4>
<div class="outline-text-4" id="text-2-6-2">
<p>
Let&rsquo;s fix \(k = 10^7\ [N/m]\), \(m = 100\ [kg]\) and see the evolution of \(|w_{iI}(j\omega)|\) with the isolator damping \(c\) (Figure <a href="#org983fa6b">13</a>).
</p>
<div id="org983fa6b" class="figure">
<p><img src="figs/inverse_multiplicative_uncertainty_norm_c.png" alt="inverse_multiplicative_uncertainty_norm_c.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Evolution of the norm of the uncertainty weight \(|w_{iI}(j\omega)|\) as a function of the platform&rsquo;s damping ratio \(\xi\) (<a href="./figs/inverse_multiplicative_uncertainty_norm_c.png">png</a>, <a href="./figs/inverse_multiplicative_uncertainty_norm_c.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgd2fc303" class="outline-4">
<h4 id="orgd2fc303"><span class="section-number-4">2.6.3</span> Effect of the platform&rsquo;s mass \(m\)</h4>
<div class="outline-text-4" id="text-2-6-3">
<p>
Let&rsquo;s fix \(k = 10^7\ [N/m]\), \(\xi = \frac{c}{2\sqrt{km}} = 0.1\) and see the evolution of \(|w_{iI}(j\omega)|\) with the payload mass \(m\) (Figure <a href="#orgf899c7a">14</a>).
</p>
<div id="orgf899c7a" class="figure">
<p><img src="figs/inverse_multiplicative_uncertainty_norm_m.png" alt="inverse_multiplicative_uncertainty_norm_m.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Evolution of the norm of the uncertainty weight \(|w_{iI}(j\omega)|\) as a function of the payload mass \(m\) (<a href="./figs/inverse_multiplicative_uncertainty_norm_m.png">png</a>, <a href="./figs/inverse_multiplicative_uncertainty_norm_m.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org9c46c2a" class="outline-3">
<h3 id="org9c46c2a"><span class="section-number-3">2.7</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-7">
<p>
If the goal is to have an acceptable (\(<10\%\)) uncertainty on the plant until the highest frequency, two design choice for the isolation platform are possible:
</p>
<ul class="org-ul">
<li>a very soft isolation platform \(\omega_0 \ll \omega_0^\prime\)</li>
<li>a very stiff isolation platform \(\omega_0 \gg \omega_0^\prime\)</li>
</ul>
<p>
If a very soft isolation platform is used, the uncertainty due to the support&rsquo;s compliance is filtered out and never reaches problematic values.
</p>
<p>
If a very stiff isolation platform is used, the uncertainty will be high around \(\omega_0^\prime\) and may reach unacceptable value.
It will then be high around \(\omega_0\) and probably be higher than one.
Thus, if a stiff isolation platform is used, the recommendation is to have the largest possible resonance frequency, as the control bandwidth will be limited by the first resonance of the isolation platform (if not already limited by the resonance of the support).
</p>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-25 mer. 19:20</p>
</div>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -77,7 +77,7 @@ It is then compare to the wanted position of the Sample $\bm{r}_\mathcal{X}$ in
\draw[->] (Kl.south) -- (addF.north);
\draw[->] (subx.east) -- (Kx.west) node[above left]{$\bm{\epsilon}_\mathcal{X}$};
\draw[->] (Kx.east) node[above right]{$\bm{\tau}_\mathcal{X}$} -- (addF.west);
\draw[->] (Kx.east) node[above right]{$\bm{\tau}^\prime$} -- (addF.west);
\draw[->] (addF.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] ($(outputL.east) + (0.4, 0)$)node[branch](L){} |- (subl.east);
@ -294,6 +294,100 @@ The design of the associated decentralized controller is explained in [[file:con
K_dvf = -K_dvf*eye(6);
#+end_src
* Uncertainty Improvements thanks to the LAC control
#+begin_src matlab
K_dvf_backup = K_dvf;
initializeController('type', 'hac-dvf');
#+end_src
#+begin_src matlab
masses = [1, 10, 50]; % [kg]
#+end_src
#+begin_src matlab
%% Name of the Simulink File
mdl = 'nass_model';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'output', [], 'En'); io_i = io_i + 1; % Position Errror
#+end_src
#+begin_src matlab :exports none
Gm = {zeros(length(masses))};
K_dvf = tf(zeros(6));
Kx = tf(zeros(6));
for i = 1:length(masses)
initializeSample('mass', masses(i));
%% Run the linearization
G = linearize(mdl, io, 0);
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gm(i) = {G};
end
#+end_src
#+begin_src matlab :exports none
Gm_iff = {zeros(length(masses))};
K_dvf = K_dvf_backup;
Kx = tf(zeros(6));
for i = 1:length(masses)
initializeSample('mass', masses(i));
%% Run the linearization
G = linearize(mdl, io, 0);
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gm_iff(i) = {G};
end
#+end_src
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
for i = 1:length(Gm_iff)
set(gca,'ColorOrderIndex',i);
plot(freqs, abs(squeeze(freqresp(Gm{i}(1, 1), freqs, 'Hz'))), '-');
set(gca,'ColorOrderIndex',i);
plot(freqs, abs(squeeze(freqresp(Gm_iff{i}(1, 1), freqs, 'Hz'))), '--');
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
hold on;
for i = 1:length(Gm_iff)
set(gca,'ColorOrderIndex',i);
plot(freqs, 180/pi*angle(squeeze(freqresp(Gm{i}(1, 1), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$M = %.0f$ [kg]', masses(i)));
set(gca,'ColorOrderIndex',i);
plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_iff{i}(1, 1), freqs, 'Hz'))), '--', ...
'HandleVisibility', 'off');
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
legend('location', 'southwest');
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
#+end_src
* High Authority Control - $\bm{K}_\mathcal{X}$
** Identification of the damped plant
#+begin_src matlab

File diff suppressed because it is too large Load Diff

View File

@ -82,12 +82,16 @@ Now that the dynamics of the Model have been tuned and the Disturbances have inc
Tomography experiments are simulated and the results are presented [[./experiments.org][here]].
* Effect of support's compliance uncertainty on the plant ([[file:uncertainty_support.org][link]])
In this document, is studied how uncertainty on the micro-station compliance will affect the uncertainty of the isolation platform to be designed.
* Active Damping Techniques on the Uni-axial Model ([[./active_damping_uniaxial.org][link]])
Active damping techniques are applied to the Uniaxial Simscape model.
* Active Damping Techniques on the full Simscape Model ([[file:control_active_damping.org][link]])
Active damping techniques are applied to the full Simscape model.
* Control of the Nano-Active-Stabilization-System ([[file:control.org][link]])
* Useful Matlab Functions ([[./functions.org][link]])
Many matlab functions are shared among all the files of the projects.

View File

@ -1458,7 +1458,7 @@ The =sample= structure is saved.
:END:
#+begin_src matlab
arguments
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf', 'ref-track-L', 'ref-track-iff-L', 'cascade-hac-lac'})} = 'open-loop'
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf', 'ref-track-L', 'ref-track-iff-L', 'cascade-hac-lac', 'hac-iff'})} = 'open-loop'
end
#+end_src
@ -1491,6 +1491,8 @@ First, we initialize the =controller= structure.
controller.type = 6;
case 'cascade-hac-lac'
controller.type = 7;
case 'hac-iff'
controller.type = 8;
end
#+end_src

View File

@ -993,7 +993,7 @@ If a very stiff isolation platform is used, the uncertainty will be high around
It will then be high around $\omega_0$ and probably be higher than one.
Thus, if a stiff isolation platform is used, the recommendation is to have the largest possible resonance frequency, as the control bandwidth will be limited by the first resonance of the isolation platform (if not already limited by the resonance of the support).
* Numerical Analysis for the NASS
* Numerical Analysis for the NASS :noexport:
<<sec:nass>>
** Introduction :ignore:

View File

@ -1,7 +1,7 @@
function [] = initializeController(args)
arguments
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf', 'ref-track-L', 'ref-track-iff-L', 'cascade-hac-lac'})} = 'open-loop'
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf', 'ref-track-L', 'ref-track-iff-L', 'cascade-hac-lac', 'hac-iff'})} = 'open-loop'
end
controller = struct();
@ -21,6 +21,8 @@ switch args.type
controller.type = 6;
case 'cascade-hac-lac'
controller.type = 7;
case 'hac-iff'
controller.type = 8;
end
save('./mat/controller.mat', 'controller');