nass-simscape/initialize/initializeInputs.m

127 lines
3.7 KiB
Mathematica
Raw Normal View History

2018-06-16 22:57:54 +02:00
function [inputs] = initializeInputs(opts_param)
%% Default values for opts
opts = struct('setpoint', false, ...
'Dw', false, ...
'ty', false, ...
'ry', false, ...
'Rz', false, ...
'u_hexa', false, ...
'mass', false, ...
'n_hexa', false ...
2018-06-16 22:57:54 +02:00
);
%% Populate opts with input parameters
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
%% Load Sampling Time and Simulation Time
load('./mat/sim_conf.mat', 'sim_conf');
2018-06-16 22:57:54 +02:00
%% Define the time vector
time_vector = 0:sim_conf.Ts:sim_conf.Tsim;
2018-06-16 22:57:54 +02:00
%% Create the input Structure that will contain all the inputs
inputs = struct();
%% Ground motion
if islogical(opts.Dw) && opts.Dw == true
2018-06-16 22:57:54 +02:00
load('./mat/weight_Wxg.mat', 'Wxg');
Dw = 1/sqrt(2)*100*random('norm', 0, 1, length(time_vector), 3);
Dw(:, 1) = lsim(Wxg, Dw(:, 1), time_vector);
Dw(:, 2) = lsim(Wxg, Dw(:, 2), time_vector);
Dw(:, 3) = lsim(Wxg, Dw(:, 3), time_vector);
elseif islogical(opts.Dw) && opts.Dw == false
Dw = zeros(length(time_vector), 3);
else
Dw = opts.Dw;
2018-06-16 22:57:54 +02:00
end
inputs.Dw = timeseries(Dw, time_vector);
2018-06-16 22:57:54 +02:00
%% Translation stage [m]
if islogical(opts.ty) && opts.ty == true
2018-06-16 22:57:54 +02:00
ty = zeros(length(time_vector), 1);
elseif islogical(opts.ty) && opts.ty == false
2018-06-16 22:57:54 +02:00
ty = zeros(length(time_vector), 1);
else
ty = opts.ty;
2018-06-16 22:57:54 +02:00
end
inputs.ty = timeseries(ty, time_vector);
%% Tilt Stage [rad]
if islogical(opts.ry) && opts.ry == true
2018-06-16 22:57:54 +02:00
ry = 3*(2*pi/360)*sin(2*pi*0.2*time_vector);
elseif islogical(opts.ry) && opts.ry == false
2018-06-16 22:57:54 +02:00
ry = zeros(length(time_vector), 1);
else
ry = opts.ry;
2018-06-16 22:57:54 +02:00
end
inputs.ry = timeseries(ry, time_vector);
%% Spindle [rad]
if islogical(opts.Rz) && opts.Rz == true
Rz = 2*pi*0.5*time_vector;
elseif islogical(opts.Rz) && opts.Rz == false
Rz = zeros(length(time_vector), 1);
elseif isnumeric(opts.Rz) && length(opts.Rz) == 1
Rz = 2*pi*(opts.Rz/60)*time_vector;
else
Rz = opts.Rz;
2018-06-16 22:57:54 +02:00
end
inputs.Rz = timeseries(Rz, time_vector);
2018-06-16 22:57:54 +02:00
%% Micro Hexapod
if islogical(opts.u_hexa) && opts.setpoint == true
u_hexa = zeros(length(time_vector), 6);
elseif islogical(opts.u_hexa) && opts.setpoint == false
u_hexa = zeros(length(time_vector), 6);
else
u_hexa = opts.u_hexa;
end
2018-06-16 22:57:54 +02:00
inputs.micro_hexapod = timeseries(u_hexa, time_vector);
%% Center of gravity compensation
if islogical(opts.mass) && opts.setpoint == true
Rm = zeros(length(time_vector), 2);
elseif islogical(opts.mass) && opts.setpoint == false
Rm = zeros(length(time_vector), 2);
Rm(:, 2) = pi*ones(length(time_vector), 1);
else
Rm = opts.mass;
end
2018-06-16 22:57:54 +02:00
inputs.Rm = timeseries(Rm, time_vector);
2018-06-16 22:57:54 +02:00
%% Nano Hexapod
if islogical(opts.n_hexa) && opts.setpoint == true
n_hexa = zeros(length(time_vector), 6);
elseif islogical(opts.n_hexa) && opts.setpoint == false
n_hexa = zeros(length(time_vector), 6);
else
n_hexa = opts.n_hexa;
end
2018-06-16 22:57:54 +02:00
inputs.nano_hexapod = timeseries(n_hexa, time_vector);
%% Set point [m, rad]
if islogical(opts.setpoint) && opts.setpoint == true
setpoint = zeros(length(time_vector), 6);
elseif islogical(opts.setpoint) && opts.setpoint == false
setpoint = zeros(length(time_vector), 6);
else
setpoint = opts.setpoint;
end
inputs.setpoint = timeseries(setpoint, time_vector);
%% Save
save('./mat/inputs.mat', 'inputs');
2018-06-16 22:57:54 +02:00
end