Rework the disturbance file
This commit is contained in:
parent
f69edd6dce
commit
c7207b96cb
@ -4,7 +4,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-03-13 ven. 17:39 -->
|
<!-- 2020-03-17 mar. 11:21 -->
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>Identification of the disturbances</title>
|
<title>Identification of the disturbances</title>
|
||||||
@ -254,7 +254,6 @@
|
|||||||
<li><a href="#Compute-the-Power-Spectral-Density-of-the-disturbance-force">5. Compute the Power Spectral Density of the disturbance force</a></li>
|
<li><a href="#Compute-the-Power-Spectral-Density-of-the-disturbance-force">5. Compute the Power Spectral Density of the disturbance force</a></li>
|
||||||
<li><a href="#Noise-Budget">6. Noise Budget</a></li>
|
<li><a href="#Noise-Budget">6. Noise Budget</a></li>
|
||||||
<li><a href="#Save">7. Save</a></li>
|
<li><a href="#Save">7. Save</a></li>
|
||||||
<li><a href="#org9a1d0a9">8. Error motion of the Sample without Control</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -277,7 +276,6 @@ Because we cannot measure directly the perturbation forces, we have the measure
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div id="org3b8025c" class="figure">
|
<div id="org3b8025c" class="figure">
|
||||||
<p><img src="figs/uniaxial-model-micro-station.png" alt="uniaxial-model-micro-station.png" />
|
<p><img src="figs/uniaxial-model-micro-station.png" alt="uniaxial-model-micro-station.png" />
|
||||||
</p>
|
</p>
|
||||||
@ -324,7 +322,8 @@ We load the configuration and we set a small <code>StopTime</code>.
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
We initialize all the stages.
|
We initialize all the stages without the sample nor the nano-hexapod.
|
||||||
|
The obtained system corresponds to the status micro-station when the vibration measurements were conducted.
|
||||||
</p>
|
</p>
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">initializeGround();
|
<pre class="src src-matlab">initializeGround();
|
||||||
@ -339,6 +338,30 @@ initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-s
|
|||||||
initializeSample(<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>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
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>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
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>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We log the signals.
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -351,41 +374,41 @@ 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">%% Options for Linearized</span></span>
|
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
|
||||||
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>;
|
mdl = <span class="org-string">'nass_model'</span>;
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
<span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
|
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, <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">'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, <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, <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>
|
|
||||||
<span class="org-comment">% io(io_i) = linio([mdl, '/Vm'], 1, 'openoutput'); io_i = io_i + 1; % Relative Velocity hexapod/granite</span>
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
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>
|
||||||
<pre class="src src-matlab"><span class="org-comment">% Run the linearization</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>
|
||||||
|
<span class="org-comment">% io(io_i) = linio([mdl, '/Vm'], 1, 'openoutput'); io_i = io_i + 1; % Relative Velocity hexapod/granite</span>
|
||||||
|
|
||||||
|
<span class="org-comment">% Run the linearization</span>
|
||||||
G = linearize(mdl, io, 0);
|
G = linearize(mdl, io, 0);
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
<span class="org-comment">% We Take only the outputs corresponding to the vertical acceleration</span>
|
<p>
|
||||||
G = G([3,9], <span class="org-type">:</span>);
|
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>);
|
||||||
|
|
||||||
<span class="org-comment">% Input/Output names</span>
|
<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.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>};
|
G.OutputName = {<span class="org-string">'Agm'</span>, <span class="org-string">'Ahm'</span>};
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
<span class="org-comment">% We integrate 1 time the output to have the velocity and we</span>
|
<p>
|
||||||
<span class="org-comment">% substract the absolute velocities to have the relative velocity</span>
|
We integrate 1 time the output to have the velocity and we substract the absolute velocities to have the relative velocity.
|
||||||
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;
|
</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;
|
||||||
|
|
||||||
<span class="org-comment">% Input/Output names</span>
|
<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.InputName = {<span class="org-string">'Dw'</span>, <span class="org-string">'Fty'</span>, <span class="org-string">'Frz'</span>};
|
||||||
@ -402,6 +425,14 @@ G.OutputName = {<span class="org-string">'Vm'</span>};
|
|||||||
<a id="org5636fee"></a>
|
<a id="org5636fee"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The obtained sensitivity to disturbances are shown bellow:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li>The transfer function from vertical ground motion \(D_w\) to the vertical relative displacement from the micro-hexapod to the granite \(D\) is shown in Figure <a href="#org7fe296c">2</a></li>
|
||||||
|
<li>The sensitive from vertical forces applied in the Translation stage is shown in Figure <a href="#orgce9715c">3</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<div id="org7fe296c" class="figure">
|
<div id="org7fe296c" class="figure">
|
||||||
<p><img src="figs/sensitivity_dist_gm.png" alt="sensitivity_dist_gm.png" />
|
<p><img src="figs/sensitivity_dist_gm.png" alt="sensitivity_dist_gm.png" />
|
||||||
@ -432,10 +463,13 @@ G.OutputName = {<span class="org-string">'Vm'</span>};
|
|||||||
<div class="outline-text-2" id="text-Power-Spectral-Density-of-the-effect-of-the-disturbances">
|
<div class="outline-text-2" id="text-Power-Spectral-Density-of-the-effect-of-the-disturbances">
|
||||||
<p>
|
<p>
|
||||||
<a id="org40a7e4e"></a>
|
<a id="org40a7e4e"></a>
|
||||||
The PSD of the relative velocity between the hexapod and the marble in \([(m/s)^2/Hz]\) are loaded for the following sources of disturbance:
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The Power Spectral Densities of the relative velocity between the hexapod and the marble in \([(m/s)^2/Hz]\) are loaded for the following sources of disturbance:
|
||||||
</p>
|
</p>
|
||||||
<ul class="org-ul">
|
<ul class="org-ul">
|
||||||
<li>Slip Ring Rotation</li>
|
<li>Slip Ring Rotation (\(F_{r_z}\))</li>
|
||||||
<li>Scan of the translation stage (effect in the vertical direction and in the horizontal direction)</li>
|
<li>Scan of the translation stage (effect in the vertical direction and in the horizontal direction)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -460,7 +494,7 @@ We now compute the relative velocity between the hexapod and the granite due to
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The Power Spectral Density of the relative motion/velocity of the hexapod with respect to the granite are shown in figures <a href="#orgb815ef2">5</a> and <a href="#org4c2c215">6</a>.
|
The Power Spectral Density of the relative motion and velocity of the hexapod with respect to the granite are shown in figures <a href="#orgb815ef2">5</a> and <a href="#org4c2c215">6</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -487,6 +521,14 @@ The Cumulative Amplitude Spectrum of the relative motion is shown in figure <a h
|
|||||||
<p><img src="figs/dist_effect_relative_motion_cas.png" alt="dist_effect_relative_motion_cas.png" />
|
<p><img src="figs/dist_effect_relative_motion_cas.png" alt="dist_effect_relative_motion_cas.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 7: </span>Cumulative Amplitude Spectrum of the relative motion due to different sources of perturbation (<a href="./figs/dist_effect_relative_motion_cas.png">png</a>, <a href="./figs/dist_effect_relative_motion_cas.pdf">pdf</a>)</p>
|
<p><span class="figure-number">Figure 7: </span>Cumulative Amplitude Spectrum of the relative motion due to different sources of perturbation (<a href="./figs/dist_effect_relative_motion_cas.png">png</a>, <a href="./figs/dist_effect_relative_motion_cas.pdf">pdf</a>)</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="important">
|
||||||
|
<p>
|
||||||
|
From Figure <a href="#orgaf910f1">7</a>, we can see that the translation stage and the rotation stage have almost the same effect on the position error.
|
||||||
|
Also, the ground motion has a relatively negligible effect on the position error.
|
||||||
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -499,15 +541,22 @@ The Cumulative Amplitude Spectrum of the relative motion is shown in figure <a h
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Now, from the extracted transfer functions from the disturbance force to the relative motion of the hexapod with respect to the granite (section <a href="#org5636fee">3</a>) and from the measured PSD of the relative motion (section <a href="#org40a7e4e">4</a>), we can compute the PSD of the disturbance force.
|
Using the extracted transfer functions from the disturbance force to the relative motion of the hexapod with respect to the granite (section <a href="#org5636fee">3</a>) and using the measured PSD of the relative motion (section <a href="#org40a7e4e">4</a>), we can compute the PSD of the disturbance force.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is done below.
|
||||||
|
</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<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;
|
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>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The obtained amplitude spectral densities of the disturbance forces are shown in Figure <a href="#org45cf35c">8</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="org45cf35c" class="figure">
|
<div id="org45cf35c" class="figure">
|
||||||
<p><img src="figs/dist_force_psd.png" alt="dist_force_psd.png" />
|
<p><img src="figs/dist_force_psd.png" alt="dist_force_psd.png" />
|
||||||
@ -525,24 +574,31 @@ tyz.psd_f = tyz.pxz_ty_r<span class="org-type">./</span>abs(squeeze(freqresp(G(<
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Now, from the compute spectral density of the disturbance sources, we can compute the resulting relative motion of the Hexapod with respect to the granite using the model.
|
From the obtained spectral density of the disturbance sources, we can compute the resulting relative motion of the Hexapod with respect to the granite using the model.
|
||||||
We should verify that this is coherent with the measurements.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is equivalent as doing the inverse that was done in the previous section.
|
||||||
|
This is done in order to verify that this is coherent with the measurements.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The power spectral density of the relative motion is computed below and the result is shown in Figure <a href="#orgcacf809">9</a>.
|
||||||
|
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>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgcacf809" class="figure">
|
<div id="orgcacf809" class="figure">
|
||||||
<p><img src="figs/psd_effect_dist_verif.png" alt="psd_effect_dist_verif.png" />
|
<p><img src="figs/psd_effect_dist_verif.png" alt="psd_effect_dist_verif.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 9: </span>Computed Effect of the disturbances on the relative displacement hexapod/granite (<a href="./figs/psd_effect_dist_verif.png">png</a>, <a href="./figs/psd_effect_dist_verif.pdf">pdf</a>)</p>
|
<p><span class="figure-number">Figure 9: </span>Computed Effect of the disturbances on the relative displacement hexapod/granite (<a href="./figs/psd_effect_dist_verif.png">png</a>, <a href="./figs/psd_effect_dist_verif.pdf">pdf</a>)</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div id="orgf872ab1" class="figure">
|
|
||||||
<p><img src="figs/cas_computed_relative_displacement.png" alt="cas_computed_relative_displacement.png" />
|
|
||||||
</p>
|
|
||||||
<p><span class="figure-number">Figure 10: </span>CAS of the total Relative Displacement due to all considered sources of perturbation (<a href="./figs/cas_computed_relative_displacement.png">png</a>, <a href="./figs/cas_computed_relative_displacement.pdf">pdf</a>)</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -567,117 +623,10 @@ save(<span class="org-string">'./mat/dist_psd.mat'</span>, <span class="org-stri
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org9a1d0a9" class="outline-2">
|
|
||||||
<h2 id="org9a1d0a9"><span class="section-number-2">8</span> Error motion of the Sample without Control</h2>
|
|
||||||
<div class="outline-text-2" id="text-8">
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">initializeGround();
|
|
||||||
initializeGranite(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
|
|
||||||
initializeTy(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
|
|
||||||
initializeRy(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
|
|
||||||
initializeRz(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
|
|
||||||
initializeMicroHexapod(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
|
|
||||||
initializeAxisc(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
|
|
||||||
initializeMirror(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
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">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'mass'</span>, 50);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We set the references and disturbances to zero.
|
|
||||||
</p>
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">initializeReferences();
|
|
||||||
initializeDisturbances();
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We set the controller type to Open-Loop.
|
|
||||||
</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>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And we put some gravity.
|
|
||||||
</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>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We do not need to log any signal.
|
|
||||||
</p>
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">initializePosError(<span class="org-string">'error'</span>, <span class="org-constant">false</span>);
|
|
||||||
</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">'1'</span>);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We simulate the model.
|
|
||||||
</p>
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
|
||||||
subplot(1, 2, 1);
|
|
||||||
hold on;
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 1), <span class="org-string">'DisplayName'</span>, <span class="org-string">'X'</span>);
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 2), <span class="org-string">'DisplayName'</span>, <span class="org-string">'Y'</span>);
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 3), <span class="org-string">'DisplayName'</span>, <span class="org-string">'Z'</span>);
|
|
||||||
hold off;
|
|
||||||
xlabel(<span class="org-string">'Time [s]'</span>);
|
|
||||||
ylabel(<span class="org-string">'Position error [m]'</span>);
|
|
||||||
legend();
|
|
||||||
|
|
||||||
subplot(1, 2, 2);
|
|
||||||
hold on;
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 4));
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 5));
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 6));
|
|
||||||
hold off;
|
|
||||||
xlabel(<span class="org-string">'Time [s]'</span>);
|
|
||||||
ylabel(<span class="org-string">'Orientation error [rad]'</span>);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">Eg = simout.Em.Eg;
|
|
||||||
save(<span class="org-string">'./mat/motion_error_ol.mat'</span>, <span class="org-string">'Eg'</span>);
|
|
||||||
</pre>
|
|
||||||
</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-03-13 ven. 17:39</p>
|
<p class="date">Created: 2020-03-17 mar. 11:21</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 121 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 162 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 156 KiB |
@ -54,7 +54,6 @@ The sources of perturbations are (schematically shown in figure [[fig:uniaxial-m
|
|||||||
|
|
||||||
Because we cannot measure directly the perturbation forces, we have the measure the effect of those perturbations on the system (in terms of velocity for instance using geophones, $D$ on figure [[fig:uniaxial-model-micro-station]]) and then, using a model, compute the forces that induced such velocity.
|
Because we cannot measure directly the perturbation forces, we have the measure the effect of those perturbations on the system (in terms of velocity for instance using geophones, $D$ on figure [[fig:uniaxial-model-micro-station]]) and then, using a model, compute the forces that induced such velocity.
|
||||||
|
|
||||||
|
|
||||||
#+begin_src latex :file uniaxial-model-micro-station.pdf :post pdf2svg(file=*this*, ext="png") :exports results
|
#+begin_src latex :file uniaxial-model-micro-station.pdf :post pdf2svg(file=*this*, ext="png") :exports results
|
||||||
\begin{tikzpicture}
|
\begin{tikzpicture}
|
||||||
% ====================
|
% ====================
|
||||||
@ -212,7 +211,8 @@ We load the configuration and we set a small =StopTime=.
|
|||||||
set_param(conf_simulink, 'StopTime', '0.5');
|
set_param(conf_simulink, 'StopTime', '0.5');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
We initialize all the stages.
|
We initialize all the stages without the sample nor the nano-hexapod.
|
||||||
|
The obtained system corresponds to the status micro-station when the vibration measurements were conducted.
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
initializeGround();
|
initializeGround();
|
||||||
initializeGranite('type', 'modal-analysis');
|
initializeGranite('type', 'modal-analysis');
|
||||||
@ -226,6 +226,21 @@ We initialize all the stages.
|
|||||||
initializeSample('type', 'none');
|
initializeSample('type', 'none');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
Open Loop Control.
|
||||||
|
#+begin_src matlab
|
||||||
|
initializeController('type', 'open-loop');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
We don't need gravity here.
|
||||||
|
#+begin_src matlab
|
||||||
|
initializeSimscapeConfiguration('gravity', false);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
We log the signals.
|
||||||
|
#+begin_src matlab
|
||||||
|
initializeLoggingConfiguration('log', 'all');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
* Identification
|
* Identification
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: Identification
|
:CUSTOM_ID: Identification
|
||||||
@ -234,38 +249,34 @@ We initialize all the stages.
|
|||||||
The transfer functions from the disturbance forces to the relative velocity of the hexapod with respect to the granite are computed using the Simscape Model representing the experimental setup with the code below.
|
The transfer functions from the disturbance forces to the relative velocity of the hexapod with respect to the granite are computed using the Simscape Model representing the experimental setup with the code below.
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% Options for Linearized
|
|
||||||
options = linearizeOptions;
|
|
||||||
options.SampleTime = 0;
|
|
||||||
|
|
||||||
%% Name of the Simulink File
|
%% Name of the Simulink File
|
||||||
mdl = 'nass_model';
|
mdl = 'nass_model';
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
%% Micro-Hexapod
|
||||||
%% Micro-Hexapod
|
|
||||||
clear io; io_i = 1;
|
clear io; io_i = 1;
|
||||||
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', [], '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', [], '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, '/Disturbances'], 1, 'openinput', [], 'Frz_z'); io_i = io_i + 1; % Parasitic force Rz
|
||||||
|
|
||||||
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/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
|
io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; % Absolute Motion - Hexapod
|
||||||
% io(io_i) = linio([mdl, '/Vm'], 1, 'openoutput'); io_i = io_i + 1; % Relative Velocity hexapod/granite
|
% io(io_i) = linio([mdl, '/Vm'], 1, 'openoutput'); io_i = io_i + 1; % Relative Velocity hexapod/granite
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
% Run the linearization
|
% Run the linearization
|
||||||
G = linearize(mdl, io, 0);
|
G = linearize(mdl, io, 0);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
% We Take only the outputs corresponding to the vertical acceleration
|
We Take only the outputs corresponding to the vertical acceleration.
|
||||||
|
#+begin_src matlab
|
||||||
G = G([3,9], :);
|
G = G([3,9], :);
|
||||||
|
|
||||||
% Input/Output names
|
% Input/Output names
|
||||||
G.InputName = {'Dw', 'Fty', 'Frz'};
|
G.InputName = {'Dw', 'Fty', 'Frz'};
|
||||||
G.OutputName = {'Agm', 'Ahm'};
|
G.OutputName = {'Agm', 'Ahm'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
% We integrate 1 time the output to have the velocity and we
|
We integrate 1 time the output to have the velocity and we substract the absolute velocities to have the relative velocity.
|
||||||
% substract the absolute velocities to have the relative velocity
|
#+begin_src matlab
|
||||||
G = (1/s)*tf([-1, 1])*G;
|
G = (1/s)*tf([-1, 1])*G;
|
||||||
|
|
||||||
% Input/Output names
|
% Input/Output names
|
||||||
@ -279,6 +290,10 @@ The transfer functions from the disturbance forces to the relative velocity of t
|
|||||||
:END:
|
:END:
|
||||||
<<sec:sensitivity_disturbances>>
|
<<sec:sensitivity_disturbances>>
|
||||||
|
|
||||||
|
The obtained sensitivity to disturbances are shown bellow:
|
||||||
|
- The transfer function from vertical ground motion $D_w$ to the vertical relative displacement from the micro-hexapod to the granite $D$ is shown in Figure [[fig:sensitivity_dist_gm]]
|
||||||
|
- The sensitive from vertical forces applied in the Translation stage is shown in Figure [[fig:sensitivity_dist_fty]]
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
#+begin_src matlab :exports none
|
||||||
freqs = logspace(0, 3, 1000);
|
freqs = logspace(0, 3, 1000);
|
||||||
|
|
||||||
@ -349,8 +364,9 @@ The transfer functions from the disturbance forces to the relative velocity of t
|
|||||||
:CUSTOM_ID: Power-Spectral-Density-of-the-effect-of-the-disturbances
|
:CUSTOM_ID: Power-Spectral-Density-of-the-effect-of-the-disturbances
|
||||||
:END:
|
:END:
|
||||||
<<sec:psd_dist>>
|
<<sec:psd_dist>>
|
||||||
The PSD of the relative velocity between the hexapod and the marble in $[(m/s)^2/Hz]$ are loaded for the following sources of disturbance:
|
|
||||||
- Slip Ring Rotation
|
The Power Spectral Densities of the relative velocity between the hexapod and the marble in $[(m/s)^2/Hz]$ are loaded for the following sources of disturbance:
|
||||||
|
- Slip Ring Rotation ($F_{r_z}$)
|
||||||
- Scan of the translation stage (effect in the vertical direction and in the horizontal direction)
|
- Scan of the translation stage (effect in the vertical direction and in the horizontal direction)
|
||||||
|
|
||||||
Also, the Ground Motion is measured.
|
Also, the Ground Motion is measured.
|
||||||
@ -369,7 +385,6 @@ Also, the Ground Motion is measured.
|
|||||||
tyx.f = tyx.f(2:end);
|
tyx.f = tyx.f(2:end);
|
||||||
|
|
||||||
gm.psd_gm = gm.psd_gm(2:end); % PSD of Ground Motion [m^2/Hz]
|
gm.psd_gm = gm.psd_gm(2:end); % PSD of Ground Motion [m^2/Hz]
|
||||||
gm.psd_gv = gm.psd_gv(2:end); % PSD of Ground Velocity [(m/s)^2/Hz]
|
|
||||||
rz.pxsp_r = rz.pxsp_r(2:end); % PSD of Relative Velocity [(m/s)^2/Hz]
|
rz.pxsp_r = rz.pxsp_r(2:end); % PSD of Relative Velocity [(m/s)^2/Hz]
|
||||||
tyz.pxz_ty_r = tyz.pxz_ty_r(2:end); % PSD of Relative Velocity [(m/s)^2/Hz]
|
tyz.pxz_ty_r = tyz.pxz_ty_r(2:end); % PSD of Relative Velocity [(m/s)^2/Hz]
|
||||||
tyx.pxe_ty_r = tyx.pxe_ty_r(2:end); % PSD of Relative Velocity [(m/s)^2/Hz]
|
tyx.pxe_ty_r = tyx.pxe_ty_r(2:end); % PSD of Relative Velocity [(m/s)^2/Hz]
|
||||||
@ -380,7 +395,7 @@ We now compute the relative velocity between the hexapod and the granite due to
|
|||||||
gm.psd_rv = gm.psd_gm.*abs(squeeze(freqresp(G('Vm', 'Dw'), gm.f, 'Hz'))).^2;
|
gm.psd_rv = gm.psd_gm.*abs(squeeze(freqresp(G('Vm', 'Dw'), gm.f, 'Hz'))).^2;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
The Power Spectral Density of the relative motion/velocity of the hexapod with respect to the granite are shown in figures [[fig:dist_effect_relative_velocity]] and [[fig:dist_effect_relative_motion]].
|
The Power Spectral Density of the relative motion and velocity of the hexapod with respect to the granite are shown in figures [[fig:dist_effect_relative_velocity]] and [[fig:dist_effect_relative_motion]].
|
||||||
|
|
||||||
The Cumulative Amplitude Spectrum of the relative motion is shown in figure [[fig:dist_effect_relative_motion_cas]].
|
The Cumulative Amplitude Spectrum of the relative motion is shown in figure [[fig:dist_effect_relative_motion_cas]].
|
||||||
|
|
||||||
@ -451,19 +466,27 @@ The Cumulative Amplitude Spectrum of the relative motion is shown in figure [[fi
|
|||||||
#+CAPTION: Cumulative Amplitude Spectrum of the relative motion due to different sources of perturbation ([[./figs/dist_effect_relative_motion_cas.png][png]], [[./figs/dist_effect_relative_motion_cas.pdf][pdf]])
|
#+CAPTION: Cumulative Amplitude Spectrum of the relative motion due to different sources of perturbation ([[./figs/dist_effect_relative_motion_cas.png][png]], [[./figs/dist_effect_relative_motion_cas.pdf][pdf]])
|
||||||
[[file:figs/dist_effect_relative_motion_cas.png]]
|
[[file:figs/dist_effect_relative_motion_cas.png]]
|
||||||
|
|
||||||
|
#+begin_important
|
||||||
|
From Figure [[fig:dist_effect_relative_motion_cas]], we can see that the translation stage and the rotation stage have almost the same effect on the position error.
|
||||||
|
Also, the ground motion has a relatively negligible effect on the position error.
|
||||||
|
#+end_important
|
||||||
|
|
||||||
* Compute the Power Spectral Density of the disturbance force
|
* Compute the Power Spectral Density of the disturbance force
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: Compute-the-Power-Spectral-Density-of-the-disturbance-force
|
:CUSTOM_ID: Compute-the-Power-Spectral-Density-of-the-disturbance-force
|
||||||
:END:
|
:END:
|
||||||
<<sec:psd_force_dist>>
|
<<sec:psd_force_dist>>
|
||||||
|
|
||||||
Now, from the extracted transfer functions from the disturbance force to the relative motion of the hexapod with respect to the granite (section [[sec:sensitivity_disturbances]]) and from the measured PSD of the relative motion (section [[sec:psd_dist]]), we can compute the PSD of the disturbance force.
|
Using the extracted transfer functions from the disturbance force to the relative motion of the hexapod with respect to the granite (section [[sec:sensitivity_disturbances]]) and using the measured PSD of the relative motion (section [[sec:psd_dist]]), we can compute the PSD of the disturbance force.
|
||||||
|
|
||||||
|
This is done below.
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
rz.psd_f = rz.pxsp_r./abs(squeeze(freqresp(G('Vm', 'Frz'), rz.f, 'Hz'))).^2;
|
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;
|
tyz.psd_f = tyz.pxz_ty_r./abs(squeeze(freqresp(G('Vm', 'Fty'), tyz.f, 'Hz'))).^2;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
The obtained amplitude spectral densities of the disturbance forces are shown in Figure [[fig:dist_force_psd]].
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
#+begin_src matlab :exports none
|
||||||
figure;
|
figure;
|
||||||
hold on;
|
hold on;
|
||||||
@ -492,11 +515,14 @@ Now, from the extracted transfer functions from the disturbance force to the rel
|
|||||||
:END:
|
:END:
|
||||||
<<sec:noise_budget>>
|
<<sec:noise_budget>>
|
||||||
|
|
||||||
Now, from the compute spectral density of the disturbance sources, we can compute the resulting relative motion of the Hexapod with respect to the granite using the model.
|
From the obtained spectral density of the disturbance sources, we can compute the resulting relative motion of the Hexapod with respect to the granite using the model.
|
||||||
We should verify that this is coherent with the measurements.
|
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
This is equivalent as doing the inverse that was done in the previous section.
|
||||||
% Power Spectral Density of the relative Displacement
|
This is done in order to verify that this is coherent with the measurements.
|
||||||
|
|
||||||
|
The power spectral density of the relative motion is computed below and the result is shown in Figure [[fig:psd_effect_dist_verif]].
|
||||||
|
We can see that this is exactly the same as the Figure [[fig:dist_effect_relative_motion]].
|
||||||
|
#+begin_src matlab
|
||||||
psd_gm_d = gm.psd_gm.*abs(squeeze(freqresp(G('Vm', 'Dw')/s, gm.f, 'Hz'))).^2;
|
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_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;
|
psd_rz_d = rz.psd_f.*abs(squeeze(freqresp(G('Vm', 'Frz')/s, rz.f, 'Hz'))).^2;
|
||||||
@ -508,7 +534,6 @@ We should verify that this is coherent with the measurements.
|
|||||||
plot(gm.f, sqrt(psd_gm_d), 'DisplayName', 'Ground Motion');
|
plot(gm.f, sqrt(psd_gm_d), 'DisplayName', 'Ground Motion');
|
||||||
plot(tyz.f, sqrt(psd_ty_d), 'DisplayName', 'Ty');
|
plot(tyz.f, sqrt(psd_ty_d), 'DisplayName', 'Ty');
|
||||||
plot(rz.f, sqrt(psd_rz_d), 'DisplayName', 'Rz');
|
plot(rz.f, sqrt(psd_rz_d), 'DisplayName', 'Rz');
|
||||||
plot(rz.f, sqrt(psd_gm_d + psd_ty_d + psd_rz_d), 'k--', 'DisplayName', 'tot');
|
|
||||||
hold off;
|
hold off;
|
||||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||||
xlabel('Frequency [Hz]'); ylabel('ASD of the relative motion $\left[\frac{m}{\sqrt{Hz}}\right]$')
|
xlabel('Frequency [Hz]'); ylabel('ASD of the relative motion $\left[\frac{m}{\sqrt{Hz}}\right]$')
|
||||||
@ -525,30 +550,6 @@ We should verify that this is coherent with the measurements.
|
|||||||
#+CAPTION: Computed Effect of the disturbances on the relative displacement hexapod/granite ([[./figs/psd_effect_dist_verif.png][png]], [[./figs/psd_effect_dist_verif.pdf][pdf]])
|
#+CAPTION: Computed Effect of the disturbances on the relative displacement hexapod/granite ([[./figs/psd_effect_dist_verif.png][png]], [[./figs/psd_effect_dist_verif.pdf][pdf]])
|
||||||
[[file:figs/psd_effect_dist_verif.png]]
|
[[file:figs/psd_effect_dist_verif.png]]
|
||||||
|
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
figure;
|
|
||||||
hold on;
|
|
||||||
plot(gm.f, flip(sqrt(-cumtrapz(flip(gm.f), flip(psd_gm_d)))), 'DisplayName', 'Ground Motion');
|
|
||||||
plot(gm.f, flip(sqrt(-cumtrapz(flip(gm.f), flip(psd_ty_d)))), 'DisplayName', 'Ty');
|
|
||||||
plot(gm.f, flip(sqrt(-cumtrapz(flip(gm.f), flip(psd_rz_d)))), 'DisplayName', 'Rz');
|
|
||||||
plot(gm.f, flip(sqrt(-cumtrapz(flip(gm.f), flip(psd_gm_d + psd_ty_d + psd_rz_d)))), 'k-', 'DisplayName', 'tot');
|
|
||||||
hold off;
|
|
||||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
||||||
xlabel('Frequency [Hz]'); ylabel('Cumulative Amplitude Spectrum [m]')
|
|
||||||
legend('location', 'northeast');
|
|
||||||
xlim([2, 500]); ylim([1e-11, 1e-6]);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+HEADER: :tangle no :exports results :results none :noweb yes
|
|
||||||
#+begin_src matlab :var filepath="figs/cas_computed_relative_displacement.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
|
||||||
<<plt-matlab>>
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+NAME: fig:cas_computed_relative_displacement
|
|
||||||
#+CAPTION: CAS of the total Relative Displacement due to all considered sources of perturbation ([[./figs/cas_computed_relative_displacement.png][png]], [[./figs/cas_computed_relative_displacement.pdf][pdf]])
|
|
||||||
[[file:figs/cas_computed_relative_displacement.png]]
|
|
||||||
|
|
||||||
* Save
|
* Save
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: Save
|
:CUSTOM_ID: Save
|
||||||
@ -567,82 +568,3 @@ The PSD of the disturbance force are now saved for further analysis.
|
|||||||
save('./mat/dist_psd.mat', 'dist_f');
|
save('./mat/dist_psd.mat', 'dist_f');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* Error motion of the Sample without Control
|
|
||||||
#+begin_src matlab
|
|
||||||
initializeGround();
|
|
||||||
initializeGranite('Foffset', false);
|
|
||||||
initializeTy('Foffset', false);
|
|
||||||
initializeRy('Foffset', false);
|
|
||||||
initializeRz('Foffset', false);
|
|
||||||
initializeMicroHexapod('Foffset', false);
|
|
||||||
initializeAxisc('type', 'rigid');
|
|
||||||
initializeMirror('type', 'rigid');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
|
|
||||||
#+begin_src matlab
|
|
||||||
initializeNanoHexapod('type', 'rigid');
|
|
||||||
initializeSample('type', 'rigid', 'mass', 50);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
We set the references and disturbances to zero.
|
|
||||||
#+begin_src matlab
|
|
||||||
initializeReferences();
|
|
||||||
initializeDisturbances();
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
We set the controller type to Open-Loop.
|
|
||||||
#+begin_src matlab
|
|
||||||
initializeController('type', 'open-loop');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
And we put some gravity.
|
|
||||||
#+begin_src matlab
|
|
||||||
initializeSimscapeConfiguration('gravity', false);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
We do not need to log any signal.
|
|
||||||
#+begin_src matlab
|
|
||||||
initializeLoggingConfiguration('log', 'all');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
initializePosError('error', false);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
load('mat/conf_simulink.mat');
|
|
||||||
set_param(conf_simulink, 'StopTime', '1');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
We simulate the model.
|
|
||||||
#+begin_src matlab
|
|
||||||
sim('nass_model');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
figure;
|
|
||||||
subplot(1, 2, 1);
|
|
||||||
hold on;
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 1), 'DisplayName', 'X');
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 2), 'DisplayName', 'Y');
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 3), 'DisplayName', 'Z');
|
|
||||||
hold off;
|
|
||||||
xlabel('Time [s]');
|
|
||||||
ylabel('Position error [m]');
|
|
||||||
legend();
|
|
||||||
|
|
||||||
subplot(1, 2, 2);
|
|
||||||
hold on;
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 4));
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 5));
|
|
||||||
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 6));
|
|
||||||
hold off;
|
|
||||||
xlabel('Time [s]');
|
|
||||||
ylabel('Orientation error [rad]');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
Eg = simout.Em.Eg;
|
|
||||||
save('./mat/motion_error_ol.mat', 'Eg');
|
|
||||||
#+end_src
|
|
||||||
|
Loading…
Reference in New Issue
Block a user