Add modal analysis results

This commit is contained in:
Thomas Dehaeze 2021-06-14 18:52:20 +02:00
parent 9535e7eb33
commit 96ed3816cd
8 changed files with 824 additions and 113 deletions

BIN
figs/ModeShapeHF1_crop.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
figs/ModeShapeHF1_crop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

View File

@ -0,0 +1,7 @@
@techreport{marneffe04_stewar_platf_activ_vibrat_isolat,
author = {Marneffe, Bruno and Preumont Andr{\'e}},
institution = {ULB},
keywords = {parallel robot},
title = {A novel design of Stewart Platform for Active Vibration Isolator},
year = {2004},
}

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2021-04-19 lun. 16:33 -->
<!-- 2021-06-14 lun. 18:49 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Vibration Table</title>
<meta name="author" content="Dehaeze Thomas" />
@ -39,42 +39,57 @@
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgd96939c">1. Introduction</a></li>
<li><a href="#org8f2a9d3">2. Experimental Setup</a>
<li><a href="#org1f7479a">1. Introduction</a></li>
<li><a href="#org4cd0cb9">2. Experimental Setup</a>
<ul>
<li><a href="#orgf60715e">2.1. CAD Model</a></li>
<li><a href="#org0740e89">2.2. Instrumentation</a></li>
<li><a href="#orgfae411d">2.3. Suspended table</a></li>
<li><a href="#org56dc68e">2.4. Inertial Sensors</a></li>
<li><a href="#orgc61a6db">2.1. CAD Model</a></li>
<li><a href="#org758f947">2.2. Instrumentation</a></li>
<li><a href="#orga974fbb">2.3. Suspended table</a></li>
<li><a href="#org456ccca">2.4. Inertial Sensors</a></li>
</ul>
</li>
<li><a href="#org7c42c7b">3. Compute the 6DoF solid body motion from several inertial sensors</a>
<li><a href="#org17e6266">3. Compute the 6DoF solid body motion from several inertial sensors</a>
<ul>
<li><a href="#orgb354999">3.1. Define accelerometers positions/orientations</a></li>
<li><a href="#org162ae73">3.2. Transformation matrix from motion of the solid body to accelerometer measurements</a></li>
<li><a href="#orgb865df3">3.3. Compute the transformation matrix from accelerometer measurement to motion of the solid body</a></li>
<li><a href="#org77279e3">3.1. Define accelerometers positions/orientations</a></li>
<li><a href="#orgf99f0e9">3.2. Transformation matrix from motion of the solid body to accelerometer measurements</a></li>
<li><a href="#org0380df9">3.3. Compute the transformation matrix from accelerometer measurement to motion of the solid body</a></li>
</ul>
</li>
<li><a href="#orgfff4a19">4. Simscape Model</a>
<li><a href="#org9f131a6">4. Simscape Model</a>
<ul>
<li><a href="#orgd1b8332">4.1. Simscape Sub-systems</a>
<li><a href="#org1708179">4.1. Simscape Sub-systems</a>
<ul>
<li><a href="#org25263d5">4.1.1. Springs</a></li>
<li><a href="#org8fbfccb">4.1.2. Inertial Shaker (IS20)</a></li>
<li><a href="#org778a701">4.1.3. 3D accelerometer (356B18)</a></li>
<li><a href="#org59a9e6c">4.1.1. Springs</a></li>
<li><a href="#org892238c">4.1.2. Inertial Shaker (IS20)</a></li>
<li><a href="#orgad3867f">4.1.3. 3D accelerometer (356B18)</a></li>
</ul>
</li>
<li><a href="#orgab1e576">4.2. Identification</a>
<li><a href="#orga9c7d6e">4.2. Identification</a>
<ul>
<li><a href="#org356f48c">4.2.1. Number of states</a></li>
<li><a href="#org11eb355">4.2.2. Resonance frequencies and mode shapes</a></li>
<li><a href="#orgecac927">4.2.1. Number of states</a></li>
<li><a href="#orgde2f853">4.2.2. Resonance frequencies and mode shapes</a></li>
</ul>
</li>
<li><a href="#org337cc72">4.3. Verify transformation</a></li>
<li><a href="#org4e5d067">4.3. Verify transformation</a></li>
</ul>
</li>
<li><a href="#org1de5c6f">5. Nano-Hexapod</a>
<ul>
<li><a href="#org61a310d">5.1. Nano-Hexapod</a></li>
<li><a href="#org853c5a3">5.2. Computation of the transmissibility from accelerometer data</a>
<ul>
<li><a href="#org7875585">5.2.1. Jacobian matrices</a></li>
<li><a href="#org1035e82">5.2.2. Using <code>linearize</code> function</a></li>
</ul>
</li>
<li><a href="#orgb5673c5">5.3. Comparison with &ldquo;true&rdquo; transmissibility</a></li>
</ul>
</li>
<li><a href="#org1997df3">6. Identification of the table&rsquo;s dynamics</a>
<ul>
<li><a href="#org0c04ac3">6.1. Mode Shapes</a></li>
</ul>
</li>
<li><a href="#org75a0e2e">5. Nano-Hexapod</a></li>
<li><a href="#orge8fad0c">6. Identification of the table&rsquo;s dynamics</a></li>
</ul>
</div>
</div>
@ -82,33 +97,33 @@
<p>This report is also available as a <a href="./vibration-table.pdf">pdf</a>.</p>
<hr>
<div id="outline-container-orgd96939c" class="outline-2">
<h2 id="orgd96939c"><span class="section-number-2">1</span> Introduction</h2>
<div id="outline-container-org1f7479a" class="outline-2">
<h2 id="org1f7479a"><span class="section-number-2">1</span> Introduction</h2>
<div class="outline-text-2" id="text-1">
<p>
This document is divided as follows:
</p>
<ul class="org-ul">
<li>Section <a href="#org2abcf65">2</a>: the experimental setup and all the instrumentation are described</li>
<li>Section <a href="#orge226c57">3</a>: the mathematics used to compute the 6DoF motion of a solid body from several inertial sensor is derived</li>
<li>Section <a href="#orga8d4a3c">4</a>: a Simscape model of the vibration table is developed</li>
<li>Section <a href="#org21d6634">6</a>: the table dynamics is identified and compared with the Simscape model</li>
<li>Section <a href="#orgecbe1dc">2</a>: the experimental setup and all the instrumentation are described</li>
<li>Section <a href="#org484532e">3</a>: the mathematics used to compute the 6DoF motion of a solid body from several inertial sensor is derived</li>
<li>Section <a href="#orge75ecea">4</a>: a Simscape model of the vibration table is developed</li>
<li>Section <a href="#orgb02308b">6</a>: the table dynamics is identified and compared with the Simscape model</li>
</ul>
</div>
</div>
<div id="outline-container-org8f2a9d3" class="outline-2">
<h2 id="org8f2a9d3"><span class="section-number-2">2</span> Experimental Setup</h2>
<div id="outline-container-org4cd0cb9" class="outline-2">
<h2 id="org4cd0cb9"><span class="section-number-2">2</span> Experimental Setup</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="org2abcf65"></a>
<a id="orgecbe1dc"></a>
</p>
</div>
<div id="outline-container-orgf60715e" class="outline-3">
<h3 id="orgf60715e"><span class="section-number-3">2.1</span> CAD Model</h3>
<div id="outline-container-orgc61a6db" class="outline-3">
<h3 id="orgc61a6db"><span class="section-number-3">2.1</span> CAD Model</h3>
<div class="outline-text-3" id="text-2-1">
<div id="org36d3c3b" class="figure">
<div id="org10e032e" class="figure">
<p><img src="figs/vibration-table-cad-view.png" alt="vibration-table-cad-view.png" />
</p>
<p><span class="figure-number">Figure 1: </span>CAD View of the vibration table</p>
@ -116,10 +131,10 @@ This document is divided as follows:
</div>
</div>
<div id="outline-container-org0740e89" class="outline-3">
<h3 id="org0740e89"><span class="section-number-3">2.2</span> Instrumentation</h3>
<div id="outline-container-org758f947" class="outline-3">
<h3 id="org758f947"><span class="section-number-3">2.2</span> Instrumentation</h3>
<div class="outline-text-3" id="text-2-2">
<div class="note" id="orga53b0fe">
<div class="note" id="org1c41223">
<p>
Here are the documentation of the equipment used for this vibration table:
</p>
@ -137,8 +152,8 @@ Here are the documentation of the equipment used for this vibration table:
</div>
</div>
<div id="outline-container-orgfae411d" class="outline-3">
<h3 id="orgfae411d"><span class="section-number-3">2.3</span> Suspended table</h3>
<div id="outline-container-orga974fbb" class="outline-3">
<h3 id="orga974fbb"><span class="section-number-3">2.3</span> Suspended table</h3>
<div class="outline-text-3" id="text-2-3">
<dl class="org-dl">
<dt>Dimensions</dt><dd>450 mm x 450 mm x 60 mm</dd>
@ -146,16 +161,25 @@ Here are the documentation of the equipment used for this vibration table:
</dl>
<div id="org37d8d17" class="figure">
<div id="orgde06f6e" class="figure">
<p><img src="figs/B4545A_Compliance_inLb-780.png" alt="B4545A_Compliance_inLb-780.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Compliance of the B4545A optical table</p>
</div>
<p>
If we include including the bottom interface plate:
</p>
<ul class="org-ul">
<li>Total mass: 30.7 kg</li>
<li>CoM: 42mm below Center of optical table</li>
<li>Ix = 0.54, Iy = 0.54, Iz = 1.07 (with respect to CoM)</li>
</ul>
</div>
</div>
<div id="outline-container-org56dc68e" class="outline-3">
<h3 id="org56dc68e"><span class="section-number-3">2.4</span> Inertial Sensors</h3>
<div id="outline-container-org456ccca" class="outline-3">
<h3 id="org456ccca"><span class="section-number-3">2.4</span> Inertial Sensors</h3>
<div class="outline-text-3" id="text-2-4">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
@ -182,18 +206,18 @@ Here are the documentation of the equipment used for this vibration table:
</div>
</div>
<div id="outline-container-org7c42c7b" class="outline-2">
<h2 id="org7c42c7b"><span class="section-number-2">3</span> Compute the 6DoF solid body motion from several inertial sensors</h2>
<div id="outline-container-org17e6266" class="outline-2">
<h2 id="org17e6266"><span class="section-number-2">3</span> Compute the 6DoF solid body motion from several inertial sensors</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="orge226c57"></a>
<a id="org484532e"></a>
</p>
<p>
Let&rsquo;s consider a solid body with several accelerometers attached to it (Figure <a href="#org7cea217">3</a>).
Let&rsquo;s consider a solid body with several accelerometers attached to it (Figure <a href="#orgace737a">3</a>).
</p>
<div id="org7cea217" class="figure">
<div id="orgace737a" class="figure">
<p><img src="figs/local_to_global_coordinates.png" alt="local_to_global_coordinates.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Schematic of the measured motions of a solid body</p>
@ -223,7 +247,7 @@ The measurement of the individual vectors is defined as the vector \(\vec{a}\):
\end{equation}
<p>
From the positions and orientations of the acceleremoters (defined in Section <a href="#orgda5223d">3.1</a>), it is quite straightforward to compute the accelerations measured by the sensors from the acceleration/angular acceleration of the solid body (Section <a href="#org01e9572">3.2</a>).
From the positions and orientations of the acceleremoters (defined in Section <a href="#orgf7c4b2e">3.1</a>), it is quite straightforward to compute the accelerations measured by the sensors from the acceleration/angular acceleration of the solid body (Section <a href="#org453cc27">3.2</a>).
From this, we can easily build a transformation matrix \(M\), such that:
</p>
\begin{equation}
@ -231,7 +255,7 @@ From this, we can easily build a transformation matrix \(M\), such that:
\end{equation}
<p>
If the matrix is invertible, we can just take the inverse in order to obtain the transformation matrix giving the 6dof acceleration of the solid body from the accelerometer measurements (Section <a href="#org8cbcf02">3.3</a>):
If the matrix is invertible, we can just take the inverse in order to obtain the transformation matrix giving the 6dof acceleration of the solid body from the accelerometer measurements (Section <a href="#org3444b4c">3.3</a>):
</p>
\begin{equation}
{}^O\vec{x} = M^{-1} \cdot \vec{a}
@ -242,11 +266,11 @@ If it is not invertible, then it means that it is not possible to compute all 6d
The solution is then to change the location/orientation of some of the accelerometers.
</p>
</div>
<div id="outline-container-orgb354999" class="outline-3">
<h3 id="orgb354999"><span class="section-number-3">3.1</span> Define accelerometers positions/orientations</h3>
<div id="outline-container-org77279e3" class="outline-3">
<h3 id="org77279e3"><span class="section-number-3">3.1</span> Define accelerometers positions/orientations</h3>
<div class="outline-text-3" id="text-3-1">
<p>
<a id="orgda5223d"></a>
<a id="orgf7c4b2e"></a>
Let&rsquo;s first define the position and orientation of all measured accelerations with respect to a defined frame \(\{O\}\).
</p>
@ -261,10 +285,10 @@ Let&rsquo;s first define the position and orientation of all measured accelerati
</div>
<p>
There are summarized in Table <a href="#org9069f15">1</a>.
There are summarized in Table <a href="#org9c3b031">1</a>.
</p>
<table id="org9069f15" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org9c3b031" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Positions of the accelerometers fixed to the vibration table with respect to \(\{O\}\)</caption>
<colgroup>
@ -335,15 +359,15 @@ We then define the direction of the measured accelerations (unit vectors):
1, 0, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;]<span class="org-type">'</span>;
0, 1, 0]<span class="org-type">'</span>;
</pre>
</div>
<p>
They are summarized in Table <a href="#org2f05f69">2</a>.
They are summarized in Table <a href="#org3c8b5a9">2</a>.
</p>
<table id="org2f05f69" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org3c8b5a9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Orientations of the accelerometers fixed to the vibration table expressed in \(\{O\}\)</caption>
<colgroup>
@ -407,11 +431,11 @@ They are summarized in Table <a href="#org2f05f69">2</a>.
</div>
</div>
<div id="outline-container-org162ae73" class="outline-3">
<h3 id="org162ae73"><span class="section-number-3">3.2</span> Transformation matrix from motion of the solid body to accelerometer measurements</h3>
<div id="outline-container-orgf99f0e9" class="outline-3">
<h3 id="orgf99f0e9"><span class="section-number-3">3.2</span> Transformation matrix from motion of the solid body to accelerometer measurements</h3>
<div class="outline-text-3" id="text-3-2">
<p>
<a id="org01e9572"></a>
<a id="org453cc27"></a>
</p>
<p>
@ -476,7 +500,7 @@ a_i = \begin{bmatrix}
And finally we can combine the 6 (line) vectors for the 6 accelerometers to write that in a matrix form.
We obtain Eq. \eqref{eq:M_matrix}.
</p>
<div class="important" id="org9083ed5">
<div class="important" id="org6ade55b">
<p>
The transformation from solid body acceleration \({}^O\vec{x}\) from sensor measured acceleration \(\vec{a}\) is:
</p>
@ -511,10 +535,10 @@ Let&rsquo;s define such matrix using matlab:
</div>
<p>
The obtained matrix is shown in Table <a href="#org7dd170d">3</a>.
The obtained matrix is shown in Table <a href="#orgfd824b6">3</a>.
</p>
<table id="org7dd170d" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="orgfd824b6" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 3:</span> Effect of a displacement/rotation on the 6 measurements</caption>
<colgroup>
@ -608,11 +632,11 @@ The obtained matrix is shown in Table <a href="#org7dd170d">3</a>.
</div>
</div>
<div id="outline-container-orgb865df3" class="outline-3">
<h3 id="orgb865df3"><span class="section-number-3">3.3</span> Compute the transformation matrix from accelerometer measurement to motion of the solid body</h3>
<div id="outline-container-org0380df9" class="outline-3">
<h3 id="org0380df9"><span class="section-number-3">3.3</span> Compute the transformation matrix from accelerometer measurement to motion of the solid body</h3>
<div class="outline-text-3" id="text-3-3">
<p>
<a id="org8cbcf02"></a>
<a id="org3444b4c"></a>
</p>
<p>
@ -631,10 +655,10 @@ We therefore need the determinant of \(M\) to be non zero:
</div>
<p>
The obtained inverse of the matrix is shown in Table <a href="#org8a443b4">4</a>.
The obtained inverse of the matrix is shown in Table <a href="#org2d4c081">4</a>.
</p>
<table id="org8a443b4" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org2d4c081" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 4:</span> Compute the displacement/rotation from the 6 measurements</caption>
<colgroup>
@ -729,28 +753,28 @@ The obtained inverse of the matrix is shown in Table <a href="#org8a443b4">4</a>
</div>
</div>
<div id="outline-container-orgfff4a19" class="outline-2">
<h2 id="orgfff4a19"><span class="section-number-2">4</span> Simscape Model</h2>
<div id="outline-container-org9f131a6" class="outline-2">
<h2 id="org9f131a6"><span class="section-number-2">4</span> Simscape Model</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="orga8d4a3c"></a>
<a id="orge75ecea"></a>
</p>
<p>
In this section, the Simscape model of the vibration table is described.
</p>
<div id="org2ecfaca" class="figure">
<div id="org87b5d8c" class="figure">
<p><img src="figs/simscape_vibration_table.png" alt="simscape_vibration_table.png" />
</p>
<p><span class="figure-number">Figure 4: </span>3D representation of the simscape model</p>
</div>
</div>
<div id="outline-container-orgd1b8332" class="outline-3">
<h3 id="orgd1b8332"><span class="section-number-3">4.1</span> Simscape Sub-systems</h3>
<div id="outline-container-org1708179" class="outline-3">
<h3 id="org1708179"><span class="section-number-3">4.1</span> Simscape Sub-systems</h3>
<div class="outline-text-3" id="text-4-1">
<p>
<a id="org39306c3"></a>
<a id="org9d6b970"></a>
</p>
<p>
@ -758,11 +782,11 @@ Parameters for sub-components of the simscape model are defined below.
</p>
</div>
<div id="outline-container-org25263d5" class="outline-4">
<h4 id="org25263d5"><span class="section-number-4">4.1.1</span> Springs</h4>
<div id="outline-container-org59a9e6c" class="outline-4">
<h4 id="org59a9e6c"><span class="section-number-4">4.1.1</span> Springs</h4>
<div class="outline-text-4" id="text-4-1-1">
<p>
<a id="orgee18182"></a>
<a id="orgf9565ea"></a>
</p>
<p>
@ -793,11 +817,11 @@ And we can increase the &ldquo;equilibrium position&rdquo; of the vertical sprin
</div>
</div>
<div id="outline-container-org8fbfccb" class="outline-4">
<h4 id="org8fbfccb"><span class="section-number-4">4.1.2</span> Inertial Shaker (IS20)</h4>
<div id="outline-container-org892238c" class="outline-4">
<h4 id="org892238c"><span class="section-number-4">4.1.2</span> Inertial Shaker (IS20)</h4>
<div class="outline-text-4" id="text-4-1-2">
<p>
<a id="org4592c5e"></a>
<a id="org5063bef"></a>
</p>
<p>
@ -813,7 +837,7 @@ The inertial mass is guided inside the housing and an actuator (coil and magnet)
The &ldquo;reacting&rdquo; force on the support is then used as an excitation.
</p>
<table id="orgec31de6" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="orgfe2f26d" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 5:</span> Summary of the IS20 datasheet</caption>
<colgroup>
@ -851,7 +875,7 @@ The &ldquo;reacting&rdquo; force on the support is then used as an excitation.
</table>
<p>
From the datasheet in Table <a href="#orgec31de6">5</a>, we can estimate the parameters of the physical shaker.
From the datasheet in Table <a href="#orgfe2f26d">5</a>, we can estimate the parameters of the physical shaker.
</p>
<p>
@ -868,11 +892,11 @@ shaker.c = 0.2<span class="org-type">*</span>sqrt(shaker.k<span class="org-type"
</div>
</div>
<div id="outline-container-org778a701" class="outline-4">
<h4 id="org778a701"><span class="section-number-4">4.1.3</span> 3D accelerometer (356B18)</h4>
<div id="outline-container-orgad3867f" class="outline-4">
<h4 id="orgad3867f"><span class="section-number-4">4.1.3</span> 3D accelerometer (356B18)</h4>
<div class="outline-text-4" id="text-4-1-3">
<p>
<a id="orgdc35834"></a>
<a id="org855b19f"></a>
</p>
<p>
@ -887,7 +911,7 @@ An accelerometer consists of 2 solids:
The relative motion between the housing and the inertial mass gives a measurement of the acceleration of the measured body (up to the suspension mode of the inertial mass).
</p>
<table id="org64105ec" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org6e16f1e" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 6:</span> Summary of the 356B18 datasheet</caption>
<colgroup>
@ -991,16 +1015,16 @@ The accelerometer model can be chosen by setting the <code>type</code> property:
</div>
</div>
<div id="outline-container-orgab1e576" class="outline-3">
<h3 id="orgab1e576"><span class="section-number-3">4.2</span> Identification</h3>
<div id="outline-container-orga9c7d6e" class="outline-3">
<h3 id="orga9c7d6e"><span class="section-number-3">4.2</span> Identification</h3>
<div class="outline-text-3" id="text-4-2">
<p>
<a id="org350a100"></a>
<a id="org5980c73"></a>
</p>
</div>
<div id="outline-container-org356f48c" class="outline-4">
<h4 id="org356f48c"><span class="section-number-4">4.2.1</span> Number of states</h4>
<div id="outline-container-orgecac927" class="outline-4">
<h4 id="orgecac927"><span class="section-number-4">4.2.1</span> Number of states</h4>
<div class="outline-text-4" id="text-4-2-1">
<p>
Let&rsquo;s first use perfect 3d accelerometers:
@ -1076,8 +1100,8 @@ This corresponds to 6 states for each triaxial accelerometers.
</div>
</div>
<div id="outline-container-org11eb355" class="outline-4">
<h4 id="org11eb355"><span class="section-number-4">4.2.2</span> Resonance frequencies and mode shapes</h4>
<div id="outline-container-orgde2f853" class="outline-4">
<h4 id="orgde2f853"><span class="section-number-4">4.2.2</span> Resonance frequencies and mode shapes</h4>
<div class="outline-text-4" id="text-4-2-2">
<p>
Let&rsquo;s now identify the resonance frequency and mode shapes associated with the suspension modes of the optical table.
@ -1092,12 +1116,12 @@ mdl = <span class="org-string">'vibration_table'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/F'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/acc_O'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/a1,a2'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io);
G.InputName = {<span class="org-string">'F'</span>};
G.OutputName = {<span class="org-string">'ax'</span>, <span class="org-string">'ay'</span>, <span class="org-string">'az'</span>, <span class="org-string">'wx'</span>, <span class="org-string">'wy'</span>, <span class="org-string">'wz'</span>};
G.OutputName = {<span class="org-string">'ax'</span>};
</pre>
</div>
@ -1124,11 +1148,11 @@ And the associated response of the optical table
</div>
<p>
The results are shown in Table <a href="#org909caf2">7</a>.
The results are shown in Table <a href="#org91fd8a0">7</a>.
The motion associated to the mode shapes are just indicative.
</p>
<table id="org909caf2" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org91fd8a0" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 7:</span> Resonance frequency and approximation of the mode shapes</caption>
<colgroup>
@ -1223,8 +1247,8 @@ The motion associated to the mode shapes are just indicative.
</div>
</div>
<div id="outline-container-org337cc72" class="outline-3">
<h3 id="org337cc72"><span class="section-number-3">4.3</span> Verify transformation</h3>
<div id="outline-container-org4e5d067" class="outline-3">
<h3 id="org4e5d067"><span class="section-number-3">4.3</span> Verify transformation</h3>
<div class="outline-text-3" id="text-4-3">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
@ -1267,18 +1291,18 @@ bodeFig({G_acc(6), G_id(6)})
</div>
</div>
<div id="outline-container-org75a0e2e" class="outline-2">
<h2 id="org75a0e2e"><span class="section-number-2">5</span> Nano-Hexapod</h2>
<div id="outline-container-org1de5c6f" class="outline-2">
<h2 id="org1de5c6f"><span class="section-number-2">5</span> Nano-Hexapod</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="orga1006b8"></a>
<a id="org5dd7cf7"></a>
</p>
<p>
A configuration is added to be able to put the nano-hexapod on top of the vibration table as shown in Figure <a href="#org2ecfaca">4</a>.
A configuration is added to be able to put the nano-hexapod on top of the vibration table as shown in Figure <a href="#org87b5d8c">4</a>.
</p>
<div id="org4d16b70" class="figure">
<div id="orgb06a61f" class="figure">
<p><img src="figs/vibration_table_nano_hexapod_simscape.png" alt="vibration_table_nano_hexapod_simscape.png" />
</p>
<p><span class="figure-number">Figure 5: </span>3D representation of the simscape model with the nano-hexapod</p>
@ -1288,20 +1312,463 @@ A configuration is added to be able to put the nano-hexapod on top of the vibrat
The nano-hexapod&rsquo;s simscape model is taken from another <a href="https://git.tdehaeze.xyz/tdehaeze/nass-simscape">git repository</a>.
</p>
</div>
<div id="outline-container-org61a310d" class="outline-3">
<h3 id="org61a310d"><span class="section-number-3">5.1</span> Nano-Hexapod</h3>
<div class="outline-text-3" id="text-5-1">
<div class="org-src-container">
<pre class="src src-matlab">n_hexapod = initializeNanoHexapodFinal(<span class="org-string">'flex_bot_type'</span>, <span class="org-string">'4dof'</span>, ...
<span class="org-string">'flex_top_type'</span>, <span class="org-string">'3dof'</span>, ...
<span class="org-string">'motion_sensor_type'</span>, <span class="org-string">'struts'</span>, ...
<span class="org-string">'actuator_type'</span>, <span class="org-string">'2dof'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orge8fad0c" class="outline-2">
<h2 id="orge8fad0c"><span class="section-number-2">6</span> Identification of the table&rsquo;s dynamics</h2>
<div class="outline-text-2" id="text-6">
<div id="outline-container-org853c5a3" class="outline-3">
<h3 id="org853c5a3"><span class="section-number-3">5.2</span> Computation of the transmissibility from accelerometer data</h3>
<div class="outline-text-3" id="text-5-2">
<p>
<a id="org21d6634"></a>
The goal is to compute the \(6 \times 6\) transfer function matrix corresponding to the transmissibility of the Nano-Hexapod.
</p>
<p>
To do so, several accelerometers are located both on the vibration table and on the top of the nano-hexapod.
</p>
<p>
The vibration table is then excited using a Shaker and all the accelerometers signals are recorded.
</p>
<p>
Using transformation (jacobian) matrices, it is then possible to compute both the motion of the top and bottom platform of the nano-hexapod.
</p>
<p>
Finally, it is possible to compute the \(6 \times 6\) transmissibility matrix.
</p>
<p>
Such procedure is explained in (<a href="#citeproc_bib_item_1">Marneffe and André 2004</a>).
</p>
</div>
<div id="outline-container-org7875585" class="outline-4">
<h4 id="org7875585"><span class="section-number-4">5.2.1</span> Jacobian matrices</h4>
<div class="outline-text-4" id="text-5-2-1">
<p>
How to compute the Jacobian matrices is explained in Section <a href="#org484532e">3</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Bottom Accelerometers</span></span>
Opb = [<span class="org-type">-</span>0.1875, <span class="org-type">-</span>0.1875, <span class="org-type">-</span>0.245;
<span class="org-type">-</span>0.1875, <span class="org-type">-</span>0.1875, <span class="org-type">-</span>0.245;
0.1875, <span class="org-type">-</span>0.1875, <span class="org-type">-</span>0.245;
0.1875, <span class="org-type">-</span>0.1875, <span class="org-type">-</span>0.245;
0.1875, 0.1875, <span class="org-type">-</span>0.245;
0.1875, 0.1875, <span class="org-type">-</span>0.245]<span class="org-type">'</span>;
Osb = [0, 1, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;]<span class="org-type">'</span>;
Jb = zeros(length(Opb), 6);
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Opb)</span>
Ri = [0, Opb(3,<span class="org-constant">i</span>), <span class="org-type">-</span>Opb(2,<span class="org-constant">i</span>);
<span class="org-type">-</span>Opb(3,<span class="org-constant">i</span>), 0, Opb(1,<span class="org-constant">i</span>);
Opb(2,<span class="org-constant">i</span>), <span class="org-type">-</span>Opb(1,<span class="org-constant">i</span>), 0];
Jb(<span class="org-constant">i</span>, 1<span class="org-type">:</span>3) = Osb(<span class="org-type">:</span>,<span class="org-constant">i</span>)<span class="org-type">'</span>;
Jb(<span class="org-constant">i</span>, 4<span class="org-type">:</span>6) = Osb(<span class="org-type">:</span>,<span class="org-constant">i</span>)<span class="org-type">'*</span>Ri;
<span class="org-keyword">end</span>
Jbinv = inv(Jb);
</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">&#xa0;</th>
<th scope="col" class="org-right">\(a_1\)</th>
<th scope="col" class="org-right">\(a_2\)</th>
<th scope="col" class="org-right">\(a_3\)</th>
<th scope="col" class="org-right">\(a_4\)</th>
<th scope="col" class="org-right">\(a_5\)</th>
<th scope="col" class="org-right">\(a_6\)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(\dot{x}_x\)</td>
<td class="org-right">0.0</td>
<td class="org-right">0.7</td>
<td class="org-right">0.5</td>
<td class="org-right">-0.7</td>
<td class="org-right">0.5</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-left">\(\dot{x}_y\)</td>
<td class="org-right">1.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.5</td>
<td class="org-right">0.7</td>
<td class="org-right">-0.5</td>
<td class="org-right">-0.7</td>
</tr>
<tr>
<td class="org-left">\(\dot{x}_z\)</td>
<td class="org-right">0.0</td>
<td class="org-right">0.5</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.5</td>
</tr>
<tr>
<td class="org-left">\(\dot{\omega}_x\)</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">-2.7</td>
<td class="org-right">0.0</td>
<td class="org-right">2.7</td>
</tr>
<tr>
<td class="org-left">\(\dot{\omega}_y\)</td>
<td class="org-right">0.0</td>
<td class="org-right">2.7</td>
<td class="org-right">0.0</td>
<td class="org-right">-2.7</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-left">\(\dot{\omega}_z\)</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">2.7</td>
<td class="org-right">0.0</td>
<td class="org-right">-2.7</td>
<td class="org-right">0.0</td>
</tr>
</tbody>
</table>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Top Accelerometers</span></span>
Opt = [<span class="org-type">-</span>0.1, 0, <span class="org-type">-</span>0.150;
<span class="org-type">-</span>0.1, 0, <span class="org-type">-</span>0.150;
0.05, 0.075, <span class="org-type">-</span>0.150;
0.05, 0.075, <span class="org-type">-</span>0.150;
0.05, <span class="org-type">-</span>0.075, <span class="org-type">-</span>0.150;
0.05, <span class="org-type">-</span>0.075, <span class="org-type">-</span>0.150]<span class="org-type">'</span>;
Ost = [0, 1, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;]<span class="org-type">'</span>;
Jt = zeros(length(Opt), 6);
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Opt)</span>
Ri = [0, Opt(3,<span class="org-constant">i</span>), <span class="org-type">-</span>Opt(2,<span class="org-constant">i</span>);
<span class="org-type">-</span>Opt(3,<span class="org-constant">i</span>), 0, Opt(1,<span class="org-constant">i</span>);
Opt(2,<span class="org-constant">i</span>), <span class="org-type">-</span>Opt(1,<span class="org-constant">i</span>), 0];
Jt(<span class="org-constant">i</span>, 1<span class="org-type">:</span>3) = Ost(<span class="org-type">:</span>,<span class="org-constant">i</span>)<span class="org-type">'</span>;
Jt(<span class="org-constant">i</span>, 4<span class="org-type">:</span>6) = Ost(<span class="org-type">:</span>,<span class="org-constant">i</span>)<span class="org-type">'*</span>Ri;
<span class="org-keyword">end</span>
Jtinv = inv(Jt);
</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">&#xa0;</th>
<th scope="col" class="org-right">\(b_1\)</th>
<th scope="col" class="org-right">\(b_2\)</th>
<th scope="col" class="org-right">\(b_3\)</th>
<th scope="col" class="org-right">\(b_4\)</th>
<th scope="col" class="org-right">\(b_5\)</th>
<th scope="col" class="org-right">\(b_6\)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(\dot{x}_x\)</td>
<td class="org-right">0.0</td>
<td class="org-right">1.0</td>
<td class="org-right">0.5</td>
<td class="org-right">-0.5</td>
<td class="org-right">0.5</td>
<td class="org-right">-0.5</td>
</tr>
<tr>
<td class="org-left">\(\dot{x}_y\)</td>
<td class="org-right">1.0</td>
<td class="org-right">0.0</td>
<td class="org-right">-0.7</td>
<td class="org-right">-1.0</td>
<td class="org-right">0.7</td>
<td class="org-right">1.0</td>
</tr>
<tr>
<td class="org-left">\(\dot{x}_z\)</td>
<td class="org-right">0.0</td>
<td class="org-right">0.3</td>
<td class="org-right">0.0</td>
<td class="org-right">0.3</td>
<td class="org-right">0.0</td>
<td class="org-right">0.3</td>
</tr>
<tr>
<td class="org-left">\(\dot{\omega}_x\)</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">6.7</td>
<td class="org-right">0.0</td>
<td class="org-right">-6.7</td>
</tr>
<tr>
<td class="org-left">\(\dot{\omega}_y\)</td>
<td class="org-right">0.0</td>
<td class="org-right">6.7</td>
<td class="org-right">0.0</td>
<td class="org-right">-3.3</td>
<td class="org-right">0.0</td>
<td class="org-right">-3.3</td>
</tr>
<tr>
<td class="org-left">\(\dot{\omega}_z\)</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">-6.7</td>
<td class="org-right">0.0</td>
<td class="org-right">6.7</td>
<td class="org-right">0.0</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org1035e82" class="outline-4">
<h4 id="org1035e82"><span class="section-number-4">5.2.2</span> Using <code>linearize</code> function</h4>
<div class="outline-text-4" id="text-5-2-2">
<div class="org-src-container">
<pre class="src src-matlab">acc_3d.type = 2; <span class="org-comment">% 1: inertial mass, 2: perfect</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'vibration_table'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/F_shaker'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/acc'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/acc_top'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io);
G.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>};
G.OutputName = {<span class="org-string">'a1'</span>, <span class="org-string">'a2'</span>, <span class="org-string">'a3'</span>, <span class="org-string">'a4'</span>, <span class="org-string">'a5'</span>, <span class="org-string">'a6'</span>, ...
<span class="org-string">'b1'</span>, <span class="org-string">'b2'</span>, <span class="org-string">'b3'</span>, <span class="org-string">'b4'</span>, <span class="org-string">'b5'</span>, <span class="org-string">'b6'</span>};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Gb = Jbinv<span class="org-type">*</span>G({<span class="org-string">'a1'</span>, <span class="org-string">'a2'</span>, <span class="org-string">'a3'</span>, <span class="org-string">'a4'</span>, <span class="org-string">'a5'</span>, <span class="org-string">'a6'</span>}, <span class="org-type">:</span>);
Gt = Jtinv<span class="org-type">*</span>G({<span class="org-string">'b1'</span>, <span class="org-string">'b2'</span>, <span class="org-string">'b3'</span>, <span class="org-string">'b4'</span>, <span class="org-string">'b5'</span>, <span class="org-string">'b6'</span>}, <span class="org-type">:</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">T = inv(Gb)<span class="org-type">*</span>Gt;
T = minreal(T);
T = prescale(T, {2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>0.1, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>1e3});
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgb5673c5" class="outline-3">
<h3 id="orgb5673c5"><span class="section-number-3">5.3</span> Comparison with &ldquo;true&rdquo; transmissibility</h3>
<div class="outline-text-3" id="text-5-3">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'test_transmissibility'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/d'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/acc'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io);
G.InputName = {<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>};
G.OutputName = {<span class="org-string">'Ax'</span>, <span class="org-string">'Ay'</span>, <span class="org-string">'Az'</span>, <span class="org-string">'Bx'</span>, <span class="org-string">'By'</span>, <span class="org-string">'Bz'</span>};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Tp = G<span class="org-type">/</span>s<span class="org-type">^</span>2;
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org1997df3" class="outline-2">
<h2 id="org1997df3"><span class="section-number-2">6</span> Identification of the table&rsquo;s dynamics</h2>
<div class="outline-text-2" id="text-6">
<p>
<a id="orgb02308b"></a>
</p>
</div>
<div id="outline-container-org0c04ac3" class="outline-3">
<h3 id="org0c04ac3"><span class="section-number-3">6.1</span> Mode Shapes</h3>
<div class="outline-text-3" id="text-6-1">
<table id="orgd6b24a5" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 8:</span> List of the identified modes</caption>
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">&#xa0;</th>
<th scope="col" class="org-right">Freq. [Hz]</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">1</td>
<td class="org-right">1.3</td>
<td class="org-left">X-translation</td>
</tr>
<tr>
<td class="org-right">2</td>
<td class="org-right">1.3</td>
<td class="org-left">Y-translation</td>
</tr>
<tr>
<td class="org-right">3</td>
<td class="org-right">1.95</td>
<td class="org-left">Z-rotation</td>
</tr>
<tr>
<td class="org-right">4</td>
<td class="org-right">6.85</td>
<td class="org-left">Z-translation</td>
</tr>
<tr>
<td class="org-right">5</td>
<td class="org-right">8.9</td>
<td class="org-left">Tilt</td>
</tr>
<tr>
<td class="org-right">6</td>
<td class="org-right">8.9</td>
<td class="org-left">Tilt</td>
</tr>
<tr>
<td class="org-right">7</td>
<td class="org-right">700</td>
<td class="org-left">Flexible Mode</td>
</tr>
</tbody>
</table>
<div id="org79e2598" class="figure">
<p><img src="figs/mode_shapes_rigid_table.gif" alt="mode_shapes_rigid_table.gif" />
</p>
<p><span class="figure-number">Figure 6: </span>Mode shapes of the 6 suspension modes (from 1Hz to 9Hz)</p>
</div>
<div id="orgc93358f" class="figure">
<p><img src="figs/ModeShapeHF1_crop.gif" alt="ModeShapeHF1_crop.gif" />
</p>
<p><span class="figure-number">Figure 7: </span>First flexible mode of the table at 700Hz</p>
</div>
</div>
</div>
</div>
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><h2 class='citeproc-org-bib-h2'>Bibliography</h2>
<div class="csl-bib-body">
<div class="csl-entry"><a name="citeproc_bib_item_1"></a>Marneffe, Bruno, and Preumont André. 2004. “A Novel Design of Stewart Platform for Active Vibration Isolator.” ULB.</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2021-04-19 lun. 16:33</p>
<p class="date">Created: 2021-06-14 lun. 18:49</p>
</div>
</body>
</html>

