diff --git a/figs/ModeShapeHF1_crop.gif b/figs/ModeShapeHF1_crop.gif new file mode 100644 index 0000000..0e521b4 Binary files /dev/null and b/figs/ModeShapeHF1_crop.gif differ diff --git a/figs/ModeShapeHF1_crop.png b/figs/ModeShapeHF1_crop.png new file mode 100644 index 0000000..7970dd0 Binary files /dev/null and b/figs/ModeShapeHF1_crop.png differ diff --git a/figs/mode_shapes_rigid_table.gif b/figs/mode_shapes_rigid_table.gif new file mode 100644 index 0000000..21c6a61 Binary files /dev/null and b/figs/mode_shapes_rigid_table.gif differ diff --git a/figs/mode_shapes_rigid_table.png b/figs/mode_shapes_rigid_table.png new file mode 100644 index 0000000..0fe806f Binary files /dev/null and b/figs/mode_shapes_rigid_table.png differ diff --git a/ref.bib b/ref.bib index e69de29..f28c4a0 100644 --- a/ref.bib +++ b/ref.bib @@ -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}, +} diff --git a/vibration-table.html b/vibration-table.html index c6210f7..a5a0580 100644 --- a/vibration-table.html +++ b/vibration-table.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Vibration Table @@ -39,42 +39,57 @@

Table of Contents

@@ -82,33 +97,33 @@

This report is also available as a pdf.


-
-

1 Introduction

+
+

1 Introduction

This document is divided as follows:

    -
  • Section 2: the experimental setup and all the instrumentation are described
  • -
  • Section 3: the mathematics used to compute the 6DoF motion of a solid body from several inertial sensor is derived
  • -
  • Section 4: a Simscape model of the vibration table is developed
  • -
  • Section 6: the table dynamics is identified and compared with the Simscape model
  • +
  • Section 2: the experimental setup and all the instrumentation are described
  • +
  • Section 3: the mathematics used to compute the 6DoF motion of a solid body from several inertial sensor is derived
  • +
  • Section 4: a Simscape model of the vibration table is developed
  • +
  • Section 6: the table dynamics is identified and compared with the Simscape model
-
-

2 Experimental Setup

+
+

2 Experimental Setup

- +

-
-

2.1 CAD Model

+
+

2.1 CAD Model

-
+

vibration-table-cad-view.png

Figure 1: CAD View of the vibration table

@@ -116,10 +131,10 @@ This document is divided as follows:
-
-

2.2 Instrumentation

+
+

2.2 Instrumentation

-
+

Here are the documentation of the equipment used for this vibration table:

@@ -137,8 +152,8 @@ Here are the documentation of the equipment used for this vibration table:
-
-

2.3 Suspended table

+
+

2.3 Suspended table

Dimensions
450 mm x 450 mm x 60 mm
@@ -146,16 +161,25 @@ Here are the documentation of the equipment used for this vibration table:
-
+

B4545A_Compliance_inLb-780.png

Figure 2: Compliance of the B4545A optical table

+ +

+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)
  • +
-
-

2.4 Inertial Sensors

+
+

2.4 Inertial Sensors

@@ -182,18 +206,18 @@ Here are the documentation of the equipment used for this vibration table: -
-

3 Compute the 6DoF solid body motion from several inertial sensors

+
+

3 Compute the 6DoF solid body motion from several inertial sensors

- +

-Let’s consider a solid body with several accelerometers attached to it (Figure 3). +Let’s consider a solid body with several accelerometers attached to it (Figure 3).

-
+

local_to_global_coordinates.png

Figure 3: Schematic of the measured motions of a solid body

@@ -223,7 +247,7 @@ The measurement of the individual vectors is defined as the vector \(\vec{a}\): \end{equation}

-From the positions and orientations of the acceleremoters (defined in Section 3.1), it is quite straightforward to compute the accelerations measured by the sensors from the acceleration/angular acceleration of the solid body (Section 3.2). +From the positions and orientations of the acceleremoters (defined in Section 3.1), it is quite straightforward to compute the accelerations measured by the sensors from the acceleration/angular acceleration of the solid body (Section 3.2). From this, we can easily build a transformation matrix \(M\), such that:

\begin{equation} @@ -231,7 +255,7 @@ From this, we can easily build a transformation matrix \(M\), such that: \end{equation}

-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 3.3): +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 3.3):

\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.

-
-

3.1 Define accelerometers positions/orientations

+
+

3.1 Define accelerometers positions/orientations

