diff --git a/micro-station-compliance/data/Measurement1.mat b/micro-station-compliance/data/Measurement1.mat new file mode 100755 index 0000000..d2d18cb Binary files /dev/null and b/micro-station-compliance/data/Measurement1.mat differ diff --git a/micro-station-compliance/data/Measurement10.mat b/micro-station-compliance/data/Measurement10.mat new file mode 100755 index 0000000..9a45c8b Binary files /dev/null and b/micro-station-compliance/data/Measurement10.mat differ diff --git a/micro-station-compliance/data/Measurement2.mat b/micro-station-compliance/data/Measurement2.mat new file mode 100755 index 0000000..62ea0a2 Binary files /dev/null and b/micro-station-compliance/data/Measurement2.mat differ diff --git a/micro-station-compliance/data/Measurement3.mat b/micro-station-compliance/data/Measurement3.mat new file mode 100755 index 0000000..11d2c02 Binary files /dev/null and b/micro-station-compliance/data/Measurement3.mat differ diff --git a/micro-station-compliance/data/Measurement4.mat b/micro-station-compliance/data/Measurement4.mat new file mode 100755 index 0000000..2135c21 Binary files /dev/null and b/micro-station-compliance/data/Measurement4.mat differ diff --git a/micro-station-compliance/data/Measurement5.mat b/micro-station-compliance/data/Measurement5.mat new file mode 100755 index 0000000..573da7e Binary files /dev/null and b/micro-station-compliance/data/Measurement5.mat differ diff --git a/micro-station-compliance/data/Measurement6.mat b/micro-station-compliance/data/Measurement6.mat new file mode 100755 index 0000000..3bbe95d Binary files /dev/null and b/micro-station-compliance/data/Measurement6.mat differ diff --git a/micro-station-compliance/data/Measurement7.mat b/micro-station-compliance/data/Measurement7.mat new file mode 100755 index 0000000..11f1bb3 Binary files /dev/null and b/micro-station-compliance/data/Measurement7.mat differ diff --git a/micro-station-compliance/data/Measurement8.mat b/micro-station-compliance/data/Measurement8.mat new file mode 100755 index 0000000..27b5caa Binary files /dev/null and b/micro-station-compliance/data/Measurement8.mat differ diff --git a/micro-station-compliance/data/Measurement9.mat b/micro-station-compliance/data/Measurement9.mat new file mode 100755 index 0000000..33f0f10 Binary files /dev/null and b/micro-station-compliance/data/Measurement9.mat differ diff --git a/micro-station-compliance/data/id31_nass_11august2020.m b/micro-station-compliance/data/id31_nass_11august2020.m new file mode 100755 index 0000000..b14c856 --- /dev/null +++ b/micro-station-compliance/data/id31_nass_11august2020.m @@ -0,0 +1,49 @@ +ID31 NASS - 11/08/2020 + +ch1 to 3: acc 3D 1v/g +ch4 to 6: acc 3D 1v/g +ch7 to 9: acc 3D 100m/g +ch10 to 12: acc 3D 1v/g +Ch13: hammer 230uV/N + + + +%% 12/08/2020 +% change hammer tip to red +% Bandwidth changed to 400Hz + +excitation capteur 1 Y +Meas1 + +excitation capteur 1 -Z +Meas2 + +excitation capteur 2 X +Meas3 + +excitation capteur 2 -Z +Meas4 + +excitation capteur 3 -Y +Meas5 + + +excitation capteur 3 -Z +Meas6 + +excitation capteur 4 -X +Meas7 + +excitation capteur 4 -Z +Meas8 + +excitation capteur 3 -X on black block RZ +Meas9 + +excitation capteur 1 -X on black block RZ +Meas10 + +% --------------------------- +%% vibrometre on TY 0.2mm/s/V +excitation -Y +Meas2 diff --git a/micro-station-compliance/data/id31_nass_ty_12august2020/Measurement2.mat b/micro-station-compliance/data/id31_nass_ty_12august2020/Measurement2.mat new file mode 100755 index 0000000..7b99090 Binary files /dev/null and b/micro-station-compliance/data/id31_nass_ty_12august2020/Measurement2.mat differ diff --git a/micro-station-compliance/data/id31_nass_ty_12august2020/record/Measurement2.mat b/micro-station-compliance/data/id31_nass_ty_12august2020/record/Measurement2.mat new file mode 100755 index 0000000..18b6136 Binary files /dev/null and b/micro-station-compliance/data/id31_nass_ty_12august2020/record/Measurement2.mat differ diff --git a/micro-station-compliance/data/record/Measurement1.mat b/micro-station-compliance/data/record/Measurement1.mat new file mode 100755 index 0000000..08a494b Binary files /dev/null and b/micro-station-compliance/data/record/Measurement1.mat differ diff --git a/micro-station-compliance/data/record/Measurement10.mat b/micro-station-compliance/data/record/Measurement10.mat new file mode 100755 index 0000000..db3aaff Binary files /dev/null and b/micro-station-compliance/data/record/Measurement10.mat differ diff --git a/micro-station-compliance/data/record/Measurement2.mat b/micro-station-compliance/data/record/Measurement2.mat new file mode 100755 index 0000000..7767eda Binary files /dev/null and b/micro-station-compliance/data/record/Measurement2.mat differ diff --git a/micro-station-compliance/data/record/Measurement3.mat b/micro-station-compliance/data/record/Measurement3.mat new file mode 100755 index 0000000..04a411d Binary files /dev/null and b/micro-station-compliance/data/record/Measurement3.mat differ diff --git a/micro-station-compliance/data/record/Measurement4.mat b/micro-station-compliance/data/record/Measurement4.mat new file mode 100755 index 0000000..b228762 Binary files /dev/null and b/micro-station-compliance/data/record/Measurement4.mat differ diff --git a/micro-station-compliance/data/record/Measurement5.mat b/micro-station-compliance/data/record/Measurement5.mat new file mode 100755 index 0000000..31fc676 Binary files /dev/null and b/micro-station-compliance/data/record/Measurement5.mat differ diff --git a/micro-station-compliance/data/record/Measurement6.mat b/micro-station-compliance/data/record/Measurement6.mat new file mode 100755 index 0000000..8371fab Binary files /dev/null and b/micro-station-compliance/data/record/Measurement6.mat differ diff --git a/micro-station-compliance/data/record/Measurement7.mat b/micro-station-compliance/data/record/Measurement7.mat new file mode 100755 index 0000000..d7ef120 Binary files /dev/null and b/micro-station-compliance/data/record/Measurement7.mat differ diff --git a/micro-station-compliance/data/record/Measurement8.mat b/micro-station-compliance/data/record/Measurement8.mat new file mode 100755 index 0000000..8be524e Binary files /dev/null and b/micro-station-compliance/data/record/Measurement8.mat differ diff --git a/micro-station-compliance/data/record/Measurement9.mat b/micro-station-compliance/data/record/Measurement9.mat new file mode 100755 index 0000000..6bad103 Binary files /dev/null and b/micro-station-compliance/data/record/Measurement9.mat differ diff --git a/micro-station-compliance/figs/compliance_diagonal_rotations.png b/micro-station-compliance/figs/compliance_diagonal_rotations.png new file mode 100644 index 0000000..935df7b Binary files /dev/null and b/micro-station-compliance/figs/compliance_diagonal_rotations.png differ diff --git a/micro-station-compliance/figs/compliance_diagonal_rotations_comp_model.png b/micro-station-compliance/figs/compliance_diagonal_rotations_comp_model.png new file mode 100644 index 0000000..9c0b763 Binary files /dev/null and b/micro-station-compliance/figs/compliance_diagonal_rotations_comp_model.png differ diff --git a/micro-station-compliance/figs/compliance_diagonal_translations.png b/micro-station-compliance/figs/compliance_diagonal_translations.png new file mode 100644 index 0000000..627d44d Binary files /dev/null and b/micro-station-compliance/figs/compliance_diagonal_translations.png differ diff --git a/micro-station-compliance/figs/compliance_diagonal_translations_comp_model.png b/micro-station-compliance/figs/compliance_diagonal_translations_comp_model.png new file mode 100644 index 0000000..1336762 Binary files /dev/null and b/micro-station-compliance/figs/compliance_diagonal_translations_comp_model.png differ diff --git a/micro-station-compliance/index.html b/micro-station-compliance/index.html new file mode 100644 index 0000000..edf0d56 --- /dev/null +++ b/micro-station-compliance/index.html @@ -0,0 +1,959 @@ + + + + + + +Compliance Measurement of the Micro Station + + + + + + + + + + + + + +
+ UP + | + HOME +
+

