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"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-05-25 lun. 11:13 --> <!-- 2020-09-01 mar. 13:48 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Amplified Piezoelectric Stack Actuator</title> <title>Amplified Piezoelectric Stack Actuator</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -36,30 +36,64 @@
<ul> <ul>
<li><a href="#org996fd7c">1. Simplified Model</a> <li><a href="#org996fd7c">1. Simplified Model</a>
<ul> <ul>
<li><a href="#orgd4866c5">1.1. Parameters</a></li> <li><a href="#org76fe747">1.1. Parameters</a></li>
<li><a href="#orgf0cb0e7">1.2. Identification</a></li> <li><a href="#orgbe95c15">1.2. Identification</a></li>
<li><a href="#org8d3f9bd">1.3. Root Locus</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="#orged9310d">1.4. Analytical Model</a></li>
<li><a href="#org2f351a4">1.5. Analytical Analysis</a></li> <li><a href="#org2f351a4">1.5. Analytical Analysis</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgf1a765f">2. Rotating X-Y platform</a> <li><a href="#orgf1a765f">2. Rotating X-Y platform</a>
<ul> <ul>
<li><a href="#org6594475">2.1. Parameters</a></li> <li><a href="#orga31e2d2">2.1. Parameters</a></li>
<li><a href="#orgf86cabd">2.2. Identification</a></li> <li><a href="#orgb7a6747">2.2. Identification</a></li>
<li><a href="#org5c898f6">2.3. Root Locus</a></li> <li><a href="#org290de6f">2.3. Root Locus</a></li>
<li><a href="#org069f401">2.4. Analysis</a></li> <li><a href="#org069f401">2.4. Analysis</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org3c74f7f">3. Stewart Platform with Amplified Actuators</a> <li><a href="#org3c74f7f">3. Stewart Platform with Amplified Actuators</a>
<ul> <ul>
<li><a href="#org5a7c6dc">3.1. Initialization</a></li> <li><a href="#org5a7c6dc">3.1. Initialization</a></li>
<li><a href="#org206d2b9">3.2. Identification</a></li> <li><a href="#orgdfe4eeb">3.2. APA-100 Amplified Actuator</a>
<li><a href="#org14c7063">3.3. Controller Design</a></li> <ul>
<li><a href="#org043ce40">3.4. Effect of the Low Authority Control on the Primary Plant</a></li> <li><a href="#org7798ce9">3.2.1. Identification</a></li>
<li><a href="#orgbc2f246">3.5. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li> <li><a href="#orgb943e63">3.2.2. Controller Design</a></li>
<li><a href="#org297c2ad">3.6. Optimal Stiffnesses</a></li> <li><a href="#org0bf79ae">3.2.3. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#org1e2f810">3.7. Direct Velocity Feedback with Amplified Actuators</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> </ul>
</li> </li>
</ul> </ul>
@ -67,7 +101,7 @@
</div> </div>
<p> <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>
<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> <h2 id="org996fd7c"><span class="section-number-2">1</span> Simplified Model</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
</div> </div>
<div id="outline-container-orgd4866c5" class="outline-3"> <div id="outline-container-org76fe747" class="outline-3">
<h3 id="orgd4866c5"><span class="section-number-3">1.1</span> Parameters</h3> <h3 id="org76fe747"><span class="section-number-3">1.1</span> Parameters</h3>
<div class="outline-text-3" id="text-1-1"> <div class="outline-text-3" id="text-1-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">m = 1; % [kg] <pre class="src src-matlab">m = 1; % [kg]
@ -167,8 +201,8 @@ IFF Controller:
</div> </div>
</div> </div>
<div id="outline-container-orgf0cb0e7" class="outline-3"> <div id="outline-container-orgbe95c15" class="outline-3">
<h3 id="orgf0cb0e7"><span class="section-number-3">1.2</span> Identification</h3> <h3 id="orgbe95c15"><span class="section-number-3">1.2</span> Identification</h3>
<div class="outline-text-3" id="text-1-2"> <div class="outline-text-3" id="text-1-2">
<p> <p>
Identification in open-loop. Identification in open-loop.
@ -223,8 +257,8 @@ Giff.OutputName = {'Fs', 'x1'};
</div> </div>
</div> </div>
<div id="outline-container-org8d3f9bd" class="outline-3"> <div id="outline-container-orgeaad673" class="outline-3">
<h3 id="org8d3f9bd"><span class="section-number-3">1.3</span> Root Locus</h3> <h3 id="orgeaad673"><span class="section-number-3">1.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-1-3"> <div class="outline-text-3" id="text-1-3">
<div id="org85cd6e5" class="figure"> <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. 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}\)). 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> </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> </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"> <div id="outline-container-orgf1a765f" class="outline-2">
<h2 id="orgf1a765f"><span class="section-number-2">2</span> Rotating X-Y platform</h2> <h2 id="orgf1a765f"><span class="section-number-2">2</span> Rotating X-Y platform</h2>
<div class="outline-text-2" id="text-2"> <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>
<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="outline-text-3" id="text-2-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">m = 1; % [kg] <pre class="src src-matlab">m = 1; % [kg]
@ -336,8 +385,8 @@ h = 0.2; % [m]
</div> </div>
</div> </div>
<div id="outline-container-orgf86cabd" class="outline-3"> <div id="outline-container-orgb7a6747" class="outline-3">
<h3 id="orgf86cabd"><span class="section-number-3">2.2</span> Identification</h3> <h3 id="orgb7a6747"><span class="section-number-3">2.2</span> Identification</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<p> <p>
Rotating speed in rad/s: Rotating speed in rad/s:
@ -386,8 +435,8 @@ end
</div> </div>
</div> </div>
<div id="outline-container-org5c898f6" class="outline-3"> <div id="outline-container-org290de6f" class="outline-3">
<h3 id="org5c898f6"><span class="section-number-3">2.3</span> Root Locus</h3> <h3 id="org290de6f"><span class="section-number-3">2.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-2-3"> <div class="outline-text-3" id="text-2-3">
<div id="orgccd3396" class="figure"> <div id="orgccd3396" class="figure">
@ -485,9 +534,13 @@ We set the stiffness of the payload fixation:
</div> </div>
</div> </div>
<div id="outline-container-org206d2b9" class="outline-3"> <div id="outline-container-orgdfe4eeb" class="outline-3">
<h3 id="org206d2b9"><span class="section-number-3">3.2</span> Identification</h3> <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 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"> <div class="org-src-container">
<pre class="src src-matlab">K = tf(zeros(6)); <pre class="src src-matlab">K = tf(zeros(6));
Kiff = 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> </div>
<div id="outline-container-org14c7063" class="outline-3"> <div id="outline-container-orgb943e63" class="outline-4">
<h3 id="org14c7063"><span class="section-number-3">3.3</span> Controller Design</h3> <h4 id="orgb943e63"><span class="section-number-4">3.2.2</span> Controller Design</h4>
<div class="outline-text-3" id="text-3-3"> <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"> <div id="org0e2911a" class="figure">
<p><img src="figs/amplified_piezo_iff_loop_gain.png" alt="amplified_piezo_iff_loop_gain.png" /> <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> <p><span class="figure-number">Figure 9: </span>Root Locus for the IFF control for three payload masses</p>
</div> </div>
<p>
Damping as function of the gain
</p>
<div id="org4743c83" class="figure"> <div id="org4743c83" class="figure">
<p><img src="figs/amplified_piezo_iff_damping_gain.png" alt="amplified_piezo_iff_damping_gain.png" /> <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> </div>
<p> <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> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kiff = -1e4/s*eye(6); <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> </div>
<div id="outline-container-org043ce40" class="outline-3"> <div id="outline-container-org0bf79ae" class="outline-4">
<h3 id="org043ce40"><span class="section-number-3">3.4</span> Effect of the Low Authority Control on the Primary Plant</h3> <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-3" id="text-3-4"> <div class="outline-text-4" id="text-3-2-3">
<div id="org904efc3" class="figure"> <div id="org904efc3" class="figure">
<p><img src="figs/amplified_piezo_iff_plant_damped_X.png" alt="amplified_piezo_iff_plant_damped_X.png" /> <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> </div>
<div id="outline-container-orgbc2f246" class="outline-3"> <div id="outline-container-org96f3a8d" class="outline-4">
<h3 id="orgbc2f246"><span class="section-number-3">3.5</span> Effect of the Low Authority Control on the Sensibility to Disturbances</h3> <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-3" id="text-3-5"> <div class="outline-text-4" id="text-3-2-4">
<div id="org56179cd" class="figure"> <div id="org56179cd" class="figure">
<p><img src="figs/amplified_piezo_iff_disturbances.png" alt="amplified_piezo_iff_disturbances.png" /> <p><img src="figs/amplified_piezo_iff_disturbances.png" alt="amplified_piezo_iff_disturbances.png" />
</p> </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> <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>
<div class="outline-text-3" id="text-3-2">
<div class="important"> <div class="important">
</div> </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"> <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>
<div id="outline-container-org1e2f810" class="outline-3"> <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>
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <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> </div>
</body> </body>
</html> </html>