- + Let’s first define the position and orientation of all measured accelerations with respect to a defined frame \(\{O\}\).

@@ -261,10 +285,10 @@ Let’s first define the position and orientation of all measured accelerati

-There are summarized in Table 1. +There are summarized in Table 1.

-
+
@@ -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;]'; + 0, 1, 0]';

-They are summarized in Table 2. +They are summarized in Table 2.

-
Table 1: Positions of the accelerometers fixed to the vibration table with respect to \(\{O\}\)
+
@@ -407,11 +431,11 @@ They are summarized in Table 2. -
-

3.2 Transformation matrix from motion of the solid body to accelerometer measurements

+
+

3.2 Transformation matrix from motion of the solid body to accelerometer measurements

- +

@@ -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}.

-
+

The transformation from solid body acceleration \({}^O\vec{x}\) from sensor measured acceleration \(\vec{a}\) is:

@@ -511,10 +535,10 @@ Let’s define such matrix using matlab:

-The obtained matrix is shown in Table 3. +The obtained matrix is shown in Table 3.

-
Table 2: Orientations of the accelerometers fixed to the vibration table expressed in \(\{O\}\)
+
@@ -608,11 +632,11 @@ The obtained matrix is shown in Table 3. -
-

3.3 Compute the transformation matrix from accelerometer measurement to motion of the solid body

+
+

3.3 Compute the transformation matrix from accelerometer measurement to motion of the solid body

- +

@@ -631,10 +655,10 @@ We therefore need the determinant of \(M\) to be non zero:

-The obtained inverse of the matrix is shown in Table 4. +The obtained inverse of the matrix is shown in Table 4.

-
Table 3: Effect of a displacement/rotation on the 6 measurements
+
@@ -729,28 +753,28 @@ The obtained inverse of the matrix is shown in Table 4 -
-

4 Simscape Model

+
+

4 Simscape Model

- +

In this section, the Simscape model of the vibration table is described.

-
+

simscape_vibration_table.png

Figure 4: 3D representation of the simscape model

-
-

4.1 Simscape Sub-systems

+
+

4.1 Simscape Sub-systems

- +

@@ -758,11 +782,11 @@ Parameters for sub-components of the simscape model are defined below.

-
-

4.1.1 Springs

+
+

4.1.1 Springs

- +

@@ -793,11 +817,11 @@ And we can increase the “equilibrium position” of the vertical sprin

-
-

4.1.2 Inertial Shaker (IS20)

+
+

4.1.2 Inertial Shaker (IS20)

- +

@@ -813,7 +837,7 @@ The inertial mass is guided inside the housing and an actuator (coil and magnet) The “reacting” force on the support is then used as an excitation.

-
Table 4: Compute the displacement/rotation from the 6 measurements
+
@@ -851,7 +875,7 @@ The “reacting” force on the support is then used as an excitation.
Table 5: Summary of the IS20 datasheet

-From the datasheet in Table 5, we can estimate the parameters of the physical shaker. +From the datasheet in Table 5, we can estimate the parameters of the physical shaker.

@@ -868,11 +892,11 @@ shaker.c = 0.2*sqrt(shaker.k

-
-

4.1.3 3D accelerometer (356B18)

+
+

4.1.3 3D accelerometer (356B18)

- +

@@ -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).

- +
@@ -991,16 +1015,16 @@ The accelerometer model can be chosen by setting the type property: -
-

4.2 Identification

+
+

4.2 Identification

- +

-
-

4.2.1 Number of states

+
+

4.2.1 Number of states

Let’s first use perfect 3d accelerometers: @@ -1076,8 +1100,8 @@ This corresponds to 6 states for each triaxial accelerometers.

-
-

4.2.2 Resonance frequencies and mode shapes

+
+

4.2.2 Resonance frequencies and mode shapes

Let’s now identify the resonance frequency and mode shapes associated with the suspension modes of the optical table. @@ -1092,12 +1116,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'};

@@ -1124,11 +1148,11 @@ And the associated response of the optical table

-The results are shown in Table 7. +The results are shown in Table 7. The motion associated to the mode shapes are just indicative.

-
Table 6: Summary of the 356B18 datasheet
+
@@ -1223,8 +1247,8 @@ The motion associated to the mode shapes are just indicative. -
-

4.3 Verify transformation

+
+

4.3 Verify transformation

%% Options for Linearized
@@ -1267,18 +1291,18 @@ bodeFig({G_acc(6), G_id(6)})
 
-
-

5 Nano-Hexapod

+
+

5 Nano-Hexapod