Compliance Measurement of the Micro Station

+
+

Table of Contents

+ +
+ +
+

1 Setup

+
+
+
+

1.1 Position of inertial sensors on top of the micro-hexapod

+
+

+Orientation is relative to the frame determined by the X-ray +

+ + + +++ ++ ++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NumPositionOrientationSensibilityChannels
1[0, +A, 0][x, y, z]1V/g1-3
2[-B, 0, 0][x, y, z]1V/g4-6
3[0, -A, 0][x, y, z]0.1V/g7-9
4[+B, 0, 0][x, y, z]1V/g10-12
+ +

+Instrumented Hammer: +

+
    +
  • Channel 13
  • +
  • Sensibility: 230 uV/N
  • +
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Acc NumberDirChannel Number
1x1
1y2
1z3
2x4
2y5
2z6
3x7
3y8
3z9
4x10
4y11
4z12
Hammer 13
+ +

+From the acceleration measurement of the 4 accelerometers, we can compute the translations and rotations: +

+ + + +++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Formula
\(D_x\)(1x + 2x + 3x + 4x)/4
\(D_y\)(1y + 2y + 3y + 4y)/4
\(D_z\)(1z + 2z + 3z + 4z)/4
\(R_x\)(1z - 3z)/A
\(R_y\)(2z - 4z)/B
\(R_z\)(3x - 1x)/A, (4y - 2y)/B
+ + + + + +++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Formula
\(D_x\)(1 + 4 + 7 + 10)/4
\(D_y\)(2 + 5 + 8 + 11)/4
\(D_z\)(3 + 6 + 9 + 12)/4
\(R_x\)(1 - 9)/A
\(R_y\)(6 - 12)/B
\(R_z\)(7 - 1)/A, (11 - 5)/B
+
+
+ +
+

1.2 Hammer blow position/orientation

+
+ + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NumDirectionPosition
1-Y[0, +A, 0]
2-Z[0, +A, 0]
3X[-B, 0, 0]
4-Z[-B, 0, 0]
5Y[0, -A, 0]
6-Z[0, -A, 0]
7-X[+B, 0, 0]
8-Z[+B, 0, 0]
9-X[0, -A, 0]
10-X[0, +A, 0]
+ +

+From hammer blows to pure forces / torques: +

+ + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 FormulaAlternative
\(F_x\)+3-7
\(F_y\)-1+5
\(F_z\)-(2 + 6)/2-(4 + 8)/2
\(M_x\)A/2*(2 - 6) 
\(M_y\)B/2*(8 - 4) 
\(M_z\)A/2*(10 - 9) 
+
+
+
+ +
+

2 Results

+
+
+
+

2.1 Load Data

+
+
+
m1 = load('data/Measurement1.mat');
+m2 = load('data/Measurement2.mat');
+m3 = load('data/Measurement3.mat');
+m4 = load('data/Measurement4.mat');
+m5 = load('data/Measurement5.mat');
+m6 = load('data/Measurement6.mat');
+m7 = load('data/Measurement7.mat');
+m8 = load('data/Measurement8.mat');
+m9 = load('data/Measurement9.mat');
+m10 = load('data/Measurement10.mat');
+
+
+
+
+ +
+

2.2 Compute Transfer Functions