View File

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

View File

@ -1,10 +1,9 @@
<?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" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:35 --> <!-- 2020-09-01 mar. 13:47 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Identification</title> <title>Identification</title>
<meta name="generator" content="Org mode" /> <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. We load the configuration.
</p> </p>
<div class="org-src-container"> <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> </pre>
</div> </div>
@ -117,7 +116,7 @@ We load the configuration.
We set a small <code>StopTime</code>. We set a small <code>StopTime</code>.
</p> </p>
<div class="org-src-container"> <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> </pre>
</div> </div>
@ -125,24 +124,24 @@ We set a small <code>StopTime</code>.
We initialize all the stages. We initialize all the stages.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeGround( <span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>); <pre class="src src-matlab">initializeGround( 'type', 'rigid');
initializeGranite( <span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>); initializeGranite( 'type', 'modal-analysis');
initializeTy( <span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>); initializeTy( 'type', 'modal-analysis');
initializeRy( <span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>); initializeRy( 'type', 'modal-analysis');
initializeRz( <span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>); initializeRz( 'type', 'modal-analysis');
initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-string">'modal-analysis'</span>); initializeMicroHexapod('type', 'modal-analysis');
initializeAxisc( <span class="org-string">'type'</span>, <span class="org-string">'flexible'</span>); initializeAxisc( 'type', 'flexible');
initializeMirror( <span class="org-string">'type'</span>, <span class="org-string">'none'</span>); initializeMirror( 'type', 'none');
initializeNanoHexapod( <span class="org-string">'type'</span>, <span class="org-string">'none'</span>); initializeNanoHexapod( 'type', 'none');
initializeSample( <span class="org-string">'type'</span>, <span class="org-string">'none'</span>); 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(); initializeReferences();
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>); initializeDisturbances('enable', false);
</pre> </pre>
</div> </div>
</div> </div>
@ -156,7 +155,7 @@ Thanks to the <a href="https://fr.mathworks.com/help/physmod/sm/ref/inertiasenso
</p> </p>
<div class="org-src-container"> <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> </pre>
</div> </div>
@ -316,12 +315,12 @@ We do that in order to position an accelerometer on the Simscape model at this p
</p> </p>
<div class="org-src-container"> <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> </pre>
</div> </div>
<div class="org-src-container"> <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> </pre>
</div> </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: We now same this for further use:
</p> </p>
<div class="org-src-container"> <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>; <pre class="src src-matlab">granite_bot_com = granite_bot_com.Data(end, :)';
granite_top_com = granite_top_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>; granite_top_com = granite_top_com.Data(end, :)';
ty_com = ty_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>; ty_com = ty_com.Data(end, :)';
ry_com = ry_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>; ry_com = ry_com.Data(end, :)';
rz_com = rz_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>; rz_com = rz_com.Data(end, :)';
hexa_com = hexa_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>; 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> </pre>
</div> </div>
@ -416,12 +415,12 @@ We now use a new Simscape Model where 6DoF inertial sensors are located at the C
</p> </p>
<div class="org-src-container"> <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> </pre>
</div> </div>
<div class="org-src-container"> <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> </pre>
</div> </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. 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> </p>
<div class="org-src-container"> <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 = linearizeOptions;
options.SampleTime = 0; options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span> %% Name of the Simulink File
mdl = <span class="org-string">'nass_model'</span>; 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; 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, '/Micro-Station/Translation Stage/Modal Analysis/F_hammer'], 1, 'openinput'); io_i = io_i + 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, '/Micro-Station/Granite/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 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, '/Micro-Station/Translation Stage/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 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, '/Micro-Station/Tilt Stage/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 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, '/Micro-Station/Spindle/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 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/Micro Hexapod/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1;
</pre> </pre>
</div> </div>
<div class="org-src-container"> <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); G_ms = linearize(mdl, io, 0);
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> %% Input/Output definition
G_ms.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>}; G_ms.InputName = {'Fx', 'Fy', 'Fz'};
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>, ... G_ms.OutputName = {'gtop_x', 'gtop_y', 'gtop_z', 'gtop_rx', 'gtop_ry', 'gtop_rz', ...
<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>, ... 'ty_x', 'ty_y', 'ty_z', 'ty_rx', 'ty_ry', 'ty_rz', ...
<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>, ... 'ry_x', 'ry_y', 'ry_z', 'ry_rx', 'ry_ry', 'ry_rz', ...
<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>, ... 'rz_x', 'rz_y', 'rz_z', 'rz_rx', 'rz_ry', 'rz_rz', ...
<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>}; 'hexa_x', 'hexa_y', 'hexa_z', 'hexa_rx', 'hexa_ry', 'hexa_rz'};
</pre> </pre>
</div> </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}\); In order to obtain a displacement, we divide the obtained transfer function by \(1/s^{2}\);
</p> </p>
<div class="org-src-container"> <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> </pre>
</div> </div>
</div> </div>
@ -480,8 +479,8 @@ We now load the Frequency Response Functions measurements during the Modal Analy
</p> </p>
<div class="org-src-container"> <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>); <pre class="src src-matlab">load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'freqs');
load(<span class="org-string">'../meas/modal-analysis/mat/frf_com.mat'</span>, <span class="org-string">'FRFs_CoM'</span>); load('../meas/modal-analysis/mat/frf_com.mat', 'FRFs_CoM');
</pre> </pre>
</div> </div>
@ -532,7 +531,7 @@ initializeGranite();
initializeTy(); initializeTy();
initializeRy(); initializeRy();
initializeRz(); initializeRz();
initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-string">'compliance'</span>); initializeMicroHexapod('type', 'compliance');
</pre> </pre>
</div> </div>
@ -540,10 +539,10 @@ initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-
We put nothing on top of the micro-hexapod. We put nothing on top of the micro-hexapod.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeAxisc(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <pre class="src src-matlab">initializeAxisc('type', 'none');
initializeMirror(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); initializeMirror('type', 'none');
initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); initializeNanoHexapod('type', 'none');
initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); initializeSample('type', 'none');
</pre> </pre>
</div> </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>. The obtained compliance is shown in Figure <a href="#org67dfd1a">4</a>.
</p> </p>
<div class="org-src-container"> <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> <pre class="src src-matlab">%% Name of the Simulink File
mdl = <span class="org-string">'nass_model'</span>; 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; 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, '/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, <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/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 = 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.InputName = {'Fmx', 'Fmy', 'Fmz', 'Mmx', 'Mmy', 'Mmz'};
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.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> </pre>
</div> </div>
@ -603,7 +607,7 @@ For such a complex system, we believe that the Simscape Model represents the dyn
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <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> </div>
</body> </body>
</html> </html>

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-07-31 ven. 17:58 --> <!-- 2020-09-01 mar. 13:47 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Noise Budgeting</title> <title>Noise Budgeting</title>
<meta name="generator" content="Org mode" /> <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> <p>
Corresponding RMS value in [nm rms, nrad rms] Corresponding RMS value in [nm rms, nrad rms]
</p> </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"> <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> <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"> <div class="outline-text-3" id="text-1-4">
<p> <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: We have:
\[ x_i = \sum_{j=1}^6 G_{ij}(s) n_j, \quad i = 1 \dots 5 \] \[ x_i = \sum_{j=1}^6 G_{ij}(s) n_j, \quad i = 1 \dots 5 \]
In terms of ASD: 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>
<p> <p>
@ -225,7 +221,7 @@ Let&rsquo;s suppose that the ASD of all the sensor noise are equal:
<p> <p>
We then have an upper bound of the sensor noise for each of the considered motion errors: 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> </p>
<div class="org-src-container"> <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> <p>
Verify that by taking the sensor noise, we have to wanted displacement error 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)\): 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> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -356,7 +352,7 @@ end
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <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> </div>
</body> </body>
</html> </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.