Update html output

This commit is contained in:
Thomas Dehaeze 2020-09-01 13:51:37 +02:00
parent 2389e6ba8e
commit 184c755fb8
15 changed files with 1326 additions and 872 deletions

View File

@ -3,7 +3,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-05-25 lun. 11:13 -->
<!-- 2020-09-01 mar. 13:48 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Amplified Piezoelectric Stack Actuator</title>
<meta name="generator" content="Org mode" />
@ -36,30 +36,64 @@
<ul>
<li><a href="#org996fd7c">1. Simplified Model</a>
<ul>
<li><a href="#orgd4866c5">1.1. Parameters</a></li>
<li><a href="#orgf0cb0e7">1.2. Identification</a></li>
<li><a href="#org8d3f9bd">1.3. Root Locus</a></li>
<li><a href="#org76fe747">1.1. Parameters</a></li>
<li><a href="#orgbe95c15">1.2. Identification</a></li>
<li><a href="#orgeaad673">1.3. Root Locus</a></li>
<li><a href="#orged9310d">1.4. Analytical Model</a></li>
<li><a href="#org2f351a4">1.5. Analytical Analysis</a></li>
</ul>
</li>
<li><a href="#orgf1a765f">2. Rotating X-Y platform</a>
<ul>
<li><a href="#org6594475">2.1. Parameters</a></li>
<li><a href="#orgf86cabd">2.2. Identification</a></li>
<li><a href="#org5c898f6">2.3. Root Locus</a></li>
<li><a href="#orga31e2d2">2.1. Parameters</a></li>
<li><a href="#orgb7a6747">2.2. Identification</a></li>
<li><a href="#org290de6f">2.3. Root Locus</a></li>
<li><a href="#org069f401">2.4. Analysis</a></li>
</ul>
</li>
<li><a href="#org3c74f7f">3. Stewart Platform with Amplified Actuators</a>
<ul>
<li><a href="#org5a7c6dc">3.1. Initialization</a></li>
<li><a href="#org206d2b9">3.2. Identification</a></li>
<li><a href="#org14c7063">3.3. Controller Design</a></li>
<li><a href="#org043ce40">3.4. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#orgbc2f246">3.5. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li>
<li><a href="#org297c2ad">3.6. Optimal Stiffnesses</a></li>
<li><a href="#org1e2f810">3.7. Direct Velocity Feedback with Amplified Actuators</a></li>
<li><a href="#orgdfe4eeb">3.2. APA-100 Amplified Actuator</a>
<ul>
<li><a href="#org7798ce9">3.2.1. Identification</a></li>
<li><a href="#orgb943e63">3.2.2. Controller Design</a></li>
<li><a href="#org0bf79ae">3.2.3. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#org96f3a8d">3.2.4. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li>
</ul>
</li>
<li><a href="#org297c2ad">3.3. Optimal Stiffnesses</a>
<ul>
<li><a href="#org5dc2ac7">3.3.1. Low Authority Controller</a>
<ul>
<li><a href="#orgf339f37">3.3.1.1. Identification</a></li>
<li><a href="#orgfcd4ad7">3.3.1.2. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#org32c3422">3.3.1.3. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li>
</ul>
</li>
<li><a href="#orgce4f07c">3.3.2. High Authority Controller</a>
<ul>
<li><a href="#orgc16003c">3.3.2.1. Controller Design</a></li>
<li><a href="#orgbcf7749">3.3.2.2. Sensibility to Disturbances and Noise Budget</a></li>
<li><a href="#orga0e8915">3.3.2.3. Simulations of Tomography Experiment</a></li>
<li><a href="#orgb6ec250">3.3.2.4. Results</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org1e2f810">3.4. Direct Velocity Feedback with Amplified Actuators</a></li>
</ul>
</li>
<li><a href="#org936810c">4. APA300ML</a>
<ul>
<li><a href="#org797e3ca">4.1. Initialization</a></li>
<li><a href="#org2300f00">4.2. Identification</a></li>
<li><a href="#org4ec1cb7">4.3. Controller Design</a></li>
<li><a href="#org1b67874">4.4. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#org655c28c">4.5. Control in the leg space</a></li>
<li><a href="#org92df47e">4.6. Sensibility to Disturbances and Noise Budget</a></li>
<li><a href="#orge84cedc">4.7. Simulations of Tomography Experiment</a></li>
<li><a href="#org05ce41a">4.8. Results</a></li>
</ul>
</li>
</ul>
@ -67,7 +101,7 @@
</div>
<p>
The presented model is based on <a class='org-ref-reference' href="#souleille18_concep_activ_mount_space_applic">souleille18_concep_activ_mount_space_applic</a>.
The presented model is based on (<a href="#citeproc_bib_item_2">Souleille et al. 2018</a>).
</p>
<p>
@ -136,8 +170,8 @@ The parameters are shown in the table below.
<h2 id="org996fd7c"><span class="section-number-2">1</span> Simplified Model</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-orgd4866c5" class="outline-3">
<h3 id="orgd4866c5"><span class="section-number-3">1.1</span> Parameters</h3>
<div id="outline-container-org76fe747" class="outline-3">
<h3 id="org76fe747"><span class="section-number-3">1.1</span> Parameters</h3>
<div class="outline-text-3" id="text-1-1">
<div class="org-src-container">
<pre class="src src-matlab">m = 1; % [kg]
@ -167,8 +201,8 @@ IFF Controller:
</div>
</div>
<div id="outline-container-orgf0cb0e7" class="outline-3">
<h3 id="orgf0cb0e7"><span class="section-number-3">1.2</span> Identification</h3>
<div id="outline-container-orgbe95c15" class="outline-3">
<h3 id="orgbe95c15"><span class="section-number-3">1.2</span> Identification</h3>
<div class="outline-text-3" id="text-1-2">
<p>
Identification in open-loop.
@ -223,8 +257,8 @@ Giff.OutputName = {'Fs', 'x1'};
</div>
</div>
<div id="outline-container-org8d3f9bd" class="outline-3">
<h3 id="org8d3f9bd"><span class="section-number-3">1.3</span> Root Locus</h3>
<div id="outline-container-orgeaad673" class="outline-3">
<h3 id="orgeaad673"><span class="section-number-3">1.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-1-3">
<div id="org85cd6e5" class="figure">
@ -300,6 +334,17 @@ And two complex conjugate poles at:
If maximal damping is to be attained with IFF, the distance between the zero and the pole is to be maximized.
Thus, we wish to maximize \(p/z\), which is equivalent as to minimize \(k_1\) and have \(k_e \approx k_a\) (supposing \(k_e + k_a \approx \text{cst}\)).
</p>
<div class="org-src-container">
<pre class="src src-matlab">m = 1;
k1 = 1e6;
ka = 1e6;
ke = 1e6;
Giff.InputName = {'f'};
Giff.OutputName = {'Fs'};
</pre>
</div>
</div>
</div>
</div>
@ -307,9 +352,13 @@ Thus, we wish to maximize \(p/z\), which is equivalent as to minimize \(k_1\) an
<div id="outline-container-orgf1a765f" class="outline-2">
<h2 id="orgf1a765f"><span class="section-number-2">2</span> Rotating X-Y platform</h2>
<div class="outline-text-2" id="text-2">
<p>
This analysis gave rise to a paper (<a href="#citeproc_bib_item_1">Dehaeze and Collette 2020</a>).
</p>
</div>
<div id="outline-container-org6594475" class="outline-3">
<h3 id="org6594475"><span class="section-number-3">2.1</span> Parameters</h3>
<div id="outline-container-orga31e2d2" class="outline-3">
<h3 id="orga31e2d2"><span class="section-number-3">2.1</span> Parameters</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-matlab">m = 1; % [kg]
@ -336,8 +385,8 @@ h = 0.2; % [m]
</div>
</div>
<div id="outline-container-orgf86cabd" class="outline-3">
<h3 id="orgf86cabd"><span class="section-number-3">2.2</span> Identification</h3>
<div id="outline-container-orgb7a6747" class="outline-3">
<h3 id="orgb7a6747"><span class="section-number-3">2.2</span> Identification</h3>
<div class="outline-text-3" id="text-2-2">
<p>
Rotating speed in rad/s:
@ -386,8 +435,8 @@ end
</div>
</div>
<div id="outline-container-org5c898f6" class="outline-3">
<h3 id="org5c898f6"><span class="section-number-3">2.3</span> Root Locus</h3>
<div id="outline-container-org290de6f" class="outline-3">
<h3 id="org290de6f"><span class="section-number-3">2.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-2-3">
<div id="orgccd3396" class="figure">
@ -485,9 +534,13 @@ We set the stiffness of the payload fixation:
</div>
</div>
<div id="outline-container-org206d2b9" class="outline-3">
<h3 id="org206d2b9"><span class="section-number-3">3.2</span> Identification</h3>
<div id="outline-container-orgdfe4eeb" class="outline-3">
<h3 id="orgdfe4eeb"><span class="section-number-3">3.2</span> APA-100 Amplified Actuator</h3>
<div class="outline-text-3" id="text-3-2">
</div>
<div id="outline-container-org7798ce9" class="outline-4">
<h4 id="org7798ce9"><span class="section-number-4">3.2.1</span> Identification</h4>
<div class="outline-text-4" id="text-3-2-1">
<div class="org-src-container">
<pre class="src src-matlab">K = tf(zeros(6));
Kiff = tf(zeros(6));
@ -512,9 +565,21 @@ The nano-hexapod has the following leg&rsquo;s stiffness and damping.
</div>
</div>
<div id="outline-container-org14c7063" class="outline-3">
<h3 id="org14c7063"><span class="section-number-3">3.3</span> Controller Design</h3>
<div class="outline-text-3" id="text-3-3">
<div id="outline-container-orgb943e63" class="outline-4">
<h4 id="orgb943e63"><span class="section-number-4">3.2.2</span> Controller Design</h4>
<div class="outline-text-4" id="text-3-2-2">
<p>
The loop gain for IFF is shown in Figure <a href="#org0e2911a">8</a>.
</p>
<p>
The corresponding root locus is shown in Figure <a href="#org5d7f6d3">9</a>.
</p>
<p>
Finally, the damping as function of the gain is display in Figure <a href="#org4743c83">10</a>.
</p>
<div id="org0e2911a" class="figure">
<p><img src="figs/amplified_piezo_iff_loop_gain.png" alt="amplified_piezo_iff_loop_gain.png" />
@ -530,9 +595,6 @@ The nano-hexapod has the following leg&rsquo;s stiffness and damping.
<p><span class="figure-number">Figure 9: </span>Root Locus for the IFF control for three payload masses</p>
</div>
<p>
Damping as function of the gain
</p>
<div id="org4743c83" class="figure">
<p><img src="figs/amplified_piezo_iff_damping_gain.png" alt="amplified_piezo_iff_damping_gain.png" />
@ -541,7 +603,7 @@ Damping as function of the gain
</div>
<p>
Finally, we use the following controller for the Decentralized Direct Velocity Feedback:
The following controller for the Decentralized Integral Force Feedback is used:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kiff = -1e4/s*eye(6);
@ -550,9 +612,9 @@ Finally, we use the following controller for the Decentralized Direct Velocity F
</div>
</div>
<div id="outline-container-org043ce40" class="outline-3">
<h3 id="org043ce40"><span class="section-number-3">3.4</span> Effect of the Low Authority Control on the Primary Plant</h3>
<div class="outline-text-3" id="text-3-4">
<div id="outline-container-org0bf79ae" class="outline-4">
<h4 id="org0bf79ae"><span class="section-number-4">3.2.3</span> Effect of the Low Authority Control on the Primary Plant</h4>
<div class="outline-text-4" id="text-3-2-3">
<div id="org904efc3" class="figure">
<p><img src="figs/amplified_piezo_iff_plant_damped_X.png" alt="amplified_piezo_iff_plant_damped_X.png" />
@ -584,15 +646,19 @@ Finally, we use the following controller for the Decentralized Direct Velocity F
</div>
</div>
<div id="outline-container-orgbc2f246" class="outline-3">
<h3 id="orgbc2f246"><span class="section-number-3">3.5</span> Effect of the Low Authority Control on the Sensibility to Disturbances</h3>
<div class="outline-text-3" id="text-3-5">
<div id="outline-container-org96f3a8d" class="outline-4">
<h4 id="org96f3a8d"><span class="section-number-4">3.2.4</span> Effect of the Low Authority Control on the Sensibility to Disturbances</h4>
<div class="outline-text-4" id="text-3-2-4">
<div id="org56179cd" class="figure">
<p><img src="figs/amplified_piezo_iff_disturbances.png" alt="amplified_piezo_iff_disturbances.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Norm of the transfer function from vertical disturbances to vertical position error with (dashed) and without (solid) Integral Force Feedback applied</p>
</div>
</div>
</div>
<div class="outline-text-3" id="text-3-2">
<div class="important">
</div>
@ -601,16 +667,387 @@ Finally, we use the following controller for the Decentralized Direct Velocity F
<div id="outline-container-org297c2ad" class="outline-3">
<h3 id="org297c2ad"><span class="section-number-3">3.6</span> Optimal Stiffnesses</h3>
<h3 id="org297c2ad"><span class="section-number-3">3.3</span> Optimal Stiffnesses</h3>
<div class="outline-text-3" id="text-3-3">
<p>
Based on the analytical analysis, we can determine the parameters of the amplified piezoelectric actuator in order to be able to add a lots of damping using IFF:
</p>
<ul class="org-ul">
<li>\(k_1\) should be minimized.</li>
<li>\(k_e \approx k_a \approx 10^5 - 10^6\,[N/m]\)</li>
</ul>
<p>
However, this might not be realizable.
</p>
</div>
<div id="outline-container-org5dc2ac7" class="outline-4">
<h4 id="org5dc2ac7"><span class="section-number-4">3.3.1</span> Low Authority Controller</h4>
<div class="outline-text-4" id="text-3-3-1">
</div>
<div id="outline-container-orgf339f37" class="outline-5">
<h5 id="orgf339f37"><span class="section-number-5">3.3.1.1</span> Identification</h5>
<div class="outline-text-5" id="text-3-3-1-1">
<p>
The nano-hexapod is initialized with the following parameters:
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod('actuator', 'amplified', ...
'k1', 1e4, ...
'ke', 1e6, ...
'ka', 1e6);
</pre>
</div>
<p>
The obtain plan for the IFF control is shown in Figure <a href="#orgafcb4d0">16</a>.
The associated Root Locus is shown in Figure <a href="#org62c3e69">17</a>.
</p>
<p>
Based on that, the following IFF gain is chosen:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kiff = -1e3/s*eye(6);
</pre>
</div>
<div id="orgafcb4d0" class="figure">
<p><img src="figs/amplified_piezo_opt_stiff_iff_plant.png" alt="amplified_piezo_opt_stiff_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Plant dynamics for IFF with the amplified piezoelectric stack actuator</p>
</div>
<div id="org62c3e69" class="figure">
<p><img src="figs/amplified_piezo_opt_stiff_iff_root_locus.png" alt="amplified_piezo_opt_stiff_iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Root Locus for IFF with the amplified piezoelectric stack actuator</p>
</div>
<div id="orgaf25c91" class="figure">
<p><img src="figs/amplified_piezo_opt_stiff_gain_damping.png" alt="amplified_piezo_opt_stiff_gain_damping.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Damping of the modes as a function of the IFF gain</p>
</div>
</div>
</div>
<div id="outline-container-orgfcd4ad7" class="outline-5">
<h5 id="orgfcd4ad7"><span class="section-number-5">3.3.1.2</span> Effect of the Low Authority Control on the Primary Plant</h5>
</div>
<div id="outline-container-org32c3422" class="outline-5">
<h5 id="org32c3422"><span class="section-number-5">3.3.1.3</span> Effect of the Low Authority Control on the Sensibility to Disturbances</h5>
<div class="outline-text-5" id="text-3-3-1-3">
<div id="orgf43f9ed" class="figure">
<p><img src="figs/amplified_piezo_opt_stiff_iff_dist.png" alt="amplified_piezo_opt_stiff_iff_dist.png" />
</p>
<p><span class="figure-number">Figure 19: </span>Effect of disturbance with and without IFF</p>
</div>
<div class="important">
<p>
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgce4f07c" class="outline-4">
<h4 id="orgce4f07c"><span class="section-number-4">3.3.2</span> High Authority Controller</h4>
<div class="outline-text-4" id="text-3-3-2">
</div>
<div id="outline-container-orgc16003c" class="outline-5">
<h5 id="orgc16003c"><span class="section-number-5">3.3.2.1</span> Controller Design</h5>
<div class="outline-text-5" id="text-3-3-2-1">
<div class="org-src-container">
<pre class="src src-matlab">h = 2.5;
Kl = 5e6 * eye(6) * ...
1/h*(s/(2*pi*40/h) + 1)/(s/(2*pi*40*h) + 1) * ...
1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
(s/2/pi/50 + 1)/(s/2/pi/50) * ...
(s/2/pi/10 + 1)/(s/2/pi/10) * ...
1/(1 + s/2/pi/200);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Kl = 3e10 * eye(6) * ...
1/s * ...
(s+0.8)/s * ...
(s+50)/(s+0.01) * ...
(s+120)/(s+1000) * ...
(s+150)/(s+1000);
</pre>
</div>
<p>
Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load('mat/stages.mat', 'nano_hexapod');
K = Kl*nano_hexapod.kinematics.J*diag([1, 1, 1, 1, 1, 0]);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbcf7749" class="outline-5">
<h5 id="orgbcf7749"><span class="section-number-5">3.3.2.2</span> Sensibility to Disturbances and Noise Budget</h5>
<div class="outline-text-5" id="text-3-3-2-2">
<p>
We identify the transfer function from disturbances to the position error of the sample when the HAC-LAC control is applied.
</p>
</div>
</div>
<div id="outline-container-orga0e8915" class="outline-5">
<h5 id="orga0e8915"><span class="section-number-5">3.3.2.3</span> Simulations of Tomography Experiment</h5>
<div class="outline-text-5" id="text-3-3-2-3">
<p>
Let&rsquo;s now simulate a tomography experiment.
To do so, we include all disturbances except vibrations of the translation stage.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
initializeSimscapeConfiguration('gravity', false);
initializeLoggingConfiguration('log', 'all');
</pre>
</div>
<p>
And we run the simulation for all three payload Masses.
</p>
</div>
</div>
<div id="outline-container-orgb6ec250" class="outline-5">
<h5 id="orgb6ec250"><span class="section-number-5">3.3.2.4</span> Results</h5>
</div>
</div>
</div>
<div id="outline-container-org1e2f810" class="outline-3">
<h3 id="org1e2f810"><span class="section-number-3">3.7</span> Direct Velocity Feedback with Amplified Actuators</h3>
<h3 id="org1e2f810"><span class="section-number-3">3.4</span> Direct Velocity Feedback with Amplified Actuators</h3>
<div class="outline-text-3" id="text-3-4">
<p>
Lack of collocation.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeController('type', 'hac-dvf');
K = tf(zeros(6));
Kdvf = tf(zeros(6));
</pre>
</div>
<p>
We identify the system for the following payload masses:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ms = [1, 10, 50];
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod('actuator', 'amplified', ...
'k1', 1e4, ...
'ke', 1e6, ...
'ka', 1e6);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org936810c" class="outline-2">
<h2 id="org936810c"><span class="section-number-2">4</span> APA300ML</h2>
<div class="outline-text-2" id="text-4">
</div>
<div id="outline-container-org797e3ca" class="outline-3">
<h3 id="org797e3ca"><span class="section-number-3">4.1</span> Initialization</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeSimscapeConfiguration();
initializeDisturbances('enable', false);
initializeLoggingConfiguration('log', 'none');
initializeController('type', 'hac-dvf');
</pre>
</div>
<p>
We set the stiffness of the payload fixation:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kp = 1e8; % [N/m]
</pre>
</div>
</div>
</div>
<div id="outline-container-org2300f00" class="outline-3">
<h3 id="org2300f00"><span class="section-number-3">4.2</span> Identification</h3>
<div class="outline-text-3" id="text-4-2">
<div class="org-src-container">
<pre class="src src-matlab">K = tf(zeros(6));
Kdvf = tf(zeros(6));
</pre>
</div>
<p>
We identify the system for the following payload masses:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ms = [1, 10, 50];
</pre>
</div>
<p>
The nano-hexapod has the following leg&rsquo;s stiffness and damping.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod('actuator', 'amplified', 'k1', 0.4e6, 'ka', 43e6, 'ke', 1.5e6);
</pre>
</div>
</div>
</div>
<div id="outline-container-org4ec1cb7" class="outline-3">
<h3 id="org4ec1cb7"><span class="section-number-3">4.3</span> Controller Design</h3>
<div class="outline-text-3" id="text-4-3">
<p>
Damping as function of the gain
Finally, we use the following controller for the Decentralized Direct Velocity Feedback:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kdvf = 5e5*s/(1+s/2/pi/1e3)*eye(6);
</pre>
</div>
</div>
</div>
<div id="outline-container-org1b67874" class="outline-3">
<h3 id="org1b67874"><span class="section-number-3">4.4</span> Effect of the Low Authority Control on the Primary Plant</h3>
</div>
<div id="outline-container-org655c28c" class="outline-3">
<h3 id="org655c28c"><span class="section-number-3">4.5</span> Control in the leg space</h3>
<div class="outline-text-3" id="text-4-5">
<p>
We design a diagonal controller with all the same diagonal elements.
</p>
<p>
The requirements for the controller are:
</p>
<ul class="org-ul">
<li>Crossover frequency of around 100Hz</li>
<li>Stable for all the considered payload masses</li>
<li>Sufficient phase and gain margin</li>
<li>Integral action at low frequency</li>
</ul>
<p>
The design controller is as follows:
</p>
<ul class="org-ul">
<li>Lead centered around the crossover</li>
<li>An integrator below 10Hz</li>
<li>A low pass filter at 250Hz</li>
</ul>
<div class="org-src-container">
<pre class="src src-matlab">h = 2.0;
Kl = 1e9 * eye(6) * ...
1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
1/h*(s/(2*pi*200/h) + 1)/(s/(2*pi*200*h) + 1) * ...
(s/2/pi/10 + 1)/(s/2/pi/10) * ...
1/(1 + s/2/pi/300);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">load('mat/stages.mat', 'nano_hexapod');
K = Kl*nano_hexapod.kinematics.J*diag([1, 1, 1, 1, 1, 0]);
</pre>
</div>
</div>
</div>
<div id="outline-container-org92df47e" class="outline-3">
<h3 id="org92df47e"><span class="section-number-3">4.6</span> Sensibility to Disturbances and Noise Budget</h3>
<div class="outline-text-3" id="text-4-6">
<p>
We identify the transfer function from disturbances to the position error of the sample when the HAC-LAC control is applied.
</p>
<div id="org44696dd" class="figure">
<p><img src="figs/opt_stiff_primary_control_L_psd_dist.png" alt="opt_stiff_primary_control_L_psd_dist.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Amplitude Spectral Density of the vertical position error of the sample when the HAC-DVF control is applied due to both the ground motion and spindle vibrations</p>
</div>
<div id="org15d4b96" class="figure">
<p><img src="figs/opt_stiff_primary_control_L_psd_tot.png" alt="opt_stiff_primary_control_L_psd_tot.png" />
</p>
<p><span class="figure-number">Figure 21: </span>Amplitude Spectral Density of the vertical position error of the sample in Open-Loop and when the HAC-DVF control is applied</p>
</div>
<div id="org7a31e40" class="figure">
<p><img src="figs/opt_stiff_primary_control_L_cas_tot.png" alt="opt_stiff_primary_control_L_cas_tot.png" />
</p>
<p><span class="figure-number">Figure 22: </span>Cumulative Amplitude Spectrum of the vertical position error of the sample in Open-Loop and when the HAC-DVF control is applied</p>
</div>
</div>
</div>
<div id="outline-container-orge84cedc" class="outline-3">
<h3 id="orge84cedc"><span class="section-number-3">4.7</span> Simulations of Tomography Experiment</h3>
<div class="outline-text-3" id="text-4-7">
<p>
Let&rsquo;s now simulate a tomography experiment.
To do so, we include all disturbances except vibrations of the translation stage.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
initializeSimscapeConfiguration('gravity', false);
initializeLoggingConfiguration('log', 'all');
</pre>
</div>
<p>
And we run the simulation for all three payload Masses.
</p>
</div>
</div>
<div id="outline-container-org05ce41a" class="outline-3">
<h3 id="org05ce41a"><span class="section-number-3">4.8</span> Results</h3>
<div class="outline-text-3" id="text-4-8">
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><h2 class='citeproc-org-bib-h2'>Bibliography</h2>
<div class="csl-bib-body">
<div class="csl-entry"><a name="citeproc_bib_item_1"></a>Dehaeze, T., and C. Collette. 2020. “Active Damping of Rotating Platforms Using Integral Force Feedback.” In <i>Proceedings of the International Conference on Modal Analysis Noise and Vibration Engineering (ISMA)</i>.</div>
<div class="csl-entry"><a name="citeproc_bib_item_2"></a>Souleille, Adrien, Thibault Lampert, V Lafarga, Sylvain Hellegouarch, Alan Rondineau, Gonçalo Rodrigues, and Christophe Collette. 2018. “A Concept of Active Mount for Space Applications.” <i>CEAS Space Journal</i> 10 (2). Springer:15765.</div>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-05-25 lun. 11:13</p>
<p class="date">Created: 2020-09-01 mar. 13:48</p>
</div>
</body>
</html>