+
+
+
freqs = m3.FFT1_H1_1_13_X_Val;
+w = 2*pi*freqs';
+
+A = 0.14;
+B = 0.14;
+
+
+ +
+
G = zeros(6,6,length(freqs));
+
+% Fx
+G(1,1,:) = (m3.FFT1_H1_1_13_Y_ReIm + m3.FFT1_H1_4_13_Y_ReIm + m3.FFT1_H1_7_13_Y_ReIm + m3.FFT1_H1_10_13_Y_ReIm)./4;
+G(2,1,:) = (m3.FFT1_H1_2_13_Y_ReIm + m3.FFT1_H1_5_13_Y_ReIm + m3.FFT1_H1_8_13_Y_ReIm + m3.FFT1_H1_11_13_Y_ReIm)./4;
+G(3,1,:) = (m3.FFT1_H1_3_13_Y_ReIm + m3.FFT1_H1_6_13_Y_ReIm + m3.FFT1_H1_9_13_Y_ReIm + m3.FFT1_H1_12_13_Y_ReIm)./4;
+G(4,1,:) = (m3.FFT1_H1_1_13_Y_ReIm - m3.FFT1_H1_9_13_Y_ReIm )./A;
+G(5,1,:) = (m3.FFT1_H1_6_13_Y_ReIm - m3.FFT1_H1_12_13_Y_ReIm)./B;
+G(6,1,:) = (m3.FFT1_H1_7_13_Y_ReIm - m3.FFT1_H1_1_13_Y_ReIm )./A;
+
+% Fy
+G(1,2,:) = -(m1.FFT1_H1_2_13_Y_ReIm + m1.FFT1_H1_5_13_Y_ReIm + m1.FFT1_H1_8_13_Y_ReIm + m1.FFT1_H1_11_13_Y_ReIm)./4;
+G(2,2,:) = -(m1.FFT1_H1_2_13_Y_ReIm + m1.FFT1_H1_5_13_Y_ReIm + m1.FFT1_H1_8_13_Y_ReIm + m1.FFT1_H1_11_13_Y_ReIm)./4;
+G(3,2,:) = -(m1.FFT1_H1_3_13_Y_ReIm + m1.FFT1_H1_6_13_Y_ReIm + m1.FFT1_H1_9_13_Y_ReIm + m1.FFT1_H1_12_13_Y_ReIm)./4;
+G(4,2,:) = -(m1.FFT1_H1_1_13_Y_ReIm - m1.FFT1_H1_9_13_Y_ReIm )./A;
+G(5,2,:) = -(m1.FFT1_H1_6_13_Y_ReIm - m1.FFT1_H1_12_13_Y_ReIm)./B;
+G(6,2,:) = -(m1.FFT1_H1_7_13_Y_ReIm - m1.FFT1_H1_1_13_Y_ReIm )./A;
+
+
+% Fz
+G(1,3,:) = -1/2./(1./(m2.FFT1_H1_1_13_Y_ReIm + m2.FFT1_H1_4_13_Y_ReIm + m2.FFT1_H1_7_13_Y_ReIm + m2.FFT1_H1_10_13_Y_ReIm) + ...
+                  1./(m6.FFT1_H1_1_13_Y_ReIm + m6.FFT1_H1_4_13_Y_ReIm + m6.FFT1_H1_7_13_Y_ReIm + m6.FFT1_H1_10_13_Y_ReIm));
+G(2,3,:) = -1/2./(1./(m2.FFT1_H1_2_13_Y_ReIm + m2.FFT1_H1_5_13_Y_ReIm + m2.FFT1_H1_8_13_Y_ReIm + m2.FFT1_H1_11_13_Y_ReIm) + ...
+                  1./(m6.FFT1_H1_2_13_Y_ReIm + m6.FFT1_H1_5_13_Y_ReIm + m6.FFT1_H1_8_13_Y_ReIm + m6.FFT1_H1_11_13_Y_ReIm));
+G(3,3,:) = -1/2./(1./(m2.FFT1_H1_3_13_Y_ReIm + m2.FFT1_H1_6_13_Y_ReIm + m2.FFT1_H1_9_13_Y_ReIm + m2.FFT1_H1_12_13_Y_ReIm) + ...
+                  1./(m6.FFT1_H1_3_13_Y_ReIm + m6.FFT1_H1_6_13_Y_ReIm + m6.FFT1_H1_9_13_Y_ReIm + m6.FFT1_H1_12_13_Y_ReIm));
+G(4,3,:) = -2/A./(1./(m2.FFT1_H1_1_13_Y_ReIm - m2.FFT1_H1_9_13_Y_ReIm) + ...
+                  1./(m6.FFT1_H1_1_13_Y_ReIm - m6.FFT1_H1_9_13_Y_ReIm));
+G(5,3,:) = -2/B./(1./(m2.FFT1_H1_6_13_Y_ReIm - m2.FFT1_H1_12_13_Y_ReIm) + ...
+                  1./(m6.FFT1_H1_6_13_Y_ReIm - m6.FFT1_H1_12_13_Y_ReIm));
+G(6,3,:) = -2/A./(1./(m2.FFT1_H1_7_13_Y_ReIm - m2.FFT1_H1_1_13_Y_ReIm) + ...
+                  1./(m6.FFT1_H1_7_13_Y_ReIm - m6.FFT1_H1_1_13_Y_ReIm));
+
+% Mx
+G(1,4,:) = 1/A/2./(1./(m2.FFT1_H1_1_13_Y_ReIm + m2.FFT1_H1_4_13_Y_ReIm + m2.FFT1_H1_7_13_Y_ReIm + m2.FFT1_H1_10_13_Y_ReIm) - ...
+                 1./(m6.FFT1_H1_1_13_Y_ReIm + m6.FFT1_H1_4_13_Y_ReIm + m6.FFT1_H1_7_13_Y_ReIm + m6.FFT1_H1_10_13_Y_ReIm));
+G(2,4,:) = 1/A/2./(1./(m2.FFT1_H1_2_13_Y_ReIm + m2.FFT1_H1_5_13_Y_ReIm + m2.FFT1_H1_8_13_Y_ReIm + m2.FFT1_H1_11_13_Y_ReIm) - ...
+                 1./(m6.FFT1_H1_2_13_Y_ReIm + m6.FFT1_H1_5_13_Y_ReIm + m6.FFT1_H1_8_13_Y_ReIm + m6.FFT1_H1_11_13_Y_ReIm));
+G(3,4,:) = 1/A/2./(1./(m2.FFT1_H1_3_13_Y_ReIm + m2.FFT1_H1_6_13_Y_ReIm + m2.FFT1_H1_9_13_Y_ReIm + m2.FFT1_H1_12_13_Y_ReIm) - ...
+                 1./(m6.FFT1_H1_3_13_Y_ReIm + m6.FFT1_H1_6_13_Y_ReIm + m6.FFT1_H1_9_13_Y_ReIm + m6.FFT1_H1_12_13_Y_ReIm));
+G(4,4,:) = 1/A^2*2./(1./(m2.FFT1_H1_1_13_Y_ReIm - m2.FFT1_H1_9_13_Y_ReIm) - ...
+               1./(m6.FFT1_H1_1_13_Y_ReIm - m6.FFT1_H1_9_13_Y_ReIm));
+G(5,4,:) = 2/A/B./(1./(m2.FFT1_H1_6_13_Y_ReIm - m2.FFT1_H1_12_13_Y_ReIm) - ...
+               1./(m6.FFT1_H1_6_13_Y_ReIm - m6.FFT1_H1_12_13_Y_ReIm));
+G(6,4,:) = 1/A^2*2./(1./(m2.FFT1_H1_7_13_Y_ReIm - m2.FFT1_H1_1_13_Y_ReIm) - ...
+               1./(m6.FFT1_H1_7_13_Y_ReIm - m6.FFT1_H1_1_13_Y_ReIm));
+
+% My
+G(1,5,:) = 1/B/2./(1./(m8.FFT1_H1_1_13_Y_ReIm + m8.FFT1_H1_4_13_Y_ReIm + m8.FFT1_H1_7_13_Y_ReIm + m8.FFT1_H1_10_13_Y_ReIm) - ...
+                 1./(m4.FFT1_H1_1_13_Y_ReIm + m4.FFT1_H1_4_13_Y_ReIm + m4.FFT1_H1_7_13_Y_ReIm + m4.FFT1_H1_10_13_Y_ReIm));
+G(2,5,:) = 1/B/2./(1./(m8.FFT1_H1_2_13_Y_ReIm + m8.FFT1_H1_5_13_Y_ReIm + m8.FFT1_H1_8_13_Y_ReIm + m8.FFT1_H1_11_13_Y_ReIm) - ...
+                 1./(m4.FFT1_H1_2_13_Y_ReIm + m4.FFT1_H1_5_13_Y_ReIm + m4.FFT1_H1_8_13_Y_ReIm + m4.FFT1_H1_11_13_Y_ReIm));
+G(3,5,:) = 1/B/2./(1./(m8.FFT1_H1_3_13_Y_ReIm + m8.FFT1_H1_6_13_Y_ReIm + m8.FFT1_H1_9_13_Y_ReIm + m8.FFT1_H1_12_13_Y_ReIm) - ...
+                 1./(m4.FFT1_H1_3_13_Y_ReIm + m4.FFT1_H1_6_13_Y_ReIm + m4.FFT1_H1_9_13_Y_ReIm + m4.FFT1_H1_12_13_Y_ReIm));
+G(4,5,:) = 2/B/A./(1./(m8.FFT1_H1_1_13_Y_ReIm - m8.FFT1_H1_9_13_Y_ReIm) - ...
+                   1./(m4.FFT1_H1_1_13_Y_ReIm - m4.FFT1_H1_9_13_Y_ReIm));
+G(5,5,:) = 1/B^2*2./(1./(m8.FFT1_H1_6_13_Y_ReIm - m8.FFT1_H1_12_13_Y_ReIm) - ...
+               1./(m4.FFT1_H1_6_13_Y_ReIm - m4.FFT1_H1_12_13_Y_ReIm));
+G(6,5,:) = 2/B/A./(1./(m8.FFT1_H1_7_13_Y_ReIm - m8.FFT1_H1_1_13_Y_ReIm) - ...
+                   1./(m4.FFT1_H1_7_13_Y_ReIm - m4.FFT1_H1_1_13_Y_ReIm));
+
+% Mz
+G(1,6,:) = 1/A/2./(1./(m10.FFT1_H1_1_13_Y_ReIm + m10.FFT1_H1_4_13_Y_ReIm + m10.FFT1_H1_7_13_Y_ReIm + m10.FFT1_H1_10_13_Y_ReIm) - ...
+                 1./(m9.FFT1_H1_1_13_Y_ReIm + m9.FFT1_H1_4_13_Y_ReIm + m9.FFT1_H1_7_13_Y_ReIm + m9.FFT1_H1_10_13_Y_ReIm));
+G(2,6,:) = 1/A/2./(1./(m10.FFT1_H1_2_13_Y_ReIm + m10.FFT1_H1_5_13_Y_ReIm + m10.FFT1_H1_8_13_Y_ReIm + m10.FFT1_H1_11_13_Y_ReIm) - ...
+                 1./(m9.FFT1_H1_2_13_Y_ReIm + m9.FFT1_H1_5_13_Y_ReIm + m9.FFT1_H1_8_13_Y_ReIm + m9.FFT1_H1_11_13_Y_ReIm));
+G(3,6,:) = 1/A/2./(1./(m10.FFT1_H1_3_13_Y_ReIm + m10.FFT1_H1_6_13_Y_ReIm + m10.FFT1_H1_9_13_Y_ReIm + m10.FFT1_H1_12_13_Y_ReIm) - ...
+                 1./(m9.FFT1_H1_3_13_Y_ReIm + m9.FFT1_H1_6_13_Y_ReIm + m9.FFT1_H1_9_13_Y_ReIm + m9.FFT1_H1_12_13_Y_ReIm));
+G(4,6,:) = 1/A^2*2./(1./(m10.FFT1_H1_1_13_Y_ReIm - m10.FFT1_H1_9_13_Y_ReIm) - ...
+               1./(m9.FFT1_H1_1_13_Y_ReIm - m9.FFT1_H1_9_13_Y_ReIm));
+G(5,6,:) = 2*A/B./(1./(m10.FFT1_H1_6_13_Y_ReIm - m10.FFT1_H1_12_13_Y_ReIm) - ...
+                   1./(m9.FFT1_H1_6_13_Y_ReIm - m9.FFT1_H1_12_13_Y_ReIm));
+G(6,6,:) = 1/A^2*2./(1./(m10.FFT1_H1_7_13_Y_ReIm - m10.FFT1_H1_1_13_Y_ReIm) - ...
+               1./(m9.FFT1_H1_7_13_Y_ReIm - m9.FFT1_H1_1_13_Y_ReIm));
+
+
+
+
+ +
+

