[major-changes] use of referenced model, use of variable step solver

This commit is contained in:
Thomas Dehaeze 2018-10-29 12:57:13 +01:00
parent 5e6f1dbc38
commit fa3658509c
43 changed files with 157 additions and 225 deletions

View File

@ -1,75 +0,0 @@
%% Load open loop data
% gm_ol = load('../data/ground_motion_001.mat');
%%
clear; close all; clc;
%%
sim Assemblage;
%%
Dsample.Data = Dsample.Data - Dsample.Data(1, :);
%% Time domain X-Y-Z
figure;
hold on;
plot(Dsample.Time, Dsample.Data(:, 1));
plot(Dsample.Time, Dsample.Data(:, 2));
plot(Dsample.Time, Dsample.Data(:, 3));
legend({'x', 'y', 'z'})
hold off;
xlabel('Time [s]'); ylabel('Displacement [m]');
exportFig('tomo_time_translations', 'normal-normal')
%% Time domain angles
figure;
hold on;
plot(Dsample.Time, Dsample.Data(:, 4));
plot(Dsample.Time, Dsample.Data(:, 5));
plot(Dsample.Time, Dsample.Data(:, 6));
legend({'$\theta_x$', '$\theta_y$', '$\theta_z$'})
hold off;
xlabel('Time [s]'); ylabel('Angle [rad]');
exportFig('tomo_time_rotations', 'normal-normal')
%% PSD X-Y-Z
han_windows = hanning(ceil(length(Dsample.Time)/10));
[psd_x, freqs_x] = pwelch(Dsample.Data(:, 1), han_windows, 0, [], 1/Ts);
[psd_y, freqs_y] = pwelch(Dsample.Data(:, 2), han_windows, 0, [], 1/Ts);
[psd_z, freqs_z] = pwelch(Dsample.Data(:, 3), han_windows, 0, [], 1/Ts);
figure;
hold on;
plot(freqs_x, sqrt(psd_x));
plot(freqs_y, sqrt(psd_y));
plot(freqs_z, sqrt(psd_z));
set(gca,'xscale','log'); set(gca,'yscale','log');
xlabel('Frequency [Hz]'); ylabel('PSD [$m/\sqrt{Hz}$]');
legend({'x', 'y', 'z'})
hold off;
exportFig('tomo_psd_translations', 'normal-normal')
%% PSD
han_windows = hanning(ceil(length(Dsample.Time)/10));
[psd_x, freqs_x] = pwelch(Dsample.Data(:, 4), han_windows, 0, [], 1/Ts);
[psd_y, freqs_y] = pwelch(Dsample.Data(:, 5), han_windows, 0, [], 1/Ts);
[psd_z, freqs_z] = pwelch(Dsample.Data(:, 6), han_windows, 0, [], 1/Ts);
figure;
hold on;
plot(freqs_x, sqrt(psd_x));
plot(freqs_y, sqrt(psd_y));
plot(freqs_z, sqrt(psd_z));
set(gca,'xscale','log'); set(gca,'yscale','log');
xlabel('Frequency [Hz]'); ylabel('PSD [$rad/s/\sqrt{Hz}$]');
legend({'$\theta_x$', '$\theta_y$', '$\theta_z$'})
hold off;
exportFig('tomo_psd_rotations', 'normal-normal')
%%
save('./data/ground_motion.mat', 'Dsample')

Binary file not shown.

Binary file not shown.

View File

@ -2,4 +2,4 @@
clear; close all; clc; clear; close all; clc;
%% %%
sim('Micro_Station_Displacement.slx'); sim('sim_nano_station_disp.slx');

View File