View File

@ -1,10 +1,9 @@
<?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-17 ven. 09:35 -->
<!-- 2020-09-01 mar. 13:48 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Identification of the disturbances</title>
<meta name="generator" content="Org mode" />
@ -112,8 +111,8 @@ Also, we measure the absolute displacement of the granite and of the top platfor
We load the configuration and we set a small <code>StopTime</code>.
</p>
<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">'0.5'</span>);
<pre class="src src-matlab">load('mat/conf_simulink.mat');
set_param(conf_simulink, 'StopTime', '0.5');
</pre>
</div>
@ -123,15 +122,15 @@ The obtained system corresponds to the status micro-station when the vibration m
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite(<span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>);
initializeGranite('type', 'modal-analysis');
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>);
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>);
initializeMicroHexapod('type', 'modal-analysis');
initializeAxisc('type', 'none');
initializeMirror('type', 'none');
initializeNanoHexapod('type', 'none');
initializeSample('type', 'none');
</pre>
</div>
@ -139,7 +138,7 @@ initializeSample(<span class="org-string">'type'</span>, <span class="org-string
Open Loop Control.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
<pre class="src src-matlab">initializeController('type', 'open-loop');
</pre>
</div>
@ -147,7 +146,7 @@ Open Loop Control.
We don&rsquo;t need gravity here.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">false</span>);
<pre class="src src-matlab">initializeSimscapeConfiguration('gravity', false);
</pre>
</div>
@ -155,7 +154,7 @@ We don&rsquo;t need gravity here.
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 class="src src-matlab">initializeLoggingConfiguration('log', 'all');
</pre>
</div>
</div>
@ -170,19 +169,19 @@ The transfer functions from the disturbance forces to the relative velocity of t
</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>;
<pre class="src src-matlab">%% Name of the Simulink File
mdl = 'nass_model';
<span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
%% Micro-Hexapod
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">'Dwz'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Vertical 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_z'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Parasitic force Ty</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</span>
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Dwz'); io_i = io_i + 1; % Vertical Ground Motion
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Fty_z'); io_i = io_i + 1; % Parasitic force Ty
io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Frz_z'); io_i = io_i + 1; % Parasitic force Rz
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Granite/Modal Analysis/accelerometer'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute motion - Granite</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Micro Hexapod/Modal Analysis/accelerometer'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Motion - Hexapod</span>
io(io_i) = linio([mdl, '/Micro-Station/Granite/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; % Absolute motion - Granite
io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; % Absolute Motion - Hexapod
<span class="org-comment">% Run the linearization</span>
% Run the linearization
G = linearize(mdl, io, 0);
</pre>
</div>
@ -191,11 +190,11 @@ G = linearize(mdl, io, 0);
We Take only the outputs corresponding to the vertical acceleration.
</p>
<div class="org-src-container">
<pre class="src src-matlab">G = G([3,9], <span class="org-type">:</span>);
<pre class="src src-matlab">G = G([3,9], :);
<span class="org-comment">% Input/Output names</span>
G.InputName = {<span class="org-string">'Dw'</span>, <span class="org-string">'Fty'</span>, <span class="org-string">'Frz'</span>};
G.OutputName = {<span class="org-string">'Agm'</span>, <span class="org-string">'Ahm'</span>};
% Input/Output names
G.InputName = {'Dw', 'Fty', 'Frz'};
G.OutputName = {'Agm', 'Ahm'};
</pre>
</div>
@ -203,11 +202,11 @@ G.OutputName = {<span class="org-string">'Agm'</span>, <span class="org-string">
We integrate 1 time the output to have the velocity and we substract the absolute velocities to have the relative velocity.
</p>
<div class="org-src-container">
<pre class="src src-matlab">G = (1<span class="org-type">/</span>s)<span class="org-type">*</span>tf([<span class="org-type">-</span>1, 1])<span class="org-type">*</span>G;
<pre class="src src-matlab">G = (1/s)*tf([-1, 1])*G;
<span class="org-comment">% Input/Output names</span>
G.InputName = {<span class="org-string">'Dw'</span>, <span class="org-string">'Fty'</span>, <span class="org-string">'Frz'</span>};
G.OutputName = {<span class="org-string">'Vm'</span>};
% Input/Output names
G.InputName = {'Dw', 'Fty', 'Frz'};
G.OutputName = {'Vm'};
</pre>
</div>
</div>
@ -273,10 +272,10 @@ Also, the Ground Motion is measured.
</p>
<div class="org-src-container">
<pre class="src src-matlab">gm = load(<span class="org-string">'./mat/psd_gm.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'psd_gm'</span>);
rz = load(<span class="org-string">'./mat/pxsp_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxsp_r'</span>);
tyz = load(<span class="org-string">'./mat/pxz_ty_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxz_ty_r'</span>);
tyx = load(<span class="org-string">'./mat/pxe_ty_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxe_ty_r'</span>);
<pre class="src src-matlab">gm = load('./mat/psd_gm.mat', 'f', 'psd_gm');
rz = load('./mat/pxsp_r.mat', 'f', 'pxsp_r');
tyz = load('./mat/pxz_ty_r.mat', 'f', 'pxz_ty_r');
tyx = load('./mat/pxe_ty_r.mat', 'f', 'pxe_ty_r');
</pre>
</div>
@ -285,10 +284,10 @@ Because some 50Hz and harmonics were present in the ground motion measurement, w
</p>
<div class="org-src-container">
<pre class="src src-matlab">f0s = [50, 100, 150, 200, 250, 350, 450];
<span class="org-keyword">for</span> <span class="org-variable-name">f0</span> = <span class="org-constant">f0s</span>
<span class="org-constant">i</span> = find(gm.f <span class="org-type">&gt;</span> f0<span class="org-type">-</span>0.5 <span class="org-type">&amp;</span> gm.f <span class="org-type">&lt;</span> f0<span class="org-type">+</span>0.5);
gm.psd_gm(<span class="org-constant">i</span>) = linspace(gm.psd_gm(<span class="org-constant">i</span>(1)), gm.psd_gm(<span class="org-constant">i</span>(end)), length(<span class="org-constant">i</span>));
<span class="org-keyword">end</span>
for f0 = f0s
i = find(gm.f &gt; f0-0.5 &amp; gm.f &lt; f0+0.5);
gm.psd_gm(i) = linspace(gm.psd_gm(i(1)), gm.psd_gm(i(end)), length(i));
end
</pre>
</div>
@ -296,7 +295,7 @@ Because some 50Hz and harmonics were present in the ground motion measurement, w
We now compute the relative velocity between the hexapod and the granite due to ground motion.
</p>
<div class="org-src-container">
<pre class="src src-matlab">gm.psd_rv = gm.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(G(<span class="org-string">'Vm'</span>, <span class="org-string">'Dw'</span>), gm.f, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
<pre class="src src-matlab">gm.psd_rv = gm.psd_gm.*abs(squeeze(freqresp(G('Vm', 'Dw'), gm.f, 'Hz'))).^2;
</pre>
</div>
@ -355,8 +354,8 @@ Using the extracted transfer functions from the disturbance force to the relativ
This is done below.
</p>
<div class="org-src-container">
<pre class="src src-matlab">rz.psd_f = rz.pxsp_r<span class="org-type">./</span>abs(squeeze(freqresp(G(<span class="org-string">'Vm'</span>, <span class="org-string">'Frz'</span>), rz.f, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
tyz.psd_f = tyz.pxz_ty_r<span class="org-type">./</span>abs(squeeze(freqresp(G(<span class="org-string">'Vm'</span>, <span class="org-string">'Fty'</span>), tyz.f, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
<pre class="src src-matlab">rz.psd_f = rz.pxsp_r./abs(squeeze(freqresp(G('Vm', 'Frz'), rz.f, 'Hz'))).^2;
tyz.psd_f = tyz.pxz_ty_r./abs(squeeze(freqresp(G('Vm', 'Fty'), tyz.f, 'Hz'))).^2;
</pre>
</div>
@ -394,9 +393,9 @@ The power spectral density of the relative motion is computed below and the resu
We can see that this is exactly the same as the Figure <a href="#org4c2c215">6</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">psd_gm_d = gm.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(G(<span class="org-string">'Vm'</span>, <span class="org-string">'Dw'</span>)<span class="org-type">/</span>s, gm.f, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
psd_ty_d = tyz.psd_f<span class="org-type">.*</span>abs(squeeze(freqresp(G(<span class="org-string">'Vm'</span>, <span class="org-string">'Fty'</span>)<span class="org-type">/</span>s, tyz.f, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
psd_rz_d = rz.psd_f<span class="org-type">.*</span>abs(squeeze(freqresp(G(<span class="org-string">'Vm'</span>, <span class="org-string">'Frz'</span>)<span class="org-type">/</span>s, rz.f, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
<pre class="src src-matlab">psd_gm_d = gm.psd_gm.*abs(squeeze(freqresp(G('Vm', 'Dw')/s, gm.f, 'Hz'))).^2;
psd_ty_d = tyz.psd_f.*abs(squeeze(freqresp(G('Vm', 'Fty')/s, tyz.f, 'Hz'))).^2;
psd_rz_d = rz.psd_f.*abs(squeeze(freqresp(G('Vm', 'Frz')/s, rz.f, 'Hz'))).^2;
</pre>
</div>
@ -419,13 +418,13 @@ The PSD of the disturbance force are now saved for further analysis.
<div class="org-src-container">
<pre class="src src-matlab">dist_f = struct();
dist_f.f = gm.f; <span class="org-comment">% Frequency Vector [Hz]</span>
dist_f.f = gm.f; % Frequency Vector [Hz]
dist_f.psd_gm = gm.psd_gm; <span class="org-comment">% Power Spectral Density of the Ground Motion [m^2/Hz]</span>
dist_f.psd_ty = tyz.psd_f; <span class="org-comment">% Power Spectral Density of the force induced by the Ty stage in the Z direction [N^2/Hz]</span>
dist_f.psd_rz = rz.psd_f; <span class="org-comment">% Power Spectral Density of the force induced by the Rz stage in the Z direction [N^2/Hz]</span>
dist_f.psd_gm = gm.psd_gm; % Power Spectral Density of the Ground Motion [m^2/Hz]
dist_f.psd_ty = tyz.psd_f; % Power Spectral Density of the force induced by the Ty stage in the Z direction [N^2/Hz]
dist_f.psd_rz = rz.psd_f; % Power Spectral Density of the force induced by the Rz stage in the Z direction [N^2/Hz]
save(<span class="org-string">'./mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
save('./mat/dist_psd.mat', 'dist_f');
</pre>
</div>
</div>
@ -439,7 +438,7 @@ Let&rsquo;s initialize the time domain disturbances and load them.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
dist = load(<span class="org-string">'nass_disturbances.mat'</span>);
dist = load('nass_disturbances.mat');
</pre>
</div>
@ -482,22 +481,22 @@ initializeMirror();
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
initializeSample(<span class="org-string">'mass'</span>, 1);
<pre class="src src-matlab">initializeNanoHexapod('type', 'rigid');
initializeSample('mass', 1);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences();
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">false</span>);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
initializeController('type', 'open-loop');
initializeSimscapeConfiguration('gravity', false);
initializeLoggingConfiguration('log', 'all');
</pre>
</div>
<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 class="src src-matlab">load('mat/conf_simulink.mat');
set_param(conf_simulink, 'StopTime', '2');
</pre>
</div>
</div>
@ -510,8 +509,8 @@ initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span clas
No disturbances:
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
<span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
<pre class="src src-matlab">initializeDisturbances('enable', false);
sim('nass_model');
sim_no = simout;
</pre>
</div>
@ -520,8 +519,8 @@ sim_no = simout;
Ground Motion:
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, <span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, <span class="org-string">'Frz_z'</span>, <span class="org-constant">false</span>);
<span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
<pre class="src src-matlab">initializeDisturbances('Fty_x', false, 'Fty_z', false, 'Frz_z', false);
sim('nass_model');
sim_gm = simout;
</pre>
</div>
@ -530,8 +529,8 @@ sim_gm = simout;
Translation Stage Vibrations:
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(<span class="org-string">'Dwx'</span>, <span class="org-constant">false</span>, <span class="org-string">'Dwy'</span>, <span class="org-constant">false</span>, <span class="org-string">'Dwz'</span>, <span class="org-constant">false</span>, <span class="org-string">'Frz_z'</span>, <span class="org-constant">false</span>);
<span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
<pre class="src src-matlab">initializeDisturbances('Dwx', false, 'Dwy', false, 'Dwz', false, 'Frz_z', false);
sim('nass_model');
sim_ty = simout;
</pre>
</div>
@ -540,8 +539,8 @@ sim_ty = simout;
Rotation Stage Vibrations:
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(<span class="org-string">'Dwx'</span>, <span class="org-constant">false</span>, <span class="org-string">'Dwy'</span>, <span class="org-constant">false</span>, <span class="org-string">'Dwz'</span>, <span class="org-constant">false</span>, <span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, <span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>);
<span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
<pre class="src src-matlab">initializeDisturbances('Dwx', false, 'Dwy', false, 'Dwz', false, 'Fty_x', false, 'Fty_z', false);
sim('nass_model');
sim_rz = simout;
</pre>
</div>
@ -567,7 +566,7 @@ Let&rsquo;s now compare the effect of those perturbations on the position error
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p>
<p class="date">Created: 2020-09-01 mar. 13:48</p>
</div>
</body>
</html>

View File

@ -1,10 +1,9 @@
<?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-17 ven. 09:35 -->
<!-- 2020-09-01 mar. 13:47 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Identification</title>
<meta name="generator" content="Org mode" />
@ -109,7 +108,7 @@ Some of the springs and dampers values can be estimated from the joints/stages s
We load the configuration.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<pre class="src src-matlab">load('mat/conf_simulink.mat');
</pre>
</div>
@ -117,7 +116,7 @@ We load the configuration.
We set a small <code>StopTime</code>.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><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">'0.5'</span>);
<pre class="src src-matlab">set_param(conf_simulink, 'StopTime', '0.5');
</pre>
</div>
@ -125,24 +124,24 @@ We set a small <code>StopTime</code>.
We initialize all the stages.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround( <span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
initializeGranite( <span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>);
initializeTy( <span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>);
initializeRy( <span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>);
initializeRz( <span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>);
initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>);
initializeAxisc( <span class="org-string">'type'</span>, <span class="org-string">'flexible'</span>);
<pre class="src src-matlab">initializeGround( 'type', 'rigid');
initializeGranite( 'type', 'modal-analysis');
initializeTy( 'type', 'modal-analysis');
initializeRy( 'type', 'modal-analysis');
initializeRz( 'type', 'modal-analysis');
initializeMicroHexapod('type', 'modal-analysis');
initializeAxisc( 'type', 'flexible');
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>);
initializeMirror( 'type', 'none');
initializeNanoHexapod( 'type', 'none');
initializeSample( 'type', 'none');
initializeController( <span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
initializeController( 'type', 'open-loop');
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
initializeLoggingConfiguration('log', 'none');
initializeReferences();
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
initializeDisturbances('enable', false);
</pre>
</div>
</div>
@ -156,7 +155,7 @@ Thanks to the <a href="https://fr.mathworks.com/help/physmod/sm/ref/inertiasenso
</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 class="src src-matlab">sim('nass_model')
</pre>
</div>
@ -316,12 +315,12 @@ We do that in order to position an accelerometer on the Simscape model at this p
</p>
<div class="org-src-container">
<pre class="src src-matlab">open(<span class="org-string">'identification/matlab/sim_micro_station_com_estimation.slx'</span>)
<pre class="src src-matlab">open('identification/matlab/sim_micro_station_com_estimation.slx')
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'sim_micro_station_com_estimation'</span>)
<pre class="src src-matlab">sim('sim_micro_station_com_estimation')
</pre>
</div>
@ -391,14 +390,14 @@ We do that in order to position an accelerometer on the Simscape model at this p
We now same this for further use:
</p>
<div class="org-src-container">
<pre class="src src-matlab">granite_bot_com = granite_bot_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>;
granite_top_com = granite_top_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>;
ty_com = ty_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>;
ry_com = ry_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>;
rz_com = rz_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>;
hexa_com = hexa_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>;
<pre class="src src-matlab">granite_bot_com = granite_bot_com.Data(end, :)';
granite_top_com = granite_top_com.Data(end, :)';
ty_com = ty_com.Data(end, :)';
ry_com = ry_com.Data(end, :)';
rz_com = rz_com.Data(end, :)';
hexa_com = hexa_com.Data(end, :)';
save(<span class="org-string">'./mat/solids_com.mat'</span>, <span class="org-string">'granite_bot_com'</span>, <span class="org-string">'granite_top_com'</span>, <span class="org-string">'ty_com'</span>, <span class="org-string">'ry_com'</span>, <span class="org-string">'rz_com'</span>, <span class="org-string">'hexa_com'</span>);
save('./mat/solids_com.mat', 'granite_bot_com', 'granite_top_com', 'ty_com', 'ry_com', 'rz_com', 'hexa_com');
</pre>
</div>
@ -416,12 +415,12 @@ We now use a new Simscape Model where 6DoF inertial sensors are located at the C
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% load('mat/solids_com.mat', 'granite_bot_com', 'granite_top_com', 'ty_com', 'ry_com', 'rz_com', 'hexa_com');</span>
<pre class="src src-matlab">% load('mat/solids_com.mat', 'granite_bot_com', 'granite_top_com', 'ty_com', 'ry_com', 'rz_com', 'hexa_com');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">open(<span class="org-string">'nass_model.slx'</span>)
<pre class="src src-matlab">open('nass_model.slx')
</pre>
</div>
@ -429,35 +428,35 @@ We now use a new Simscape Model where 6DoF inertial sensors are located at the C
We use the <code>linearize</code> function in order to estimate the dynamics from forces applied on the Translation stage at the same position used for the real modal analysis to the inertial sensors.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
<pre class="src src-matlab">%% Options for Linearized
options = linearizeOptions;
options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
%% Name of the Simulink File
mdl = 'nass_model';
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Translation Stage/Modal Analysis/F_hammer'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Granite/Modal Analysis/accelerometer'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Translation Stage/Modal Analysis/accelerometer'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Tilt Stage/Modal Analysis/accelerometer'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Spindle/Modal Analysis/accelerometer'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Micro Hexapod/Modal Analysis/accelerometer'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, '/Micro-Station/Translation Stage/Modal Analysis/F_hammer'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Micro-Station/Granite/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Micro-Station/Translation Stage/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Micro-Station/Tilt Stage/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Micro-Station/Spindle/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% Run the linearization</span>
<pre class="src src-matlab">% Run the linearization
G_ms = linearize(mdl, io, 0);
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
G_ms.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>};
G_ms.OutputName = {<span class="org-string">'gtop_x'</span>, <span class="org-string">'gtop_y'</span>, <span class="org-string">'gtop_z'</span>, <span class="org-string">'gtop_rx'</span>, <span class="org-string">'gtop_ry'</span>, <span class="org-string">'gtop_rz'</span>, ...
<span class="org-string">'ty_x'</span>, <span class="org-string">'ty_y'</span>, <span class="org-string">'ty_z'</span>, <span class="org-string">'ty_rx'</span>, <span class="org-string">'ty_ry'</span>, <span class="org-string">'ty_rz'</span>, ...
<span class="org-string">'ry_x'</span>, <span class="org-string">'ry_y'</span>, <span class="org-string">'ry_z'</span>, <span class="org-string">'ry_rx'</span>, <span class="org-string">'ry_ry'</span>, <span class="org-string">'ry_rz'</span>, ...
<span class="org-string">'rz_x'</span>, <span class="org-string">'rz_y'</span>, <span class="org-string">'rz_z'</span>, <span class="org-string">'rz_rx'</span>, <span class="org-string">'rz_ry'</span>, <span class="org-string">'rz_rz'</span>, ...
<span class="org-string">'hexa_x'</span>, <span class="org-string">'hexa_y'</span>, <span class="org-string">'hexa_z'</span>, <span class="org-string">'hexa_rx'</span>, <span class="org-string">'hexa_ry'</span>, <span class="org-string">'hexa_rz'</span>};
%% Input/Output definition
G_ms.InputName = {'Fx', 'Fy', 'Fz'};
G_ms.OutputName = {'gtop_x', 'gtop_y', 'gtop_z', 'gtop_rx', 'gtop_ry', 'gtop_rz', ...
'ty_x', 'ty_y', 'ty_z', 'ty_rx', 'ty_ry', 'ty_rz', ...
'ry_x', 'ry_y', 'ry_z', 'ry_rx', 'ry_ry', 'ry_rz', ...
'rz_x', 'rz_y', 'rz_z', 'rz_rx', 'rz_ry', 'rz_rz', ...
'hexa_x', 'hexa_y', 'hexa_z', 'hexa_rx', 'hexa_ry', 'hexa_rz'};
</pre>
</div>
@ -466,7 +465,7 @@ The output of <code>G_ms</code> is the acceleration of each solid body.
In order to obtain a displacement, we divide the obtained transfer function by \(1/s^{2}\);
</p>
<div class="org-src-container">
<pre class="src src-matlab">G_ms = G_ms<span class="org-type">/</span>s<span class="org-type">^</span>2;
<pre class="src src-matlab">G_ms = G_ms/s^2;
</pre>
</div>
</div>
@ -480,8 +479,8 @@ We now load the Frequency Response Functions measurements during the Modal Analy
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'../meas/modal-analysis/mat/frf_coh_matrices.mat'</span>, <span class="org-string">'freqs'</span>);
load(<span class="org-string">'../meas/modal-analysis/mat/frf_com.mat'</span>, <span class="org-string">'FRFs_CoM'</span>);
<pre class="src src-matlab">load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'freqs');
load('../meas/modal-analysis/mat/frf_com.mat', 'FRFs_CoM');
</pre>
</div>
@ -532,7 +531,7 @@ initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-string">'compliance'</span>);
initializeMicroHexapod('type', 'compliance');
</pre>
</div>
@ -540,10 +539,10 @@ initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-
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 class="src src-matlab">initializeAxisc('type', 'none');
initializeMirror('type', 'none');
initializeNanoHexapod('type', 'none');
initializeSample('type', 'none');
</pre>
</div>
@ -564,18 +563,23 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to
The obtained compliance is shown in Figure <a href="#org67dfd1a">4</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>;
<pre class="src src-matlab">%% Name of the Simulink File
mdl = 'nass_model';
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Micro Hexapod/Compliance/Fm'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Direct Forces/Torques applied on the micro-hexapod top platform</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Micro Hexapod/Compliance/Dm'</span>], 1, <span class="org-string">'output'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute displacement of the top platform</span>
io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Compliance/Fm'], 1, 'openinput'); io_i = io_i + 1; % Direct Forces/Torques applied on the micro-hexapod top platform
io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Compliance/Dm'], 1, 'output'); io_i = io_i + 1; % Absolute displacement of the top platform
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
%% Run the linearization
Gm = linearize(mdl, io, 0);
Gm.InputName = {<span class="org-string">'Fmx'</span>, <span class="org-string">'Fmy'</span>, <span class="org-string">'Fmz'</span>, <span class="org-string">'Mmx'</span>, <span class="org-string">'Mmy'</span>, <span class="org-string">'Mmz'</span>};
Gm.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Drx'</span>, <span class="org-string">'Dry'</span>, <span class="org-string">'Drz'</span>};
Gm.InputName = {'Fmx', 'Fmy', 'Fmz', 'Mmx', 'Mmy', 'Mmz'};
Gm.OutputName = {'Dx', 'Dy', 'Dz', 'Drx', 'Dry', 'Drz'};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">save('../meas/micro-station-compliance/mat/model.mat', 'Gm');
</pre>
</div>
@ -603,7 +607,7 @@ For such a complex system, we believe that the Simscape Model represents the dyn
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p>
<p class="date">Created: 2020-09-01 mar. 13:47</p>
</div>
</body>
</html>

View File

@ -3,7 +3,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-07-31 ven. 17:58 -->
<!-- 2020-09-01 mar. 13:47 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Noise Budgeting</title>
<meta name="generator" content="Org mode" />
@ -159,10 +159,6 @@ Required maximum induced ASD of the sample&rsquo;s vibration due to the relative
<p>
Corresponding RMS value in [nm rms, nrad rms]
</p>
<div class="org-src-container">
<pre class="src src-matlab">1e9*sqrt(trapz(freqs, (abs(squeeze(freqresp(Gamma_x, freqs, 'Hz')))').^2))
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
@ -211,11 +207,11 @@ Corresponding RMS value in [nm rms, nrad rms]
<h3 id="org446dbf5"><span class="section-number-3">1.4</span> Computation of the maximum relative motion sensor noise</h3>
<div class="outline-text-3" id="text-1-4">
<p>
Let&rsquo;s note \(G\) the transfer function from the 6 sensor noise \(n\) to the 6dof pose error \(x\).
Let&rsquo;s note \(G\) the transfer function from the 6 sensor noise \(n\) to the 5dof pose error \(x\).
We have:
\[ x_i = \sum_{j=1}^6 G_{ij}(s) n_j, \quad i = 1 \dots 5 \]
In terms of ASD:
\[ \Gamma_{x_i}(\omega) = \sum_{j=1}^6 |G_{ij}(j\omega)|^2 \Gamma_{n_j}(\omega), \quad i = 1 \dots 5 \]
\[ \Gamma_{x_i}(\omega) = \sqrt{\sum_{j=1}^6 |G_{ij}(j\omega)|^2 \cdot {\Gamma_{n_j}}^2(\omega)}, \quad i = 1 \dots 5 \]
</p>
<p>
@ -225,7 +221,7 @@ Let&rsquo;s suppose that the ASD of all the sensor noise are equal:
<p>
We then have an upper bound of the sensor noise for each of the considered motion errors:
\[ \Gamma_{n_i, \text{max}}(\omega) = \frac{\Gamma_{n_i}(\omega)}{\sum_{j=1}^6 |G_{ij}(j\omega)|^2}, \quad i = 1 \dots 5 \]
\[ \Gamma_{n_i, \text{max}}(\omega) = \frac{\Gamma_{x_i}(\omega)}{\sqrt{\sum_{j=1}^6 |G_{ij}(j\omega)|^2}}, \quad i = 1 \dots 5 \]
</p>
<div class="org-src-container">
@ -289,7 +285,7 @@ The corresponding RMS value of the sensor noise taken as an example is [nm RMS]:
<p>
Verify that by taking the sensor noise, we have to wanted displacement error
From the sensor noise PSD \(\Gamma_n(\omega)\), we can estimate the obtained displacement PSD \(\Gamma_x(\omega)\):
\[ \Gamma_{x,i}(\omega) = \sqrt{ \sum_{j=1}^{6} |G_{ij}|^2(j\omega) \Gamma_{n,j}^2(\omega) }, \quad i = 1 \dots 5 \]
\[ \Gamma_{x,i}(\omega) = \sqrt{ \sum_{j=1}^{6} |G_{ij}|^2(j\omega) \cdot \Gamma_{n,j}^2(\omega) }, \quad i = 1 \dots 5 \]
</p>
<div class="org-src-container">
@ -356,7 +352,7 @@ end
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-07-31 ven. 17:58</p>
<p class="date">Created: 2020-09-01 mar. 13:47</p>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

BIN
mat/Gd_ol.mat Normal file

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.

Binary file not shown.