View File

@ -90,6 +90,11 @@ Here are the documentation of the equipment used for this vibration table:
#+attr_latex: :width 0.8\linewidth
[[file:figs/B4545A_Compliance_inLb-780.png]]
If we include including the bottom interface plate:
- Total mass: 30.7 kg
- CoM: 42mm below Center of optical table
- Ix = 0.54, Iy = 0.54, Iz = 1.07 (with respect to CoM)
** Inertial Sensors
| Equipment |
@ -232,7 +237,7 @@ Osm = [0, 1, 0;
1, 0, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;]';
0, 1, 0]';
#+end_src
They are summarized in Table [[tab:accelerometers_table_orientations]].
@ -633,12 +638,12 @@ mdl = 'vibration_table';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/acc_O'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/a1,a2'], 1, 'openoutput'); io_i = io_i + 1;
%% Run the linearization
G = linearize(mdl, io);
G.InputName = {'F'};
G.OutputName = {'ax', 'ay', 'az', 'wx', 'wy', 'wz'};
G.OutputName = {'ax'};
#+end_src
Compute the resonance frequencies
@ -761,6 +766,212 @@ addpath('nass-simscape/mat/')
open('vibration_table')
#+end_src
** Nano-Hexapod
#+begin_src matlab
n_hexapod = initializeNanoHexapodFinal('flex_bot_type', '4dof', ...
'flex_top_type', '3dof', ...
'motion_sensor_type', 'struts', ...
'actuator_type', '2dof');
#+end_src
** Computation of the transmissibility from accelerometer data
*** Introduction :ignore:
The goal is to compute the $6 \times 6$ transfer function matrix corresponding to the transmissibility of the Nano-Hexapod.
To do so, several accelerometers are located both on the vibration table and on the top of the nano-hexapod.
The vibration table is then excited using a Shaker and all the accelerometers signals are recorded.
Using transformation (jacobian) matrices, it is then possible to compute both the motion of the top and bottom platform of the nano-hexapod.
Finally, it is possible to compute the $6 \times 6$ transmissibility matrix.
Such procedure is explained in cite:marneffe04_stewar_platf_activ_vibrat_isolat.
*** Jacobian matrices
How to compute the Jacobian matrices is explained in Section [[sec:meas_transformation]].
#+begin_src matlab
%% Bottom Accelerometers
Opb = [-0.1875, -0.1875, -0.245;
-0.1875, -0.1875, -0.245;
0.1875, -0.1875, -0.245;
0.1875, -0.1875, -0.245;
0.1875, 0.1875, -0.245;
0.1875, 0.1875, -0.245]';
Osb = [0, 1, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;]';
Jb = zeros(length(Opb), 6);
for i = 1:length(Opb)
Ri = [0, Opb(3,i), -Opb(2,i);
-Opb(3,i), 0, Opb(1,i);
Opb(2,i), -Opb(1,i), 0];
Jb(i, 1:3) = Osb(:,i)';
Jb(i, 4:6) = Osb(:,i)'*Ri;
end
Jbinv = inv(Jb);
#+end_src
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable(Jbinv, {'$\dot{x}_x$', '$\dot{x}_y$', '$\dot{x}_z$', '$\dot{\omega}_x$', '$\dot{\omega}_y$', '$\dot{\omega}_z$'}, {'$a_1$', '$a_2$', '$a_3$', '$a_4$', '$a_5$', '$a_6$'}, ' %.1f ');
#+end_src
#+RESULTS:
| | $a_1$ | $a_2$ | $a_3$ | $a_4$ | $a_5$ | $a_6$ |
|------------------+-------+-------+-------+-------+-------+-------|
| $\dot{x}_x$ | 0.0 | 0.7 | 0.5 | -0.7 | 0.5 | 0.0 |
| $\dot{x}_y$ | 1.0 | 0.0 | 0.5 | 0.7 | -0.5 | -0.7 |
| $\dot{x}_z$ | 0.0 | 0.5 | 0.0 | 0.0 | 0.0 | 0.5 |
| $\dot{\omega}_x$ | 0.0 | 0.0 | 0.0 | -2.7 | 0.0 | 2.7 |
| $\dot{\omega}_y$ | 0.0 | 2.7 | 0.0 | -2.7 | 0.0 | 0.0 |
| $\dot{\omega}_z$ | 0.0 | 0.0 | 2.7 | 0.0 | -2.7 | 0.0 |
#+begin_src matlab
%% Top Accelerometers
Opt = [-0.1, 0, -0.150;
-0.1, 0, -0.150;
0.05, 0.075, -0.150;
0.05, 0.075, -0.150;
0.05, -0.075, -0.150;
0.05, -0.075, -0.150]';
Ost = [0, 1, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;
1, 0, 0;
0, 0, 1;]';
Jt = zeros(length(Opt), 6);
for i = 1:length(Opt)
Ri = [0, Opt(3,i), -Opt(2,i);
-Opt(3,i), 0, Opt(1,i);
Opt(2,i), -Opt(1,i), 0];
Jt(i, 1:3) = Ost(:,i)';
Jt(i, 4:6) = Ost(:,i)'*Ri;
end
Jtinv = inv(Jt);
#+end_src
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable(Jtinv, {'$\dot{x}_x$', '$\dot{x}_y$', '$\dot{x}_z$', '$\dot{\omega}_x$', '$\dot{\omega}_y$', '$\dot{\omega}_z$'}, {'$b_1$', '$b_2$', '$b_3$', '$b_4$', '$b_5$', '$b_6$'}, ' %.1f ');
#+end_src
#+RESULTS:
| | $b_1$ | $b_2$ | $b_3$ | $b_4$ | $b_5$ | $b_6$ |
|------------------+-------+-------+-------+-------+-------+-------|
| $\dot{x}_x$ | 0.0 | 1.0 | 0.5 | -0.5 | 0.5 | -0.5 |
| $\dot{x}_y$ | 1.0 | 0.0 | -0.7 | -1.0 | 0.7 | 1.0 |
| $\dot{x}_z$ | 0.0 | 0.3 | 0.0 | 0.3 | 0.0 | 0.3 |
| $\dot{\omega}_x$ | 0.0 | 0.0 | 0.0 | 6.7 | 0.0 | -6.7 |
| $\dot{\omega}_y$ | 0.0 | 6.7 | 0.0 | -3.3 | 0.0 | -3.3 |
| $\dot{\omega}_z$ | 0.0 | 0.0 | -6.7 | 0.0 | 6.7 | 0.0 |
*** Using =linearize= function
#+begin_src matlab
acc_3d.type = 2; % 1: inertial mass, 2: perfect
%% Name of the Simulink File
mdl = 'vibration_table';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/F_shaker'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/acc'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/acc_top'], 1, 'openoutput'); io_i = io_i + 1;
%% Run the linearization
G = linearize(mdl, io);
G.InputName = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
G.OutputName = {'a1', 'a2', 'a3', 'a4', 'a5', 'a6', ...
'b1', 'b2', 'b3', 'b4', 'b5', 'b6'};
#+end_src
#+begin_src matlab
Gb = Jbinv*G({'a1', 'a2', 'a3', 'a4', 'a5', 'a6'}, :);
Gt = Jtinv*G({'b1', 'b2', 'b3', 'b4', 'b5', 'b6'}, :);
#+end_src
#+begin_src matlab
T = inv(Gb)*Gt;
T = minreal(T);
T = prescale(T, {2*pi*0.1, 2*pi*1e3});
#+end_src
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(T(i, i), freqs, 'Hz'))));
end
for i = 1:5
for j = i+1:6
plot(freqs, abs(squeeze(freqresp(T(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Transmissibility');
ylim([1e-4, 1e2]);
xlim([freqs(1), freqs(end)]);
#+end_src
** Comparison with "true" transmissibility
#+begin_src matlab
%% Name of the Simulink File
mdl = 'test_transmissibility';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/d'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/acc'], 1, 'openoutput'); io_i = io_i + 1;
%% Run the linearization
G = linearize(mdl, io);
G.InputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'};
G.OutputName = {'Ax', 'Ay', 'Az', 'Bx', 'By', 'Bz'};
#+end_src
#+begin_src matlab
Tp = G/s^2;
#+end_src
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(Tp(i, i), freqs, 'Hz'))));
end
for i = 1:5
for j = i+1:6
plot(freqs, abs(squeeze(freqresp(Tp(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Transmissibility');
ylim([1e-4, 1e2]);
xlim([freqs(1), freqs(end)]);
#+end_src
* Identification of the table's dynamics
<<sec:table_dynamics>>
** Matlab Init :noexport:ignore:
@ -776,5 +987,31 @@ open('vibration_table')
addpath('matlab/')
#+end_src
** Mode Shapes
#+name: tab:list_modes
#+caption: List of the identified modes
#+attr_latex: :environment tabularx :width 0.5\linewidth :align ccX
#+attr_latex: :center t :booktabs t :float t
| | Freq. [Hz] | Description |
|---+------------+---------------|
| 1 | 1.3 | X-translation |
| 2 | 1.3 | Y-translation |
| 3 | 1.95 | Z-rotation |
| 4 | 6.85 | Z-translation |
| 5 | 8.9 | Tilt |
| 6 | 8.9 | Tilt |
| 7 | 700 | Flexible Mode |
#+name: fig:mode_shapes_rigid_table
#+caption: Mode shapes of the 6 suspension modes (from 1Hz to 9Hz)
#+attr_latex: :width \linewidth
[[file:figs/mode_shapes_rigid_table.gif]]
#+name: fig:ModeShapeHF1_crop
#+caption: First flexible mode of the table at 700Hz
#+attr_latex: :width 0.3\linewidth
[[file:figs/ModeShapeHF1_crop.gif]]
* Bibliography :ignore:
#+latex: \printbibliography

Binary file not shown.