@ -3,7 +3,7 @@ clear; close all; clc;
%% Initialize simulation configuration %% Initialize simulation configuration
opts_sim = struct(... opts_sim = struct(...
'Tsim', 1 ... 'Tsim', 0.1 ...
); );
initializeSimConf(opts_sim); initializeSimConf(opts_sim);
@ -14,36 +14,33 @@ load('./mat/sim_conf.mat', 'sim_conf')
time_vector = 0:sim_conf.Ts:sim_conf.Tsim; time_vector = 0:sim_conf.Ts:sim_conf.Tsim;
% Translation Stage % Translation Stage
ty = 0*ones(length(time_vector), 1); Ty = 0.20*ones(length(time_vector), 1);
% Tilt Stage % Tilt Stage
ry = 2*pi*(0/360)*ones(length(time_vector), 1); Ry = 2*pi*(3/360)*ones(length(time_vector), 1);
% ry = 2*pi*(3/360)*sin(2*pi*time_vector); % Ry = 2*pi*(3/360)*sin(2*pi*time_vector);
% Spindle % Spindle
rz = 2*pi*1*(time_vector); Rz = 2*pi*3*(time_vector);
% rz = 2*pi*(190/360)*ones(length(time_vector), 1); % Rz = 2*pi*(190/360)*ones(length(time_vector), 1);
% Micro Hexapod % Micro Hexapod
u_hexa = zeros(length(time_vector), 6); Dh = zeros(length(time_vector), 6);
% Gravity Compensator system % Gravity Compensator system
mass = zeros(length(time_vector), 2); Dm = zeros(length(time_vector), 2);
mass(:, 2) = pi; Dm(:, 2) = pi;
opts_inputs = struct(... opts_inputs = struct(...
'ty', ty, ... 'Ty', Ty, ...
'ry', ry, ... 'Ry', Ry, ...
'rz', rz, ... 'Rz', Rz, ...
'u_hexa', u_hexa, ... 'Dh', Dh, ...
'mass', mass ... 'Dm', Dm ...
); );
initializeInputs(opts_inputs); initializeInputs(opts_inputs);
%% Initialize SolidWorks Data
initializeSolids();
%% Initialize Ground %% Initialize Ground
initializeGround(); initializeGround();

View File

@ -2,4 +2,4 @@
clear; close all; clc; clear; close all; clc;
%% %%
sim('Micro_Station_Displacement.slx'); sim('sim_nano_station_disp.slx');

Binary file not shown.

View File

@ -13,7 +13,7 @@ options = linearizeOptions;
options.SampleTime = 0; options.SampleTime = 0;
%% Name of the Simulink File %% Name of the Simulink File
mdl = 'sim_micro_station'; mdl = 'sim_micro_station_id';
%% Micro-Hexapod %% Micro-Hexapod
% Input/Output definition % Input/Output definition

View File

@ -11,7 +11,7 @@ options = linearizeOptions;
options.SampleTime = 0; options.SampleTime = 0;
%% Name of the Simulink File %% Name of the Simulink File
mdl = 'sim_micro_station'; mdl = 'sim_micro_station_id';
%% Micro-Hexapod %% Micro-Hexapod
% Input/Output definition % Input/Output definition

View File

@ -13,7 +13,7 @@ options = linearizeOptions;
options.SampleTime = 0; options.SampleTime = 0;
%% Name of the Simulink File %% Name of the Simulink File
mdl = 'sim_nano_station'; mdl = 'sim_nano_station_id';
%% Y-Translation Stage %% Y-Translation Stage
% Input/Output definition % Input/Output definition

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -11,15 +11,12 @@ initializeSimConf(opts_sim);
%% Initialize Inputs %% Initialize Inputs
opts_inputs = struct(... opts_inputs = struct(...
'Dw', true, ... 'Dw', true, ...
'ry', false, ... 'Ry', false, ...
'Rz', true ... 'Rz', true ...
); );
initializeInputs(opts_inputs); initializeInputs(opts_inputs);
%% Initialize Solids
initializeSolids();
%% Initialize Ground %% Initialize Ground
initializeGround(); initializeGround();

View File

