Modal Analysis of the Micro Station
The Center of Mass of each solid has been identified using the inertia sensor block. Then, the modal analysis done on the real station is virtual done on the simscape model. Then the results are compare in order to tune the Simscape model.
This commit is contained in:
parent
960afc6b0a
commit
73a3735f19
Binary file not shown.
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 145 KiB |
Binary file not shown.
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 145 KiB |
Binary file not shown.
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 101 KiB |
@ -3,7 +3,7 @@
|
|||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- 2019-12-12 jeu. 13:54 -->
|
<!-- 2019-12-13 ven. 15:53 -->
|
||||||
<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</title>
|
<title>Identification</title>
|
||||||
@ -246,6 +246,31 @@ for the JavaScript code in this tag.
|
|||||||
}
|
}
|
||||||
/*]]>*///-->
|
/*]]>*///-->
|
||||||
</script>
|
</script>
|
||||||
|
<script type="text/x-mathjax-config">
|
||||||
|
MathJax.Hub.Config({
|
||||||
|
displayAlign: "center",
|
||||||
|
displayIndent: "0em",
|
||||||
|
|
||||||
|
"HTML-CSS": { scale: 100,
|
||||||
|
linebreaks: { automatic: "false" },
|
||||||
|
webFont: "TeX"
|
||||||
|
},
|
||||||
|
SVG: {scale: 100,
|
||||||
|
linebreaks: { automatic: "false" },
|
||||||
|
font: "TeX"},
|
||||||
|
NativeMML: {scale: 100},
|
||||||
|
TeX: { equationNumbers: {autoNumber: "AMS"},
|
||||||
|
MultLineWidth: "85%",
|
||||||
|
TagSide: "right",
|
||||||
|
TagIndent: ".8em",
|
||||||
|
Macros: {
|
||||||
|
bm: ["{\\boldsymbol #1}",1],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="org-div-home-and-up">
|
<div id="org-div-home-and-up">
|
||||||
@ -258,231 +283,94 @@ for the JavaScript code in this tag.
|
|||||||
<h2>Table of Contents</h2>
|
<h2>Table of Contents</h2>
|
||||||
<div id="text-table-of-contents">
|
<div id="text-table-of-contents">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org5535be8">1. Identification of the Micro-Station</a>
|
<li><a href="#orgb8d5122">1. Some notes about the Simscape Model</a></li>
|
||||||
|
<li><a href="#orgc2a789d">2. Compare with measurements at the CoM of each element</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orgeb4caf2">1.1. Compute the transfer functions</a></li>
|
<li><a href="#orgf4fd5e0">2.1. Prepare the Simulation</a></li>
|
||||||
<li><a href="#orga6d8893">1.2. Plots the transfer functions</a></li>
|
<li><a href="#org80db7e9">2.2. Estimate the position of the CoM of each solid and compare with the one took for the Measurement Analysis</a></li>
|
||||||
<li><a href="#org9c2b20b">1.3. Compare with the measurements</a></li>
|
<li><a href="#org93dc35e">2.3. Create a frame at the CoM of each solid body</a></li>
|
||||||
</ul>
|
<li><a href="#org7b8b6f1">2.4. Identification of the dynamics of the Simscape Model</a></li>
|
||||||
</li>
|
<li><a href="#org45a93e8">2.5. Compare with measurements</a></li>
|
||||||
<li><a href="#org7ebba44">2. Modal Analysis of the Micro-Station</a>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#org144c94f">2.1. Simscape Model</a></li>
|
|
||||||
<li><a href="#org13089bd">2.2. Plot Results</a></li>
|
|
||||||
<li><a href="#orga83a056">2.3. Compare with measurements</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><a href="#org3c7a9b8">3. Compare with measurements at the CoM of each element</a>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#orga77333e">3.1. Init</a></li>
|
|
||||||
<li><a href="#org528446b">3.2. <span class="todo TODO">TODO</span> Center of Mass of each solid body</a></li>
|
|
||||||
<li><a href="#org0c4a656">3.3. Simscape Model</a></li>
|
|
||||||
<li><a href="#org6a6f29d">3.4. Compare with measurements</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><a href="#orga61d09b">4. Other analysis</a>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#orgffb60dd">4.1. Plot the obtained transfer functions</a></li>
|
|
||||||
<li><a href="#org5f9eec6">4.2. Compare with the modal measurements</a></li>
|
|
||||||
<li><a href="#orga829744">4.3. Modal Identification of the micro station</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<li><a href="#org75fd8be">3. Conclusion</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The goal here is to make an identification of the <b>micro-station</b> in order to compare the model with the measurements on the real micro-station.
|
The goal here is to tune the Simscape model of the station in order to have a good dynamical representation of the real system.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
In order to do so:
|
In order to do so, we reproduce the Modal Analysis done on the station using the Simscape model.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We can then compare the measured Frequency Response Functions with the identified dynamics of the model.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Finally, this should help to tune the parameters of the model such that the dynamics is closer to the measured FRF.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div id="outline-container-orgb8d5122" class="outline-2">
|
||||||
|
<h2 id="orgb8d5122"><span class="section-number-2">1</span> Some notes about the Simscape Model</h2>
|
||||||
|
<div class="outline-text-2" id="text-1">
|
||||||
|
<p>
|
||||||
|
The Simscape Model of the micro-station consists of several solid bodies:
|
||||||
</p>
|
</p>
|
||||||
<ul class="org-ul">
|
<ul class="org-ul">
|
||||||
<li>Decide where to virtually excite the station and where to measure its motion</li>
|
<li>Bottom Granite</li>
|
||||||
<li>Extract transfer functions from the excitation forces to the measured motion</li>
|
<li>Top Granite</li>
|
||||||
<li>Compare those transfer functions with the modal analysis</li>
|
<li>Translation Stage</li>
|
||||||
|
<li>Tilt Stage</li>
|
||||||
|
<li>Spindle</li>
|
||||||
|
<li>Hexapod</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
For the excitation, we can choose the same excitation points as the one used for the modal test.
|
Each solid body has some characteristics: Center of Mass, mass, moment of inertia, etc…
|
||||||
For the measurement points, we can choose the Center of Mass of each solid body.
|
These parameters are automatically computed from the geometry and from the density of the materials.
|
||||||
The center of mass of each solid body is not easily defined using Simscape.
|
|
||||||
Indeed, we can define the center of mass of any solid body but not of multiple solid bodies. However, one solid body is composed of multiple STEP files.
|
|
||||||
One solution could be to use one STEP file for one solid body.
|
|
||||||
However, the position of the center of mass can be exported using simulink and then defined on Simscape.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div id="outline-container-org5535be8" class="outline-2">
|
|
||||||
<h2 id="org5535be8"><span class="section-number-2">1</span> Identification of the Micro-Station</h2>
|
|
||||||
<div class="outline-text-2" id="text-1">
|
|
||||||
</div>
|
|
||||||
<div id="outline-container-orgeb4caf2" class="outline-3">
|
|
||||||
<h3 id="orgeb4caf2"><span class="section-number-3">1.1</span> Compute the transfer functions</h3>
|
|
||||||
<div class="outline-text-3" id="text-1-1">
|
|
||||||
<p>
|
<p>
|
||||||
We first define some parameters for the identification.
|
Then, the solid bodies are connected with springs and dampers.
|
||||||
The simulink file for the identification is <code>sim_micro_station_id.slx</code>.
|
Some of the springs and dampers values can be estimated from the joints/stages specifications, however, we here prefer to tune these values based on the measurements.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_id.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
|
||||||
options = linearizeOptions;
|
|
||||||
options.SampleTime = <span class="org-highlight-numbers-number">0</span>;
|
|
||||||
|
|
||||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
|
|
||||||
mdl = <span class="org-string">'sim_micro_station_id'</span>;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
|
|
||||||
<span class="org-comment">% Input/Output definition</span>
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/Fm_ext'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'openinput'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/Fg_ext'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'openinput'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/Dm_inertial'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/Ty_inertial'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/Ry_inertial'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/Dg_inertial'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab"><span class="org-comment">% Run the linearization</span>
|
|
||||||
G_ms = linearize<span class="org-rainbow-delimiters-depth-1">(</span>mdl, io, <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
|
|
||||||
<span class="org-comment">% Input/Output names</span>
|
|
||||||
G_ms.InputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'Fmx'</span>, <span class="org-string">'Fmy'</span>, <span class="org-string">'Fmz'</span>,...
|
|
||||||
<span class="org-string">'Fgx'</span>, <span class="org-string">'Fgy'</span>, <span class="org-string">'Fgz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
|
||||||
G_ms.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'Dmx'</span>, <span class="org-string">'Dmy'</span>, <span class="org-string">'Dmz'</span>, ...
|
|
||||||
<span class="org-string">'Tyx'</span>, <span class="org-string">'Tyy'</span>, <span class="org-string">'Tyz'</span>, ...
|
|
||||||
<span class="org-string">'Ryx'</span>, <span class="org-string">'Ryy'</span>, <span class="org-string">'Ryz'</span>, ...
|
|
||||||
<span class="org-string">'Dgx'</span>, <span class="org-string">'Dgy'</span>, <span class="org-string">'Dgz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Save the obtained transfer functions</span></span>
|
|
||||||
save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/id_micro_station.mat'</span>, <span class="org-string">'G_ms'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="outline-container-orga6d8893" class="outline-3">
|
|
||||||
<h3 id="orga6d8893"><span class="section-number-3">1.2</span> Plots the transfer functions</h3>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="outline-container-org9c2b20b" class="outline-3">
|
|
||||||
<h3 id="org9c2b20b"><span class="section-number-3">1.3</span> Compare with the measurements</h3>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-orgc2a789d" class="outline-2">
|
||||||
<div id="outline-container-org7ebba44" class="outline-2">
|
<h2 id="orgc2a789d"><span class="section-number-2">2</span> Compare with measurements at the CoM of each element</h2>
|
||||||
<h2 id="org7ebba44"><span class="section-number-2">2</span> Modal Analysis of the Micro-Station</h2>
|
|
||||||
<div class="outline-text-2" id="text-2">
|
<div class="outline-text-2" id="text-2">
|
||||||
|
<p>
|
||||||
|
<a href="../../meas/modal-analysis/index.html">here</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org144c94f" class="outline-3">
|
|
||||||
<h3 id="org144c94f"><span class="section-number-3">2.1</span> Simscape Model</h3>
|
<div id="outline-container-orgf4fd5e0" class="outline-3">
|
||||||
|
<h3 id="orgf4fd5e0"><span class="section-number-3">2.1</span> Prepare the Simulation</h3>
|
||||||
<div class="outline-text-3" id="text-2-1">
|
<div class="outline-text-3" id="text-2-1">
|
||||||
|
<p>
|
||||||
|
We load the configuration.
|
||||||
|
</p>
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_modal_analysis.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/conf_simscape.mat'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We set a small <code>StopTime</code>.
|
||||||
|
</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-simulink-keyword">set_param</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">conf_simscape</span>, <span class="org-string">'StopTime'</span>, '<span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">5</span><span class="org-type">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
options = linearizeOptions;
|
|
||||||
options.SampleTime = <span class="org-highlight-numbers-number">0</span>;
|
|
||||||
|
|
||||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
|
|
||||||
mdl = <span class="org-string">'sim_micro_station_modal_analysis'</span>;
|
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="org-src-container">
|
<p>
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
|
We initialize all the stages.
|
||||||
<span class="org-comment">% Input/Output definition</span>
|
</p>
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/F_hammer'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'openinput'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc9'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc10'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc11'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc12'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab"><span class="org-comment">% Run the linearization</span>
|
|
||||||
G_ms = linearize<span class="org-rainbow-delimiters-depth-1">(</span>mdl, io, <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
|
|
||||||
<span class="org-comment">% Input/Output names</span>
|
|
||||||
G_ms.InputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
|
||||||
G_ms.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'x9'</span>, <span class="org-string">'y9'</span>, <span class="org-string">'z9'</span>, ...
|
|
||||||
<span class="org-string">'x10'</span>, <span class="org-string">'y10'</span>, <span class="org-string">'z10'</span>, ...
|
|
||||||
<span class="org-string">'x11'</span>, <span class="org-string">'y11'</span>, <span class="org-string">'z11'</span>, ...
|
|
||||||
<span class="org-string">'x12'</span>, <span class="org-string">'y12'</span>, <span class="org-string">'z12'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="outline-container-org13089bd" class="outline-3">
|
|
||||||
<h3 id="org13089bd"><span class="section-number-3">2.2</span> Plot Results</h3>
|
|
||||||
<div class="outline-text-3" id="text-2-2">
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
|
||||||
hold on;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>freqresp<span class="org-rainbow-delimiters-depth-4">(</span>G_ms<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">'x9'</span>, <span class="org-string">'Fx'</span><span class="org-rainbow-delimiters-depth-5">)</span>, freqs, <span class="org-string">'Hz'</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'YScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">m/N</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
hold off;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="outline-container-orga83a056" class="outline-3">
|
|
||||||
<h3 id="orga83a056"><span class="section-number-3">2.3</span> Compare with measurements</h3>
|
|
||||||
<div class="outline-text-3" id="text-2-3">
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'../meas/modal-analysis/mat/frf_coh_matrices.mat'</span>, <span class="org-string">'FRFs'</span>, <span class="org-string">'COHs'</span>, <span class="org-string">'freqs'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">dirs = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'x'</span>, <span class="org-string">'y'</span>, <span class="org-string">'z'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
|
||||||
|
|
||||||
n_acc = <span class="org-highlight-numbers-number">9</span>;
|
|
||||||
n_dir = <span class="org-highlight-numbers-number">1</span>; <span class="org-comment">% x, y, z</span>
|
|
||||||
n_exc = <span class="org-highlight-numbers-number">1</span>; <span class="org-comment">% x, y, z</span>
|
|
||||||
|
|
||||||
<span class="org-type">figure</span>;
|
|
||||||
hold on;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>n_acc<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-type">+</span> n_dir, n_exc, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">./</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">.^</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>freqresp<span class="org-rainbow-delimiters-depth-4">(</span>G_ms<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">[</span>dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span>, num2str<span class="org-rainbow-delimiters-depth-7">(</span>n_acc<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">]</span>, <span class="org-rainbow-delimiters-depth-6">[</span><span class="org-string">'F'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span><span class="org-rainbow-delimiters-depth-5">)</span>, freqs, <span class="org-string">'Hz'</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'YScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">m/N</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
hold off;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="outline-container-org3c7a9b8" class="outline-2">
|
|
||||||
<h2 id="org3c7a9b8"><span class="section-number-2">3</span> Compare with measurements at the CoM of each element</h2>
|
|
||||||
<div class="outline-text-2" id="text-3">
|
|
||||||
</div>
|
|
||||||
<div id="outline-container-orga77333e" class="outline-3">
|
|
||||||
<h3 id="orga77333e"><span class="section-number-3">3.1</span> Init</h3>
|
|
||||||
<div class="outline-text-3" id="text-3-1">
|
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">initializeGround<span class="org-rainbow-delimiters-depth-1">()</span>;
|
<pre class="src src-matlab">initializeGround<span class="org-rainbow-delimiters-depth-1">()</span>;
|
||||||
initializeGranite<span class="org-rainbow-delimiters-depth-1">()</span>;
|
initializeGranite<span class="org-rainbow-delimiters-depth-1">()</span>;
|
||||||
@ -491,21 +379,103 @@ initializeRy<span class="org-rainbow-delimiters-depth-1">()</span>;
|
|||||||
initializeRz<span class="org-rainbow-delimiters-depth-1">()</span>;
|
initializeRz<span class="org-rainbow-delimiters-depth-1">()</span>;
|
||||||
initializeMicroHexapod<span class="org-rainbow-delimiters-depth-1">()</span>;
|
initializeMicroHexapod<span class="org-rainbow-delimiters-depth-1">()</span>;
|
||||||
initializeAxisc<span class="org-rainbow-delimiters-depth-1">()</span>;
|
initializeAxisc<span class="org-rainbow-delimiters-depth-1">()</span>;
|
||||||
|
initializeMirror<span class="org-rainbow-delimiters-depth-1">()</span>;
|
||||||
|
initializeNanoHexapod<span class="org-rainbow-delimiters-depth-1">(</span>struct<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
initializeSample<span class="org-rainbow-delimiters-depth-1">(</span>struct<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'mass'</span>, <span class="org-highlight-numbers-number">50</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org528446b" class="outline-3">
|
<div id="outline-container-org80db7e9" class="outline-3">
|
||||||
<h3 id="org528446b"><span class="section-number-3">3.2</span> <span class="todo TODO">TODO</span> Center of Mass of each solid body</h3>
|
<h3 id="org80db7e9"><span class="section-number-3">2.2</span> Estimate the position of the CoM of each solid and compare with the one took for the Measurement Analysis</h3>
|
||||||
<div class="outline-text-3" id="text-3-2">
|
<div class="outline-text-3" id="text-2-2">
|
||||||
<ul class="org-ul">
|
<div class="org-src-container">
|
||||||
<li class="off"><code>[ ]</code> Verify that this is coherent with the simscape and with the measurements</li>
|
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_com.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
||||||
</ul>
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Thanks to the <a href="https://fr.mathworks.com/help/physmod/sm/ref/inertiasensor.html">Inertia Sensor</a> simscape block, it is possible to estimate the position of the Center of Mass of a solid body with respect to a defined frame.
|
||||||
|
</p>
|
||||||
|
|
||||||
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'sim_micro_station_com'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The results are shown in the table <a href="#orgb162423">1</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table id="orgb162423" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||||
|
<caption class="t-above"><span class="table-number">Table 1:</span> Center of Mass of each solid body as defined in Simscape</caption>
|
||||||
|
|
||||||
|
<colgroup>
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="org-left"> </th>
|
||||||
|
<th scope="col" class="org-right">granite bot</th>
|
||||||
|
<th scope="col" class="org-right">granite top</th>
|
||||||
|
<th scope="col" class="org-right">ty</th>
|
||||||
|
<th scope="col" class="org-right">ry</th>
|
||||||
|
<th scope="col" class="org-right">rz</th>
|
||||||
|
<th scope="col" class="org-right">hexa</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">X [mm]</td>
|
||||||
|
<td class="org-right">52.4</td>
|
||||||
|
<td class="org-right">51.7</td>
|
||||||
|
<td class="org-right">0.9</td>
|
||||||
|
<td class="org-right">-0.1</td>
|
||||||
|
<td class="org-right">0.0</td>
|
||||||
|
<td class="org-right">-0.0</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">Y [mm]</td>
|
||||||
|
<td class="org-right">190.4</td>
|
||||||
|
<td class="org-right">263.2</td>
|
||||||
|
<td class="org-right">0.7</td>
|
||||||
|
<td class="org-right">5.2</td>
|
||||||
|
<td class="org-right">-0.0</td>
|
||||||
|
<td class="org-right">0.1</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">Z [mm]</td>
|
||||||
|
<td class="org-right">-1200.0</td>
|
||||||
|
<td class="org-right">-777.1</td>
|
||||||
|
<td class="org-right">-598.9</td>
|
||||||
|
<td class="org-right">-627.7</td>
|
||||||
|
<td class="org-right">-643.2</td>
|
||||||
|
<td class="org-right">-317.1</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We can compare the obtained center of mass (table <a href="#orgb162423">1</a>) with the one used for the Modal Analysis shown in table <a href="#org7f786a2">2</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table id="org7f786a2" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||||
|
<caption class="t-above"><span class="table-number">Table 2:</span> Estimated Center of Mass of each solid body using Solidworks</caption>
|
||||||
|
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col class="org-left" />
|
<col class="org-left" />
|
||||||
@ -566,16 +536,143 @@ initializeAxisc<span class="org-rainbow-delimiters-depth-1">()</span>;
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The results are quite similar.
|
||||||
|
The differences can be explained by some differences in the chosen density of the materials or by the fact that not exactly all the same elements have been chosen for each stage.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For instance, on simscape, the fixed part of the translation stage counts for the top granite solid body.
|
||||||
|
However, in SolidWorks, this has probably not be included with the top granite.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org93dc35e" class="outline-3">
|
||||||
|
<h3 id="org93dc35e"><span class="section-number-3">2.3</span> Create a frame at the CoM of each solid body</h3>
|
||||||
|
<div class="outline-text-3" id="text-2-3">
|
||||||
|
<p>
|
||||||
|
Now we use one <code>inertiasensor</code> block connected on each solid body that measured the center of mass of this solid with respect to the same connected frame.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We do that in order to position an accelerometer on the Simscape model at this particular point.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_com_estimation.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'sim_micro_station_com_estimation'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||||
|
|
||||||
|
|
||||||
|
<colgroup>
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-right" />
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="org-left"> </th>
|
||||||
|
<th scope="col" class="org-right">granite bot</th>
|
||||||
|
<th scope="col" class="org-right">granite top</th>
|
||||||
|
<th scope="col" class="org-right">ty</th>
|
||||||
|
<th scope="col" class="org-right">ry</th>
|
||||||
|
<th scope="col" class="org-right">rz</th>
|
||||||
|
<th scope="col" class="org-right">hexa</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">X [mm]</td>
|
||||||
|
<td class="org-right">0.0</td>
|
||||||
|
<td class="org-right">51.7</td>
|
||||||
|
<td class="org-right">0.9</td>
|
||||||
|
<td class="org-right">-0.1</td>
|
||||||
|
<td class="org-right">0.0</td>
|
||||||
|
<td class="org-right">-0.0</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">Y [mm]</td>
|
||||||
|
<td class="org-right">0.0</td>
|
||||||
|
<td class="org-right">753.2</td>
|
||||||
|
<td class="org-right">0.7</td>
|
||||||
|
<td class="org-right">5.2</td>
|
||||||
|
<td class="org-right">-0.0</td>
|
||||||
|
<td class="org-right">0.1</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">Z [mm]</td>
|
||||||
|
<td class="org-right">-250.0</td>
|
||||||
|
<td class="org-right">22.9</td>
|
||||||
|
<td class="org-right">-17.1</td>
|
||||||
|
<td class="org-right">-146.5</td>
|
||||||
|
<td class="org-right">-23.2</td>
|
||||||
|
<td class="org-right">-47.1</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<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<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
|
||||||
|
granite_top_com = granite_top_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
|
||||||
|
ty_com = ty_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
|
||||||
|
ry_com = ry_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
|
||||||
|
rz_com = rz_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
|
||||||
|
hexa_com = hexa_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
|
||||||
|
|
||||||
|
save<span class="org-rainbow-delimiters-depth-1">(</span><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><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Then, we use the obtained results to add a <code>rigidTransform</code> block in order to create a new frame at the center of mass of each solid body.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org7b8b6f1" class="outline-3">
|
||||||
|
<h3 id="org7b8b6f1"><span class="section-number-3">2.4</span> Identification of the dynamics of the Simscape Model</h3>
|
||||||
|
<div class="outline-text-3" id="text-2-4">
|
||||||
|
<p>
|
||||||
|
We now use a new Simscape Model where 6DoF inertial sensors are located at the Center of Mass of each solid body.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><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><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_modal_analysis_com.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_modal_analysis_com.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="outline-container-org0c4a656" class="outline-3">
|
<p>
|
||||||
<h3 id="org0c4a656"><span class="section-number-3">3.3</span> Simscape Model</h3>
|
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.
|
||||||
<div class="outline-text-3" id="text-3-3">
|
</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">%% Options for Linearized</span></span>
|
||||||
options = linearizeOptions;
|
options = linearizeOptions;
|
||||||
@ -589,12 +686,12 @@ mdl = <span class="org-string">'sim_micro_station_modal_analysis_com'</span>;
|
|||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab"><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>
|
||||||
<span class="org-comment">% Input/Output definition</span>
|
<span class="org-comment">% Input/Output definition</span>
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/F_hammer'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'openinput'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/F_hammer'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'openinput'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc_gtop'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_gtop'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc_ty'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_ty'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc_ry'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_ry'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc_rz'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_rz'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Micro-Station/acc_hexa'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_hexa'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -611,138 +708,53 @@ G_ms.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cla
|
|||||||
<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><span class="org-rainbow-delimiters-depth-1">}</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><span class="org-rainbow-delimiters-depth-1">}</span>;
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
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><span class="org-highlight-numbers-number">2</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org6a6f29d" class="outline-3">
|
<div id="outline-container-org45a93e8" class="outline-3">
|
||||||
<h3 id="org6a6f29d"><span class="section-number-3">3.4</span> Compare with measurements</h3>
|
<h3 id="org45a93e8"><span class="section-number-3">2.5</span> Compare with measurements</h3>
|
||||||
<div class="outline-text-3" id="text-3-4">
|
<div class="outline-text-3" id="text-2-5">
|
||||||
|
<p>
|
||||||
|
We now load the Frequency Response Functions measurements during the Modal Analysis (accessible <a href="../../meas/modal-analysis/index.html">here</a>).
|
||||||
|
</p>
|
||||||
|
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'../meas/modal-analysis/mat/frf_coh_matrices.mat'</span>, <span class="org-string">'freqs'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'../meas/modal-analysis/mat/frf_coh_matrices.mat'</span>, <span class="org-string">'freqs'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'../meas/modal-analysis/mat/frf_com.mat'</span>, <span class="org-string">'FRFs_CoM'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'../meas/modal-analysis/mat/frf_com.mat'</span>, <span class="org-string">'FRFs_CoM'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="org-src-container">
|
<p>
|
||||||
<pre class="src src-matlab">dirs = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'x'</span>, <span class="org-string">'y'</span>, <span class="org-string">'z'</span>, <span class="org-string">'rx'</span>, <span class="org-string">'ry'</span>, <span class="org-string">'rz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
We then compare the measurements with the identified transfer functions using the Simscape Model.
|
||||||
stages = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'gbot'</span>, <span class="org-string">'gtop'</span>, <span class="org-string">'ty'</span>, <span class="org-string">'ry'</span>, <span class="org-string">'rz'</span>, <span class="org-string">'hexa'</span><span class="org-rainbow-delimiters-depth-1">}</span>
|
</p>
|
||||||
|
|
||||||
n_stg = <span class="org-highlight-numbers-number">2</span>;
|
|
||||||
n_dir = <span class="org-highlight-numbers-number">5</span>; <span class="org-comment">% x, y, z, Rx, Ry, Rz</span>
|
|
||||||
n_exc = <span class="org-highlight-numbers-number">2</span>; <span class="org-comment">% x, y, z</span>
|
|
||||||
|
|
||||||
f = logspace<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
|
|
||||||
<span class="org-type">figure</span>;
|
|
||||||
hold on;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_CoM<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">6</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>n_stg<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-type">+</span> n_dir, n_exc, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">./</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">.^</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>f, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>freqresp<span class="org-rainbow-delimiters-depth-4">(</span>G_ms<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">[</span>stages<span class="org-rainbow-delimiters-depth-7">{</span>n_stg<span class="org-rainbow-delimiters-depth-7">}</span>, <span class="org-string">'_'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span>, <span class="org-rainbow-delimiters-depth-6">[</span><span class="org-string">'F'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_exc<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span><span class="org-rainbow-delimiters-depth-5">)</span>, f, <span class="org-string">'Hz'</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'YScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">m/N</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
hold off;
|
|
||||||
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">200</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">dirs = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'x'</span>, <span class="org-string">'y'</span>, <span class="org-string">'z'</span>, <span class="org-string">'rx'</span>, <span class="org-string">'ry'</span>, <span class="org-string">'rz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
|
||||||
stages = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'gtop'</span>, <span class="org-string">'ty'</span>, <span class="org-string">'ry'</span>, <span class="org-string">'rz'</span>, <span class="org-string">'hexa'</span><span class="org-rainbow-delimiters-depth-1">}</span>
|
|
||||||
|
|
||||||
f = logspace<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
|
|
||||||
<span class="org-type">figure</span>;
|
|
||||||
<span class="org-keyword">for</span> <span class="org-variable-name">n_stg</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">2</span></span>
|
|
||||||
<span class="org-keyword">for</span> <span class="org-variable-name">n_dir</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">3</span></span>
|
|
||||||
subplot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">2</span>, <span class="org-rainbow-delimiters-depth-2">(</span>n_dir<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">2</span> <span class="org-type">+</span> n_stg<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
title<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'F '</span>, dirs<span class="org-rainbow-delimiters-depth-3">{</span>n_dir<span class="org-rainbow-delimiters-depth-3">}</span>, <span class="org-string">' to '</span>, stages<span class="org-rainbow-delimiters-depth-3">{</span>n_stg<span class="org-rainbow-delimiters-depth-3">}</span>, <span class="org-string">' '</span>, dirs<span class="org-rainbow-delimiters-depth-3">{</span>n_dir<span class="org-rainbow-delimiters-depth-3">}</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
hold on;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_CoM<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">6</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>n_stg<span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-type">+</span> n_dir, n_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">./</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">.^</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>f, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>freqresp<span class="org-rainbow-delimiters-depth-4">(</span>G_ms<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">[</span>stages<span class="org-rainbow-delimiters-depth-7">{</span>n_stg<span class="org-rainbow-delimiters-depth-7">}</span>, <span class="org-string">'_'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span>, <span class="org-rainbow-delimiters-depth-6">[</span><span class="org-string">'F'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span><span class="org-rainbow-delimiters-depth-5">)</span>, f, <span class="org-string">'Hz'</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'YScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">m/N</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">if</span> n_dir <span class="org-type">==</span> <span class="org-highlight-numbers-number">3</span>
|
|
||||||
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
hold off;
|
|
||||||
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">10</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">12</span>, <span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="org0ac0932" class="figure">
|
<div id="org6215dd8" class="figure">
|
||||||
<p><img src="figs/identification_comp_bot_stages.png" alt="identification_comp_bot_stages.png" />
|
<p><img src="figs/identification_comp_bot_stages.png" alt="identification_comp_bot_stages.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 1: </span>caption (<a href="./figs/identification_comp_bot_stages.png">png</a>, <a href="./figs/identification_comp_bot_stages.pdf">pdf</a>)</p>
|
<p><span class="figure-number">Figure 1: </span>caption (<a href="./figs/identification_comp_bot_stages.png">png</a>, <a href="./figs/identification_comp_bot_stages.pdf">pdf</a>)</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">dirs = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'x'</span>, <span class="org-string">'y'</span>, <span class="org-string">'z'</span>, <span class="org-string">'rx'</span>, <span class="org-string">'ry'</span>, <span class="org-string">'rz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
|
||||||
stages = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'ry'</span>, <span class="org-string">'rz'</span>, <span class="org-string">'hexa'</span><span class="org-rainbow-delimiters-depth-1">}</span>
|
|
||||||
|
|
||||||
f = logspace<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
<div id="org3a94e0d" class="figure">
|
||||||
|
|
||||||
<span class="org-type">figure</span>;
|
|
||||||
<span class="org-keyword">for</span> <span class="org-variable-name">n_stg</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">2</span></span>
|
|
||||||
<span class="org-keyword">for</span> <span class="org-variable-name">n_dir</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">3</span></span>
|
|
||||||
subplot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">2</span>, <span class="org-rainbow-delimiters-depth-2">(</span>n_dir<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">2</span> <span class="org-type">+</span> n_stg<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
title<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'F '</span>, dirs<span class="org-rainbow-delimiters-depth-3">{</span>n_dir<span class="org-rainbow-delimiters-depth-3">}</span>, <span class="org-string">' to '</span>, stages<span class="org-rainbow-delimiters-depth-3">{</span>n_stg<span class="org-rainbow-delimiters-depth-3">}</span>, <span class="org-string">' '</span>, dirs<span class="org-rainbow-delimiters-depth-3">{</span>n_dir<span class="org-rainbow-delimiters-depth-3">}</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
hold on;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_CoM<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">6</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>n_stg<span class="org-type">+</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-type">+</span> n_dir, n_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">./</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">.^</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>f, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>freqresp<span class="org-rainbow-delimiters-depth-4">(</span>G_ms<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">[</span>stages<span class="org-rainbow-delimiters-depth-7">{</span>n_stg<span class="org-rainbow-delimiters-depth-7">}</span>, <span class="org-string">'_'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span>, <span class="org-rainbow-delimiters-depth-6">[</span><span class="org-string">'F'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span><span class="org-rainbow-delimiters-depth-5">)</span>, f, <span class="org-string">'Hz'</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'YScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">m/N</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">if</span> n_dir <span class="org-type">==</span> <span class="org-highlight-numbers-number">3</span>
|
|
||||||
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
hold off;
|
|
||||||
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">10</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">12</span>, <span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="orga6fecd1" class="figure">
|
|
||||||
<p><img src="figs/identification_comp_mid_stages.png" alt="identification_comp_mid_stages.png" />
|
<p><img src="figs/identification_comp_mid_stages.png" alt="identification_comp_mid_stages.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 2: </span>caption (<a href="./figs/identification_comp_mid_stages.png">png</a>, <a href="./figs/identification_comp_mid_stages.pdf">pdf</a>)</p>
|
<p><span class="figure-number">Figure 2: </span>caption (<a href="./figs/identification_comp_mid_stages.png">png</a>, <a href="./figs/identification_comp_mid_stages.pdf">pdf</a>)</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">dirs = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'x'</span>, <span class="org-string">'y'</span>, <span class="org-string">'z'</span>, <span class="org-string">'rx'</span>, <span class="org-string">'ry'</span>, <span class="org-string">'rz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
|
|
||||||
stages = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'hexa'</span><span class="org-rainbow-delimiters-depth-1">}</span>
|
|
||||||
|
|
||||||
f = logspace<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
<div id="orgaf6f4aa" class="figure">
|
||||||
|
|
||||||
<span class="org-type">figure</span>;
|
|
||||||
<span class="org-keyword">for</span> <span class="org-variable-name">n_stg</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span>
|
|
||||||
<span class="org-keyword">for</span> <span class="org-variable-name">n_dir</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">3</span></span>
|
|
||||||
subplot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-rainbow-delimiters-depth-2">(</span>n_dir<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">2</span> <span class="org-type">+</span> n_stg<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
title<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'F '</span>, dirs<span class="org-rainbow-delimiters-depth-3">{</span>n_dir<span class="org-rainbow-delimiters-depth-3">}</span>, <span class="org-string">' to '</span>, stages<span class="org-rainbow-delimiters-depth-3">{</span>n_stg<span class="org-rainbow-delimiters-depth-3">}</span>, <span class="org-string">' '</span>, dirs<span class="org-rainbow-delimiters-depth-3">{</span>n_dir<span class="org-rainbow-delimiters-depth-3">}</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
hold on;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_CoM<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">6</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>n_stg<span class="org-type">+</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-type">+</span> n_dir, n_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">./</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>freqs<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">.^</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
plot<span class="org-rainbow-delimiters-depth-1">(</span>f, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>freqresp<span class="org-rainbow-delimiters-depth-4">(</span>G_ms<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">[</span>stages<span class="org-rainbow-delimiters-depth-7">{</span>n_stg<span class="org-rainbow-delimiters-depth-7">}</span>, <span class="org-string">'_'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span>, <span class="org-rainbow-delimiters-depth-6">[</span><span class="org-string">'F'</span>, dirs<span class="org-rainbow-delimiters-depth-7">{</span>n_dir<span class="org-rainbow-delimiters-depth-7">}</span><span class="org-rainbow-delimiters-depth-6">]</span><span class="org-rainbow-delimiters-depth-5">)</span>, f, <span class="org-string">'Hz'</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'YScale'</span>, <span class="org-string">'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">m/N</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">if</span> n_dir <span class="org-type">==</span> <span class="org-highlight-numbers-number">3</span>
|
|
||||||
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
hold off;
|
|
||||||
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">10</span>, <span class="org-highlight-numbers-number">1000</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
ylim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">12</span>, <span class="org-highlight-numbers-number">1e</span><span class="org-type">-</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
<span class="org-keyword">end</span>
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="org55fa910" class="figure">
|
|
||||||
<p><img src="figs/identification_comp_top_stages.png" alt="identification_comp_top_stages.png" />
|
<p><img src="figs/identification_comp_top_stages.png" alt="identification_comp_top_stages.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 3: </span>caption (<a href="./figs/identification_comp_top_stages.png">png</a>, <a href="./figs/identification_comp_top_stages.pdf">pdf</a>)</p>
|
<p><span class="figure-number">Figure 3: </span>caption (<a href="./figs/identification_comp_top_stages.png">png</a>, <a href="./figs/identification_comp_top_stages.pdf">pdf</a>)</p>
|
||||||
@ -751,24 +763,22 @@ f = logspace<span class="org-rainbow-delimiters-depth-1">(</span><span class="or
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orga61d09b" class="outline-2">
|
|
||||||
<h2 id="orga61d09b"><span class="section-number-2">4</span> Other analysis</h2>
|
<div id="outline-container-org75fd8be" class="outline-2">
|
||||||
<div class="outline-text-2" id="text-4">
|
<h2 id="org75fd8be"><span class="section-number-2">3</span> Conclusion</h2>
|
||||||
|
<div class="outline-text-2" id="text-3">
|
||||||
|
<div class="important">
|
||||||
|
<p>
|
||||||
|
For such a complex system, we believe that the Simscape Model represents the dynamics of the system with enough fidelity.
|
||||||
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-orgffb60dd" class="outline-3">
|
|
||||||
<h3 id="orgffb60dd"><span class="section-number-3">4.1</span> Plot the obtained transfer functions</h3>
|
|
||||||
</div>
|
|
||||||
<div id="outline-container-org5f9eec6" class="outline-3">
|
|
||||||
<h3 id="org5f9eec6"><span class="section-number-3">4.2</span> Compare with the modal measurements</h3>
|
|
||||||
</div>
|
|
||||||
<div id="outline-container-orga829744" class="outline-3">
|
|
||||||
<h3 id="orga829744"><span class="section-number-3">4.3</span> Modal Identification of the micro station</h3>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="postamble" class="status">
|
<div id="postamble" class="status">
|
||||||
<p class="author">Author: Dehaeze Thomas</p>
|
<p class="author">Author: Dehaeze Thomas</p>
|
||||||
<p class="date">Created: 2019-12-12 jeu. 13:54</p>
|
<p class="date">Created: 2019-12-13 ven. 15:53</p>
|
||||||
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -42,21 +42,15 @@
|
|||||||
:END:
|
:END:
|
||||||
|
|
||||||
* Introduction :ignore:
|
* Introduction :ignore:
|
||||||
The goal here is to make an identification of the *micro-station* in order to compare the model with the measurements on the real micro-station.
|
The goal here is to tune the Simscape model of the station in order to have a good dynamical representation of the real system.
|
||||||
|
|
||||||
In order to do so:
|
In order to do so, we reproduce the Modal Analysis done on the station using the Simscape model.
|
||||||
- Decide where to virtually excite the station and where to measure its motion
|
|
||||||
- Extract transfer functions from the excitation forces to the measured motion
|
|
||||||
- Compare those transfer functions with the modal analysis
|
|
||||||
|
|
||||||
For the excitation, we can choose the same excitation points as the one used for the modal test.
|
We can then compare the measured Frequency Response Functions with the identified dynamics of the model.
|
||||||
For the measurement points, we can choose the Center of Mass of each solid body.
|
|
||||||
The center of mass of each solid body is not easily defined using Simscape.
|
|
||||||
Indeed, we can define the center of mass of any solid body but not of multiple solid bodies. However, one solid body is composed of multiple STEP files.
|
|
||||||
One solution could be to use one STEP file for one solid body.
|
|
||||||
However, the position of the center of mass can be exported using simulink and then defined on Simscape.
|
|
||||||
|
|
||||||
* Identification of the Micro-Station
|
Finally, this should help to tune the parameters of the model such that the dynamics is closer to the measured FRF.
|
||||||
|
|
||||||
|
* Identification of the Micro-Station :noexport:
|
||||||
** Introduction :ignore:
|
** Introduction :ignore:
|
||||||
|
|
||||||
** Matlab Init :noexport:ignore:
|
** Matlab Init :noexport:ignore:
|
||||||
@ -118,13 +112,12 @@ G_ms.OutputName = {'Dmx', 'Dmy', 'Dmz', ...
|
|||||||
save('./mat/id_micro_station.mat', 'G_ms');
|
save('./mat/id_micro_station.mat', 'G_ms');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
** Plots the transfer functions
|
** Plots the transfer functions
|
||||||
|
|
||||||
** Compare with the measurements
|
** Compare with the measurements
|
||||||
|
|
||||||
|
|
||||||
* Modal Analysis of the Micro-Station
|
* Modal Analysis of the Micro-Station :noexport:
|
||||||
** Matlab Init :noexport:ignore:
|
** Matlab Init :noexport:ignore:
|
||||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||||
<<matlab-dir>>
|
<<matlab-dir>>
|
||||||
@ -205,6 +198,21 @@ io(5) = linio([mdl, '/Micro-Station/acc12'],1,'output');
|
|||||||
hold off;
|
hold off;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
* Some notes about the Simscape Model
|
||||||
|
The Simscape Model of the micro-station consists of several solid bodies:
|
||||||
|
- Bottom Granite
|
||||||
|
- Top Granite
|
||||||
|
- Translation Stage
|
||||||
|
- Tilt Stage
|
||||||
|
- Spindle
|
||||||
|
- Hexapod
|
||||||
|
|
||||||
|
Each solid body has some characteristics: Center of Mass, mass, moment of inertia, etc...
|
||||||
|
These parameters are automatically computed from the geometry and from the density of the materials.
|
||||||
|
|
||||||
|
Then, the solid bodies are connected with springs and dampers.
|
||||||
|
Some of the springs and dampers values can be estimated from the joints/stages specifications, however, we here prefer to tune these values based on the measurements.
|
||||||
|
|
||||||
* Compare with measurements at the CoM of each element
|
* Compare with measurements at the CoM of each element
|
||||||
** Introduction :ignore:
|
** Introduction :ignore:
|
||||||
[[file:../../meas/modal-analysis/index.org][here]]
|
[[file:../../meas/modal-analysis/index.org][here]]
|
||||||
@ -247,15 +255,68 @@ We initialize all the stages.
|
|||||||
initializeSample(struct('mass', 50));
|
initializeSample(struct('mass', 50));
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
** Estimate the position of the CoM of each solid and compare with the one took for the Measurement Analysis
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
open('identification/matlab/sim_micro_station_com.slx')
|
open('identification/matlab/sim_micro_station_com.slx')
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Estimate the position of the CoM of each solid
|
Thanks to the [[https://fr.mathworks.com/help/physmod/sm/ref/inertiasensor.html][Inertia Sensor]] simscape block, it is possible to estimate the position of the Center of Mass of a solid body with respect to a defined frame.
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
sim('sim_micro_station_com')
|
sim('sim_micro_station_com')
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
The results are shown in the table [[tab:com_simscape]].
|
||||||
|
|
||||||
|
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||||
|
stages_com = 1e3*[granite_bot_com.Data(end, :) ;
|
||||||
|
granite_top_com.Data(end, :) ;
|
||||||
|
ty_com.Data(end, :) ;
|
||||||
|
ry_com.Data(end, :) ;
|
||||||
|
rz_com.Data(end, :) ;
|
||||||
|
hexa_com.Data(end, :) ]';
|
||||||
|
|
||||||
|
data2orgtable(stages_com, {'X [mm]', 'Y [mm]', 'Z [mm]'}, {'granite bot', 'granite top', 'ty', 'ry', 'rz', 'hexa'}, ' %.1f ');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: tab:com_simscape
|
||||||
|
#+caption: Center of Mass of each solid body as defined in Simscape
|
||||||
|
#+RESULTS:
|
||||||
|
| | granite bot | granite top | ty | ry | rz | hexa |
|
||||||
|
|--------+-------------+-------------+--------+--------+--------+--------|
|
||||||
|
| X [mm] | 52.4 | 51.7 | 0.9 | -0.1 | 0.0 | -0.0 |
|
||||||
|
| Y [mm] | 190.4 | 263.2 | 0.7 | 5.2 | -0.0 | 0.1 |
|
||||||
|
| Z [mm] | -1200.0 | -777.1 | -598.9 | -627.7 | -643.2 | -317.1 |
|
||||||
|
|
||||||
|
We can compare the obtained center of mass (table [[tab:com_simscape]]) with the one used for the Modal Analysis shown in table [[tab:com_solidworks]].
|
||||||
|
|
||||||
|
#+name: tab:com_solidworks
|
||||||
|
#+caption: Estimated Center of Mass of each solid body using Solidworks
|
||||||
|
| | granite bot | granite top | ty | ry | rz | hexa |
|
||||||
|
|--------+-------------+-------------+------+------+------+------|
|
||||||
|
| X [mm] | 45 | 52 | 0 | 0 | 0 | -4 |
|
||||||
|
| Y [mm] | 144 | 258 | 14 | -5 | 0 | 6 |
|
||||||
|
| Z [mm] | -1251 | -778 | -600 | -628 | -580 | -319 |
|
||||||
|
|
||||||
|
The results are quite similar.
|
||||||
|
The differences can be explained by some differences in the chosen density of the materials or by the fact that not exactly all the same elements have been chosen for each stage.
|
||||||
|
|
||||||
|
For instance, on simscape, the fixed part of the translation stage counts for the top granite solid body.
|
||||||
|
However, in SolidWorks, this has probably not be included with the top granite.
|
||||||
|
|
||||||
|
** Create a frame at the CoM of each solid body
|
||||||
|
Now we use one =inertiasensor= block connected on each solid body that measured the center of mass of this solid with respect to the same connected frame.
|
||||||
|
|
||||||
|
We do that in order to position an accelerometer on the Simscape model at this particular point.
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
open('identification/matlab/sim_micro_station_com_estimation.slx')
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
sim('sim_micro_station_com_estimation')
|
||||||
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||||
stages_com = 1e3*[granite_bot_com.Data(end, :) ;
|
stages_com = 1e3*[granite_bot_com.Data(end, :) ;
|
||||||
granite_top_com.Data(end, :) ;
|
granite_top_com.Data(end, :) ;
|
||||||
@ -268,38 +329,39 @@ We initialize all the stages.
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
| | granite bot | granite top | ty | ry | rz | hexa |
|
| | granite bot | granite top | ty | ry | rz | hexa |
|
||||||
|--------+-------------+-------------+--------+--------+--------+--------|
|
|--------+-------------+-------------+-------+--------+-------+-------|
|
||||||
| X [mm] | -52.4 | -51.7 | -0.9 | -0.1 | 0.0 | -0.0 |
|
| X [mm] | 0.0 | 51.7 | 0.9 | -0.1 | 0.0 | -0.0 |
|
||||||
| Y [mm] | -190.4 | -263.2 | -0.7 | 5.2 | -0.0 | 0.1 |
|
| Y [mm] | 0.0 | 753.2 | 0.7 | 5.2 | -0.0 | 0.1 |
|
||||||
| Z [mm] | -1200.0 | -777.1 | -598.9 | -627.7 | -643.2 | -317.1 |
|
| Z [mm] | -250.0 | 22.9 | -17.1 | -146.5 | -23.2 | -47.1 |
|
||||||
|
|
||||||
** Init
|
We now same this for further use:
|
||||||
#+begin_src matlab :results none
|
#+begin_src matlab
|
||||||
initializeGround();
|
granite_bot_com = granite_bot_com.Data(end, :)';
|
||||||
initializeGranite();
|
granite_top_com = granite_top_com.Data(end, :)';
|
||||||
initializeTy();
|
ty_com = ty_com.Data(end, :)';
|
||||||
initializeRy();
|
ry_com = ry_com.Data(end, :)';
|
||||||
initializeRz();
|
rz_com = rz_com.Data(end, :)';
|
||||||
initializeMicroHexapod();
|
hexa_com = hexa_com.Data(end, :)';
|
||||||
initializeAxisc();
|
|
||||||
|
save('mat/solids_com.mat', 'granite_bot_com', 'granite_top_com', 'ty_com', 'ry_com', 'rz_com', 'hexa_com');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** TODO Center of Mass of each solid body
|
Then, we use the obtained results to add a =rigidTransform= block in order to create a new frame at the center of mass of each solid body.
|
||||||
- [ ] Verify that this is coherent with the simscape and with the measurements
|
|
||||||
|
|
||||||
|
** Identification of the dynamics of the Simscape Model
|
||||||
|
We now use a new Simscape Model where 6DoF inertial sensors are located at the Center of Mass of each solid body.
|
||||||
|
|
||||||
| | granite bot | granite top | ty | ry | rz | hexa |
|
#+begin_src matlab
|
||||||
|--------+-------------+-------------+------+------+------+------|
|
load('mat/solids_com.mat', 'granite_bot_com', 'granite_top_com', 'ty_com', 'ry_com', 'rz_com', 'hexa_com');
|
||||||
| X [mm] | 45 | 52 | 0 | 0 | 0 | -4 |
|
#+end_src
|
||||||
| Y [mm] | 144 | 258 | 14 | -5 | 0 | 6 |
|
|
||||||
| Z [mm] | -1251 | -778 | -600 | -628 | -580 | -319 |
|
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
open('identification/matlab/sim_micro_station_modal_analysis_com.slx')
|
open('identification/matlab/sim_micro_station_modal_analysis_com.slx')
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Simscape Model
|
We use the =linearize= 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.
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% Options for Linearized
|
%% Options for Linearized
|
||||||
options = linearizeOptions;
|
options = linearizeOptions;
|
||||||
@ -312,12 +374,12 @@ We initialize all the stages.
|
|||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% Micro-Hexapod
|
%% Micro-Hexapod
|
||||||
% Input/Output definition
|
% Input/Output definition
|
||||||
io(1) = linio([mdl, '/Micro-Station/F_hammer'],1,'openinput');
|
io(1) = linio([mdl, '/F_hammer'],1,'openinput');
|
||||||
io(2) = linio([mdl, '/Micro-Station/acc_gtop'],1,'output');
|
io(2) = linio([mdl, '/acc_gtop'],1,'output');
|
||||||
io(3) = linio([mdl, '/Micro-Station/acc_ty'],1,'output');
|
io(3) = linio([mdl, '/acc_ty'],1,'output');
|
||||||
io(4) = linio([mdl, '/Micro-Station/acc_ry'],1,'output');
|
io(4) = linio([mdl, '/acc_ry'],1,'output');
|
||||||
io(5) = linio([mdl, '/Micro-Station/acc_rz'],1,'output');
|
io(5) = linio([mdl, '/acc_rz'],1,'output');
|
||||||
io(6) = linio([mdl, '/Micro-Station/acc_hexa'],1,'output');
|
io(6) = linio([mdl, '/acc_hexa'],1,'output');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
@ -333,18 +395,28 @@ We initialize all the stages.
|
|||||||
'hexa_x', 'hexa_y', 'hexa_z', 'hexa_rx', 'hexa_ry', 'hexa_rz'};
|
'hexa_x', 'hexa_y', 'hexa_z', 'hexa_rx', 'hexa_ry', 'hexa_rz'};
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
The output of =G_ms= is the acceleration of each solid body.
|
||||||
|
In order to obtain a displacement, we divide the obtained transfer function by $1/s^{2}$;
|
||||||
|
#+begin_src matlab
|
||||||
|
G_ms = G_ms/s^2;
|
||||||
|
#+end_src
|
||||||
|
|
||||||
** Compare with measurements
|
** Compare with measurements
|
||||||
|
We now load the Frequency Response Functions measurements during the Modal Analysis (accessible [[file:../../meas/modal-analysis/index.org][here]]).
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'freqs');
|
load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'freqs');
|
||||||
load('../meas/modal-analysis/mat/frf_com.mat', 'FRFs_CoM');
|
load('../meas/modal-analysis/mat/frf_com.mat', 'FRFs_CoM');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab
|
We then compare the measurements with the identified transfer functions using the Simscape Model.
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
stages = {'gbot', 'gtop', 'ty', 'ry', 'rz', 'hexa'}
|
stages = {'gbot', 'gtop', 'ty', 'ry', 'rz', 'hexa'}
|
||||||
|
|
||||||
n_stg = 2;
|
n_stg = 3;
|
||||||
n_dir = 5; % x, y, z, Rx, Ry, Rz
|
n_dir = 6; % x, y, z, Rx, Ry, Rz
|
||||||
n_exc = 2; % x, y, z
|
n_exc = 2; % x, y, z
|
||||||
|
|
||||||
f = logspace(0, 3, 1000);
|
f = logspace(0, 3, 1000);
|
||||||
@ -359,7 +431,7 @@ We initialize all the stages.
|
|||||||
xlim([1, 200]);
|
xlim([1, 200]);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab :exports none
|
||||||
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
stages = {'gtop', 'ty', 'ry', 'rz', 'hexa'}
|
stages = {'gtop', 'ty', 'ry', 'rz', 'hexa'}
|
||||||
|
|
||||||
@ -395,7 +467,7 @@ We initialize all the stages.
|
|||||||
[[file:figs/identification_comp_bot_stages.png]]
|
[[file:figs/identification_comp_bot_stages.png]]
|
||||||
|
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab :exports none
|
||||||
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
stages = {'ry', 'rz', 'hexa'}
|
stages = {'ry', 'rz', 'hexa'}
|
||||||
|
|
||||||
@ -431,7 +503,7 @@ We initialize all the stages.
|
|||||||
[[file:figs/identification_comp_mid_stages.png]]
|
[[file:figs/identification_comp_mid_stages.png]]
|
||||||
|
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab :exports none
|
||||||
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
stages = {'hexa'}
|
stages = {'hexa'}
|
||||||
|
|
||||||
@ -440,7 +512,7 @@ We initialize all the stages.
|
|||||||
figure;
|
figure;
|
||||||
for n_stg = 1
|
for n_stg = 1
|
||||||
for n_dir = 1:3
|
for n_dir = 1:3
|
||||||
subplot(3, 1, (n_dir-1)*2 + n_stg);
|
subplot(3, 1, (n_dir-1) + n_stg);
|
||||||
title(['F ', dirs{n_dir}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]);
|
title(['F ', dirs{n_dir}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]);
|
||||||
hold on;
|
hold on;
|
||||||
plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg+4) + n_dir, n_dir, :)))./((2*pi*freqs).^2)');
|
plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg+4) + n_dir, n_dir, :)))./((2*pi*freqs).^2)');
|
||||||
@ -466,24 +538,8 @@ We initialize all the stages.
|
|||||||
#+CAPTION: caption ([[./figs/identification_comp_top_stages.png][png]], [[./figs/identification_comp_top_stages.pdf][pdf]])
|
#+CAPTION: caption ([[./figs/identification_comp_top_stages.png][png]], [[./figs/identification_comp_top_stages.pdf][pdf]])
|
||||||
[[file:figs/identification_comp_top_stages.png]]
|
[[file:figs/identification_comp_top_stages.png]]
|
||||||
|
|
||||||
* Other analysis
|
|
||||||
** Matlab Init :noexport:ignore:
|
|
||||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
|
||||||
<<matlab-dir>>
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :exports none :results silent :noweb yes
|
* Conclusion
|
||||||
<<matlab-init>>
|
#+begin_important
|
||||||
#+end_src
|
For such a complex system, we believe that the Simscape Model represents the dynamics of the system with enough fidelity.
|
||||||
|
#+end_important
|
||||||
#+begin_src matlab
|
|
||||||
simulinkproject('../');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
open('identification/matlab/sim_micro_station_id.slx')
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Plot the obtained transfer functions
|
|
||||||
** Compare with the modal measurements
|
|
||||||
** Modal Identification of the micro station
|
|
||||||
|
BIN
identification/matlab/sim_micro_station_com.slx
Normal file
BIN
identification/matlab/sim_micro_station_com.slx
Normal file
Binary file not shown.
BIN
identification/matlab/sim_micro_station_com_estimation.slx
Normal file
BIN
identification/matlab/sim_micro_station_com_estimation.slx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mat/solids_com.mat
Normal file
BIN
mat/solids_com.mat
Normal file
Binary file not shown.
BIN
simscape_subsystems/axisc_weld.slx
Normal file
BIN
simscape_subsystems/axisc_weld.slx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
simscape_subsystems/translation_stage_modal_analysis.slx
Normal file
BIN
simscape_subsystems/translation_stage_modal_analysis.slx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user