diff --git a/Identification/identificationTransmissibility.m b/Identification/identificationTransmissibility.m deleted file mode 100644 index e69de29..0000000 diff --git a/Identification/identification_G.m b/identification/id_G.m similarity index 100% rename from Identification/identification_G.m rename to identification/id_G.m diff --git a/identification/id_G_plots.m b/identification/id_G_plots.m index 7395966..429df4a 100644 --- a/identification/id_G_plots.m +++ b/identification/id_G_plots.m @@ -12,21 +12,21 @@ legend({'$F_{n_x} \rightarrow D_{x}$ - $M = 1Kg$', ... '$F_{n_y} \rightarrow D_{y}$ - $M = 1Kg$', ... '$F_{n_z} \rightarrow D_{z}$ - $M = 1Kg$'}) legend('location', 'southwest') -exportFig('G_xyz_1', 'normal-normal') +exportFig('G_xyz_1', 'normal-normal', struct('path', 'identification')) bodeFig({G_20(1, 1), G_20(2, 2), G_20(3, 3)}, struct('phase', true)) legend({'$F_{n_x} \rightarrow D_{x}$ - $M = 20Kg$', ... '$F_{n_y} \rightarrow D_{y}$ - $M = 20Kg$', ... '$F_{n_z} \rightarrow D_{z}$ - $M = 20Kg$'}) legend('location', 'southwest') -exportFig('G_xyz_20', 'normal-normal') +exportFig('G_xyz_20', 'normal-normal', struct('path', 'identification')) bodeFig({G_1(1, 1), G_20(1, 1), G_50(1, 1)}, struct('phase', true)) legend({'$F_{n_x} \rightarrow D_{x}$ - $M = 1Kg$', ... '$F_{n_x} \rightarrow D_{x}$ - $M = 20Kg$', ... '$F_{n_x} \rightarrow D_{x}$ - $M = 50Kg$'}) legend('location', 'southwest') -exportFig('G_x_mass', 'normal-normal') +exportFig('G_x_mass', 'normal-normal', struct('path', 'identification')) bodeFig({G_1(2, 2), G_20(2, 2), G_50(2, 2)}, struct('phase', true)) legend({'$F_{n_y} \rightarrow D_{y}$ - $M = 1Kg$', ... @@ -40,7 +40,7 @@ legend({'$F_{n_z} \rightarrow D_{z}$ - $M = 1Kg$', ... '$F_{n_z} \rightarrow D_{z}$ - $M = 20Kg$', ... '$F_{n_z} \rightarrow D_{z}$ - $M = 50Kg$'}) legend('location', 'southwest') -exportFig('G_z_mass', 'normal-normal') +exportFig('G_z_mass', 'normal-normal', struct('path', 'identification')) %% @@ -48,7 +48,7 @@ bodeFig({G_1(2, 2), G_20(2, 2), G_50(2, 2)}, freqs, struct('phase', true)) legend({'$M = 1Kg$', ... '$M = 20Kg$', ... '$M = 50Kg$'}) -exportFig('G_y_mass_article', 'half-normal') +exportFig('G_y_mass_article', 'half-normal', struct('path', 'identification')) %% freqs = logspace(-1, 3, 1000); @@ -60,4 +60,4 @@ legend({'$1Kg$', ... legend('location', 'southwest') set(gca,'YTick',[1e-8, 1e-6, 1e-4]) ylim([1e-9, 1e-3]) -exportFig('G_x_mass', 'half-short') +exportFig('G_x_mass', 'half-short', struct('path', 'identification')) diff --git a/Identification/identification_Gd.m b/identification/id_Gd.m similarity index 67% rename from Identification/identification_Gd.m rename to identification/id_Gd.m index 9d10469..ef72575 100644 --- a/Identification/identification_Gd.m +++ b/identification/id_Gd.m @@ -15,12 +15,5 @@ initializeSimConf(struct('cl_time', 0)); %% Close Loop [Gd_cl_20, Gd_cl_20_raw] = identifyGd(struct('cl', true)); -%% -freqs = logspace(0, 3, 1000); -bodeFig({Gd_ol_20(1, 1), Gd_cl_20(1, 1)}, freqs, struct('ylabel', 'Amplitude [m/m]')) -legend({'OL', 'CL'}); - -exportFig('transmissibility_ol_cl', 'half-normal'); - -%% +%% Save the identified transfer functions save('./mat/Gd_ol_cl.mat', 'Gd_ol_20', 'Gd_cl_20'); diff --git a/identification/id_Gd_plots.m b/identification/id_Gd_plots.m new file mode 100644 index 0000000..b892a71 --- /dev/null +++ b/identification/id_Gd_plots.m @@ -0,0 +1,12 @@ +%% +clear; close all; clc; + +%% Load the identified transfer functions +load('./mat/Gd_ol_cl.mat', 'Gd_ol_20', 'Gd_cl_20'); + +%% +freqs = logspace(0, 3, 1000); +bodeFig({Gd_ol_20(1, 1), Gd_cl_20(1, 1)}, freqs, struct('ylabel', 'Amplitude [m/m]')) +legend({'OL', 'CL'}); + +exportFig('transmissibility_ol_cl', 'half-normal', struct('path', 'identification')); diff --git a/identification/id_main.m b/identification/id_main.m new file mode 100644 index 0000000..c401d9b --- /dev/null +++ b/identification/id_main.m @@ -0,0 +1,37 @@ +%% +clear; close all; clc; + +%% Plant Identification +% Compute the transfer function of G for multiple masses +run id_G.m + +% Plot de obtained transfer functions +run id_G_plots.m + +%% Identification of transfer function from ground motion to displacement +% Compute the transfer function of Gd +run id_Gd.m + +% Plot de obtained transfer functions +run id_Gd_plots.m + +%% Identification of the micro-station +% Compute the transfer functions +run id_micro_station.m + +% Plot de obtained transfer functions +run id_micro_station_plots.m + +%% Identification of all the stages +% Compute the transfer functions of each stage from act. to sens. +run id_stages.m + +% Plot de obtained transfer functions +run id_stages_plots.m + +%% Identification of the nass +% Compute the transfer functions +run id_nass.m + +% Plot de obtained transfer functions +run id_nass.m diff --git a/Identification/identification_marc.m b/identification/id_micro_station.m similarity index 59% rename from Identification/identification_marc.m rename to identification/id_micro_station.m index f18f818..2304218 100644 --- a/Identification/identification_marc.m +++ b/identification/id_micro_station.m @@ -27,12 +27,6 @@ G_h_h = preprocessIdTf(G_h_h_raw, 10, 10000); G_h_h.InputName = {'Fux', 'Fuy', 'Fuz'}; G_h_h.OutputName = {'Dux', 'Duy', 'Duz'}; -% Bode Plot of the linearized function -bodeFig({G_h_h(1, 1), G_h_h(2, 2), G_h_h(3, 3)}) -legend({'$F_{h_x} \rightarrow D_{h_x}$', '$F_{h_y} \rightarrow D_{h_y}$', '$F_{h_z} \rightarrow D_{h_z}$'}) -legend('location', 'southwest') -exportFig('id_marc_h_to_h', 'normal-normal', struct('path', 'Identification')) - %% Granite % Input/Output definition io(1) = linio([mdl, '/Micro-Station/F_granite'],1,'input'); @@ -46,12 +40,6 @@ G_g_g = preprocessIdTf(G_g_g_raw, 10, 10000); G_g_g.InputName = {'Fgx', 'Fgy', 'Fgz'}; G_g_g.OutputName = {'Dgx', 'Dgy', 'Dgz'}; -% Bode Plot of the linearized function -bodeFig({G_g_g(1, 1), G_g_g(2, 2), G_g_g(3, 3)}) -legend({'$F_{g_x} \rightarrow D_{g_x}$', '$F_{g_y} \rightarrow D_{g_y}$', '$F_{g_z} \rightarrow D_{g_z}$'}) -legend('location', 'southwest') -exportFig('id_marc_g_to_g', 'normal-normal', struct('path', 'Identification')) - %% Micro Hexapod to Granite % Input/Output definition io(1) = linio([mdl, '/Micro-Station/Fm'],1,'input'); @@ -66,13 +54,5 @@ G_h_g = preprocessIdTf(G_h_g_raw, 10, 10000); G_h_g.InputName = {'Fhx', 'Fhy', 'Fhz'}; G_h_g.OutputName = {'Dgx', 'Dgy', 'Dgz'}; -% Bode Plot of the linearized function -bodeFig({G_h_g(1, 1), G_h_g(2, 2), G_h_g(3, 3)}) -legend({'$F_{h_x} \rightarrow D_{g_x}$', '$F_{h_y} \rightarrow D_{g_y}$', '$F_{h_z} \rightarrow D_{g_z}$'}) -legend('location', 'southwest') -exportFig('id_marc_h_to_g', 'normal-normal', struct('path', 'Identification')) - -%% -save('./mat/id_G_h_h.mat', 'G_h_h'); -save('./mat/id_G_g_g.mat', 'G_g_g'); -save('./mat/id_G_h_g.mat', 'G_h_g'); +%% Save the obtained transfer functions +save('./mat/id_micro_station.mat', 'G_h_h', 'G_g_g', 'G_h_g'); diff --git a/identification/id_micro_station_plots.m b/identification/id_micro_station_plots.m new file mode 100644 index 0000000..47f287c --- /dev/null +++ b/identification/id_micro_station_plots.m @@ -0,0 +1,29 @@ +%% +clear; close all; clc; + +%% Load the obtained transfer functions +load('./mat/id_micro_station.mat', 'G_h_h', 'G_g_g', 'G_h_g'); + +%% Micro-Hexapod + +bodeFig({G_h_h(1, 1), G_h_h(2, 2), G_h_h(3, 3)}) +legend({'$F_{h_x} \rightarrow D_{h_x}$', '$F_{h_y} \rightarrow D_{h_y}$', '$F_{h_z} \rightarrow D_{h_z}$'}) +legend('location', 'southwest') +exportFig('id_marc_h_to_h', 'normal-normal', struct('path', 'identification')) + +%% Granite + +% Bode Plot of the linearized function +bodeFig({G_g_g(1, 1), G_g_g(2, 2), G_g_g(3, 3)}) +legend({'$F_{g_x} \rightarrow D_{g_x}$', '$F_{g_y} \rightarrow D_{g_y}$', '$F_{g_z} \rightarrow D_{g_z}$'}) +legend('location', 'southwest') +exportFig('id_marc_g_to_g', 'normal-normal', struct('path', 'identification')) + +%% Micro Hexapod to Granite + +% Bode Plot of the linearized function +bodeFig({G_h_g(1, 1), G_h_g(2, 2), G_h_g(3, 3)}) +legend({'$F_{h_x} \rightarrow D_{g_x}$', '$F_{h_y} \rightarrow D_{g_y}$', '$F_{h_z} \rightarrow D_{g_z}$'}) +legend('location', 'southwest') +exportFig('id_marc_h_to_g', 'normal-normal', struct('path', 'identification')) + diff --git a/identification/id_nass.m b/identification/id_nass.m new file mode 100644 index 0000000..ac4bb19 --- /dev/null +++ b/identification/id_nass.m @@ -0,0 +1,24 @@ +%% Script Description +% Identification of the NASS from cartesian actuation +% to cartesian displacement. + +%% +clear; close all; clc; + +%% +initializeSample(struct('mass', 1)); + +G_nass_1 = identifyNass(); + +%% +initializeSample(struct('mass', 20)); + +G_nass_20 = identifyNass(); + +%% +initializeSample(struct('mass', 50)); + +G_nass_50 = identifyNass(); + +%% Save Transfer Functions +save('./mat/G_nass.mat', 'G_nass_1', 'G_nass_20', 'G_nass_50'); diff --git a/Identification/identification_NASS.m b/identification/id_nass_plots.m similarity index 66% rename from Identification/identification_NASS.m rename to identification/id_nass_plots.m index 7bafb42..d3d3404 100644 --- a/Identification/identification_NASS.m +++ b/identification/id_nass_plots.m @@ -1,24 +1,8 @@ -%% Script Description -% Identification of the NASS from cartesian actuation -% to cartesian displacement. - %% clear; close all; clc; -%% -initializeSample(struct('mass', 1)); - -G_nass_1 = identifyNass(); - -%% -initializeSample(struct('mass', 20)); - -G_nass_20 = identifyNass(); - -%% -initializeSample(struct('mass', 50)); - -G_nass_50 = identifyNass(); +%% Load Transfer Functions +load('./mat/G_nass.mat', 'G_nass_1', 'G_nass_20', 'G_nass_50'); %% freqs = logspace(1, 4, 1000); @@ -28,28 +12,25 @@ legend({'$F_{n_x} \rightarrow D_{n_x}$ - $M = 1Kg$', ... '$F_{n_y} \rightarrow D_{n_y}$ - $M = 1Kg$', ... '$F_{n_z} \rightarrow D_{n_z}$ - $M = 1Kg$'}) legend('location', 'southwest') -exportFig('nass_cart_xyz', 'normal-normal') +exportFig('nass_cart_xyz', 'normal-normal', struct('path', 'identification')) bodeFig({G_nass_1(1, 1), G_nass_20(1, 1), G_nass_50(1, 1)}, struct('phase', true)) legend({'$F_{n_x} \rightarrow D_{n_x}$ - $M = 1Kg$', ... '$F_{n_x} \rightarrow D_{n_x}$ - $M = 20Kg$', ... '$F_{n_x} \rightarrow D_{n_x}$ - $M = 50Kg$'}) legend('location', 'southwest') -exportFig('nass_cart_x_mass', 'normal-normal') +exportFig('nass_cart_x_mass', 'normal-normal', struct('path', 'identification')) bodeFig({G_nass_1(2, 2), G_nass_20(2, 2), G_nass_50(2, 2)}, struct('phase', true)) legend({'$F_{n_x} \rightarrow D_{n_x}$ - $M = 1Kg$', ... '$F_{n_x} \rightarrow D_{n_x}$ - $M = 20Kg$', ... '$F_{n_x} \rightarrow D_{n_x}$ - $M = 50Kg$'}) legend('location', 'southwest') -exportFig('nass_cart_y_mass', 'normal-normal') +exportFig('nass_cart_y_mass', 'normal-normal', struct('path', 'identification')) bodeFig({G_nass_1(3, 3), G_nass_20(3, 3), G_nass_50(3, 3)}, struct('phase', true)) legend({'$F_{n_z} \rightarrow D_{n_z}$ - $M = 1Kg$', ... '$F_{n_z} \rightarrow D_{n_z}$ - $M = 20Kg$', ... '$F_{n_z} \rightarrow D_{n_z}$ - $M = 50Kg$'}) legend('location', 'southwest') -exportFig('nass_cart_z_mass', 'normal-normal') - -%% Save Transfer Functions -save('./mat/G_nass.mat', 'G_nass_1', 'G_nass_20', 'G_nass_50'); +exportFig('nass_cart_z_mass', 'normal-normal', struct('path', 'identification')) diff --git a/Identification/identification_stages_run.m b/identification/id_stages.m similarity index 100% rename from Identification/identification_stages_run.m rename to identification/id_stages.m diff --git a/Identification/identification_stages_plot.m b/identification/id_stages_plots.m similarity index 66% rename from Identification/identification_stages_plot.m rename to identification/id_stages_plots.m index 0c23946..ffabf71 100644 --- a/Identification/identification_stages_plot.m +++ b/identification/id_stages_plots.m @@ -6,45 +6,45 @@ clear; close all; clc %% Load Data -load('./mat/identified_tf.mat'); +load('./mat/identified_tf.mat', 'G_ty', 'G_ry', 'G_rz', 'G_hexa', 'G_nass'); %% Y-Translation Stage bodeFig({G_ty}, struct('phase', true)) legend({'$F_{y} \rightarrow D_{y}$'}) -exportFig('id_ty', 'normal-normal') +exportFig('id_ty', 'normal-normal', struct('path', 'identification')) %% Tilt Stage bodeFig({G_ry}, struct('phase', true)) legend({'$M_{y} \rightarrow R_{y}$'}) -exportFig('id_ry', 'normal-normal') +exportFig('id_ry', 'normal-normal', struct('path', 'identification')) %% Spindle bodeFig({G_rz}, struct('phase', true)) legend({'$M_{z} \rightarrow R_{z}$'}) -exportFig('id_ry', 'normal-normal') +exportFig('id_ry', 'normal-normal', struct('path', 'identification')) %% Hexapod Symetrie bodeFig({G_hexa(1, 1), G_hexa(2, 2), G_hexa(3, 3)}, struct('phase', true)) legend({'$F_{h_x} \rightarrow D_{h_x}$', '$F_{h_y} \rightarrow D_{h_y}$', '$F_{h_z} \rightarrow D_{h_z}$'}) -exportFig('id_hexapod_trans', 'normal-normal') +exportFig('id_hexapod_trans', 'normal-normal', struct('path', 'identification')) bodeFig({G_hexa(4, 4), G_hexa(5, 5), G_hexa(6, 6)}, struct('phase', true)) legend({'$M_{h_x} \rightarrow R_{h_x}$', '$M_{h_y} \rightarrow R_{h_y}$', '$M_{h_z} \rightarrow R_{h_z}$'}) -exportFig('id_hexapod_rot', 'normal-normal') +exportFig('id_hexapod_rot', 'normal-normal', struct('path', 'identification')) bodeFig({G_hexa(1, 1), G_hexa(2, 1), G_hexa(3, 1)}, struct('phase', true)) legend({'$F_{h_x} \rightarrow D_{h_x}$', '$F_{h_x} \rightarrow D_{h_y}$', '$F_{h_x} \rightarrow D_{h_z}$'}) -exportFig('id_hexapod_coupling', 'normal-normal') +exportFig('id_hexapod_coupling', 'normal-normal', struct('path', 'identification')) %% NASS bodeFig({G_nass(1, 1), G_nass(2, 2), G_nass(3, 3)}, struct('phase', true)) legend({'$F_{n_x} \rightarrow D_{n_x}$', '$F_{n_y} \rightarrow D_{n_y}$', '$F_{n_z} \rightarrow D_{n_z}$'}) -exportFig('id_nass_trans', 'normal-normal') +exportFig('id_nass_trans', 'normal-normal', struct('path', 'identification')) bodeFig({G_nass(4, 4), G_nass(5, 5), G_nass(6, 6)}, struct('phase', true)) legend({'$M_{n_x} \rightarrow R_{n_x}$', '$M_{n_y} \rightarrow R_{n_y}$', '$M_{n_z} \rightarrow R_{n_z}$'}) -exportFig('id_nass_rot', 'normal-normal') +exportFig('id_nass_rot', 'normal-normal', struct('path', 'identification')) bodeFig({G_nass(1, 1), G_nass(2, 1), G_nass(3, 1)}, struct('phase', true)) legend({'$F_{n_x} \rightarrow D_{n_x}$', '$F_{n_x} \rightarrow D_{n_y}$', '$F_{n_x} \rightarrow D_{n_z}$'}) -exportFig('id_nass_coupling', 'normal-normal') +exportFig('id_nass_coupling', 'normal-normal', struct('path', 'identification')) diff --git a/init_perturbations.m b/init_perturbations.m index 6453520..f9e4498 100644 --- a/init_perturbations.m +++ b/init_perturbations.m @@ -10,3 +10,8 @@ Wxg = Wxg*(s/(0.5e6)^(1/3) + 2*pi*10)^3/(s + 2*pi*10)^3; Wxg = Wxg/(1+s/(2*pi*2000)); save('./mat/weight_Wxg.mat', 'Wxg'); + +%% Sensor Noise +Wn = tf(1e-12); + +save('./mat/weight_Wn.mat', 'Wn'); diff --git a/main.m b/main.m index 01d88a4..9d00f84 100644 --- a/main.m +++ b/main.m @@ -15,4 +15,7 @@ run init_data.m run run_simulations.m %% Demonstration of displacement of all the stages -run init_data_demonstration.m \ No newline at end of file +run init_data_demonstration.m + +%% Identification +open id_main.m