@ -5,13 +5,15 @@
load('./mat/sim_conf.mat'); load('./mat/sim_conf.mat');
%% Load SolidWorks Data %% Load SolidWorks Data
load('./mat/solids.mat'); % load('./mat/solids.mat');
%% Load data of each stage %% Load data of each stage
load('./mat/stages.mat'); % TODO - This is now loaded by mask of each stage
% load('./mat/stages.mat');
%% Load Signals Applied to the system %% Load Signals Applied to the system
load('./mat/inputs.mat'); % TODO - This is now loaded by the input referenced system
% load('./mat/inputs.mat');
%% Load Controller %% Load Controller
load('./mat/controllers.mat'); load('./mat/controllers.mat');

View File

@ -2,7 +2,27 @@ function [axisc] = initializeAxisc()
%% %%
axisc = struct(); axisc = struct();
axisc.m = 40; % [kg] %% Axis Compensator - Static Properties
% Structure
axisc.structure.density = 3400; % [kg/m3]
axisc.structure.color = [0.792 0.820 0.933];
axisc.structure.STEP = './STEPS/axisc/axisc_structure.STEP';
% Wheel
axisc.wheel.density = 2700; % [kg/m3]
axisc.wheel.color = [0.753 0.753 0.753];
axisc.wheel.STEP = './STEPS/axisc/axisc_wheel.STEP';
% Mass
axisc.mass.density = 7800; % [kg/m3]
axisc.mass.color = [0.792 0.820 0.933];
axisc.mass.STEP = './STEPS/axisc/axisc_mass.STEP';
% Gear
axisc.gear.density = 7800; % [kg/m3]
axisc.gear.color = [0.792 0.820 0.933];
axisc.gear.STEP = './STEPS/axisc/axisc_gear.STEP';
axisc.m = 40; % TODO [kg]
%% Axis Compensator - Dynamical Properties
axisc.k.ax = 1; % TODO [N*m/deg)] axisc.k.ax = 1; % TODO [N*m/deg)]
axisc.c.ax = (1/1)*sqrt(axisc.k.ax/axisc.m); axisc.c.ax = (1/1)*sqrt(axisc.k.ax/axisc.m);

View File

@ -2,8 +2,14 @@ function [granite] = initializeGranite()
%% %%
granite = struct(); granite = struct();
granite.m = 2000; % [kg] %% Static Properties
granite.density = 2800; % [kg/m3]
granite.volume = 0.72; % [m3] TODO - should
granite.mass = granite.density*granite.volume; % [kg]
granite.color = [1 1 1];
granite.STEP = './STEPS/granite/granite.STEP';
%% Dynamical Properties
granite.k.x = 1e8; % [N/m] granite.k.x = 1e8; % [N/m]
granite.c.x = 1e4; % [N/(m/s)] granite.c.x = 1e4; % [N/(m/s)]

View File