2.3 Diagonal Dynamics

+
+
+
figure;
+ax1 = subplot(2,1,1);
+hold on;
+plot(freqs, abs(squeeze(G(1,1,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(2,2,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(3,3,:))./(-w.^2)), '.')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
+ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]);
+ylim([1e-9, 2e-6]);
+
+ax2 = subplot(2,1,2);
+hold on;
+plot(freqs, 180/pi*angle(squeeze(G(1,1,:))./(-w.^2)), '.', 'DisplayName', '$D_x/F_x$')
+plot(freqs, 180/pi*angle(squeeze(G(2,2,:))./(-w.^2)), '.', 'DisplayName', '$D_y/F_y$')
+plot(freqs, 180/pi*angle(squeeze(G(3,3,:))./(-w.^2)), '.', 'DisplayName', '$D_z/F_z$')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
+xlabel('Freqency [Hz]'); ylabel('Phase [deg]');
+ylim([-180, 180]);
+yticks([-180, -90, 0, 90, 180]);
+legend('location', 'southwest');
+
+linkaxes([ax1,ax2],'x');
+xlim([30, 300]);
+
+
+ + +
+

compliance_diagonal_translations.png +

+

Figure 1: Dynamics from Forces to Translations

+
+ +
+
figure;
+ax1 = subplot(2,1,1);
+hold on;
+plot(freqs, abs(squeeze(G(4,4,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(5,5,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(6,6,:))./(-w.^2)), '.')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
+ylabel('Magnitude [rad/Nm]'); set(gca, 'XTickLabel',[]);
+ylim([1e-9, 2e-6]);
+
+ax2 = subplot(2,1,2);
+hold on;
+plot(freqs, 180/pi*angle(squeeze(G(4,4,:))./(-w.^2)), '.', 'DisplayName', '$R_x/M_x$')
+plot(freqs, 180/pi*angle(squeeze(G(5,5,:))./(-w.^2)), '.', 'DisplayName', '$R_y/M_y$')
+plot(freqs, 180/pi*angle(squeeze(G(6,6,:))./(-w.^2)), '.', 'DisplayName', '$R_z/M_z$')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
+xlabel('Freqency [Hz]'); ylabel('Phase [deg]');
+ylim([-180, 180]);
+yticks([-180, -90, 0, 90, 180]);
+legend('location', 'southwest');
+
+linkaxes([ax1,ax2],'x');
+xlim([30, 300]);
+
+
+ + +
+

compliance_diagonal_rotations.png +

+

Figure 2: Dynamics from Torques to Rotations

+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 StiffnessUnit
\(K_x\)1e7[N/m]
\(K_y\)1e7[N/m]
\(K_z\)2e8[N/m]
\(K_{R_x}\)?[Nm/rad]
\(K_{R_y}\)1.8e7[Nm/rad]
\(K_{R_z}\)1e7[Nm/rad]
+
+
+ +
+

2.4 Compare with Model

+
+
+
load('./mat/model.mat', 'Gm');
+
+
+ +
+
figure;
+ax1 = subplot(2,1,1);
+hold on;
+plot(freqs, abs(squeeze(G(1,1,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(2,2,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(3,3,:))./(-w.^2)), '.')
+set(gca,'ColorOrderIndex',1);
+plot(freqs, abs(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-')
+plot(freqs, abs(squeeze(freqresp(Gm(2,2,:), freqs, 'Hz'))), '-')
+plot(freqs, abs(squeeze(freqresp(Gm(3,3,:), freqs, 'Hz'))), '-')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
+ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]);
+ylim([1e-9, 2e-6]);
+
+ax2 = subplot(2,1,2);
+hold on;
+plot(freqs, 180/pi*angle(squeeze(G(1,1,:))./(-w.^2)), '.', 'DisplayName', '$D_x/F_x$')
+plot(freqs, 180/pi*angle(squeeze(G(2,2,:))./(-w.^2)), '.', 'DisplayName', '$D_y/F_y$')
+plot(freqs, 180/pi*angle(squeeze(G(3,3,:))./(-w.^2)), '.', 'DisplayName', '$D_z/F_z$')
+set(gca,'ColorOrderIndex',1);
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(2,2,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(3,3,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
+xlabel('Freqency [Hz]'); ylabel('Phase [deg]');
+ylim([-180, 180]);
+yticks([-180, -90, 0, 90, 180]);
+legend('location', 'southwest');
+
+linkaxes([ax1,ax2],'x');
+xlim([30, 300]);
+
+
+ + +
+

compliance_diagonal_translations_comp_model.png +

+

Figure 3: Dynamics from Forces to Translations

+
+ +
+
figure;
+ax1 = subplot(2,1,1);
+hold on;
+plot(freqs, abs(squeeze(G(4,4,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(5,5,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(6,6,:))./(-w.^2)), '.')
+set(gca,'ColorOrderIndex',1);
+plot(freqs, abs(squeeze(freqresp(Gm(4,4,:), freqs, 'Hz'))), '-')
+plot(freqs, abs(squeeze(freqresp(Gm(5,5,:), freqs, 'Hz'))), '-')
+plot(freqs, abs(squeeze(freqresp(Gm(6,6,:), freqs, 'Hz'))), '-')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
+ylabel('Magnitude [rad/Nm]'); set(gca, 'XTickLabel',[]);
+% ylim([1e-9, 2e-6]);
+
+ax2 = subplot(2,1,2);
+hold on;
+plot(freqs, 180/pi*angle(squeeze(G(4,4,:))./(-w.^2)), '.', 'DisplayName', '$R_x/M_x$')
+plot(freqs, 180/pi*angle(squeeze(G(5,5,:))./(-w.^2)), '.', 'DisplayName', '$R_y/M_y$')
+plot(freqs, 180/pi*angle(squeeze(G(6,6,:))./(-w.^2)), '.', 'DisplayName', '$R_z/M_z$')
+set(gca,'ColorOrderIndex',1);
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(4,4,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(5,5,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(6,6,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
+xlabel('Freqency [Hz]'); ylabel('Phase [deg]');
+ylim([-180, 180]);
+yticks([-180, -90, 0, 90, 180]);
+legend('location', 'southwest');
+
+linkaxes([ax1,ax2],'x');
+xlim([30, 300]);
+
+
+ + +
+

compliance_diagonal_rotations_comp_model.png +

+

Figure 4: Dynamics from Torques to Rotations

+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 StiffnessUnit
\(K_x\)1e7[N/m]
\(K_y\)1e7[N/m]
\(K_z\)2e8[N/m]
\(K_{R_x}\)5e7[Nm/rad]
\(K_{R_y}\)3e7[Nm/rad]
\(K_{R_z}\)2e7[Nm/rad]
+
+
+ +
+

2.5 Coupling Dynamics

+
+
+
figure;
+ax1 = subplot(2,1,1);
+hold on;
+plot(freqs, abs(squeeze(G(1,1,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(2,1,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(3,1,:))./(-w.^2)), '.')
+set(gca,'ColorOrderIndex',1);
+plot(freqs, abs(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-')
+plot(freqs, abs(squeeze(freqresp(Gm(2,1,:), freqs, 'Hz'))), '-')
+plot(freqs, abs(squeeze(freqresp(Gm(3,1,:), freqs, 'Hz'))), '-')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
+ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]);
+ylim([1e-9, 2e-6]);
+
+ax2 = subplot(2,1,2);
+hold on;
+plot(freqs, 180/pi*angle(squeeze(G(1,1,:))./(-w.^2)), '.', 'DisplayName', '$D_x/F_x$')
+plot(freqs, 180/pi*angle(squeeze(G(2,1,:))./(-w.^2)), '.', 'DisplayName', '$D_y/F_x$')
+plot(freqs, 180/pi*angle(squeeze(G(3,1,:))./(-w.^2)), '.', 'DisplayName', '$D_z/F_x$')
+set(gca,'ColorOrderIndex',1);
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(2,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(3,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
+xlabel('Freqency [Hz]'); ylabel('Phase [deg]');
+ylim([-180, 180]);
+yticks([-180, -90, 0, 90, 180]);
+legend('location', 'southwest');
+
+linkaxes([ax1,ax2],'x');
+xlim([30, 300]);
+
+
+ +
+
figure;
+ax1 = subplot(2,1,1);
+hold on;
+plot(freqs, abs(squeeze(G(5,1,:))./(-w.^2)), '.')
+plot(freqs, abs(squeeze(G(4,2,:))./(-w.^2)), '.')
+set(gca,'ColorOrderIndex',1);
+plot(freqs, abs(squeeze(freqresp(Gm(5,1,:), freqs, 'Hz'))), '-')
+plot(freqs, abs(squeeze(freqresp(Gm(4,2,:), freqs, 'Hz'))), '-')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
+ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]);
+ylim([1e-9, 2e-6]);
+
+ax2 = subplot(2,1,2);
+hold on;
+plot(freqs, 180/pi*angle(squeeze(G(5,1,:))./(-w.^2)), '.', 'DisplayName', '$R_y/F_x$')
+plot(freqs, 180/pi*angle(squeeze(G(4,2,:))./(-w.^2)), '.', 'DisplayName', '$R_x/F_y$')
+set(gca,'ColorOrderIndex',1);
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(5,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(4,2,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off')
+hold off;
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
+xlabel('Freqency [Hz]'); ylabel('Phase [deg]');
+ylim([-180, 180]);
+yticks([-180, -90, 0, 90, 180]);
+legend('location', 'southwest');
+
+linkaxes([ax1,ax2],'x');
+xlim([30, 300]);
+
+
+
+
+
+
+
+

Author: Dehaeze Thomas

+

Created: 2020-08-18 mar. 12:57

+
+ + diff --git a/micro-station-compliance/index.org b/micro-station-compliance/index.org new file mode 100644 index 0000000..ccc09d3 --- /dev/null +++ b/micro-station-compliance/index.org @@ -0,0 +1,473 @@ +#+TITLE: Compliance Measurement of the Micro Station +:DRAWER: +#+STARTUP: overview + +#+LANGUAGE: en +#+EMAIL: dehaeze.thomas@gmail.com +#+AUTHOR: Dehaeze Thomas + +#+HTML_LINK_HOME: ../index.html +#+HTML_LINK_UP: ../index.html + +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+HTML_MATHJAX: align: center tagside: right font: TeX + +#+PROPERTY: header-args:matlab :session *MATLAB* +#+PROPERTY: header-args:matlab+ :comments org +#+PROPERTY: header-args:matlab+ :results none +#+PROPERTY: header-args:matlab+ :exports both +#+PROPERTY: header-args:matlab+ :eval no-export +#+PROPERTY: header-args:matlab+ :output-dir figs + +#+PROPERTY: header-args:shell :eval no-export +:END: + +* Setup +** Position of inertial sensors on top of the micro-hexapod +Orientation is relative to the frame determined by the X-ray +| *Num* | *Position* | *Orientation* | *Sensibility* | *Channels* | +|-------+------------+---------------+---------------+------------| +| 1 | [0, +A, 0] | [x, y, z] | 1V/g | 1-3 | +| 2 | [-B, 0, 0] | [x, y, z] | 1V/g | 4-6 | +| 3 | [0, -A, 0] | [x, y, z] | 0.1V/g | 7-9 | +| 4 | [+B, 0, 0] | [x, y, z] | 1V/g | 10-12 | + +Instrumented Hammer: +- Channel 13 +- Sensibility: 230 uV/N + +| Acc Number | Dir | Channel Number | +|------------+-----+----------------| +| 1 | x | 1 | +| 1 | y | 2 | +| 1 | z | 3 | +| 2 | x | 4 | +| 2 | y | 5 | +| 2 | z | 6 | +| 3 | x | 7 | +| 3 | y | 8 | +| 3 | z | 9 | +| 4 | x | 10 | +| 4 | y | 11 | +| 4 | z | 12 | +| Hammer | | 13 | + +From the acceleration measurement of the 4 accelerometers, we can compute the translations and rotations: +| | *Formula* | +|-------+--------------------------| +| $D_x$ | (1x + 2x + 3x + 4x)/4 | +| $D_y$ | (1y + 2y + 3y + 4y)/4 | +| $D_z$ | (1z + 2z + 3z + 4z)/4 | +| $R_x$ | (1z - 3z)/A | +| $R_y$ | (2z - 4z)/B | +| $R_z$ | (3x - 1x)/A, (4y - 2y)/B | + + +| | *Formula* | +|-------+-----------------------| +| $D_x$ | (1 + 4 + 7 + 10)/4 | +| $D_y$ | (2 + 5 + 8 + 11)/4 | +| $D_z$ | (3 + 6 + 9 + 12)/4 | +| $R_x$ | (1 - 9)/A | +| $R_y$ | (6 - 12)/B | +| $R_z$ | (7 - 1)/A, (11 - 5)/B | + +** Hammer blow position/orientation + +| *Num* | *Direction* | *Position* | +|-------+-------------+------------| +| 1 | -Y | [0, +A, 0] | +| 2 | -Z | [0, +A, 0] | +| 3 | X | [-B, 0, 0] | +| 4 | -Z | [-B, 0, 0] | +| 5 | Y | [0, -A, 0] | +| 6 | -Z | [0, -A, 0] | +| 7 | -X | [+B, 0, 0] | +| 8 | -Z | [+B, 0, 0] | +| 9 | -X | [0, -A, 0] | +| 10 | -X | [0, +A, 0] | + +From hammer blows to pure forces / torques: +| | *Formula* | Alternative | +|-------+--------------+-------------| +| $F_x$ | +3 | -7 | +| $F_y$ | -1 | +5 | +| $F_z$ | -(2 + 6)/2 | -(4 + 8)/2 | +| $M_x$ | A/2*(2 - 6) | | +| $M_y$ | B/2*(8 - 4) | | +| $M_z$ | A/2*(10 - 9) | | + +* Results +** Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +** Load Data +#+begin_src matlab + m1 = load('data/Measurement1.mat'); + m2 = load('data/Measurement2.mat'); + m3 = load('data/Measurement3.mat'); + m4 = load('data/Measurement4.mat'); + m5 = load('data/Measurement5.mat'); + m6 = load('data/Measurement6.mat'); + m7 = load('data/Measurement7.mat'); + m8 = load('data/Measurement8.mat'); + m9 = load('data/Measurement9.mat'); + m10 = load('data/Measurement10.mat'); +#+end_src + +** Compute Transfer Functions +#+begin_src matlab + freqs = m3.FFT1_H1_1_13_X_Val; + w = 2*pi*freqs'; + + A = 0.14; + B = 0.14; +#+end_src + +#+begin_src matlab + G = zeros(6,6,length(freqs)); + + % Fx + G(1,1,:) = (m3.FFT1_H1_1_13_Y_ReIm + m3.FFT1_H1_4_13_Y_ReIm + m3.FFT1_H1_7_13_Y_ReIm + m3.FFT1_H1_10_13_Y_ReIm)./4; + G(2,1,:) = (m3.FFT1_H1_2_13_Y_ReIm + m3.FFT1_H1_5_13_Y_ReIm + m3.FFT1_H1_8_13_Y_ReIm + m3.FFT1_H1_11_13_Y_ReIm)./4; + G(3,1,:) = (m3.FFT1_H1_3_13_Y_ReIm + m3.FFT1_H1_6_13_Y_ReIm + m3.FFT1_H1_9_13_Y_ReIm + m3.FFT1_H1_12_13_Y_ReIm)./4; + G(4,1,:) = (m3.FFT1_H1_1_13_Y_ReIm - m3.FFT1_H1_9_13_Y_ReIm )./A; + G(5,1,:) = (m3.FFT1_H1_6_13_Y_ReIm - m3.FFT1_H1_12_13_Y_ReIm)./B; + G(6,1,:) = (m3.FFT1_H1_7_13_Y_ReIm - m3.FFT1_H1_1_13_Y_ReIm )./A; + + % Fy + G(1,2,:) = -(m1.FFT1_H1_2_13_Y_ReIm + m1.FFT1_H1_5_13_Y_ReIm + m1.FFT1_H1_8_13_Y_ReIm + m1.FFT1_H1_11_13_Y_ReIm)./4; + G(2,2,:) = -(m1.FFT1_H1_2_13_Y_ReIm + m1.FFT1_H1_5_13_Y_ReIm + m1.FFT1_H1_8_13_Y_ReIm + m1.FFT1_H1_11_13_Y_ReIm)./4; + G(3,2,:) = -(m1.FFT1_H1_3_13_Y_ReIm + m1.FFT1_H1_6_13_Y_ReIm + m1.FFT1_H1_9_13_Y_ReIm + m1.FFT1_H1_12_13_Y_ReIm)./4; + G(4,2,:) = -(m1.FFT1_H1_1_13_Y_ReIm - m1.FFT1_H1_9_13_Y_ReIm )./A; + G(5,2,:) = -(m1.FFT1_H1_6_13_Y_ReIm - m1.FFT1_H1_12_13_Y_ReIm)./B; + G(6,2,:) = -(m1.FFT1_H1_7_13_Y_ReIm - m1.FFT1_H1_1_13_Y_ReIm )./A; + + + % Fz + G(1,3,:) = -1/2./(1./(m2.FFT1_H1_1_13_Y_ReIm + m2.FFT1_H1_4_13_Y_ReIm + m2.FFT1_H1_7_13_Y_ReIm + m2.FFT1_H1_10_13_Y_ReIm) + ... + 1./(m6.FFT1_H1_1_13_Y_ReIm + m6.FFT1_H1_4_13_Y_ReIm + m6.FFT1_H1_7_13_Y_ReIm + m6.FFT1_H1_10_13_Y_ReIm)); + G(2,3,:) = -1/2./(1./(m2.FFT1_H1_2_13_Y_ReIm + m2.FFT1_H1_5_13_Y_ReIm + m2.FFT1_H1_8_13_Y_ReIm + m2.FFT1_H1_11_13_Y_ReIm) + ... + 1./(m6.FFT1_H1_2_13_Y_ReIm + m6.FFT1_H1_5_13_Y_ReIm + m6.FFT1_H1_8_13_Y_ReIm + m6.FFT1_H1_11_13_Y_ReIm)); + G(3,3,:) = -1/2./(1./(m2.FFT1_H1_3_13_Y_ReIm + m2.FFT1_H1_6_13_Y_ReIm + m2.FFT1_H1_9_13_Y_ReIm + m2.FFT1_H1_12_13_Y_ReIm) + ... + 1./(m6.FFT1_H1_3_13_Y_ReIm + m6.FFT1_H1_6_13_Y_ReIm + m6.FFT1_H1_9_13_Y_ReIm + m6.FFT1_H1_12_13_Y_ReIm)); + G(4,3,:) = -2/A./(1./(m2.FFT1_H1_1_13_Y_ReIm - m2.FFT1_H1_9_13_Y_ReIm) + ... + 1./(m6.FFT1_H1_1_13_Y_ReIm - m6.FFT1_H1_9_13_Y_ReIm)); + G(5,3,:) = -2/B./(1./(m2.FFT1_H1_6_13_Y_ReIm - m2.FFT1_H1_12_13_Y_ReIm) + ... + 1./(m6.FFT1_H1_6_13_Y_ReIm - m6.FFT1_H1_12_13_Y_ReIm)); + G(6,3,:) = -2/A./(1./(m2.FFT1_H1_7_13_Y_ReIm - m2.FFT1_H1_1_13_Y_ReIm) + ... + 1./(m6.FFT1_H1_7_13_Y_ReIm - m6.FFT1_H1_1_13_Y_ReIm)); + + % Mx + G(1,4,:) = 1/A/2./(1./(m2.FFT1_H1_1_13_Y_ReIm + m2.FFT1_H1_4_13_Y_ReIm + m2.FFT1_H1_7_13_Y_ReIm + m2.FFT1_H1_10_13_Y_ReIm) - ... + 1./(m6.FFT1_H1_1_13_Y_ReIm + m6.FFT1_H1_4_13_Y_ReIm + m6.FFT1_H1_7_13_Y_ReIm + m6.FFT1_H1_10_13_Y_ReIm)); + G(2,4,:) = 1/A/2./(1./(m2.FFT1_H1_2_13_Y_ReIm + m2.FFT1_H1_5_13_Y_ReIm + m2.FFT1_H1_8_13_Y_ReIm + m2.FFT1_H1_11_13_Y_ReIm) - ... + 1./(m6.FFT1_H1_2_13_Y_ReIm + m6.FFT1_H1_5_13_Y_ReIm + m6.FFT1_H1_8_13_Y_ReIm + m6.FFT1_H1_11_13_Y_ReIm)); + G(3,4,:) = 1/A/2./(1./(m2.FFT1_H1_3_13_Y_ReIm + m2.FFT1_H1_6_13_Y_ReIm + m2.FFT1_H1_9_13_Y_ReIm + m2.FFT1_H1_12_13_Y_ReIm) - ... + 1./(m6.FFT1_H1_3_13_Y_ReIm + m6.FFT1_H1_6_13_Y_ReIm + m6.FFT1_H1_9_13_Y_ReIm + m6.FFT1_H1_12_13_Y_ReIm)); + G(4,4,:) = 1/A^2*2./(1./(m2.FFT1_H1_1_13_Y_ReIm - m2.FFT1_H1_9_13_Y_ReIm) - ... + 1./(m6.FFT1_H1_1_13_Y_ReIm - m6.FFT1_H1_9_13_Y_ReIm)); + G(5,4,:) = 2/A/B./(1./(m2.FFT1_H1_6_13_Y_ReIm - m2.FFT1_H1_12_13_Y_ReIm) - ... + 1./(m6.FFT1_H1_6_13_Y_ReIm - m6.FFT1_H1_12_13_Y_ReIm)); + G(6,4,:) = 1/A^2*2./(1./(m2.FFT1_H1_7_13_Y_ReIm - m2.FFT1_H1_1_13_Y_ReIm) - ... + 1./(m6.FFT1_H1_7_13_Y_ReIm - m6.FFT1_H1_1_13_Y_ReIm)); + + % My + G(1,5,:) = 1/B/2./(1./(m8.FFT1_H1_1_13_Y_ReIm + m8.FFT1_H1_4_13_Y_ReIm + m8.FFT1_H1_7_13_Y_ReIm + m8.FFT1_H1_10_13_Y_ReIm) - ... + 1./(m4.FFT1_H1_1_13_Y_ReIm + m4.FFT1_H1_4_13_Y_ReIm + m4.FFT1_H1_7_13_Y_ReIm + m4.FFT1_H1_10_13_Y_ReIm)); + G(2,5,:) = 1/B/2./(1./(m8.FFT1_H1_2_13_Y_ReIm + m8.FFT1_H1_5_13_Y_ReIm + m8.FFT1_H1_8_13_Y_ReIm + m8.FFT1_H1_11_13_Y_ReIm) - ... + 1./(m4.FFT1_H1_2_13_Y_ReIm + m4.FFT1_H1_5_13_Y_ReIm + m4.FFT1_H1_8_13_Y_ReIm + m4.FFT1_H1_11_13_Y_ReIm)); + G(3,5,:) = 1/B/2./(1./(m8.FFT1_H1_3_13_Y_ReIm + m8.FFT1_H1_6_13_Y_ReIm + m8.FFT1_H1_9_13_Y_ReIm + m8.FFT1_H1_12_13_Y_ReIm) - ... + 1./(m4.FFT1_H1_3_13_Y_ReIm + m4.FFT1_H1_6_13_Y_ReIm + m4.FFT1_H1_9_13_Y_ReIm + m4.FFT1_H1_12_13_Y_ReIm)); + G(4,5,:) = 2/B/A./(1./(m8.FFT1_H1_1_13_Y_ReIm - m8.FFT1_H1_9_13_Y_ReIm) - ... + 1./(m4.FFT1_H1_1_13_Y_ReIm - m4.FFT1_H1_9_13_Y_ReIm)); + G(5,5,:) = 1/B^2*2./(1./(m8.FFT1_H1_6_13_Y_ReIm - m8.FFT1_H1_12_13_Y_ReIm) - ... + 1./(m4.FFT1_H1_6_13_Y_ReIm - m4.FFT1_H1_12_13_Y_ReIm)); + G(6,5,:) = 2/B/A./(1./(m8.FFT1_H1_7_13_Y_ReIm - m8.FFT1_H1_1_13_Y_ReIm) - ... + 1./(m4.FFT1_H1_7_13_Y_ReIm - m4.FFT1_H1_1_13_Y_ReIm)); + + % Mz + G(1,6,:) = 1/A/2./(1./(m10.FFT1_H1_1_13_Y_ReIm + m10.FFT1_H1_4_13_Y_ReIm + m10.FFT1_H1_7_13_Y_ReIm + m10.FFT1_H1_10_13_Y_ReIm) - ... + 1./(m9.FFT1_H1_1_13_Y_ReIm + m9.FFT1_H1_4_13_Y_ReIm + m9.FFT1_H1_7_13_Y_ReIm + m9.FFT1_H1_10_13_Y_ReIm)); + G(2,6,:) = 1/A/2./(1./(m10.FFT1_H1_2_13_Y_ReIm + m10.FFT1_H1_5_13_Y_ReIm + m10.FFT1_H1_8_13_Y_ReIm + m10.FFT1_H1_11_13_Y_ReIm) - ... + 1./(m9.FFT1_H1_2_13_Y_ReIm + m9.FFT1_H1_5_13_Y_ReIm + m9.FFT1_H1_8_13_Y_ReIm + m9.FFT1_H1_11_13_Y_ReIm)); + G(3,6,:) = 1/A/2./(1./(m10.FFT1_H1_3_13_Y_ReIm + m10.FFT1_H1_6_13_Y_ReIm + m10.FFT1_H1_9_13_Y_ReIm + m10.FFT1_H1_12_13_Y_ReIm) - ... + 1./(m9.FFT1_H1_3_13_Y_ReIm + m9.FFT1_H1_6_13_Y_ReIm + m9.FFT1_H1_9_13_Y_ReIm + m9.FFT1_H1_12_13_Y_ReIm)); + G(4,6,:) = 1/A^2*2./(1./(m10.FFT1_H1_1_13_Y_ReIm - m10.FFT1_H1_9_13_Y_ReIm) - ... + 1./(m9.FFT1_H1_1_13_Y_ReIm - m9.FFT1_H1_9_13_Y_ReIm)); + G(5,6,:) = 2*A/B./(1./(m10.FFT1_H1_6_13_Y_ReIm - m10.FFT1_H1_12_13_Y_ReIm) - ... + 1./(m9.FFT1_H1_6_13_Y_ReIm - m9.FFT1_H1_12_13_Y_ReIm)); + G(6,6,:) = 1/A^2*2./(1./(m10.FFT1_H1_7_13_Y_ReIm - m10.FFT1_H1_1_13_Y_ReIm) - ... + 1./(m9.FFT1_H1_7_13_Y_ReIm - m9.FFT1_H1_1_13_Y_ReIm)); +#+end_src + +** Diagonal Dynamics +#+begin_src matlab + figure; + ax1 = subplot(2,1,1); + hold on; + plot(freqs, abs(squeeze(G(1,1,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(2,2,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(3,3,:))./(-w.^2)), '.') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]); + ylim([1e-9, 2e-6]); + + ax2 = subplot(2,1,2); + hold on; + plot(freqs, 180/pi*angle(squeeze(G(1,1,:))./(-w.^2)), '.', 'DisplayName', '$D_x/F_x$') + plot(freqs, 180/pi*angle(squeeze(G(2,2,:))./(-w.^2)), '.', 'DisplayName', '$D_y/F_y$') + plot(freqs, 180/pi*angle(squeeze(G(3,3,:))./(-w.^2)), '.', 'DisplayName', '$D_z/F_z$') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); + ylim([-180, 180]); + yticks([-180, -90, 0, 90, 180]); + legend('location', 'southwest'); + + linkaxes([ax1,ax2],'x'); + xlim([30, 300]); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace + exportFig('figs/compliance_diagonal_translations.pdf', 'width', 'full', 'height', 'full'); +#+end_src + +#+name: fig:compliance_diagonal_translations +#+caption: Dynamics from Forces to Translations +#+RESULTS: +[[file:figs/compliance_diagonal_translations.png]] + +#+begin_src matlab + figure; + ax1 = subplot(2,1,1); + hold on; + plot(freqs, abs(squeeze(G(4,4,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(5,5,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(6,6,:))./(-w.^2)), '.') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Magnitude [rad/Nm]'); set(gca, 'XTickLabel',[]); + ylim([1e-9, 2e-6]); + + ax2 = subplot(2,1,2); + hold on; + plot(freqs, 180/pi*angle(squeeze(G(4,4,:))./(-w.^2)), '.', 'DisplayName', '$R_x/M_x$') + plot(freqs, 180/pi*angle(squeeze(G(5,5,:))./(-w.^2)), '.', 'DisplayName', '$R_y/M_y$') + plot(freqs, 180/pi*angle(squeeze(G(6,6,:))./(-w.^2)), '.', 'DisplayName', '$R_z/M_z$') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); + ylim([-180, 180]); + yticks([-180, -90, 0, 90, 180]); + legend('location', 'southwest'); + + linkaxes([ax1,ax2],'x'); + xlim([30, 300]); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace + exportFig('figs/compliance_diagonal_rotations.pdf', 'width', 'full', 'height', 'full'); +#+end_src + +#+name: fig:compliance_diagonal_rotations +#+caption: Dynamics from Torques to Rotations +#+RESULTS: +[[file:figs/compliance_diagonal_rotations.png]] + +| | Stiffness | Unit | +|-----------+-----------+----------| +| $K_x$ | 1e7 | [N/m] | +| $K_y$ | 1e7 | [N/m] | +| $K_z$ | 2e8 | [N/m] | +| $K_{R_x}$ | ? | [Nm/rad] | +| $K_{R_y}$ | 1.8e7 | [Nm/rad] | +| $K_{R_z}$ | 1e7 | [Nm/rad] | + +** Compare with Model +#+begin_src matlab + load('./mat/model.mat', 'Gm'); +#+end_src + +#+begin_src matlab + figure; + ax1 = subplot(2,1,1); + hold on; + plot(freqs, abs(squeeze(G(1,1,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(2,2,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(3,3,:))./(-w.^2)), '.') + set(gca,'ColorOrderIndex',1); + plot(freqs, abs(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-') + plot(freqs, abs(squeeze(freqresp(Gm(2,2,:), freqs, 'Hz'))), '-') + plot(freqs, abs(squeeze(freqresp(Gm(3,3,:), freqs, 'Hz'))), '-') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]); + ylim([1e-9, 2e-6]); + + ax2 = subplot(2,1,2); + hold on; + plot(freqs, 180/pi*angle(squeeze(G(1,1,:))./(-w.^2)), '.', 'DisplayName', '$D_x/F_x$') + plot(freqs, 180/pi*angle(squeeze(G(2,2,:))./(-w.^2)), '.', 'DisplayName', '$D_y/F_y$') + plot(freqs, 180/pi*angle(squeeze(G(3,3,:))./(-w.^2)), '.', 'DisplayName', '$D_z/F_z$') + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(2,2,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(3,3,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); + ylim([-180, 180]); + yticks([-180, -90, 0, 90, 180]); + legend('location', 'southwest'); + + linkaxes([ax1,ax2],'x'); + xlim([30, 300]); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace + exportFig('figs/compliance_diagonal_translations_comp_model.pdf', 'width', 'full', 'height', 'full'); +#+end_src + +#+name: fig:compliance_diagonal_translations_comp_model +#+caption: Dynamics from Forces to Translations +#+RESULTS: +[[file:figs/compliance_diagonal_translations_comp_model.png]] + +#+begin_src matlab + figure; + ax1 = subplot(2,1,1); + hold on; + plot(freqs, abs(squeeze(G(4,4,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(5,5,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(6,6,:))./(-w.^2)), '.') + set(gca,'ColorOrderIndex',1); + plot(freqs, abs(squeeze(freqresp(Gm(4,4,:), freqs, 'Hz'))), '-') + plot(freqs, abs(squeeze(freqresp(Gm(5,5,:), freqs, 'Hz'))), '-') + plot(freqs, abs(squeeze(freqresp(Gm(6,6,:), freqs, 'Hz'))), '-') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Magnitude [rad/Nm]'); set(gca, 'XTickLabel',[]); + % ylim([1e-9, 2e-6]); + + ax2 = subplot(2,1,2); + hold on; + plot(freqs, 180/pi*angle(squeeze(G(4,4,:))./(-w.^2)), '.', 'DisplayName', '$R_x/M_x$') + plot(freqs, 180/pi*angle(squeeze(G(5,5,:))./(-w.^2)), '.', 'DisplayName', '$R_y/M_y$') + plot(freqs, 180/pi*angle(squeeze(G(6,6,:))./(-w.^2)), '.', 'DisplayName', '$R_z/M_z$') + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(4,4,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(5,5,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(6,6,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); + ylim([-180, 180]); + yticks([-180, -90, 0, 90, 180]); + legend('location', 'southwest'); + + linkaxes([ax1,ax2],'x'); + xlim([30, 300]); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace + exportFig('figs/compliance_diagonal_rotations_comp_model.pdf', 'width', 'full', 'height', 'full'); +#+end_src + +#+name: fig:compliance_diagonal_rotations_comp_model +#+caption: Dynamics from Torques to Rotations +#+RESULTS: +[[file:figs/compliance_diagonal_rotations_comp_model.png]] + +| | Stiffness | Unit | +|-----------+-----------+----------| +| $K_x$ | 1e7 | [N/m] | +| $K_y$ | 1e7 | [N/m] | +| $K_z$ | 2e8 | [N/m] | +| $K_{R_x}$ | 5e7 | [Nm/rad] | +| $K_{R_y}$ | 3e7 | [Nm/rad] | +| $K_{R_z}$ | 2e7 | [Nm/rad] | + +** Coupling Dynamics +#+begin_src matlab + figure; + ax1 = subplot(2,1,1); + hold on; + plot(freqs, abs(squeeze(G(1,1,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(2,1,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(3,1,:))./(-w.^2)), '.') + set(gca,'ColorOrderIndex',1); + plot(freqs, abs(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-') + plot(freqs, abs(squeeze(freqresp(Gm(2,1,:), freqs, 'Hz'))), '-') + plot(freqs, abs(squeeze(freqresp(Gm(3,1,:), freqs, 'Hz'))), '-') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]); + ylim([1e-9, 2e-6]); + + ax2 = subplot(2,1,2); + hold on; + plot(freqs, 180/pi*angle(squeeze(G(1,1,:))./(-w.^2)), '.', 'DisplayName', '$D_x/F_x$') + plot(freqs, 180/pi*angle(squeeze(G(2,1,:))./(-w.^2)), '.', 'DisplayName', '$D_y/F_x$') + plot(freqs, 180/pi*angle(squeeze(G(3,1,:))./(-w.^2)), '.', 'DisplayName', '$D_z/F_x$') + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(2,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(3,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); + ylim([-180, 180]); + yticks([-180, -90, 0, 90, 180]); + legend('location', 'southwest'); + + linkaxes([ax1,ax2],'x'); + xlim([30, 300]); +#+end_src + +#+begin_src matlab + figure; + ax1 = subplot(2,1,1); + hold on; + plot(freqs, abs(squeeze(G(5,1,:))./(-w.^2)), '.') + plot(freqs, abs(squeeze(G(4,2,:))./(-w.^2)), '.') + set(gca,'ColorOrderIndex',1); + plot(freqs, abs(squeeze(freqresp(Gm(5,1,:), freqs, 'Hz'))), '-') + plot(freqs, abs(squeeze(freqresp(Gm(4,2,:), freqs, 'Hz'))), '-') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]); + ylim([1e-9, 2e-6]); + + ax2 = subplot(2,1,2); + hold on; + plot(freqs, 180/pi*angle(squeeze(G(5,1,:))./(-w.^2)), '.', 'DisplayName', '$R_y/F_x$') + plot(freqs, 180/pi*angle(squeeze(G(4,2,:))./(-w.^2)), '.', 'DisplayName', '$R_x/F_y$') + set(gca,'ColorOrderIndex',1); + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(5,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(4,2,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); + xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); + ylim([-180, 180]); + yticks([-180, -90, 0, 90, 180]); + legend('location', 'southwest'); + + linkaxes([ax1,ax2],'x'); + xlim([30, 300]); +#+end_src + diff --git a/micro-station-compliance/mat/model.mat b/micro-station-compliance/mat/model.mat new file mode 100644 index 0000000..efe4d7b Binary files /dev/null and b/micro-station-compliance/mat/model.mat differ