Update html output
This commit is contained in:
parent
2389e6ba8e
commit
184c755fb8
@ -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’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’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’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’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’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:157–65.</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>
|
||||
|
@ -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’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’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">></span> f0<span class="org-type">-</span>0.5 <span class="org-type">&</span> gm.f <span class="org-type"><</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 > f0-0.5 & gm.f < 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’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’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>
|
||||
|
@ -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>
|
||||
|
@ -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’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’s note \(G\) the transfer function from the 6 sensor noise \(n\) to the 6dof pose error \(x\).
|
||||
Let’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’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
BIN
mat/Gd_ol.mat
Normal file
Binary file not shown.
BIN
mat/conf_log.mat
BIN
mat/conf_log.mat
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mat/stages.mat
BIN
mat/stages.mat
Binary file not shown.
BIN
mat/tomo_exp_hac_dvf_ampl.mat
Normal file
BIN
mat/tomo_exp_hac_dvf_ampl.mat
Normal file
Binary file not shown.
BIN
mat/tomo_exp_hac_iff_opt_stiff.mat
Normal file
BIN
mat/tomo_exp_hac_iff_opt_stiff.mat
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user