@ -101,10 +101,11 @@ function [inputs] = initializeInputs(opts_param)
Fg = zeros(length(t), 3); Fg = zeros(length(t), 3);
%% External Forces applied on the Sample %% External Forces applied on the Sample
Fs = zeros(length(t), 3); Fs = zeros(length(t), 6);
%% Create the input Structure that will contain all the inputs %% Create the input Structure that will contain all the inputs
inputs = struct( ... inputs = struct( ...
'Ts', sim_conf.Ts, ...
'Dw', timeseries(Dw, t), ... 'Dw', timeseries(Dw, t), ...
'Dy', timeseries(Dy, t), ... 'Dy', timeseries(Dy, t), ...
'Ry', timeseries(Ry, t), ... 'Ry', timeseries(Ry, t), ...

View File

@ -22,6 +22,7 @@ function [] = initializeMirror(opts_param)
mirror.rad = 180; % radius of the mirror (at the bottom surface) [mm] mirror.rad = 180; % radius of the mirror (at the bottom surface) [mm]
mirror.density = 2400; % Density of the mirror [kg/m3] mirror.density = 2400; % Density of the mirror [kg/m3]
mirror.color = [0.4 1.0 1.0]; % Color of the mirror
mirror.cone_length = mirror.rad*tand(opts.angle)+mirror.h+mirror.jacobian; % Distance from Apex point of the cone to jacobian point mirror.cone_length = mirror.rad*tand(opts.angle)+mirror.h+mirror.jacobian; % Distance from Apex point of the cone to jacobian point

View File

@ -12,8 +12,27 @@ function [ry] = initializeRy(opts_param)
%% %%
ry = struct(); ry = struct();
ry.m = 200; % [kg] %% Tilt Stage - Static Properties
% Ry - Guide for the tilt stage
ry.guide.density = 7800; % [kg/m3]
ry.guide.color = [0.792 0.820 0.933];
ry.guide.STEP = './STEPS/ry/Tilt_Guide.STEP';
% Ry - Rotor of the motor
ry.rotor.density = 2400; % [kg/m3]
ry.rotor.color = [0.792 0.820 0.933];
ry.rotor.STEP = './STEPS/ry/Tilt_Motor_Axis.STEP';
% Ry - Motor
ry.motor.density = 3200; % [kg/m3]
ry.motor.color = [0.792 0.820 0.933];
ry.motor.STEP = './STEPS/ry/Tilt_Motor.STEP';
% Ry - Plateau Tilt
ry.stage.density = 7800; % [kg/m3]
ry.stage.color = [0.792 0.820 0.933];
ry.stage.STEP = './STEPS/ry/Tilt_Stage.STEP';
ry.m = 200; % TODO [kg]
%% Tilt Stage - Dynamical Properties
if opts.rigid if opts.rigid
ry.k.tilt = 1e10; % Rotation stiffness around y [N*m/deg] ry.k.tilt = 1e10; % Rotation stiffness around y [N*m/deg]
else else

View File

@ -12,9 +12,24 @@ function [rz] = initializeRz(opts_param)
%% %%
rz = struct(); rz = struct();
%% Spindle - Static Properties
% Spindle - Slip Ring
rz.slipring.density = 7800; % [kg/m3]
rz.slipring.color = [0.792 0.820 0.933];
rz.slipring.STEP = './STEPS/rz/Spindle_Slip_Ring.STEP';
% Spindle - Rotor
rz.rotor.density = 7800; % [kg/m3]
rz.rotor.color = [0.792 0.820 0.933];
rz.rotor.STEP = './STEPS/rz/Spindle_Rotor.STEP';
% Spindle - Stator
rz.stator.density = 7800; % [kg/m3]
rz.stator.color = [0.792 0.820 0.933];
rz.stator.STEP = './STEPS/rz/Spindle_Stator.STEP';
% Estimated mass of the mooving part % Estimated mass of the mooving part
rz.m = 250; % [kg] rz.m = 250; % [kg]
%% Spindle - Dynamical Properties
% Estimated stiffnesses % Estimated stiffnesses
rz.k.ax = 2e9; % Axial Stiffness [N/m] rz.k.ax = 2e9; % Axial Stiffness [N/m]
rz.k.rad = 7e8; % Radial Stiffness [N/m] rz.k.rad = 7e8; % Radial Stiffness [N/m]

View File

@ -1,97 +0,0 @@
function [solids] = initializeSolids()
%% Granite
solids.granite.density = 2800; % [kg/m3]
solids.granite.color = [1 1 1];
solids.granite.STEP = './STEPS/granite/granite.STEP';
%% Y-Translation
% Ty Granite frame
solids.ty.granite_frame.density = 7800; % [kg/m3]
solids.ty.granite_frame.color = [0.753 1 0.753];
solids.ty.granite_frame.STEP = './STEPS/Ty/Ty_Granite_Frame.STEP';
% Guide Translation Ty
solids.ty.guide.density = 7800; % [kg/m3]
solids.ty.guide.color = [0.792 0.820 0.933];
solids.ty.guide.STEP = './STEPS/ty/Ty_Guide.STEP';
% Ty - Guide_Translation12
solids.ty.guide12.density = 7800; % [kg/m3]
solids.ty.guide12.color = [0.792 0.820 0.933];
solids.ty.guide12.STEP = './STEPS/Ty/Ty_Guide_12.STEP';
% Ty - Guide_Translation11
solids.ty.guide11.density = 7800; % [kg/m3]
solids.ty.guide11.color = [0.792 0.820 0.933];
solids.ty.guide11.STEP = './STEPS/ty/Ty_Guide_11.STEP';
% Ty - Guide_Translation22
solids.ty.guide22.density = 7800; % [kg/m3]
solids.ty.guide22.color = [0.792 0.820 0.933];
solids.ty.guide22.STEP = './STEPS/ty/Ty_Guide_22.STEP';
% Ty - Guide_Translation21
solids.ty.guide21.density = 7800; % [kg/m3]
solids.ty.guide21.color = [0.792 0.820 0.933];
solids.ty.guide21.STEP = './STEPS/Ty/Ty_Guide_21.STEP';
% Ty - Plateau translation
solids.ty.frame.density = 7800; % [kg/m3]
solids.ty.frame.color = [0.792 0.820 0.933];
solids.ty.frame.STEP = './STEPS/ty/Ty_Stage.STEP';
% Ty Stator Part
solids.ty.stator.density = 5400; % [kg/m3]
solids.ty.stator.color = [0.792 0.820 0.933];
solids.ty.stator.STEP = './STEPS/ty/Ty_Motor_Stator.STEP';
% Ty Rotor Part
solids.ty.rotor.density = 5400; % [kg/m3]
solids.ty.rotor.color = [0.792 0.820 0.933];
solids.ty.rotor.STEP = './STEPS/ty/Ty_Motor_Rotor.STEP';
%% Tilt Stage
% Ry - Guide for the tilt stage
solids.ry.guide.density = 7800; % [kg/m3]
solids.ry.guide.color = [0.792 0.820 0.933];
solids.ry.guide.STEP = './STEPS/ry/Tilt_Guide.STEP';
% Ry - Rotor of the motor
solids.ry.rotor.density = 2400; % [kg/m3]
solids.ry.rotor.color = [0.792 0.820 0.933];
solids.ry.rotor.STEP = './STEPS/ry/Tilt_Motor_Axis.STEP';
% Ry - Motor
solids.ry.motor.density = 3200; % [kg/m3]
solids.ry.motor.color = [0.792 0.820 0.933];
solids.ry.motor.STEP = './STEPS/ry/Tilt_Motor.STEP';
% Ry - Plateau Tilt
solids.ry.stage.density = 7800; % [kg/m3]
solids.ry.stage.color = [0.792 0.820 0.933];
solids.ry.stage.STEP = './STEPS/ry/Tilt_Stage.STEP';
%% Spindle
% Spindle - Slip Ring
solids.rz.slipring.density = 7800; % [kg/m3]
solids.rz.slipring.color = [0.792 0.820 0.933];
solids.rz.slipring.STEP = './STEPS/rz/Spindle_Slip_Ring.STEP';
% Spindle - Rotor
solids.rz.rotor.density = 7800; % [kg/m3]
solids.rz.rotor.color = [0.792 0.820 0.933];
solids.rz.rotor.STEP = './STEPS/rz/Spindle_Rotor.STEP';
% Spindle - Stator
solids.rz.stator.density = 7800; % [kg/m3]
solids.rz.stator.color = [0.792 0.820 0.933];
solids.rz.stator.STEP = './STEPS/rz/Spindle_Stator.STEP';
%% Axis Compensator
% Structure
solids.axisc.structure.density = 3400; % [kg/m3]
solids.axisc.structure.color = [0.792 0.820 0.933];
solids.axisc.structure.STEP = './STEPS/axisc/axisc_structure.STEP';
% Wheel
solids.axisc.wheel.density = 2700; % [kg/m3]
solids.axisc.wheel.color = [0.753 0.753 0.753];
solids.axisc.wheel.STEP = './STEPS/axisc/axisc_wheel.STEP';
% Mass
solids.axisc.mass.density = 7800; % [kg/m3]
solids.axisc.mass.color = [0.792 0.820 0.933];
solids.axisc.mass.STEP = './STEPS/axisc/axisc_mass.STEP';
% Gear
solids.axisc.gear.density = 7800; % [kg/m3]
solids.axisc.gear.color = [0.792 0.820 0.933];
solids.axisc.gear.STEP = './STEPS/axisc/axisc_gear.STEP';
%% Save
save('./mat/solids.mat', 'solids')
end

View File

@ -8,12 +8,51 @@ function [ty] = initializeTy(opts_param)
opts.(opt{1}) = opts_param.(opt{1}); opts.(opt{1}) = opts_param.(opt{1});
end end
end end
%% %%
ty = struct(); ty = struct();
ty.m = 250; % [kg] %% Y-Translation - Static Properties
% Ty Granite frame
ty.granite_frame.density = 7800; % [kg/m3]
ty.granite_frame.color = [0.753 1 0.753];
ty.granite_frame.STEP = './STEPS/Ty/Ty_Granite_Frame.STEP';
% Guide Translation Ty
ty.guide.density = 7800; % [kg/m3]
ty.guide.color = [0.792 0.820 0.933];
ty.guide.STEP = './STEPS/ty/Ty_Guide.STEP';
% Ty - Guide_Translation12
ty.guide12.density = 7800; % [kg/m3]
ty.guide12.color = [0.792 0.820 0.933];
ty.guide12.STEP = './STEPS/Ty/Ty_Guide_12.STEP';
% Ty - Guide_Translation11
ty.guide11.density = 7800; % [kg/m3]
ty.guide11.color = [0.792 0.820 0.933];
ty.guide11.STEP = './STEPS/ty/Ty_Guide_11.STEP';
% Ty - Guide_Translation22
ty.guide22.density = 7800; % [kg/m3]
ty.guide22.color = [0.792 0.820 0.933];
ty.guide22.STEP = './STEPS/ty/Ty_Guide_22.STEP';
% Ty - Guide_Translation21
ty.guide21.density = 7800; % [kg/m3]
ty.guide21.color = [0.792 0.820 0.933];
ty.guide21.STEP = './STEPS/Ty/Ty_Guide_21.STEP';
% Ty - Plateau translation
ty.frame.density = 7800; % [kg/m3]
ty.frame.color = [0.792 0.820 0.933];
ty.frame.STEP = './STEPS/ty/Ty_Stage.STEP';
% Ty Stator Part
ty.stator.density = 5400; % [kg/m3]
ty.stator.color = [0.792 0.820 0.933];
ty.stator.STEP = './STEPS/ty/Ty_Motor_Stator.STEP';
% Ty Rotor Part
ty.rotor.density = 5400; % [kg/m3]
ty.rotor.color = [0.792 0.820 0.933];
ty.rotor.STEP = './STEPS/ty/Ty_Motor_Rotor.STEP';
ty.m = 250; % TODO [kg]
%% Y-Translation - Dynamicals Properties
if opts.rigid if opts.rigid
ty.k.ax = 1e10; % Axial Stiffness for each of the 4 guidance (y) [N/m] ty.k.ax = 1e10; % Axial Stiffness for each of the 4 guidance (y) [N/m]
else else

BIN
mat/G.mat

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -3,17 +3,17 @@ steady_time = 10;
initializeSimConf(struct('Tsim', steady_time, 'cl_time', steady_time)); initializeSimConf(struct('Tsim', steady_time, 'cl_time', steady_time));
set_param('Assemblage',... set_param('sim_nano_station_ctrl',...
'SaveFinalState','on',... 'SaveFinalState','on',...
'FinalStateName','myOperPoint',... 'FinalStateName','myOperPoint',...
'SaveCompleteFinalSimState','on'... 'SaveCompleteFinalSimState','on'...
); );
sim('Assemblage'); sim('sim_nano_station_ctrl');
save('./data/myOperPoint.mat', 'myOperPoint'); save('./data/myOperPoint.mat', 'myOperPoint');
set_param('Assemblage',... set_param('sim_nano_station_ctrl',...
'SaveFinalState','off',... 'SaveFinalState','off',...
'SaveCompleteFinalSimState','off'... 'SaveCompleteFinalSimState','off'...
); );
@ -27,14 +27,14 @@ initializeSimConf(struct('Tsim', steady_time+sim_time, 'cl_time', steady_time));
load('./data/myOperPoint.mat', 'myOperPoint'); load('./data/myOperPoint.mat', 'myOperPoint');
set_param('Assemblage',... set_param('sim_nano_station_ctrl',...
'LoadInitialState','on',... 'LoadInitialState','on',...
'InitialState','myOperPoint'... 'InitialState','myOperPoint'...
); );
sim('Assemblage'); sim('sim_nano_station_ctrl');
set_param('Assemblage',... set_param('sim_nano_station_ctrl',...
'LoadInitialState','off' ... 'LoadInitialState','off' ...
); );

BIN
sim_nano_station_ctrl.slx Normal file

Binary file not shown.

View File

@ -14,29 +14,36 @@ function [sys] = identifyPlant(opts_param)
options.SampleTime = 0; options.SampleTime = 0;
%% Name of the Simulink File %% Name of the Simulink File
mdl = 'sim_nano_station'; mdl = 'sim_nano_station_id';
%% Input/Output definition %% Input/Output definition
io(1) = linio([mdl, '/Fn'], 1, 'input'); io(1) = linio([mdl, '/Fn'], 1, 'input'); % Cartesian forces applied by NASS
io(2) = linio([mdl, '/Gm'], 1, 'input'); io(2) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion
io(3) = linio([mdl, '/Fs_ext'], 1, 'input'); io(3) = linio([mdl, '/Fs'], 1, 'input'); % External forces on the sample
io(4) = linio([mdl, '/F_legs'], 1, 'input'); io(4) = linio([mdl, '/Fnl'], 1, 'input'); % Forces applied on the NASS's legs
io(5) = linio([mdl, '/Dsample_meas'], 1, 'output'); io(5) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample
io(6) = linio([mdl, '/F_meas'], 1, 'output'); io(6) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
io(7) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
%% Run the linearization %% Run the linearization
G = linearize(mdl, io, 0); G = linearize(mdl, io, 0);
G.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz', ... G.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz', ...
'Dgx', 'Dgy', 'Dgz', ... 'Dgx', 'Dgy', 'Dgz', ...
'Fsx', 'Fsy', 'Fsz', ... 'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz', ...
'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; 'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
G.OutputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz', ... G.OutputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz', ...
'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}; 'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6', ...
'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
%% Create the sub transfer functions %% Create the sub transfer functions
% From forces applied in the cartesian frame to displacement of the sample in the cartesian frame
sys.G_cart = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'})); sys.G_cart = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}));
% From ground motion to Sample displacement
sys.G_gm = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Dgx', 'Dgy', 'Dgz'})); sys.G_gm = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Dgx', 'Dgy', 'Dgz'}));
sys.G_fs = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fsx', 'Fsy', 'Fsz'})); % From direct forces applied on the sample to displacement of the sample
sys.G_fs = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz'}));
% From forces applied on NASS's legs to force sensor in each leg
sys.G_iff = minreal(G({'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_iff = minreal(G({'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}));
% From forces applied on NASS's legs to displacement of each leg
sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}));
end end

View File

@ -43,7 +43,7 @@ function [] = runSimulation(sys_name, sys_mass, ctrl_type, act_damp)
end end
%% Run the simulation %% Run the simulation
sim('Assemblage.slx'); sim('sim_nano_station_ctrl.slx');
%% Split the Dsample matrix into vectors %% Split the Dsample matrix into vectors
[Dx, Dy, Dz, Rx, Ry, Rz] = matSplit(Dsample.Data, 1); %#ok [Dx, Dy, Dz, Rx, Ry, Rz] = matSplit(Dsample.Data, 1); %#ok