Add all data files
BIN
figs/unused/ustation_hexapod_strut.svg
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
figs/unused/ustation_schematic_dof.pdf
Normal file
BIN
figs/unused/ustation_schematic_dof.png
Normal file
After Width: | Height: | Size: 440 KiB |
BIN
figs/unused/ustation_schematic_dof.svg
Normal file
After Width: | Height: | Size: 2.2 MiB |
BIN
figs/unused/ustation_stage_ry.pdf
Normal file
BIN
figs/unused/ustation_stage_ry.png
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
figs/unused/ustation_stage_ry.svg
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
figs/unused/ustation_stage_rz.svg
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
figs/unused/ustation_stage_ty.pdf
Normal file
BIN
figs/unused/ustation_stage_ty.png
Normal file
After Width: | Height: | Size: 186 KiB |
BIN
figs/unused/ustation_stage_ty.svg
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
figs/ustation_dist_source_ground_motion.pdf
Normal file
BIN
figs/ustation_dist_source_ground_motion.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
figs/ustation_dist_source_ground_motion_time.pdf
Normal file
BIN
figs/ustation_dist_source_ground_motion_time.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
figs/ustation_dist_source_spindle.pdf
Normal file
BIN
figs/ustation_dist_source_spindle.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
figs/ustation_dist_source_spindle_time.pdf
Normal file
BIN
figs/ustation_dist_source_spindle_time.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
figs/ustation_dist_source_translation_stage.pdf
Normal file
BIN
figs/ustation_dist_source_translation_stage.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
figs/ustation_dist_source_translation_stage_time.pdf
Normal file
BIN
figs/ustation_dist_source_translation_stage_time.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
figs/ustation_errors_model_dy_vertical.pdf
Normal file
BIN
figs/ustation_errors_model_dy_vertical.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
figs/ustation_errors_model_spindle_axial.pdf
Normal file
BIN
figs/ustation_errors_model_spindle_axial.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
figs/ustation_errors_model_spindle_radial.pdf
Normal file
BIN
figs/ustation_errors_model_spindle_radial.png
Normal file
After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 25 KiB |
BIN
figs/ustation_ground_disturbance.pdf
Normal file
BIN
figs/ustation_ground_disturbance.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
matlab/mat/nass_model_conf_log.mat
Normal file
BIN
matlab/mat/nass_model_conf_simscape.mat
Normal file
BIN
matlab/mat/nass_model_conf_simulink.mat
Normal file
BIN
matlab/mat/nass_model_disturbances.mat
Normal file
BIN
matlab/mat/nass_model_references.mat
Normal file
BIN
matlab/mat/nass_model_stages.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_1.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_10.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_2.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_3.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_4.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_5.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_6.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_7.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_8.mat
Normal file
BIN
matlab/mat/ustation_compliance_hammer_9.mat
Normal file
BIN
matlab/mat/ustation_disturbance_psd.mat
Normal file
BIN
matlab/mat/ustation_disturbance_sensitivity.mat
Normal file
BIN
matlab/mat/ustation_errors_spindle.mat
Normal file
BIN
matlab/mat/ustation_errors_ty.mat
Normal file
BIN
matlab/mat/ustation_frf_com.mat
Normal file
BIN
matlab/mat/ustation_frf_matrix.mat
Normal file
BIN
matlab/mat/ustation_ground_motion.mat
Normal file
21
matlab/src/circlefit.m
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
function [xc,yc,R,a] = circlefit(x,y)
|
||||||
|
%
|
||||||
|
% [xc yx R] = circfit(x,y)
|
||||||
|
%
|
||||||
|
% fits a circle in x,y plane in a more accurate
|
||||||
|
% (less prone to ill condition )
|
||||||
|
% procedure than circfit2 but using more memory
|
||||||
|
% x,y are column vector where (x(i),y(i)) is a measured point
|
||||||
|
%
|
||||||
|
% result is center point (yc,xc) and radius R
|
||||||
|
% an optional output is the vector of coeficient a
|
||||||
|
% describing the circle's equation
|
||||||
|
%
|
||||||
|
% x^2+y^2+a(1)*x+a(2)*y+a(3)=0
|
||||||
|
%
|
||||||
|
% By: Izhak bucher 25/oct /1991,
|
||||||
|
x=x(:); y=y(:);
|
||||||
|
a=[x y ones(size(x))]\[-(x.^2+y.^2)];
|
||||||
|
xc = -.5*a(1);
|
||||||
|
yc = -.5*a(2);
|
||||||
|
R = sqrt((a(1)^2+a(2)^2)/4-a(3));
|
@ -10,15 +10,15 @@ arguments
|
|||||||
% Global parameter to enable or disable the disturbances
|
% Global parameter to enable or disable the disturbances
|
||||||
args.enable logical {mustBeNumericOrLogical} = true
|
args.enable logical {mustBeNumericOrLogical} = true
|
||||||
% Ground Motion - X direction
|
% Ground Motion - X direction
|
||||||
args.Dwx logical {mustBeNumericOrLogical} = true
|
args.Dw_x logical {mustBeNumericOrLogical} = true
|
||||||
% Ground Motion - Y direction
|
% Ground Motion - Y direction
|
||||||
args.Dwy logical {mustBeNumericOrLogical} = true
|
args.Dw_y logical {mustBeNumericOrLogical} = true
|
||||||
% Ground Motion - Z direction
|
% Ground Motion - Z direction
|
||||||
args.Dwz logical {mustBeNumericOrLogical} = true
|
args.Dw_z logical {mustBeNumericOrLogical} = true
|
||||||
% Translation Stage - X direction
|
% Translation Stage - X direction
|
||||||
args.Fty_x logical {mustBeNumericOrLogical} = true
|
args.Fdy_x logical {mustBeNumericOrLogical} = true
|
||||||
% Translation Stage - Z direction
|
% Translation Stage - Z direction
|
||||||
args.Fty_z logical {mustBeNumericOrLogical} = true
|
args.Fdy_z logical {mustBeNumericOrLogical} = true
|
||||||
% Spindle - X direction
|
% Spindle - X direction
|
||||||
args.Frz_x logical {mustBeNumericOrLogical} = true
|
args.Frz_x logical {mustBeNumericOrLogical} = true
|
||||||
% Spindle - Y direction
|
% Spindle - Y direction
|
||||||
@ -31,175 +31,163 @@ end
|
|||||||
rng("shuffle");
|
rng("shuffle");
|
||||||
|
|
||||||
%% Ground Motion
|
%% Ground Motion
|
||||||
load('dist_psd.mat', 'dist_f');
|
if args.enable
|
||||||
|
% Load the PSD of disturbance
|
||||||
|
load('ustation_disturbance_psd.mat', 'gm_dist')
|
||||||
|
|
||||||
% Frequency Data
|
% Frequency Data
|
||||||
Dw.f = dist_f.f(2:end);
|
Dw.f = gm_dist.f;
|
||||||
Dw.psd_x = dist_f.psd_gm(2:end);
|
Dw.psd_x = gm_dist.pxx_x;
|
||||||
Dw.psd_y = dist_f.psd_gm(2:end);
|
Dw.psd_y = gm_dist.pxx_y;
|
||||||
Dw.psd_z = dist_f.psd_gm(2:end);
|
Dw.psd_z = gm_dist.pxx_z;
|
||||||
|
|
||||||
% Time data
|
% Time data
|
||||||
Fs = 2*Dw.f(end); % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]
|
Fs = 2*Dw.f(end); % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]
|
||||||
N = 2*length(Dw.f); % Number of Samples match the one of the wanted PSD
|
N = 2*length(Dw.f); % Number of Samples match the one of the wanted PSD
|
||||||
T0 = N/Fs; % Signal Duration [s]
|
T0 = N/Fs; % Signal Duration [s]
|
||||||
Dw.t = linspace(0, T0, N+1)'; % Time Vector [s]
|
Dw.t = linspace(0, T0, N+1)'; % Time Vector [s]
|
||||||
|
|
||||||
C = zeros(N/2,1);
|
% ASD representation of the ground motion
|
||||||
for i = 1:N/2
|
|
||||||
C(i) = sqrt(Dw.psd_x(i)/T0);
|
|
||||||
end
|
|
||||||
|
|
||||||
if args.Dwx && args.enable
|
|
||||||
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
|
||||||
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
|
||||||
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
|
||||||
Dw.x = N/sqrt(2)*ifft(Cx); % Ground Motion - x direction [m]
|
|
||||||
else
|
|
||||||
Dw.x = zeros(length(Dw.t), 1);
|
|
||||||
end
|
|
||||||
|
|
||||||
if args.Dwy && args.enable
|
|
||||||
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
|
||||||
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
|
||||||
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
|
||||||
Dw.y = N/sqrt(2)*ifft(Cx); % Ground Motion - y direction [m]
|
|
||||||
else
|
|
||||||
Dw.y = zeros(length(Dw.t), 1);
|
|
||||||
end
|
|
||||||
|
|
||||||
if args.Dwy && args.enable
|
|
||||||
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
|
||||||
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
|
||||||
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
|
||||||
Dw.z = N/sqrt(2)*ifft(Cx); % Ground Motion - z direction [m]
|
|
||||||
else
|
|
||||||
Dw.z = zeros(length(Dw.t), 1);
|
|
||||||
end
|
|
||||||
|
|
||||||
load('dist_psd.mat', 'dist_f');
|
|
||||||
dist_f.f = dist_f.f(2:end);
|
|
||||||
dist_f.psd_gm = dist_f.psd_gm(2:end);
|
|
||||||
dist_f.psd_ty = dist_f.psd_ty(2:end);
|
|
||||||
dist_f.psd_rz = dist_f.psd_rz(2:end);
|
|
||||||
|
|
||||||
%% Translation Stage
|
|
||||||
load('dist_psd.mat', 'dist_f');
|
|
||||||
|
|
||||||
% Frequency Data
|
|
||||||
Ty.f = dist_f.f(2:end);
|
|
||||||
Ty.psd_x = dist_f.psd_ty(2:end); % TODO - we take here the vertical direction which is wrong but approximate
|
|
||||||
Ty.psd_z = dist_f.psd_ty(2:end);
|
|
||||||
|
|
||||||
% Time data
|
|
||||||
Fs = 2*Ty.f(end); % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]
|
|
||||||
N = 2*length(Ty.f); % Number of Samples match the one of the wanted PSD
|
|
||||||
T0 = N/Fs; % Signal Duration [s]
|
|
||||||
Ty.t = linspace(0, T0, N+1)'; % Time Vector [s]
|
|
||||||
|
|
||||||
C = zeros(N/2,1);
|
|
||||||
for i = 1:N/2
|
|
||||||
C(i) = sqrt(Ty.psd_x(i)/T0);
|
|
||||||
end
|
|
||||||
|
|
||||||
% Translation Stage - X
|
|
||||||
if args.Fty_x && args.enable
|
|
||||||
phi = Ty.psd_x;
|
|
||||||
C = zeros(N/2,1);
|
C = zeros(N/2,1);
|
||||||
for i = 1:N/2
|
for i = 1:N/2
|
||||||
C(i) = sqrt(phi(i)/T0);
|
C(i) = sqrt(Dw.psd_x(i)/T0);
|
||||||
end
|
end
|
||||||
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
|
||||||
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
if args.Dw_x
|
||||||
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
||||||
u = N/sqrt(2)*ifft(Cx); % Disturbance Force Ty x [N]
|
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
||||||
Ty.x = u;
|
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
||||||
|
Dw.x = N/sqrt(2)*ifft(Cx); % Ground Motion - x direction [m]
|
||||||
|
else
|
||||||
|
Dw.x = zeros(length(Dw.t), 1);
|
||||||
|
end
|
||||||
|
|
||||||
|
if args.Dw_y
|
||||||
|
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
||||||
|
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
||||||
|
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
||||||
|
Dw.y = N/sqrt(2)*ifft(Cx); % Ground Motion - y direction [m]
|
||||||
|
else
|
||||||
|
Dw.y = zeros(length(Dw.t), 1);
|
||||||
|
end
|
||||||
|
|
||||||
|
if args.Dw_y
|
||||||
|
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
||||||
|
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
||||||
|
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
||||||
|
Dw.z = N/sqrt(2)*ifft(Cx); % Ground Motion - z direction [m]
|
||||||
|
else
|
||||||
|
Dw.z = zeros(length(Dw.t), 1);
|
||||||
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
Ty.x = zeros(length(Ty.t), 1);
|
Dw.t = [0,1]; % Time Vector [s]
|
||||||
|
Dw.x = [0,0]; % Ground Motion - X [m]
|
||||||
|
Dw.y = [0,0]; % Ground Motion - Y [m]
|
||||||
|
Dw.z = [0,0]; % Ground Motion - Z [m]
|
||||||
end
|
end
|
||||||
|
|
||||||
% Translation Stage - Z
|
%% Translation stage
|
||||||
if args.Fty_z && args.enable
|
if args.enable
|
||||||
phi = Ty.psd_z;
|
% Load the PSD of disturbance
|
||||||
|
load('ustation_disturbance_psd.mat', 'dy_dist')
|
||||||
|
|
||||||
|
% Frequency Data
|
||||||
|
Dy.f = dy_dist.f;
|
||||||
|
Dy.psd_x = dy_dist.pxx_fx;
|
||||||
|
Dy.psd_z = dy_dist.pxx_fz;
|
||||||
|
|
||||||
|
% Time data
|
||||||
|
Fs = 2*Dy.f(end); % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]
|
||||||
|
N = 2*length(Dy.f); % Number of Samples match the one of the wanted PSD
|
||||||
|
T0 = N/Fs; % Signal Duration [s]
|
||||||
|
Dy.t = linspace(0, T0, N+1)'; % Time Vector [s]
|
||||||
|
|
||||||
|
% ASD representation of the disturbance voice
|
||||||
C = zeros(N/2,1);
|
C = zeros(N/2,1);
|
||||||
for i = 1:N/2
|
for i = 1:N/2
|
||||||
C(i) = sqrt(phi(i)/T0);
|
C(i) = sqrt(Dy.psd_x(i)/T0);
|
||||||
end
|
end
|
||||||
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
|
||||||
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
if args.Fdy_x
|
||||||
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
||||||
u = N/sqrt(2)*ifft(Cx); % Disturbance Force Ty z [N]
|
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
||||||
Ty.z = u;
|
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
||||||
|
Dy.x = N/sqrt(2)*ifft(Cx); % Translation stage disturbances - X direction [N]
|
||||||
|
else
|
||||||
|
Dy.x = zeros(length(Dy.t), 1);
|
||||||
|
end
|
||||||
|
|
||||||
|
if args.Fdy_z
|
||||||
|
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
||||||
|
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
||||||
|
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
||||||
|
Dy.z = N/sqrt(2)*ifft(Cx); % Translation stage disturbances - Z direction [N]
|
||||||
|
else
|
||||||
|
Dy.z = zeros(length(Dy.t), 1);
|
||||||
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
Ty.z = zeros(length(Ty.t), 1);
|
Dy.t = [0,1]; % Time Vector [s]
|
||||||
|
Dy.x = [0,0]; % Translation Stage disturbances - X [N]
|
||||||
|
Dy.z = [0,0]; % Translation Stage disturbances - Z [N]
|
||||||
end
|
end
|
||||||
|
|
||||||
%% Translation Stage
|
%% Spindle
|
||||||
load('dist_psd.mat', 'dist_f');
|
if args.enable
|
||||||
|
% Load the PSD of disturbance
|
||||||
|
load('ustation_disturbance_psd.mat', 'rz_dist')
|
||||||
|
|
||||||
% Frequency Data
|
% Frequency Data
|
||||||
Rz.f = dist_f.f(2:end);
|
Rz.f = rz_dist.f;
|
||||||
Rz.psd_x = dist_f.psd_rz(2:end); % TODO - we take here the vertical direction which is wrong but approximate
|
Rz.psd_x = rz_dist.pxx_fx;
|
||||||
Rz.psd_y = dist_f.psd_rz(2:end); % TODO - we take here the vertical direction which is wrong but approximate
|
Rz.psd_y = rz_dist.pxx_fy;
|
||||||
Rz.psd_z = dist_f.psd_rz(2:end);
|
Rz.psd_z = rz_dist.pxx_fz;
|
||||||
|
|
||||||
% Time data
|
% Time data
|
||||||
Fs = 2*Rz.f(end); % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]
|
Fs = 2*Rz.f(end); % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]
|
||||||
N = 2*length(Rz.f); % Number of Samples match the one of the wanted PSD
|
N = 2*length(Rz.f); % Number of Samples match the one of the wanted PSD
|
||||||
T0 = N/Fs; % Signal Duration [s]
|
T0 = N/Fs; % Signal Duration [s]
|
||||||
Rz.t = linspace(0, T0, N+1)'; % Time Vector [s]
|
Rz.t = linspace(0, T0, N+1)'; % Time Vector [s]
|
||||||
|
|
||||||
C = zeros(N/2,1);
|
% ASD representation of the disturbance voice
|
||||||
for i = 1:N/2
|
|
||||||
C(i) = sqrt(Rz.psd_x(i)/T0);
|
|
||||||
end
|
|
||||||
|
|
||||||
% Translation Stage - X
|
|
||||||
if args.Frz_x && args.enable
|
|
||||||
phi = Rz.psd_x;
|
|
||||||
C = zeros(N/2,1);
|
C = zeros(N/2,1);
|
||||||
for i = 1:N/2
|
for i = 1:N/2
|
||||||
C(i) = sqrt(phi(i)/T0);
|
C(i) = sqrt(Rz.psd_x(i)/T0);
|
||||||
end
|
end
|
||||||
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
|
||||||
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
|
||||||
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
|
||||||
u = N/sqrt(2)*ifft(Cx); % Disturbance Force Rz x [N]
|
|
||||||
Rz.x = u;
|
|
||||||
else
|
|
||||||
Rz.x = zeros(length(Rz.t), 1);
|
|
||||||
end
|
|
||||||
|
|
||||||
% Translation Stage - Y
|
if args.Frz_x
|
||||||
if args.Frz_y && args.enable
|
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
||||||
phi = Rz.psd_y;
|
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
||||||
C = zeros(N/2,1);
|
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
||||||
for i = 1:N/2
|
Rz.x = N/sqrt(2)*ifft(Cx); % spindle disturbances - X direction [N]
|
||||||
C(i) = sqrt(phi(i)/T0);
|
else
|
||||||
|
Rz.x = zeros(length(Rz.t), 1);
|
||||||
end
|
end
|
||||||
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
|
||||||
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
|
||||||
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
|
||||||
u = N/sqrt(2)*ifft(Cx); % Disturbance Force Rz y [N]
|
|
||||||
Rz.y = u;
|
|
||||||
else
|
|
||||||
Rz.y = zeros(length(Rz.t), 1);
|
|
||||||
end
|
|
||||||
|
|
||||||
% Translation Stage - Z
|
if args.Frz_y
|
||||||
if args.Frz_z && args.enable
|
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
||||||
phi = Rz.psd_z;
|
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
||||||
C = zeros(N/2,1);
|
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
||||||
for i = 1:N/2
|
Rz.y = N/sqrt(2)*ifft(Cx); % spindle disturbances - Y direction [N]
|
||||||
C(i) = sqrt(phi(i)/T0);
|
else
|
||||||
|
Rz.y = zeros(length(Rz.t), 1);
|
||||||
end
|
end
|
||||||
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
|
||||||
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
if args.Frz_z
|
||||||
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
|
||||||
u = N/sqrt(2)*ifft(Cx); % Disturbance Force Rz z [N]
|
Cx = [0 ; C.*complex(cos(theta),sin(theta))];
|
||||||
Rz.z = u;
|
Cx = [Cx; flipud(conj(Cx(2:end)))];;
|
||||||
|
Rz.z = N/sqrt(2)*ifft(Cx); % spindle disturbances - Z direction [N]
|
||||||
|
else
|
||||||
|
Rz.z = zeros(length(Rz.t), 1);
|
||||||
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
Rz.z = zeros(length(Rz.t), 1);
|
Rz.t = [0,1]; % Time Vector [s]
|
||||||
|
Rz.x = [0,0]; % Spindle disturbances - X [N]
|
||||||
|
Rz.y = [0,0]; % Spindle disturbances - X [N]
|
||||||
|
Rz.z = [0,0]; % Spindle disturbances - Z [N]
|
||||||
end
|
end
|
||||||
|
|
||||||
u = zeros(100, 6);
|
u = zeros(100, 6);
|
||||||
@ -208,22 +196,16 @@ Fd = u;
|
|||||||
Dw.x = Dw.x - Dw.x(1);
|
Dw.x = Dw.x - Dw.x(1);
|
||||||
Dw.y = Dw.y - Dw.y(1);
|
Dw.y = Dw.y - Dw.y(1);
|
||||||
Dw.z = Dw.z - Dw.z(1);
|
Dw.z = Dw.z - Dw.z(1);
|
||||||
Ty.x = Ty.x - Ty.x(1);
|
|
||||||
Ty.z = Ty.z - Ty.z(1);
|
Dy.x = Dy.x - Dy.x(1);
|
||||||
|
Dy.z = Dy.z - Dy.z(1);
|
||||||
|
|
||||||
Rz.x = Rz.x - Rz.x(1);
|
Rz.x = Rz.x - Rz.x(1);
|
||||||
Rz.y = Rz.y - Rz.y(1);
|
Rz.y = Rz.y - Rz.y(1);
|
||||||
Rz.z = Rz.z - Rz.z(1);
|
Rz.z = Rz.z - Rz.z(1);
|
||||||
|
|
||||||
if exist('./mat', 'dir')
|
if exist('./mat', 'dir')
|
||||||
if exist('./mat/nass_disturbances.mat', 'file')
|
save('mat/nass_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args');
|
||||||
save('mat/nass_disturbances.mat', 'Dw', 'Ty', 'Rz', 'Fd', 'args', '-append');
|
|
||||||
else
|
|
||||||
save('mat/nass_disturbances.mat', 'Dw', 'Ty', 'Rz', 'Fd', 'args');
|
|
||||||
end
|
|
||||||
elseif exist('./matlab', 'dir')
|
elseif exist('./matlab', 'dir')
|
||||||
if exist('./matlab/mat/nass_disturbances.mat', 'file')
|
save('matlab/mat/nass_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args');
|
||||||
save('matlab/mat/nass_disturbances.mat', 'Dw', 'Ty', 'Rz', 'Fd', 'args', '-append');
|
|
||||||
else
|
|
||||||
save('matlab/mat/nass_disturbances.mat', 'Dw', 'Ty', 'Rz', 'Fd', 'args');
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
@book{preumont94_random_vibrat_spect_analy,
|
||||||
|
author = {Andr{\'e} Preumont},
|
||||||
|
title = {Random Vibration and Spectral Analysis},
|
||||||
|
year = 1994,
|
||||||
|
publisher = {Springer Netherlands},
|
||||||
|
url = {https://doi.org/10.1007/978-94-017-2840-9},
|
||||||
|
doi = {10.1007/978-94-017-2840-9},
|
||||||
|
series = {Solid Mechanics and Its Applications},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@book{taghirad13_paral,
|
||||||
|
author = {Taghirad, Hamid},
|
||||||
|
title = {Parallel robots : mechanics and control},
|
||||||
|
year = 2013,
|
||||||
|
publisher = {CRC Press},
|
||||||
|
address = {Boca Raton, FL},
|
||||||
|
isbn = 9781466555778,
|
||||||
|
keywords = {favorite, parallel robot},
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
% Created 2024-11-05 Tue 22:36
|
% Created 2024-11-06 Wed 12:01
|
||||||
% Intended LaTeX compiler: pdflatex
|
% Intended LaTeX compiler: pdflatex
|
||||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||||
|
|
||||||
@ -24,7 +24,6 @@
|
|||||||
|
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\caption{\label{tab:ustation_section_matlab_code}Report sections and corresponding Matlab files}
|
|
||||||
\centering
|
\centering
|
||||||
\begin{tabularx}{0.6\linewidth}{lX}
|
\begin{tabularx}{0.6\linewidth}{lX}
|
||||||
\toprule
|
\toprule
|
||||||
@ -36,6 +35,8 @@ Section \ref{sec:ustation_disturbances} & \texttt{ustation\_3\_disturbances.m}\\
|
|||||||
Section \ref{sec:ustation_experiments} & \texttt{ustation\_4\_experiments.m}\\
|
Section \ref{sec:ustation_experiments} & \texttt{ustation\_4\_experiments.m}\\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabularx}
|
\end{tabularx}
|
||||||
|
\caption{\label{tab:ustation_section_matlab_code}Report sections and corresponding Matlab files}
|
||||||
|
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\chapter{Micro-Station Kinematics}
|
\chapter{Micro-Station Kinematics}
|
||||||
@ -53,7 +54,6 @@ The micro-station degrees-of-freedom are summarized in Table \ref{tab:ustation_d
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\caption{\label{tab:ustation_dof_summary}Summary of the micro-station degrees-of-freedom}
|
|
||||||
\centering
|
\centering
|
||||||
\begin{tabularx}{\linewidth}{lX}
|
\begin{tabularx}{\linewidth}{lX}
|
||||||
\toprule
|
\toprule
|
||||||
@ -65,6 +65,8 @@ Spindle & \(R_z = 360\,\text{deg}\)\\
|
|||||||
Micro Hexapod & \(D_{xyz} = \pm 10\,mm\), \(R_{xyz} = \pm 3\,\text{deg}\)\\
|
Micro Hexapod & \(D_{xyz} = \pm 10\,mm\), \(R_{xyz} = \pm 3\,\text{deg}\)\\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabularx}
|
\end{tabularx}
|
||||||
|
\caption{\label{tab:ustation_dof_summary}Summary of the micro-station degrees-of-freedom}
|
||||||
|
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
There are different ways of modelling the stage dynamics in a multi-body model.
|
There are different ways of modelling the stage dynamics in a multi-body model.
|
||||||
@ -424,7 +426,6 @@ The springs and dampers values were first estimated from the joints/stages speci
|
|||||||
The spring values are summarized in Table \ref{tab:ustation_6dof_stiffness_values}.
|
The spring values are summarized in Table \ref{tab:ustation_6dof_stiffness_values}.
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\caption{\label{tab:ustation_6dof_stiffness_values}Summary of the stage stiffnesses. Contrained degrees-of-freedom are indicated by ``-''. The location of the 6-DoF joints in which the stiffnesses are defined are indicated by the frame in figures of Section \ref{ssec:ustation_stages}}
|
|
||||||
\centering
|
\centering
|
||||||
\begin{tabularx}{\linewidth}{Xcccccc}
|
\begin{tabularx}{\linewidth}{Xcccccc}
|
||||||
\toprule
|
\toprule
|
||||||
@ -437,6 +438,8 @@ Spindle & \(700\,N/\mu m\) & \(700\,N/\mu m\) & \(2\,kN/\mu m\) & \(10\,Nm/\mu\t
|
|||||||
Hexapod & \(10\,N/\mu m\) & \(10\,N/\mu m\) & \(100\,N/\mu m\) & \(1.5\,Nm/rad\) & \(1.5\,Nm/rad\) & \(0.27\,Nm/rad\)\\
|
Hexapod & \(10\,N/\mu m\) & \(10\,N/\mu m\) & \(100\,N/\mu m\) & \(1.5\,Nm/rad\) & \(1.5\,Nm/rad\) & \(0.27\,Nm/rad\)\\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabularx}
|
\end{tabularx}
|
||||||
|
\caption{\label{tab:ustation_6dof_stiffness_values}Summary of the stage stiffnesses. Contrained degrees-of-freedom are indicated by ``-''. The location of the 6-DoF joints in which the stiffnesses are defined are indicated by the frame in figures of Section \ref{ssec:ustation_stages}}
|
||||||
|
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\section{With comparison with the measurements}
|
\section{With comparison with the measurements}
|
||||||
@ -603,11 +606,18 @@ Therefore, from a control point of view, they are not important.
|
|||||||
|
|
||||||
The ground motion is simply measured by using a sensitive 3-axis geophone placed on the ground.
|
The ground motion is simply measured by using a sensitive 3-axis geophone placed on the ground.
|
||||||
The generated voltages are recorded with a high resolution DAC, and converted to displacement using the Geophone sensitivity transfer function.
|
The generated voltages are recorded with a high resolution DAC, and converted to displacement using the Geophone sensitivity transfer function.
|
||||||
|
The obtained ground motion displacement is shown in Figure \ref{fig:ustation_ground_disturbance}.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[scale=1]{figs/ustation_ground_disturbance.png}
|
||||||
|
\caption{\label{fig:ustation_ground_disturbance}Measured ground motion}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
\paragraph{Ty Stage}
|
\paragraph{Ty Stage}
|
||||||
|
|
||||||
To measure the positioning errors of the translation stage, the setup shown in Figure \ref{fig:ustation_errors_ty_setup} is used.
|
To measure the positioning errors of the translation stage, the setup shown in Figure \ref{fig:ustation_errors_ty_setup} is used.
|
||||||
A special optical element (called a ``straightness interferometer''\footnote{The special optics (straightness interferometer and reflector) are the manufactured by Agilent (10774A).}) is fixed on top of the micro-station, while a laser source\footnote{Laser source is manufactured by Agilent (5519b)} and a straightness reflector are fixed on the ground.
|
A special optical element (called a ``straightness interferometer''\footnote{The special optics (straightness interferometer and reflector) are manufactured by Agilent (10774A).}) is fixed on top of the micro-station, while a laser source\footnote{Laser source is manufactured by Agilent (5519b)} and a straightness reflector are fixed on the ground.
|
||||||
A similar setup is used to measure the horizontal deviation (i.e. in the \(x\) direction), as well as the pitch and yaw errors of the translation stage.
|
A similar setup is used to measure the horizontal deviation (i.e. in the \(x\) direction), as well as the pitch and yaw errors of the translation stage.
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
@ -664,7 +674,10 @@ From the 5 measured displacements \([d_1,\,d_2,\,d_3,\,d_4,\,d_5]\), the transla
|
|||||||
|
|
||||||
A measurement is performed at 60rpm during 10 turns, and the obtained results are shown in Figure \ref{fig:ustation_errors_spindle}.
|
A measurement is performed at 60rpm during 10 turns, and the obtained results are shown in Figure \ref{fig:ustation_errors_spindle}.
|
||||||
A fraction of the radial (Figure \ref{fig:ustation_errors_spindle_radial}) and tilt (Figure \ref{fig:ustation_errors_spindle_tilt}) errors is linked to the fact that the two spheres are not perfectly aligned with the rotation axis of the Spindle.
|
A fraction of the radial (Figure \ref{fig:ustation_errors_spindle_radial}) and tilt (Figure \ref{fig:ustation_errors_spindle_tilt}) errors is linked to the fact that the two spheres are not perfectly aligned with the rotation axis of the Spindle.
|
||||||
However, it is in practice very difficult to align the ``point-of-interest'' of the sample with the rotation axis, so the NASS will be used to actively keep the PoI on the rotation axis.
|
This is displayed by the dashed circle.
|
||||||
|
After removing the best circular fit from the data, the vibrations induced by the Spindle may be viewed as stochastic disturbances.
|
||||||
|
However, some misalignment between the ``point-of-interest'' of the sample with the rotation axis will be considered as it is very difficult to align in practice.
|
||||||
|
The NASS will be used to actively keep the PoI on the rotation axis.
|
||||||
The vertical motion induced by the scanning of the spindle is in the order of \(\pm 30\,nm\) (Figure \ref{fig:ustation_errors_spindle_axial}).
|
The vertical motion induced by the scanning of the spindle is in the order of \(\pm 30\,nm\) (Figure \ref{fig:ustation_errors_spindle_axial}).
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
@ -686,7 +699,7 @@ The vertical motion induced by the scanning of the spindle is in the order of \(
|
|||||||
\end{center}
|
\end{center}
|
||||||
\subcaption{\label{fig:ustation_errors_spindle_tilt}Tilt errors}
|
\subcaption{\label{fig:ustation_errors_spindle_tilt}Tilt errors}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\caption{\label{fig:ustation_errors_spindle}Measurement of the radial (\subref{fig:ustation_errors_spindle_radial}), axial (\subref{fig:ustation_errors_spindle_axial}) and tilt (\subref{fig:ustation_errors_spindle_tilt}) Spindle errors.}
|
\caption{\label{fig:ustation_errors_spindle}Measurement of the radial (\subref{fig:ustation_errors_spindle_radial}), axial (\subref{fig:ustation_errors_spindle_axial}) and tilt (\subref{fig:ustation_errors_spindle_tilt}) Spindle errors during a 60rpm spindle rotation. A circular best fit is shown by the dashed circle. It represents the misalignment of the spheres with the rotation axis.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section{Sensitivity to disturbances}
|
\section{Sensitivity to disturbances}
|
||||||
@ -694,7 +707,6 @@ The vertical motion induced by the scanning of the spindle is in the order of \(
|
|||||||
|
|
||||||
In order to compute the disturbance source (i.e. forces) that induced the measured vibrations in Section \ref{ssec:ustation_disturbances_meas}, the transfer function from the disturbance sources to the stage vibration (i.e. the ``sensitivity to disturbances'') needs to be estimated.
|
In order to compute the disturbance source (i.e. forces) that induced the measured vibrations in Section \ref{ssec:ustation_disturbances_meas}, the transfer function from the disturbance sources to the stage vibration (i.e. the ``sensitivity to disturbances'') needs to be estimated.
|
||||||
This is done using the multi-body that was presented in Section \ref{sec:ustation_modeling}.
|
This is done using the multi-body that was presented in Section \ref{sec:ustation_modeling}.
|
||||||
|
|
||||||
The obtained transfer functions are shown in Figure \ref{fig:ustation_model_sensitivity}.
|
The obtained transfer functions are shown in Figure \ref{fig:ustation_model_sensitivity}.
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
@ -722,161 +734,87 @@ The obtained transfer functions are shown in Figure \ref{fig:ustation_model_sens
|
|||||||
\section{Obtained disturbance sources}
|
\section{Obtained disturbance sources}
|
||||||
\label{ssec:ustation_disturbances_results}
|
\label{ssec:ustation_disturbances_results}
|
||||||
|
|
||||||
\begin{itemize}
|
From the measured effect of disturbances in Section \ref{ssec:ustation_disturbances_meas} and the sensitivity to disturbances extracted from the Simscape model in Section \ref{ssec:ustation_disturbances_sensitivity}, the power spectral density of the disturbance sources (i.e. forces applied in the stage's joint) can be estimated.
|
||||||
\item[{$\square$}] Display PSD of disturbances
|
They are shown in Figure \ref{fig:ustation_dist_sources}.
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
The obtained amplitude spectral densities of the disturbance forces are shown in Figure \ref{fig:dist_force_psd}.
|
\begin{figure}[htbp]
|
||||||
|
\begin{subfigure}{0.33\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.9\linewidth]{figs/ustation_dist_source_ground_motion.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:ustation_dist_source_ground_motion}Ground Motion}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.33\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.9\linewidth]{figs/ustation_dist_source_translation_stage.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:ustation_dist_source_translation_stage}Translation Stage}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.33\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.9\linewidth]{figs/ustation_dist_source_spindle.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:ustation_dist_source_spindle}Spindle}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:ustation_dist_sources}Measured spectral density of the micro-station disturbances sources. Ground motion (\subref{fig:ustation_dist_source_ground_motion}), translation stage (\subref{fig:ustation_dist_source_translation_stage}) and spindle (\subref{fig:ustation_dist_source_spindle}).}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
The disturbances are characterized by their power spectral densities as shown in Figure \ref{fig:ustation_dist_sources}.
|
||||||
|
However, in order to perform time domain simulations, disturbances needs to be represented by a time domain.
|
||||||
|
In order to generate stochastic time domain signals having the same power spectral densities as the ones estimated, the discrete inverse Fourier transform is used as explained in \cite[chap. 12.11]{preumont94_random_vibrat_spect_analy}.
|
||||||
|
Examples of obtained time domain disturbance signals are shown in Figure \ref{fig:ustation_dist_sources_time}.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\begin{subfigure}{0.33\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.9\linewidth]{figs/ustation_dist_source_ground_motion_time.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:ustation_dist_source_ground_motion_time}Ground Motion}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.33\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.9\linewidth]{figs/ustation_dist_source_translation_stage_time.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:ustation_dist_source_translation_stage_time}Translation Stage}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.33\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.9\linewidth]{figs/ustation_dist_source_spindle_time.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:ustation_dist_source_spindle_time}Spindle}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:ustation_dist_sources_time}Generated time domain disturbance signals. Ground motion (\subref{fig:ustation_dist_source_ground_motion_time}), translation stage (\subref{fig:ustation_dist_source_translation_stage_time}) and spindle (\subref{fig:ustation_dist_source_spindle_time}).}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
\chapter{Simulation of Scientific Experiments}
|
\chapter{Simulation of Scientific Experiments}
|
||||||
\label{sec:ustation_experiments}
|
\label{sec:ustation_experiments}
|
||||||
The goal here is to simulate some scientific experiments with the Simscape model when no control is applied to the nano-hexapod.
|
|
||||||
|
|
||||||
This has several goals:
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Validate the model
|
\item[{$\square$}] Perfect tomography => no error
|
||||||
\item Estimate the expected error motion for the experiments
|
\item[{$\square$}] Add vibrations and some off-center => results, compare with measurements
|
||||||
\item Estimate the stroke that we may need for the nano-hexapod
|
\item[{$\square$}] Ty scans (-4.5mm to 4.5mm) => compare with measurements
|
||||||
\item Compare with experiments when control is applied
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
The document in organized as follow:
|
\section{Tomography Experiment}
|
||||||
\begin{itemize}
|
|
||||||
\item In section \ref{sec:simscape_model} the Simscape model is initialized
|
|
||||||
\item In section \ref{sec:tomo_no_dist} a tomography experiment is performed where the sample is aligned with the rotation axis. No disturbance is included
|
|
||||||
\item In section \ref{sec:tomo_dist}, the same is done but with disturbance included
|
|
||||||
\item In section \ref{sec:tomo_hexa_trans} the micro-hexapod translate the sample such that its center of mass is no longer aligned with the rotation axis. No disturbance is included
|
|
||||||
\item In section \ref{sec:ty_scans}, scans with the translation stage are simulated with no perturbation included
|
|
||||||
\end{itemize}
|
|
||||||
\section{Simscape Model}
|
|
||||||
\label{sec:simscape_model}
|
|
||||||
|
|
||||||
We load the shared simulink configuration and we set the \texttt{StopTime}.
|
|
||||||
We first initialize all the stages.
|
|
||||||
The nano-hexapod is considered to be a rigid body.
|
|
||||||
No controller is used (Open Loop).
|
|
||||||
We don't gravity.
|
|
||||||
We log the signals for further analysis.
|
|
||||||
\section{Tomography Experiment with no disturbances}
|
|
||||||
\label{sec:tomo_no_dist}
|
|
||||||
In this section, a tomography experiment is performed with the sample aligned with the rotation axis.
|
|
||||||
No disturbance is included.
|
|
||||||
\subsection{Simulation Setup}
|
|
||||||
And we initialize the disturbances to be equal to zero.
|
|
||||||
We initialize the reference path for all the stages.
|
|
||||||
All stage is set to its zero position except the Spindle which is rotating at 60rpm.
|
|
||||||
We simulate the model.
|
|
||||||
And we save the obtained data.
|
|
||||||
\subsection{Analysis}
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\begin{subfigure}{0.49\textwidth}
|
||||||
\includegraphics[scale=1]{figs/exp_tomo_without_dist.png}
|
\begin{center}
|
||||||
\caption{\label{fig:exp_tomo_without_dist}X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances (\href{./figs/exp\_tomo\_without\_dist.png}{png}, \href{./figs/exp\_tomo\_without\_dist.pdf}{pdf})}
|
\includegraphics[scale=1,scale=1]{figs/ustation_errors_model_spindle_radial.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:ustation_errors_model_spindle_radial}Radial error}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.49\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,scale=1]{figs/ustation_errors_model_spindle_axial.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:ustation_errors_model_spindle_axial}Axial error}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:ustation_errors_model_spindle}Measurement of strut flexible modes}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\subsection{Conclusion}
|
|
||||||
\begin{important}
|
|
||||||
When everything is aligned, the resulting error motion is very small (nm range) and is quite negligible with respect to the error when disturbances are included.
|
|
||||||
This residual error motion probably comes from a small misalignment somewhere.
|
|
||||||
\end{important}
|
|
||||||
|
|
||||||
\section{Tomography Experiment with included perturbations}
|
|
||||||
\label{sec:tomo_dist}
|
|
||||||
In this section, we also perform a tomography experiment with the sample's center of mass aligned with the rotation axis.
|
|
||||||
However this time, we include perturbations such as ground motion and stage vibrations.
|
|
||||||
\subsection{Simulation Setup}
|
|
||||||
We now activate the disturbances.
|
|
||||||
We initialize the reference path for all the stages.
|
|
||||||
All stage is set to its zero position except the Spindle which is rotating at 60rpm.
|
|
||||||
We simulate the model.
|
|
||||||
And we save the obtained data.
|
|
||||||
\subsection{Analysis}
|
|
||||||
\begin{figure}[htbp]
|
|
||||||
\centering
|
|
||||||
\includegraphics[scale=1]{figs/exp_tomo_dist.png}
|
|
||||||
\caption{\label{fig:exp_tomo_dist}X-Y-Z translations and rotations of the sample w.r.t. the granite when performing tomography experiment with disturbances (\href{./figs/exp\_tomo\_dist.png}{png}, \href{./figs/exp\_tomo\_dist.pdf}{pdf})}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
\subsection{Conclusion}
|
|
||||||
\begin{important}
|
|
||||||
Here, no vibration is included in the X and Y directions.
|
|
||||||
\end{important}
|
|
||||||
|
|
||||||
\section{Tomography Experiment with Ty raster scans}
|
|
||||||
\label{sec:tomo_dist_ty_scans}
|
|
||||||
In this section, we also perform a tomography experiment with scans of the Translation stage.
|
|
||||||
All the perturbations are included.
|
|
||||||
\subsection{Simulation Setup}
|
|
||||||
We now activate the disturbances.
|
|
||||||
We initialize the reference path for all the stages.
|
|
||||||
The Spindle which is rotating at 60rpm and the translation stage not moving as it would take a long time to simulate.
|
|
||||||
However, vibrations of the Ty stage are included.
|
|
||||||
We simulate the model.
|
|
||||||
And we save the obtained data.
|
|
||||||
\subsection{Analysis}
|
|
||||||
\begin{figure}[htbp]
|
|
||||||
\centering
|
|
||||||
\includegraphics[scale=1]{figs/exp_scans_rz_dist.png}
|
|
||||||
\caption{\label{fig:exp_scans_rz_dist}X-Y-Z translations and rotations of the sample w.r.t. the granite when performing tomography experiment and scans with the translation stage at the same time}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
\subsection{Conclusion}
|
|
||||||
|
|
||||||
\section{Tomography when the micro-hexapod is not centered}
|
|
||||||
\label{sec:tomo_hexa_trans}
|
|
||||||
In this section, the sample's center of mass is not aligned with the rotation axis anymore.
|
|
||||||
This is due to the fact that the micro-hexapod has performed some displacement.
|
|
||||||
|
|
||||||
No disturbances are included.
|
|
||||||
\subsection{Simulation Setup}
|
|
||||||
We first set the wanted translation of the Micro Hexapod.
|
|
||||||
We initialize the reference path.
|
|
||||||
We initialize the stages.
|
|
||||||
And we initialize the disturbances to zero.
|
|
||||||
We simulate the model.
|
|
||||||
And we save the obtained data.
|
|
||||||
\subsection{Analysis}
|
|
||||||
\begin{figure}[htbp]
|
|
||||||
\centering
|
|
||||||
\includegraphics[scale=1]{figs/exp_tomo_offset.png}
|
|
||||||
\caption{\label{fig:exp_tomo_offset}X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances (\href{./figs/exp\_tomo\_offset.png}{png}, \href{./figs/exp\_tomo\_offset.pdf}{pdf})}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
\subsection{Conclusion}
|
|
||||||
\begin{important}
|
|
||||||
The main motion error are 1Hz X-Y translations and constant Ry error.
|
|
||||||
This is mainly due to finite stiffness of the elements.
|
|
||||||
\end{important}
|
|
||||||
|
|
||||||
\section{Raster Scans with the translation stage}
|
\section{Raster Scans with the translation stage}
|
||||||
\label{sec:ty_scans}
|
|
||||||
In this section, scans with the translation stage are performed.
|
|
||||||
\subsection{Simulation Setup}
|
|
||||||
We initialize the stages.
|
|
||||||
And we initialize the disturbances to zero.
|
|
||||||
We set the reference path to be a triangular signal for the Translation Stage.
|
|
||||||
We simulate the model.
|
|
||||||
And we save the obtained data.
|
|
||||||
We now set the reference path to be a sinusoidal signal for the Translation Stage.
|
|
||||||
We simulate the model.
|
|
||||||
And we save the obtained data.
|
|
||||||
\subsection{Analysis}
|
|
||||||
\begin{figure}[htbp]
|
|
||||||
\centering
|
|
||||||
\includegraphics[scale=1]{figs/exp_ty_scan.png}
|
|
||||||
\caption{\label{fig:exp_ty_scan}X-Y-Z translation of the sample w.r.t. granite when performing tomography experiment with no disturbances (\href{./figs/exp\_ty\_scan.png}{png}, \href{./figs/exp\_ty\_scan.pdf}{pdf})}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
\subsection{Conclusion}
|
|
||||||
\begin{important}
|
|
||||||
Scans with the translation stage induces some errors in the Y direction and Rx translations.
|
|
||||||
|
|
||||||
Also, scanning with a sinusoidal wave induces less position errors and at lower frequencies.
|
|
||||||
Thus, this should be preferred.
|
|
||||||
\end{important}
|
|
||||||
\chapter{Conclusion}
|
\chapter{Conclusion}
|
||||||
\label{sec:uniaxial_conclusion}
|
\label{sec:uniaxial_conclusion}
|
||||||
|
|
||||||
|
|
||||||
\printbibliography[heading=bibintoc,title={Bibliography}]
|
\printbibliography[heading=bibintoc,title={Bibliography}]
|
||||||
\end{document}
|
\end{document}
|
||||||
|