Analyze measurements with encoders fixed to plates
BIN
doc/2021-06-23-Nano hexapode.xlsx
Normal file
BIN
figs/IMG_20210625_083801.jpg
Normal file
After Width: | Height: | Size: 469 KiB |
BIN
figs/acc_top_plat_pos_x.jpg
Normal file
After Width: | Height: | Size: 3.6 MiB |
BIN
figs/acc_top_plat_pos_x.svg
Normal file
After Width: | Height: | Size: 4.9 MiB |
BIN
figs/acc_top_plat_pos_y.jpg
Normal file
After Width: | Height: | Size: 3.7 MiB |
BIN
figs/acc_top_plat_pos_y.svg
Normal file
After Width: | Height: | Size: 4.9 MiB |
BIN
figs/acc_top_plat_top_view.jpg
Normal file
After Width: | Height: | Size: 631 KiB |
BIN
figs/acc_top_plat_top_view.png
Normal file
After Width: | Height: | Size: 3.0 MiB |
BIN
figs/acc_top_plat_zoom.jpg
Normal file
After Width: | Height: | Size: 547 KiB |
BIN
figs/bode_Va_dL_effect_k_coef.pdf
Normal file
BIN
figs/bode_Va_dL_effect_k_coef.png
Normal file
After Width: | Height: | Size: 149 KiB |
BIN
figs/bode_Va_dL_effect_m_coef.pdf
Normal file
BIN
figs/bode_Va_dL_effect_m_coef.png
Normal file
After Width: | Height: | Size: 144 KiB |
BIN
figs/bode_Va_dL_effect_xi_damp.pdf
Normal file
BIN
figs/bode_Va_dL_effect_xi_damp.png
Normal file
After Width: | Height: | Size: 141 KiB |
BIN
figs/control_architecture_hac_iff_L.pdf
Normal file
BIN
figs/control_architecture_hac_iff_L.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
figs/control_architecture_hac_iff_L.svg
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
figs/control_architecture_hac_iff_L_feedforward.pdf
Normal file
BIN
figs/control_architecture_hac_iff_L_feedforward.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
figs/control_architecture_hac_iff_L_feedforward.svg
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
figs/control_architecture_iff.pdf
Normal file
BIN
figs/control_architecture_iff.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
figs/control_architecture_iff.svg
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
figs/control_architecture_iff_feedforward.pdf
Normal file
BIN
figs/control_architecture_iff_feedforward.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
figs/control_architecture_iff_feedforward.svg
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
figs/damped_iff_plates_plant_comp_diagonal.pdf
Normal file
BIN
figs/damped_iff_plates_plant_comp_diagonal.png
Normal file
After Width: | Height: | Size: 180 KiB |
BIN
figs/damped_iff_plates_plant_comp_off_diagonal.pdf
Normal file
BIN
figs/damped_iff_plates_plant_comp_off_diagonal.png
Normal file
After Width: | Height: | Size: 330 KiB |
BIN
figs/dvf_plant_comp_struts_plates.pdf
Normal file
BIN
figs/dvf_plant_comp_struts_plates.png
Normal file
After Width: | Height: | Size: 153 KiB |
BIN
figs/enc_plant_plates_effect_iff.pdf
Normal file
BIN
figs/enc_plant_plates_effect_iff.png
Normal file
After Width: | Height: | Size: 267 KiB |
BIN
figs/enc_plates_dvf_coh.pdf
Normal file
BIN
figs/enc_plates_dvf_coh.png
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
figs/enc_plates_dvf_comp_offdiag_simscape.pdf
Normal file
BIN
figs/enc_plates_dvf_comp_offdiag_simscape.png
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
figs/enc_plates_dvf_comp_simscape.pdf
Normal file
BIN
figs/enc_plates_dvf_comp_simscape.png
Normal file
After Width: | Height: | Size: 168 KiB |
BIN
figs/enc_plates_dvf_comp_simscape_all.pdf
Normal file
BIN
figs/enc_plates_dvf_comp_simscape_all.png
Normal file
After Width: | Height: | Size: 246 KiB |
BIN
figs/enc_plates_dvf_frf.pdf
Normal file
BIN
figs/enc_plates_dvf_frf.png
Normal file
After Width: | Height: | Size: 215 KiB |
BIN
figs/enc_plates_iff_coh.pdf
Normal file
BIN
figs/enc_plates_iff_coh.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
figs/enc_plates_iff_comp_offdiag_simscape.pdf
Normal file
BIN
figs/enc_plates_iff_comp_offdiag_simscape.png
Normal file
After Width: | Height: | Size: 143 KiB |
BIN
figs/enc_plates_iff_comp_simscape.pdf
Normal file
BIN
figs/enc_plates_iff_comp_simscape.png
Normal file
After Width: | Height: | Size: 144 KiB |
BIN
figs/enc_plates_iff_comp_simscape_all.pdf
Normal file
BIN
figs/enc_plates_iff_comp_simscape_all.png
Normal file
After Width: | Height: | Size: 275 KiB |
BIN
figs/enc_plates_iff_frf.pdf
Normal file
BIN
figs/enc_plates_iff_frf.png
Normal file
After Width: | Height: | Size: 206 KiB |
BIN
figs/enc_plates_iff_gains_effect_dvf_plant.pdf
Normal file
BIN
figs/enc_plates_iff_gains_effect_dvf_plant.png
Normal file
After Width: | Height: | Size: 215 KiB |
BIN
figs/enc_plates_opt_iff_comp_simscape_all.pdf
Normal file
BIN
figs/enc_plates_opt_iff_comp_simscape_all.png
Normal file
After Width: | Height: | Size: 266 KiB |
BIN
figs/hac_iff_plates_exp_loop_gain_diag.pdf
Normal file
BIN
figs/hac_iff_plates_exp_loop_gain_diag.png
Normal file
After Width: | Height: | Size: 186 KiB |
BIN
figs/hac_iff_struts_enc_plates_plant_bode.pdf
Normal file
BIN
figs/hac_iff_struts_enc_plates_plant_bode.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
figs/loop_gain_hac_iff_struts.pdf
Normal file
BIN
figs/loop_gain_hac_iff_struts.png
Normal file
After Width: | Height: | Size: 169 KiB |
BIN
figs/nano_hexapod_mounted.jpg
Normal file
After Width: | Height: | Size: 378 KiB |
BIN
figs/open_loop_gain_feedforward_iff_struts.pdf
Normal file
BIN
figs/open_loop_gain_feedforward_iff_struts.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
figs/ref_track_hac_iff_struts_pos_error.pdf
Normal file
BIN
figs/ref_track_hac_iff_struts_pos_error.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
figs/ref_track_hac_iff_struts_yz_plane.pdf
Normal file
BIN
figs/ref_track_hac_iff_struts_yz_plane.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
figs/ref_track_hac_iff_struts_yz_time.pdf
Normal file
BIN
figs/ref_track_hac_iff_struts_yz_time.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
figs/ref_track_test_nass.pdf
Normal file
BIN
figs/ref_track_test_nass.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
matlab/mat/Khac_iff_struts.mat
Normal file
BIN
matlab/mat/Kiff.mat
Normal file
BIN
matlab/mat/damped_plant_enc_plates.mat
Normal file
BIN
matlab/mat/feedforward_iff.mat
Normal file
BIN
matlab/mat/identified_plants_enc_plates.mat
Normal file
BIN
matlab/mat/identified_plants_enc_struts.mat
Normal file
BIN
matlab/mat/reference_path.mat
Normal file
48
matlab/src/generateXYZTrajectory.m
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
function [ref] = generateXYZTrajectory(args)
|
||||||
|
% generateXYZTrajectory -
|
||||||
|
%
|
||||||
|
% Syntax: [ref] = generateXYZTrajectory(args)
|
||||||
|
%
|
||||||
|
% Inputs:
|
||||||
|
% - args
|
||||||
|
%
|
||||||
|
% Outputs:
|
||||||
|
% - ref - Reference Signal
|
||||||
|
|
||||||
|
arguments
|
||||||
|
args.points double {mustBeNumeric} = zeros(2, 3) % [m]
|
||||||
|
|
||||||
|
args.ti (1,1) double {mustBeNumeric, mustBePositive} = 1 % Time to go to first point and after last point [s]
|
||||||
|
args.tw (1,1) double {mustBeNumeric, mustBePositive} = 0.5 % Time wait between each point [s]
|
||||||
|
args.tm (1,1) double {mustBeNumeric, mustBePositive} = 1 % Motion time between points [s]
|
||||||
|
|
||||||
|
args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % Sampling Time [s]
|
||||||
|
end
|
||||||
|
|
||||||
|
time_i = 0:args.Ts:args.ti;
|
||||||
|
time_w = 0:args.Ts:args.tw;
|
||||||
|
time_m = 0:args.Ts:args.tm;
|
||||||
|
|
||||||
|
% Go to initial position
|
||||||
|
xyz = (args.points(1,:))'*(time_i/args.ti);
|
||||||
|
|
||||||
|
% Wait
|
||||||
|
xyz = [xyz, xyz(:,end).*ones(size(time_w))];
|
||||||
|
|
||||||
|
% Scans
|
||||||
|
for i = 2:size(args.points, 1)
|
||||||
|
% Go to next point
|
||||||
|
xyz = [xyz, xyz(:,end) + (args.points(i,:)' - xyz(:,end))*(time_m/args.tm)];
|
||||||
|
% Wait a litle bit
|
||||||
|
xyz = [xyz, xyz(:,end).*ones(size(time_w))];
|
||||||
|
end
|
||||||
|
|
||||||
|
% End motion
|
||||||
|
xyz = [xyz, xyz(:,end) - xyz(:,end)*(time_i/args.ti)];
|
||||||
|
|
||||||
|
t = 0:args.Ts:args.Ts*(length(xyz) - 1);
|
||||||
|
|
||||||
|
ref = zeros(length(xyz), 7);
|
||||||
|
|
||||||
|
ref(:, 1) = t;
|
||||||
|
ref(:, 2:4) = xyz';
|
83
matlab/src/generateYZScanTrajectory.m
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
function [ref] = generateYZScanTrajectory(args)
|
||||||
|
% generateYZScanTrajectory -
|
||||||
|
%
|
||||||
|
% Syntax: [ref] = generateYZScanTrajectory(args)
|
||||||
|
%
|
||||||
|
% Inputs:
|
||||||
|
% - args
|
||||||
|
%
|
||||||
|
% Outputs:
|
||||||
|
% - ref - Reference Signal
|
||||||
|
|
||||||
|
arguments
|
||||||
|
args.y_tot (1,1) double {mustBeNumeric} = 10e-6 % [m]
|
||||||
|
args.z_tot (1,1) double {mustBeNumeric} = 10e-6 % [m]
|
||||||
|
|
||||||
|
args.n (1,1) double {mustBeInteger, mustBePositive} = 10 % [-]
|
||||||
|
|
||||||
|
args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-4 % [s]
|
||||||
|
|
||||||
|
args.ti (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s]
|
||||||
|
args.tw (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s]
|
||||||
|
args.ty (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s]
|
||||||
|
args.tz (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s]
|
||||||
|
end
|
||||||
|
|
||||||
|
time_i = 0:args.Ts:args.ti;
|
||||||
|
time_w = 0:args.Ts:args.tw;
|
||||||
|
time_y = 0:args.Ts:args.ty;
|
||||||
|
time_z = 0:args.Ts:args.tz;
|
||||||
|
|
||||||
|
% Go to initial position
|
||||||
|
y = (time_i/args.ti)*(args.y_tot/2);
|
||||||
|
|
||||||
|
% Wait
|
||||||
|
y = [y, y(end)*ones(size(time_w))];
|
||||||
|
|
||||||
|
% Scans
|
||||||
|
for i = 1:args.n
|
||||||
|
if mod(i,2) == 0
|
||||||
|
y = [y, -(args.y_tot/2) + (time_y/args.ty)*args.y_tot];
|
||||||
|
else
|
||||||
|
y = [y, (args.y_tot/2) - (time_y/args.ty)*args.y_tot];
|
||||||
|
end
|
||||||
|
|
||||||
|
if i < args.n
|
||||||
|
y = [y, y(end)*ones(size(time_z))];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
% Wait a litle bit
|
||||||
|
y = [y, y(end)*ones(size(time_w))];
|
||||||
|
|
||||||
|
% End motion
|
||||||
|
y = [y, y(end) - y(end)*time_i/args.ti];
|
||||||
|
|
||||||
|
% Go to initial position
|
||||||
|
z = (time_i/args.ti)*(args.z_tot/2);
|
||||||
|
|
||||||
|
% Wait
|
||||||
|
z = [z, z(end)*ones(size(time_w))];
|
||||||
|
|
||||||
|
% Scans
|
||||||
|
for i = 1:args.n
|
||||||
|
z = [z, z(end)*ones(size(time_y))];
|
||||||
|
|
||||||
|
if i < args.n
|
||||||
|
z = [z, z(end) - (time_z/args.tz)*args.z_tot/(args.n-1)];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
% Wait a litle bit
|
||||||
|
z = [z, z(end)*ones(size(time_w))];
|
||||||
|
|
||||||
|
% End motion
|
||||||
|
z = [z, z(end) - z(end)*time_i/args.ti];
|
||||||
|
|
||||||
|
t = 0:args.Ts:args.Ts*(length(y) - 1);
|
||||||
|
|
||||||
|
ref = zeros(length(y), 7);
|
||||||
|
|
||||||
|
ref(:, 1) = t;
|
||||||
|
ref(:, 3) = y;
|
||||||
|
ref(:, 4) = z;
|
34
matlab/src/getJacobianNanoHexapod.m
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
function [J] = getJacobianNanoHexapod(Hbm)
|
||||||
|
% getJacobianNanoHexapod -
|
||||||
|
%
|
||||||
|
% Syntax: [J] = getJacobianNanoHexapod(Hbm)
|
||||||
|
%
|
||||||
|
% Inputs:
|
||||||
|
% - Hbm - Height of {B} w.r.t. {M} [m]
|
||||||
|
%
|
||||||
|
% Outputs:
|
||||||
|
% - J - Jacobian Matrix
|
||||||
|
|
||||||
|
Fa = [[-86.05, -74.78, 22.49],
|
||||||
|
[ 86.05, -74.78, 22.49],
|
||||||
|
[ 107.79, -37.13, 22.49],
|
||||||
|
[ 21.74, 111.91, 22.49],
|
||||||
|
[-21.74, 111.91, 22.49],
|
||||||
|
[-107.79, -37.13, 22.49]]'*1e-3; % Ai w.r.t. {F} [m]
|
||||||
|
|
||||||
|
Mb = [[-28.47, -106.25, -22.50],
|
||||||
|
[ 28.47, -106.25, -22.50],
|
||||||
|
[ 106.25, 28.47, -22.50],
|
||||||
|
[ 77.78, 77.78, -22.50],
|
||||||
|
[-77.78, 77.78, -22.50],
|
||||||
|
[-106.25, 28.47, -22.50]]'*1e-3; % Bi w.r.t. {M} [m]
|
||||||
|
|
||||||
|
H = 95e-3; % Stewart platform height [m]
|
||||||
|
Fb = Mb + [0; 0; H]; % Bi w.r.t. {F} [m]
|
||||||
|
|
||||||
|
si = Fb - Fa;
|
||||||
|
si = si./vecnorm(si); % Normalize
|
||||||
|
|
||||||
|
Bb = Mb - [0; 0; Hbm];
|
||||||
|
|
||||||
|
J = [si', cross(Bb, si)'];
|
23
matlab/src/getTransformationMatrixAcc.m
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
function [M] = getTransformationMatrixAcc(Opm, Osm)
|
||||||
|
% getTransformationMatrixAcc -
|
||||||
|
%
|
||||||
|
% Syntax: [M] = getTransformationMatrixAcc(Opm, Osm)
|
||||||
|
%
|
||||||
|
% Inputs:
|
||||||
|
% - Opm - Nx3 (N = number of accelerometer measurements) X,Y,Z position of accelerometers
|
||||||
|
% - Opm - Nx3 (N = number of accelerometer measurements) Unit vectors representing the accelerometer orientation
|
||||||
|
%
|
||||||
|
% Outputs:
|
||||||
|
% - M - Transformation Matrix
|
||||||
|
|
||||||
|
M = zeros(length(Opm), 6);
|
||||||
|
|
||||||
|
for i = 1:length(Opm)
|
||||||
|
Ri = [0, Opm(3,i), -Opm(2,i);
|
||||||
|
-Opm(3,i), 0, Opm(1,i);
|
||||||
|
Opm(2,i), -Opm(1,i), 0];
|
||||||
|
M(i, 1:3) = Osm(:,i)';
|
||||||
|
M(i, 4:6) = Osm(:,i)'*Ri;
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|