- +

-A configuration is added to be able to put the nano-hexapod on top of the vibration table as shown in Figure 4. +A configuration is added to be able to put the nano-hexapod on top of the vibration table as shown in Figure 4.

-
+

vibration_table_nano_hexapod_simscape.png

Figure 5: 3D representation of the simscape model with the nano-hexapod

@@ -1288,20 +1312,463 @@ A configuration is added to be able to put the nano-hexapod on top of the vibrat The nano-hexapod’s simscape model is taken from another git repository.

+
+

5.1 Nano-Hexapod

+
+
+
n_hexapod = initializeNanoHexapodFinal('flex_bot_type', '4dof', ...
+                                       'flex_top_type', '3dof', ...
+                                       'motion_sensor_type', 'struts', ...
+                                       'actuator_type', '2dof');
+
+
+
-
-

6 Identification of the table’s dynamics

-
+
+

5.2 Computation of the transmissibility from accelerometer data

+

- +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 (Marneffe and André 2004).

+ +
+

5.2.1 Jacobian matrices

+
+

+How to compute the Jacobian matrices is explained in Section 3. +

+ +
+
%% 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);
+
+
+ +
Table 7: Resonance frequency and approximation of the mode shapes
+ + +++ ++ ++ ++ ++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 \(a_1\)\(a_2\)\(a_3\)\(a_4\)\(a_5\)\(a_6\)
\(\dot{x}_x\)0.00.70.5-0.70.50.0
\(\dot{x}_y\)1.00.00.50.7-0.5-0.7
\(\dot{x}_z\)0.00.50.00.00.00.5
\(\dot{\omega}_x\)0.00.00.0-2.70.02.7
\(\dot{\omega}_y\)0.02.70.0-2.70.00.0
\(\dot{\omega}_z\)0.00.02.70.0-2.70.0
+ +
+
%% 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);
+
+
+ + + + +++ ++ ++ ++ ++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 \(b_1\)\(b_2\)\(b_3\)\(b_4\)\(b_5\)\(b_6\)
\(\dot{x}_x\)0.01.00.5-0.50.5-0.5
\(\dot{x}_y\)1.00.0-0.7-1.00.71.0
\(\dot{x}_z\)0.00.30.00.30.00.3
\(\dot{\omega}_x\)0.00.00.06.70.0-6.7
\(\dot{\omega}_y\)0.06.70.0-3.30.0-3.3
\(\dot{\omega}_z\)0.00.0-6.70.06.70.0
+
+
+ +
+

5.2.2 Using linearize function

+
+
+
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'};
+
+
+ +
+
Gb = Jbinv*G({'a1', 'a2', 'a3', 'a4', 'a5', 'a6'}, :);
+Gt = Jtinv*G({'b1', 'b2', 'b3', 'b4', 'b5', 'b6'}, :);
+
+
+ +
+
T = inv(Gb)*Gt;
+T = minreal(T);
+T = prescale(T, {2*pi*0.1, 2*pi*1e3});
+
+
+
+
+
+ +
+

5.3 Comparison with “true” transmissibility

+
+
+
%% 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'};
+
+
+ +
+
Tp = G/s^2;
+
+
+
+
+
+ +
+

6 Identification of the table’s dynamics

+
+

+ +

+
+
+

6.1 Mode Shapes

+
+ + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8: List of the identified modes
 Freq. [Hz]Description
11.3X-translation
21.3Y-translation
31.95Z-rotation
46.85Z-translation
58.9Tilt
68.9Tilt
7700Flexible Mode
+ + +
+

mode_shapes_rigid_table.gif +

+

Figure 6: Mode shapes of the 6 suspension modes (from 1Hz to 9Hz)

+
+ + +
+

ModeShapeHF1_crop.gif +

+

Figure 7: First flexible mode of the table at 700Hz

+
+
+
+
+ +

Bibliography

+
+
Marneffe, Bruno, and Preumont André. 2004. “A Novel Design of Stewart Platform for Active Vibration Isolator.” ULB.

Author: Dehaeze Thomas

-

Created: 2021-04-19 lun. 16:33

+

Created: 2021-06-14 lun. 18:49

diff --git a/vibration-table.org b/vibration-table.org index f6a3e07..1981bcb 100644 --- a/vibration-table.org +++ b/vibration-table.org @@ -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 <> ** 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 diff --git a/vibration-table.pdf b/vibration-table.pdf index b107f9b..3f2632b 100644 Binary files a/vibration-table.pdf and b/vibration-table.pdf differ