diff --git a/identification/index.html b/identification/index.html index 7652f1f..6fe712b 100644 --- a/identification/index.html +++ b/identification/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +-The goal here is to make an identification of the micro-station in order to compare the model with the measurements on the real micro-station. +The goal here is to make an identification of the micro-station in order to compare the model with the measurements on the real micro-station.
@@ -288,41 +313,462 @@ One solution could be to use one STEP file for one solid body. However, the position of the center of mass can be exported using simulink and then defined on Simscape.
-
-All the files (data and Matlab scripts) are accessible here.
+We first define some parameters for the identification.
+The simulink file for the identification is sim_micro_station_id.slx
.
simulinkproject('../'); +open('identification/matlab/sim_micro_station_id.slx')
open sim_micro_station_id.slx +%% Options for Linearized +options = linearizeOptions; +options.SampleTime = 0; + +%% Name of the Simulink File +mdl = 'sim_micro_station_id'; ++
%% Micro-Hexapod +% Input/Output definition +io(1) = linio([mdl, '/Micro-Station/Fm_ext'],1,'openinput'); +io(2) = linio([mdl, '/Micro-Station/Fg_ext'],1,'openinput'); +io(3) = linio([mdl, '/Micro-Station/Dm_inertial'],1,'output'); +io(4) = linio([mdl, '/Micro-Station/Ty_inertial'],1,'output'); +io(5) = linio([mdl, '/Micro-Station/Ry_inertial'],1,'output'); +io(6) = linio([mdl, '/Micro-Station/Dg_inertial'],1,'output'); ++
% Run the linearization +G_ms = linearize(mdl, io, 0); + +% Input/Output names +G_ms.InputName = {'Fmx', 'Fmy', 'Fmz',... + 'Fgx', 'Fgy', 'Fgz'}; +G_ms.OutputName = {'Dmx', 'Dmy', 'Dmz', ... + 'Tyx', 'Tyy', 'Tyz', ... + 'Ryx', 'Ryy', 'Ryz', ... + 'Dgx', 'Dgy', 'Dgz'}; ++
%% Save the obtained transfer functions +save('./mat/id_micro_station.mat', 'G_ms');
open('identification/matlab/sim_micro_station_modal_analysis.slx') ++
%% Options for Linearized +options = linearizeOptions; +options.SampleTime = 0; + +%% Name of the Simulink File +mdl = 'sim_micro_station_modal_analysis'; ++
%% Micro-Hexapod +% Input/Output definition +io(1) = linio([mdl, '/Micro-Station/F_hammer'],1,'openinput'); +io(2) = linio([mdl, '/Micro-Station/acc9'],1,'output'); +io(3) = linio([mdl, '/Micro-Station/acc10'],1,'output'); +io(4) = linio([mdl, '/Micro-Station/acc11'],1,'output'); +io(5) = linio([mdl, '/Micro-Station/acc12'],1,'output'); ++
% Run the linearization +G_ms = linearize(mdl, io, 0); + +% Input/Output names +G_ms.InputName = {'Fx', 'Fy', 'Fz'}; +G_ms.OutputName = {'x9', 'y9', 'z9', ... + 'x10', 'y10', 'z10', ... + 'x11', 'y11', 'z11', ... + 'x12', 'y12', 'z12'}; ++
figure; +hold on; +plot(freqs, abs(squeeze(freqresp(G_ms('x9', 'Fx'), freqs, 'Hz')))); +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +ylabel('Amplitude [m/N]'); +hold off; ++
load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs'); ++
dirs = {'x', 'y', 'z'}; + +n_acc = 9; +n_dir = 1; % x, y, z +n_exc = 1; % x, y, z + +figure; +hold on; +plot(freqs, abs(squeeze(FRFs(3*(n_acc-1) + n_dir, n_exc, :)))./((2*pi*freqs).^2)'); +plot(freqs, abs(squeeze(freqresp(G_ms([dirs{n_dir}, num2str(n_acc)], ['F', dirs{n_dir}]), freqs, 'Hz')))); +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +ylabel('Amplitude [m/N]'); +hold off; ++
initializeGround(); +initializeGranite(); +initializeTy(); +initializeRy(); +initializeRz(); +initializeMicroHexapod(); +initializeAxisc(); ++
[ ]
Verify that this is coherent with the simscape and with the measurements+ | granite bot | +granite top | +ty | +ry | +rz | +hexa | +
---|---|---|---|---|---|---|
X [mm] | +45 | +52 | +0 | +0 | +0 | +-4 | +
Y [mm] | +144 | +258 | +14 | +-5 | +0 | +6 | +
Z [mm] | +-1251 | +-778 | +-600 | +-628 | +-580 | +-319 | +
open('identification/matlab/sim_micro_station_modal_analysis_com.slx') ++
%% Options for Linearized +options = linearizeOptions; +options.SampleTime = 0; + +%% Name of the Simulink File +mdl = 'sim_micro_station_modal_analysis_com'; ++
%% Micro-Hexapod +% Input/Output definition +io(1) = linio([mdl, '/Micro-Station/F_hammer'],1,'openinput'); +io(2) = linio([mdl, '/Micro-Station/acc_gtop'],1,'output'); +io(3) = linio([mdl, '/Micro-Station/acc_ty'],1,'output'); +io(4) = linio([mdl, '/Micro-Station/acc_ry'],1,'output'); +io(5) = linio([mdl, '/Micro-Station/acc_rz'],1,'output'); +io(6) = linio([mdl, '/Micro-Station/acc_hexa'],1,'output'); ++
% Run the linearization +G_ms = linearize(mdl, io, 0); + +% Input/Output names +G_ms.InputName = {'Fx', 'Fy', 'Fz'}; +G_ms.OutputName = {'gtop_x', 'gtop_y', 'gtop_z', 'gtop_rx', 'gtop_ry', 'gtop_rz', ... + 'ty_x', 'ty_y', 'ty_z', 'ty_rx', 'ty_ry', 'ty_rz', ... + 'ry_x', 'ry_y', 'ry_z', 'ry_rx', 'ry_ry', 'ry_rz', ... + 'rz_x', 'rz_y', 'rz_z', 'rz_rx', 'rz_ry', 'rz_rz', ... + 'hexa_x', 'hexa_y', 'hexa_z', 'hexa_rx', 'hexa_ry', 'hexa_rz'}; ++
load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'freqs'); +load('../meas/modal-analysis/mat/frf_com.mat', 'FRFs_CoM'); ++
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'}; +stages = {'gbot', 'gtop', 'ty', 'ry', 'rz', 'hexa'} + +n_stg = 2; +n_dir = 5; % x, y, z, Rx, Ry, Rz +n_exc = 2; % x, y, z + +f = logspace(0, 3, 1000); + +figure; +hold on; +plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg-1) + n_dir, n_exc, :)))./((2*pi*freqs).^2)'); +plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_exc}]), f, 'Hz')))); +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +ylabel('Amplitude [m/N]'); +hold off; +xlim([1, 200]); ++
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'}; +stages = {'gtop', 'ty', 'ry', 'rz', 'hexa'} + +f = logspace(1, 3, 1000); + +figure; +for n_stg = 1:2 + for n_dir = 1:3 + subplot(3, 2, (n_dir-1)*2 + n_stg); + title(['F ', dirs{n_dir}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]); + hold on; + plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg) + n_dir, n_dir, :)))./((2*pi*freqs).^2)'); + plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_dir}]), f, 'Hz')))); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); + if n_dir == 3 + xlabel('Frequency [Hz]'); + end + hold off; + xlim([10, 1000]); + ylim([1e-12, 1e-6]); + end +end ++
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'}; +stages = {'ry', 'rz', 'hexa'} + +f = logspace(1, 3, 1000); + +figure; +for n_stg = 1:2 + for n_dir = 1:3 + subplot(3, 2, (n_dir-1)*2 + n_stg); + title(['F ', dirs{n_dir}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]); + hold on; + plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg+2) + n_dir, n_dir, :)))./((2*pi*freqs).^2)'); + plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_dir}]), f, 'Hz')))); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); + if n_dir == 3 + xlabel('Frequency [Hz]'); + end + hold off; + xlim([10, 1000]); + ylim([1e-12, 1e-6]); + end +end ++
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'}; +stages = {'hexa'} + +f = logspace(1, 3, 1000); + +figure; +for n_stg = 1 + for n_dir = 1:3 + subplot(3, 1, (n_dir-1)*2 + n_stg); + title(['F ', dirs{n_dir}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]); + hold on; + plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg+4) + n_dir, n_dir, :)))./((2*pi*freqs).^2)'); + plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_dir}]), f, 'Hz')))); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); + if n_dir == 3 + xlabel('Frequency [Hz]'); + end + hold off; + xlim([10, 1000]); + ylim([1e-12, 1e-6]); + end +end ++