From 04c8b3c9dcc2c7372c71fc1ab71d66c24744fbb6 Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Thu, 31 Oct 2024 10:37:01 +0100 Subject: [PATCH] Re-tuned micro-station model --- matlab/src/computeReferencePose.m | 77 ++ matlab/src/describeMicroStationSetup.m | 147 ++++ matlab/src/initializeGranite.m | 18 +- matlab/src/initializeMicroHexapod.m | 17 +- matlab/src/initializeRy.m | 14 +- matlab/src/initializeRz.m | 14 +- matlab/src/initializeTy.m | 16 +- matlab/subsystems/micro_hexapod_bot_plate.slx | Bin 38083 -> 38239 bytes matlab/subsystems/micro_hexapod_strut.slx | Bin 29880 -> 29855 bytes matlab/subsystems/micro_hexapod_top_plate.slx | Bin 44270 -> 44446 bytes matlab/ustation_simscape.slx | Bin 158669 -> 159508 bytes simscape-micro-station.org | 814 +++++++----------- 12 files changed, 563 insertions(+), 554 deletions(-) create mode 100644 matlab/src/computeReferencePose.m create mode 100644 matlab/src/describeMicroStationSetup.m diff --git a/matlab/src/computeReferencePose.m b/matlab/src/computeReferencePose.m new file mode 100644 index 0000000..ce8ab61 --- /dev/null +++ b/matlab/src/computeReferencePose.m @@ -0,0 +1,77 @@ + function [WTr] = computeReferencePose(Dy, Ry, Rz, Dh, Dn) + % computeReferencePose - Compute the homogeneous transformation matrix corresponding to the wanted pose of the sample + % + % Syntax: [WTr] = computeReferencePose(Dy, Ry, Rz, Dh, Dn) + % + % Inputs: + % - Dy - Reference of the Translation Stage [m] + % - Ry - Reference of the Tilt Stage [rad] + % - Rz - Reference of the Spindle [rad] + % - Dh - Reference of the Micro Hexapod (Pitch, Roll, Yaw angles) [m, m, m, rad, rad, rad] + % - Dn - Reference of the Nano Hexapod [m, m, m, rad, rad, rad] + % + % Outputs: + % - WTr - + + %% Translation Stage + Rty = [1 0 0 0; + 0 1 0 Dy; + 0 0 1 0; + 0 0 0 1]; + + %% Tilt Stage - Pure rotating aligned with Ob + Rry = [ cos(Ry) 0 sin(Ry) 0; + 0 1 0 0; + -sin(Ry) 0 cos(Ry) 0; + 0 0 0 1]; + + %% Spindle - Rotation along the Z axis + Rrz = [cos(Rz) -sin(Rz) 0 0 ; + sin(Rz) cos(Rz) 0 0 ; + 0 0 1 0 ; + 0 0 0 1 ]; + + + %% Micro-Hexapod + Rhx = [1 0 0; + 0 cos(Dh(4)) -sin(Dh(4)); + 0 sin(Dh(4)) cos(Dh(4))]; + + Rhy = [ cos(Dh(5)) 0 sin(Dh(5)); + 0 1 0; + -sin(Dh(5)) 0 cos(Dh(5))]; + + Rhz = [cos(Dh(6)) -sin(Dh(6)) 0; + sin(Dh(6)) cos(Dh(6)) 0; + 0 0 1]; + + Rh = [1 0 0 Dh(1) ; + 0 1 0 Dh(2) ; + 0 0 1 Dh(3) ; + 0 0 0 1 ]; + + Rh(1:3, 1:3) = Rhz*Rhy*Rhx; + + %% Nano-Hexapod + Rnx = [1 0 0; + 0 cos(Dn(4)) -sin(Dn(4)); + 0 sin(Dn(4)) cos(Dn(4))]; + + Rny = [ cos(Dn(5)) 0 sin(Dn(5)); + 0 1 0; + -sin(Dn(5)) 0 cos(Dn(5))]; + + Rnz = [cos(Dn(6)) -sin(Dn(6)) 0; + sin(Dn(6)) cos(Dn(6)) 0; + 0 0 1]; + + Rn = [1 0 0 Dn(1) ; + 0 1 0 Dn(2) ; + 0 0 1 Dn(3) ; + 0 0 0 1 ]; + + Rn(1:3, 1:3) = Rnz*Rny*Rnx; + + %% Total Homogeneous transformation + WTr = Rty*Rry*Rrz*Rh*Rn; + end diff --git a/matlab/src/describeMicroStationSetup.m b/matlab/src/describeMicroStationSetup.m new file mode 100644 index 0000000..7b8446d --- /dev/null +++ b/matlab/src/describeMicroStationSetup.m @@ -0,0 +1,147 @@ + function [] = describeMicroStationSetup() + % describeMicroStationSetup - + % + % Syntax: [] = describeMicroStationSetup() + % + % Inputs: + % - - + % + % Outputs: + % - - + + load('./mat/conf_simscape.mat', 'conf_simscape'); + + fprintf('Simscape Configuration:\n'); + + if conf_simscape.type == 1 + fprintf('- Gravity is included\n'); + else + fprintf('- Gravity is not included\n'); + end + + fprintf('\n'); + + load('./mat/nass_disturbances.mat', 'args'); + + fprintf('Disturbances:\n'); + if ~args.enable + fprintf('- No disturbance is included\n'); + else + if args.Dwx && args.Dwy && args.Dwz + fprintf('- Ground motion\n'); + end + if args.Fty_x && args.Fty_z + fprintf('- Vibrations of the Translation Stage\n'); + end + if args.Frz_z + fprintf('- Vibrations of the Spindle\n'); + end + end + fprintf('\n'); + + load('./mat/nass_references.mat', 'args'); + + fprintf('Reference Tracking:\n'); + fprintf('- Translation Stage:\n'); + switch args.Dy_type + case 'constant' + fprintf(' - Constant Position\n'); + fprintf(' - Dy = %.0f [mm]\n', args.Dy_amplitude*1e3); + case 'triangular' + fprintf(' - Triangular Path\n'); + fprintf(' - Amplitude = %.0f [mm]\n', args.Dy_amplitude*1e3); + fprintf(' - Period = %.0f [s]\n', args.Dy_period); + case 'sinusoidal' + fprintf(' - Sinusoidal Path\n'); + fprintf(' - Amplitude = %.0f [mm]\n', args.Dy_amplitude*1e3); + fprintf(' - Period = %.0f [s]\n', args.Dy_period); + end + + fprintf('- Tilt Stage:\n'); + switch args.Ry_type + case 'constant' + fprintf(' - Constant Position\n'); + fprintf(' - Ry = %.0f [mm]\n', args.Ry_amplitude*1e3); + case 'triangular' + fprintf(' - Triangular Path\n'); + fprintf(' - Amplitude = %.0f [mm]\n', args.Ry_amplitude*1e3); + fprintf(' - Period = %.0f [s]\n', args.Ry_period); + case 'sinusoidal' + fprintf(' - Sinusoidal Path\n'); + fprintf(' - Amplitude = %.0f [mm]\n', args.Ry_amplitude*1e3); + fprintf(' - Period = %.0f [s]\n', args.Ry_period); + end + + fprintf('- Spindle:\n'); + switch args.Rz_type + case 'constant' + fprintf(' - Constant Position\n'); + fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude); + case { 'rotating', 'rotating-not-filtered' } + fprintf(' - Rotating\n'); + fprintf(' - Speed = %.0f [rpm]\n', 60/args.Rz_period); + end + + + fprintf('- Micro Hexapod:\n'); + switch args.Dh_type + case 'constant' + fprintf(' - Constant Position\n'); + fprintf(' - Dh = %.0f, %.0f, %.0f [mm]\n', args.Dh_pos(1), args.Dh_pos(2), args.Dh_pos(3)); + fprintf(' - Rh = %.0f, %.0f, %.0f [deg]\n', args.Dh_pos(4), args.Dh_pos(5), args.Dh_pos(6)); + end + + fprintf('\n'); + + load('./mat/controller.mat', 'controller'); + + fprintf('Controller:\n'); + fprintf('- %s\n', controller.name); + fprintf('\n'); + + load('./mat/stages.mat', 'ground', 'granite', 'ty', 'ry', 'rz', 'micro_hexapod', 'axisc'); + + fprintf('Micro Station:\n'); + + if granite.type == 1 && ... + ty.type == 1 && ... + ry.type == 1 && ... + rz.type == 1 && ... + micro_hexapod.type == 1; + fprintf('- All stages are rigid\n'); + elseif granite.type == 2 && ... + ty.type == 2 && ... + ry.type == 2 && ... + rz.type == 2 && ... + micro_hexapod.type == 2; + fprintf('- All stages are flexible\n'); + else + if granite.type == 1 || granite.type == 4 + fprintf('- Granite is rigid\n'); + else + fprintf('- Granite is flexible\n'); + end + if ty.type == 1 || ty.type == 4 + fprintf('- Translation Stage is rigid\n'); + else + fprintf('- Translation Stage is flexible\n'); + end + if ry.type == 1 || ry.type == 4 + fprintf('- Tilt Stage is rigid\n'); + else + fprintf('- Tilt Stage is flexible\n'); + end + if rz.type == 1 || rz.type == 4 + fprintf('- Spindle is rigid\n'); + else + fprintf('- Spindle is flexible\n'); + end + if micro_hexapod.type == 1 || micro_hexapod.type == 4 + fprintf('- Micro Hexapod is rigid\n'); + else + fprintf('- Micro Hexapod is flexible\n'); + end + + end + + fprintf('\n'); diff --git a/matlab/src/initializeGranite.m b/matlab/src/initializeGranite.m index af5beeb..e26711c 100644 --- a/matlab/src/initializeGranite.m +++ b/matlab/src/initializeGranite.m @@ -1,11 +1,10 @@ function [granite] = initializeGranite(args) arguments - args.type char {mustBeMember(args.type,{'rigid', 'flexible', 'none', 'modal-analysis', 'init'})} = 'flexible' - args.Foffset logical {mustBeNumericOrLogical} = false + args.type char {mustBeMember(args.type,{'rigid', 'flexible', 'none'})} = 'flexible' args.density (1,1) double {mustBeNumeric, mustBeNonnegative} = 2800 % Density [kg/m3] - args.K (3,1) double {mustBeNumeric, mustBeNonnegative} = [4e9; 3e8; 8e8] % [N/m] - args.C (3,1) double {mustBeNumeric, mustBeNonnegative} = [4.0e5; 1.1e5; 9.0e5] % [N/(m/s)] + args.K (6,1) double {mustBeNumeric, mustBeNonnegative} = [5e9; 5e9; 5e9; 2.5e7; 2.5e7; 1e7] % [N/m] + args.C (6,1) double {mustBeNumeric, mustBeNonnegative} = [4.0e5; 1.1e5; 9.0e5; 2e4; 2e4; 1e4] % [N/(m/s)] args.x0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the X direction [m] args.y0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the Y direction [m] args.z0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the Z direction [m] @@ -21,10 +20,6 @@ granite.type = 1; case 'flexible' granite.type = 2; - case 'modal-analysis' - granite.type = 3; - case 'init' - granite.type = 4; end granite.density = args.density; % [kg/m3] @@ -35,13 +30,6 @@ granite.K = args.K; % [N/m] granite.C = args.C; % [N/(m/s)] - if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init') - load('Foffset.mat', 'Fgm'); - granite.Deq = -Fgm'./granite.K; - else - granite.Deq = zeros(6,1); - end - if exist('./mat', 'dir') if exist('./mat/nass_stages.mat', 'file') save('mat/nass_stages.mat', 'granite', '-append'); diff --git a/matlab/src/initializeMicroHexapod.m b/matlab/src/initializeMicroHexapod.m index 9d60d0b..22c65ac 100644 --- a/matlab/src/initializeMicroHexapod.m +++ b/matlab/src/initializeMicroHexapod.m @@ -1,7 +1,7 @@ function [micro_hexapod] = initializeMicroHexapod(args) arguments - args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init', 'compliance'})} = 'flexible' + args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'flexible' % initializeFramesPositions args.H (1,1) double {mustBeNumeric, mustBePositive} = 350e-3 args.MO_B (1,1) double {mustBeNumeric} = 270e-3 @@ -32,8 +32,6 @@ % inverseKinematics args.AP (3,1) double {mustBeNumeric} = zeros(3,1) args.ARB (3,3) double {mustBeNumeric} = eye(3) - % Force that stiffness of each joint should apply at t=0 - args.Foffset logical {mustBeNumericOrLogical} = false end stewart = initializeStewartPlatform(); @@ -84,13 +82,6 @@ stewart = initializeInertialSensor(stewart, 'type', 'none'); - if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init') - load('Foffset.mat', 'Fhm'); - stewart.actuators.dLeq = -Fhm'./args.Ki; - else - stewart.actuators.dLeq = zeros(6,1); - end - switch args.type case 'none' stewart.type = 0; @@ -98,12 +89,6 @@ stewart.type = 1; case 'flexible' stewart.type = 2; - case 'modal-analysis' - stewart.type = 3; - case 'init' - stewart.type = 4; - case 'compliance' - stewart.type = 5; end micro_hexapod = stewart; diff --git a/matlab/src/initializeRy.m b/matlab/src/initializeRy.m index 963d14f..27b9265 100644 --- a/matlab/src/initializeRy.m +++ b/matlab/src/initializeRy.m @@ -1,8 +1,7 @@ function [ry] = initializeRy(args) arguments - args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init'})} = 'flexible' - args.Foffset logical {mustBeNumericOrLogical} = false + args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'flexible' args.Ry_init (1,1) double {mustBeNumeric} = 0 end @@ -15,10 +14,6 @@ ry.type = 1; case 'flexible' ry.type = 2; - case 'modal-analysis' - ry.type = 3; - case 'init' - ry.type = 4; end % Ry - Guide for the tilt stage @@ -44,13 +39,6 @@ ry.K = [3.8e8; 4e8; 3.8e8; 1.2e8; 6e4; 1.2e8]; ry.C = [1e5; 1e5; 1e5; 3e4; 1e3; 3e4]; - if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init') - load('Foffset.mat', 'Fym'); - ry.Deq = -Fym'./ry.K; - else - ry.Deq = zeros(6,1); - end - if exist('./mat', 'dir') if exist('./mat/nass_stages.mat', 'file') save('mat/nass_stages.mat', 'ry', '-append'); diff --git a/matlab/src/initializeRz.m b/matlab/src/initializeRz.m index b25123b..b5df3da 100644 --- a/matlab/src/initializeRz.m +++ b/matlab/src/initializeRz.m @@ -1,8 +1,7 @@ function [rz] = initializeRz(args) arguments - args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init'})} = 'flexible' - args.Foffset logical {mustBeNumericOrLogical} = false + args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'flexible' end rz = struct(); @@ -14,10 +13,6 @@ rz.type = 1; case 'flexible' rz.type = 2; - case 'modal-analysis' - rz.type = 3; - case 'init' - rz.type = 4; end % Spindle - Slip Ring @@ -35,13 +30,6 @@ rz.K = [7e8; 7e8; 2e9; 1e7; 1e7; 1e7]; rz.C = [4e4; 4e4; 7e4; 1e4; 1e4; 1e4]; - if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init') - load('Foffset.mat', 'Fzm'); - rz.Deq = -Fzm'./rz.K; - else - rz.Deq = zeros(6,1); - end - if exist('./mat', 'dir') if exist('./mat/nass_stages.mat', 'file') save('mat/nass_stages.mat', 'rz', '-append'); diff --git a/matlab/src/initializeTy.m b/matlab/src/initializeTy.m index 7bd18b2..5f511a8 100644 --- a/matlab/src/initializeTy.m +++ b/matlab/src/initializeTy.m @@ -1,8 +1,7 @@ function [ty] = initializeTy(args) arguments - args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init'})} = 'flexible' - args.Foffset logical {mustBeNumericOrLogical} = false + args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'flexible' end ty = struct(); @@ -14,10 +13,6 @@ ty.type = 1; case 'flexible' ty.type = 2; - case 'modal-analysis' - ty.type = 3; - case 'init' - ty.type = 4; end % Ty Granite frame @@ -57,14 +52,7 @@ ty.rotor.STEP = 'Ty_Motor_Rotor.STEP'; ty.K = [2e8; 1e8; 2e8; 6e7; 9e7; 6e7]; % [N/m, N*m/rad] - ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 2e4]; % [N/(m/s), N*m/(rad/s)] - - if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init') - load('Foffset.mat', 'Ftym'); - ty.Deq = -Ftym'./ty.K; - else - ty.Deq = zeros(6,1); - end + ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 1e4]; % [N/(m/s), N*m/(rad/s)] if exist('./mat', 'dir') if exist('./mat/nass_stages.mat', 'file') diff --git a/matlab/subsystems/micro_hexapod_bot_plate.slx b/matlab/subsystems/micro_hexapod_bot_plate.slx index ffb0c0b72e2645fb5e597d1e52edad5c6c83ab53..7e756b6c960b5f465c3794a3cc993a3e4f573f37 100644 GIT binary patch delta 6618 zcmZ8`Wl)?;w>1_tNPyt(FvtW84#9#;(BSSCEI|jCAPEdQxI4k!eQ<&X87#oy7G$t| zocF%<-8#2db$8XX_FlXD&r`Km_m`opm!s5BqN9=4^0R_z(SaZYapCDSNlGg}rSjYn zlv&=EziZyT`IWu$@(KPrtPe?(l-BR$N68)xhPdDyJHs3zG2kMI!@_=tl||~%EX9+d z!!MKPWwg^VhfPw79@A${GA=h5CU|D&`C{m`napV+C(%60aaIM{knYhtcS=8L#Fj24 zG)odfUEOl~TNKoTMX$x#d!8v8PuX8eL8WP%9@ASVl2#`$@*;weiOu#+9Q%`v_2vO~ zH4GlZxE!2t&9SPBe&G}oERv;m&h9Lnle5)))$g(5pj~RCi=sgiW-iKbVpgJ>^{YR! zstQ$j*s`^^jX;I$%$?@0WT_~;>jDB>bJb;2R*+_pE-+{MHI2o{Ctq^v@o*Tp=OgR@ zZtc9znKlcZ3kS4%IsTnrLAhA*Mf$5d#BR;{m)3(&ld#ANtdYVJt0w=(FH|Bt*mB0n zR4~qUc^D%Pwe5I3yTi55urM`bj30DlPU4STUyY%u{6dyl{v;oaro{phbzK1xz%Bu3 z$Ha=!Q+>J-g~tXBP^!#QFqb}$g6HAG{m*h{TY~RJILI*SZc^ylc9C=bx{#XJ`mtqp zjZoj@mGv6+_4(o0TZ^sX2lKZAfnP*pfmD)smqHXhSsOt=EX9wv3vT*Jl~_LykR*~k zoU2P_7Y|%kRw?wk=G~ko{(VtDt_?=T z5(J*^W1%7;MT711fgmmorN!@Gku$#Eg-|T9sA^d!GJf%LvJ&M&+_a;y1xNh6woLRh znG8H3-m`f1=@2=|=0k&Gl@T)urYX8gm@{F9eVH8hD&w9KdJl#LhmI_6ih<-M!Och= z6;C!?mNM!mt3QpwB7cY=GJG4H3 z=M?p3*{o5VEYZgxazx*!fmI-%mJ}-HSwl2HF1{7>*bMY>ygqnIxt(1xgQ0p!jawI{ z@?@^Y)p39z3@K6Ou_j|!$Bi$xh^kM~38hh^s%^`3$lA8u>gsr6>%j(j8tYjsL(86&SK!nt@S0=$!C= zqwx8e=K=zAyQx*u*vM9TkEI$+dQ&)6E^P}wCV{K1mR+y6d_rMT1x|AwmjJT(7O|M!KLx8&KFoD6#NlOIRNC3dWlKbA$!YMetM;*axcB@&>Z4< zDyIT;PIFC94!UB`$C>+fCRzgB+X9|~kKm|~rLW-$ks5En`XA1IJEMF#*cBJwtkAoj zGo^Fl){DUyS3$>U_)!$}pt}r(_vQ+jkVqbq6g$_&ZW)WD7bZSZYrA)2s9E29?i0Vm z*Qif0yrsoskB*8JLqS3+CqP1?MFOjV=|O90ny$-0g5h-paYExFmleR7^&N-ZK1mhe zRUY_So7_LBabVI3V@B=%q<(@|)8?Clw8a?F$kU#C_dP9X26Fk_ zKgUd_Gg_ihJDnr)#gwxgC5?BCFudJd!W{)cwoB)kz0taeR;VOA-aXPe zWps|BCFsM3Jos6qq{go|E3D0d95mJVD?T>^_mX-rrzZCcM5Z|RNbl>Z1Cg*1CFP;} z(nfV!L#g{{m({$d=&$o667T z$DiNKmOK8RP28ELyk9)VcR@@$(vRfop`}zkr{rTRnmJy=lwa=2NC5clfovAK`CV~! zuh<22^LtuXbj2HWt(A%1KdOeI`*!fZuV>%d7cl0$#)HBsYllWbm$`A*77GWgnI~)U27(? z=e6Z^BvHIWMabu~YdG0ux>WD55%ShG#4VTSlXG}nLPqAaN!UvTuRoN9_7ss8% zLHrtbk>87B&#a$8Hf$!=ep8F()0JU zguo~lzLv7&i>NK6$y}t!wGU}IJmz%@x0s365cg*nRz9gYmH3eF1Qkhy%YJIxZD<52 zNB$O${Jr_DLH6{?^RRUkH!qLq*45y^yQGK!M7R_Wx+)gDdqVpAv}MtAKmtt-b9(j!{OqA6u4GjUXDBEec8 zB>&JN@RHi~MC2)zD?_EKmC||kqqfG`?M9V{*P|(bVXhvYx&YD;@EgjdW2vK<;?d&! zsZ|Egrc~)-I~QHdso-T!nty2@trDMUXaVrk9ht0gUvJ`oktI2clhGokJ3yA*CFlB=-{ZKut5rGqJ7r0}(vk9^7Se zrxGmAbpl7u86XEu2deS?umS7ZwsVR0Nozlzn$ski)U(z8>nCcDQq`>J9ggiDucJDZ zM05tOKzY=KB!&~jV~-8H`jGOBrDQCpt}=$M6?2KZ_%28FUdxJGwA1B;;*(0%uSPy{ zpH#ehYe~0Oo{!C%s@8}hk;Bu(Xi0Sx&@zP@itBC*6Ubc*h50wjuaX$N?Ru6^7|`R( z<${t~B0y|LYTr``#Oej;oEk>fDIzSa6CQ^#=_#^z^<89yj7%)3^zl}5_DI)L0_3^Yv-*hXKzc44q~?Kqlo6Rgp~~QpK1~91~)Z$OjKq$W*%Gjhf~~Rg|bKwFOtv( zgNEuIZFIxQ4vEFuw3RCbvYBMoU*UE%m`e8zOXMY3V!5P6RtEQrgt-AF*uf@YeZ0uR zmTDnsL24z^GYiw+l@*IYEW>{j6uUJJMNjcnS$Yj5B(pw(tumL;D|mTWQX9=0Dseb~ zMRdlFZuEl&B;S5e=Xlw}M0|^5SAAQjKudpy8{zJp+Z|~g4nuWDKO3 z=Qa6WzEoBs2Y9qK^Q-iKC0p^z@%Iem$i|2n|Bmi-7U8!A%Bfk|6V<%o4##(8T%gjA zG*=0lg}l#LsL7iNyt?pixC}N31dZ6j_uq=vT|$=2;_M+#4wk@=9zEaglC?6_epoqp z(8z98NLDSfCzL^+&Te)VBV)0u3-YHQ_Y|NT1^Qi&7Mn_fdRtG%*`?{6P%KxACSpLs zNY;0_NDabFmXS~-#gtLfW~bhKMIuX0rcVS&M$CIL_JdUkMb#eW-ifUMnvBjDczDW} z_c#CKfL)X3<$34RU?S+~7{Gm~NU#68A?BxJg$I4b)F}UkQPVgxkYJ~9q25uJCo2jYNUDOyN0%mDT~pBG^}gC; z=aPxh=CGu0CpmNON2AX%C|PmmV!7h-B<;a<665C#R}TLrVTdHwPL9=w#)zE27q}c& zQxzq?a+qoizp~x!7o1=u8RhFk9zklcsY=r6jaBrD`kG6OQgIxm@~-g?E!sKf<3ZGR zkdILQ$NM+93^)v9jC3(qckdUxdtEmP3<(Tn_n?uEXk=(2$|xa6m$8WmsBh{gf=gc`PPQaD z9){;IkQnp0-9MUULGo$up79EZ8VP+asMVwLfMhZS38qtkw2Wd(*Ss2_w6FqF9MYJk;55gkf=natNfYjmakhANsrAcB$5K`Iq+(6RHe9CRWj<8L1&`w#6$>K8 zUj+!Z>oJ~)vimot$Y=gA=X;69(L-FYWoI!6qijfc81m`=1#w$hKHjKe!3aBfQ#weQ zBDf~%U9T=Zgbm?;Zc#gp5LDc)1X&#zR&QP$Zd(C$F_S_0gp)T#CB`^w$hp(}&;mhacfMfhnhZ$1y<-K>f7 zs{W|5K4KFfS>ktT9a>S16S!|2g7owc#gS81NT97Eq7rcpCiUtQcC}etOD>i1Ql1wQg<11GE0mU|0&fQ{RDrH;~oo&p^JSM>^E0I5Q z@SKY4hUa*8!qjh$v{dh~Zm)Oq0+mk5eg>_Cr@TcX&tD<83Ft;mT5ZS)+Pr(Fx|?Q$ ztn-rTvWDOklE{Z*&w9Ci&vMnd_P#pAw3w1tbH0*m9)8y>k7!3Sy2mA-oh~`mqAwLl>B;>cvIzLMcixCY=VO>zNJEz?$Lk?H6`qqV(OIaloA9xCHQsb1E*N9cw zo-2>L(Evx9W3lvrcvQf#^wVeMuk2-iOlHXA_Um7&hgw;5_md(weU(cg?#aa8F@;YW z=kn-LbS6JGm5iQXaM)bOzO(m|YO~iks0SAYdFc~MztW{s9U?f<&KSd>wk{_?{*~f z*ubCzeDjqT^c(U)tNjHJ`vg2z1e!UDn!2$6suv~cjVY*YMpL#jTC0TCAh=QYN2lLS z#8C5M@|5!@VldF|!a`?5n5rf3eTW=*o$2!HB*-zqK`gNcXSRiQynlf;-f>l!XGyh1 zleikR1X%r@kQ#cn`sA}-m?*Y*eJlj)rx|hB2Ah2Z$=T3M@sDZ$uv6NB_<5>*SBh^D zFQpC5_|7E(%;=!yj&i*BS9Y3{Cp~)yU&c~}zB&n~93J*RH0|W@-)!)`W>hL43e=IQ z#_qlpAx(HGgMZJK-@8#trq(Hzi8GqvJGmD-5Qb=rQW|N6Zca=a$M>aW4(>{n&EioL{zV5`a$`^eI7~iW zY-}N|*H_`{qf2tCZwrK#s~INbX&0@(eNA!r;@GVb4>e`RqO)x0%3Hoo*PD5Mnp%Ym zv=1<(dJnCp9dI1K-c))`60;dM+$q!1NZrKf#M*u5Jhwsx=q)b8a2BS8!W_+9*z~v)~0GguX zqdJm$#H-3TLhQc5E-&ketMWu6N{A7lY07?JBiXLNcCWp^%^jR{6?IwqGp6^~KOm-QwO&+$YlZrup=f&tr)+Kw{7PaQ%Q@tF`~WGGKX+&R#fKk0cYi1b1ZC`x9X&-L z$O~z=tt|&K;p0NkCtKkH zYn8Z&)1|Eo$vA7v%rL&B-JGlUW3FW6J6fdTP?ivUQqa5;be9JAqNeDNd>f-QcW&|Kym?bV@@b+w(E+_h0Sc7=DDXt5}VR3hd;w+`W;#OQA z_y6a;dCfOTW^&HSNpfb+BwyfVC_SYpKPWKJa;KgY!88~E&=spZJeTwC^$g%^$s$uv6J=dP)fK_`2KUVp-M57 zEuJCD)qK6_59)mP7Kfwj^owvjMb8gPN_Cs`=&l-(j6D89w9hCEEH>}rSRSpdj`j#E z*LGs*mqL;**;aHg&K&-Pl$EiS6>%c|Xx=yY`ZyWly3dU&A}KOUPR2(GFW74qUtXKr z?@KWGa0uv;hGLd9%tyam6+;Euhh0PEDMm4kStJunsNFj-?uydN&w_egsmqurHnxul1LFn`$(6+C}_(c;FZb+buwN2BC zXif|8Hg0C+WuT<=s6u!f)m{;tbn{}1Vr_b=9I5Jc(-~2TzMNPeKve%fDOZg3m z+AqO|=H`k3r$(D@YIk-PUDB9Q6-$ZzcOqL7-5C0&R(XY&Q7DNl7g`9)em~v}Hy(9k zV#nGDJB--(bMtTsdPRwwNUpZQ7N0=F_zZbL$qljSdcx$#JLLNW!-?Uyv``O_QzABz zWC+GyI2J^cK*VW5zkras@HDiPUDGY1#8ndkzx+OAUaL>ZHTE zP53e4cQkUv^#846QOUd@Ue`0XztFP0gAGa9i*O>*O@FN5)V zwaTK%IqHM9-yS7dy*Ck=iU#5rs$GlJRenNqOqLw@Et$~N;4DxkmX%8Wy2V83lQsp2 zap|S1lJ*^uL4E0J#;m=nRg=`Z@#E33ZKXtUOupr--Zs^^6GVNQ7Da-X#H9M;7qSzT ziXS4I7Lu9FnYYy#`~}$WFevofN2gxeL|cn(rF&D#cw;=a#nU_Fn%Flu+*LgGUZ5N( zn1@wm1MRdA8chO;Ly{#AC{&CRWOUa-6D4NtYjx_Zdp)~~@2q|i6Z4^Mg}fU)ZwWMU9rI-do(b|HWG;UuQuCkKO&;#dlM7f7_t0L)pf`OZH;T*4i_RB}RIFme>NYB4i#cKe`gYi3 zvZSK0MC97%^Mw?r z80O!knalaRpXfG^h}dl^c*9g+pw9Qzeh`9cm_hr(`{hqRsx1$_Kq#|&VKO1NUfIk4gW2KALl}Gh((8w%3 zG>Cd*KkFecqT&?j$Vn-@pgI?NedKNw3LCc$X2Ly78Gb~#b=;Y9DYPJ#v(PCLW3bnx zrecBE!Q5!M0drD?CSu|;2-osEoec{WQV63_n9&A$FO+ttsEc?!H?nd#fGu3r=WT%w zi<5WHEQk@3vQ#Wz%_sM|m0Q>9m67fUcEo_W*b5W~Y^6jdwG$(I48`Km3?l_uT}s{r zu2c&ttVGu#(j~3VG@$_2(tF%=6wxKfigBp79%GhW4A}#=&KAj-#CFQZ!?^;&&ve|f zhI%R5KvKGalnF2N@7EcbMDc1(Iv;d7Uyni#Uw~lnlA!!+`maP2WR~PHL8X1wK=ph_ ztB=O7C{~EU+l=}5?mFXm?iFdqL6ia^#nbuFsW*lLDP88=(%A+FT3W)GAwiY-dRqct z#(P3&Tg-YpO@t_qlryAt9BCl8AI|8nvn%K9iNrHse}V~9&TuB01rx96S`VSen6|ff zRD-yOt#}}p#W_wGY2aUX)|h%;hTTd~-@|}BibRILgVfB?( zS2W!ZKc9{m12|f5526{YQx_8Y!zNlEsHSj@pZHc#J}9B05g{QVy?Cx~kyLr*5IbOu zAXdv&l(jkuK3 z+NvObpl-0dApU&%8gR8R_|JZ{o#5BZ`_ta1Vl@1Hk#Wa>f86_G+0E=Ia4hvsMSz;f zo?m)Gs)uH|%m@KLX&!vC31=`#L~P*1msy~*6kTUlQvbJTk#17*k8YWHI1Fo_`&v;F zeVrVT+ox>{hDxe=@)iHYY^YiiwWTaOvN1Z%8Q0iS!**m7`X3;V*Sbto+SK)h24z&* z!?v)Aio9-11J-ox1nh-CLPHx4(;r)3&T#(TKC|=h5$ETFNJRoWr(l4?Qh30Ypuksv z;;im*Y$T+Dv;CDgVaapCbv37waOe=<*qzM~8kW{-91^s=91F8PM;MkK7>nT%ep>~fW~KSoWD)a7t}5fRWpn zzj`=e9K2w^YOC1eQG;oW^Sg_!yYZ^%KC+hnAe#whiYw*Qr?A5in7wIndi|rL`HZt$ zT60$C(Q@;W@gk6`9I=hdwF7m&#mm`nV!m3!{G8lK?&}T$Dd&ws?#D?p*MRY&`;tPn z(NZe_+bj{l7)MULiXpi#us((-`Y!m#P5p888lju3nn-M6D0P1@Pxw$@^FbH?mxiYk-) z+N)9tKV8JTe|Dvx$YjfvbLVC)`uelOuSt8`aEdE_M{Ih};Ne+Us4#y!4j`kv*UPTd ziuqzCTJ^a|27$aY_d_T{HMx=fQ6BU42x1N`Jx&owEp zu8Vs?hC=qMBgnG&8X2f(NeL7aMZ%9 zP@W}H;_Q;)dj??&fcwZL7 zP*Qj^H%dA1rx$r4MW462;UT6vx1XuRrDwkNbCBB^=h$nwK8bgY|8LdIJsapUtfOMM^SQfk)@Hy2VzM=);w#(8%kGc&j=YH^8 zoW1m8DYLZDYq%aXocBV=&SqyC9Ic2#W1^YJZ(+ltDZ z*vcBqilDO5{iZ=S@Vsj(jQ*_SeUALyRRGzL(n%1r*b_st;!)ruR>cP{|22^<($DJ* zp%1L!BI_&Q;>N`{(}B%Osxws({*&$;#YQ+|#37PhO1NF!p*n8k9^l(K7i+ZB z{A|dKX{pJ)IZ5M|5^TZpnPv3Fk@OsYa$E@!G{wq;6Xa%irwpBIpcF-mGaaJV3{b)u z+_`W9Tyz6fP{_`6>TEQOxY<`5Syn+}tlmxPb@VEWmr4=QkI~Bu5Fq@PoXjOd#tH&l#?xRUI0yHO2j4d*(6hC!2{kAad#1h4p~(TYkUeEy zC9Q$CeN<5yR$eJ5vNYm_l^qe__d9w(cBDQpSUM*iKAoM|qu#kGLx5ZPwqg5-g~9 zdr&?vUn#q(=<5Jxy*7viWgE_2@UCZqR`93(h6!=r!{U>@q}8$%5C5a8alhsL5Rx(H zlh{;vV#K$hdp6tI5^QAy=>V&l}i1tlIU{|tU_8b;@fFx@avc3tH;6efrsh>bY>AB zk7MEoUQ!Ndva-JS`hD(jemY|7Lx-p;LknmaCI!tz)s_x}J2rXavX3|2B32OZeC8ff zLlel22IWSu|MA`=>*#0yUQyj#v!_}>tm6d-c+qq6IlE72J;WK8mRmdI*%t*t4`7DM z%9F*m`XzjLg@H074gTiiqiq*oaw|O75|S&l>C-&3N4rdxfWx&_x)SYGPyyR?UXdEo zPaw$g{qjkbF}$PLMG3n9v)v-<2A$ep887CZ5Bq_Li2L}JOTpt#bk+zan7k6&l61#G z6o$dsqdNp1}in)KDsC?%Cr-3WMCR41=P@7cW9GF0uxG6#5pets9HsVpr|x8*Y(#b z;TR*yqy9sk={;>vOnc(M1@);|O|9#66T!*#1LvAC5*%i>AOXRWQl|GpYG`Q_ENKl3m_I7moukigujY1A_;OOrBX(c zS=KuXsj*0KU0+WqeZGd?ls?L%BrvIqLuR&_B}?G%xfkLh)aB>J4~U(j21g{M&7WGG z-zliu-gprmn&Vm4pDO&|0MWC@A~Iykboo*(#zcka2N~qLsb>>9irzXiFsI2e&P zE@gecj6ST*@`~9o(5=kNXleATU^uILzt1ChA3GMl+CW%jMV#Ttyc?=l&`;fr$l>DN{>ad@$6+ff-vzJb3;nwd-D zEc?xM#ALA1_m8}CPi#h&@o8#amHur@nK-?&!@!W`wP^R3_3-qpgP($p?9L?29-^Iw z2c&;6XD_J_IFAh9--1#@KXvpAM&*yVv$8Atk!be_ipP?jy)G<|KdcEiK1p?hLfi#% zYWHA9RRx0v&DIcY%{d||pjO{K9Yj$-jiE2)+6_JHn9S=VtOF`U8;a5=AlVH4V}ji;T_tJeIr$qfFB zqO}Tg-F2FyMrQB(h6wbJdm0ZdR{|#dPA`E(S`6FW%Y$M zmVuP_OEs*sT#&$L^XYBKdQy}%vR8Vgd>f{@ z>R&|ls`SGUD&g554({^Il89ej=9El}pY3*Tu{pxt-WXi)scAFLvzr^wE0z5!Wt7XI zU|gM~f&z8Q*&2?hRI*9W)G77RyUTWWGPXZ48m1K{vniMimFN^|jAiP2HUo3^zxm;d z4gF-dp_zU{uJuUZM*h!NL~U_m5Hk9INOCY+vJuLt)-y%^8l0KThnxkTOlG6}KmPTZ zARv2w8vk3K>GbEKt_QZ)qX5?@;DaT>?N%4OS6+RLY&3}~t*T^5d z3+6%pFU>%kLX2`12*wMd25YCVA(MfFQ)DRqerx~N_P_oX!0Rczlz-=;|1aN+dCp2~ K7z^?L4*n14Y+Dup diff --git a/matlab/subsystems/micro_hexapod_strut.slx b/matlab/subsystems/micro_hexapod_strut.slx index ed4fc4e29cd3e36db0f374181f73828aea2a8f40..c25a068f49c89b53e3c50ab1e57bde1b173d92fd 100644 GIT binary patch delta 6798 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�AF_a6cM&9$?_o>Ovkj)+4gZ0+ zq9;DYUx&lgZI*@=US5CiSJ;9^6#(^*jaQk^$vVP4G~M`pEm`2gEbJ&|h$Yij`c zt^3!IL2*N^XPk08kAg!Q+mbvjkX<+=uMX1e60&{{00A%hl8ObTHmVAO2~fd9RHv{_ zD&srY!I#lv>uvr!oDf${MrieyQFp?V&JRt!;E%m8*GA8wn_4^H3!&YG&RRpqrM=U^ zDFmUjE?67Ry>>hCRzDv{*GawhXEy0M z2zq3spy-H5^;+_hM;=QRt@-bMbh-_MGtZp9ESey9>N`Bjj<>Ii-1tTmLOv2 zwJ=g|zW*L}D|l0507YOSA`Gxg5GkxpoRr{ihebpGN1#>03cS_O*I^sp>KN%SVThNk zFl`^we@B3JK2+!lFn=FS^m^DQpXUt!cSiP~{C_bXFcx1?hX32M|F=IM2J!`9kAwcP F{TKS1EJ*+W diff --git a/matlab/subsystems/micro_hexapod_top_plate.slx b/matlab/subsystems/micro_hexapod_top_plate.slx index 2c75efe32d729f50cc73b5a16d349a97e2b5399e..a4eac09f6b71bd4114ea8794e0ec7a8afca9bd26 100644 GIT binary patch delta 6633 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 I(tjrZ2mAKAF8}}l delta 6476 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 W(SJ1*&pt528#u}%ZVrtX*na`mNoNND delta 53967 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 Removed - [X] modal analysis => Removed -** TODO [#A] Verify that we get "correct" compliance -SCHEDULED: <2024-10-30 Wed> +** DONE [#A] Verify that we get "correct" compliance +CLOSED: [2024-10-30 Wed 21:53] SCHEDULED: <2024-10-30 Wed> - [ ] Find the compliance measurements - The one from modal analysis @@ -185,9 +168,42 @@ SCHEDULED: <2024-10-30 Wed> - [ ] If not, see if model parameters can be tuned to have better match For instance from values here: file:/home/thomas/Cloud/meetings/esrf-meetings/2018-04-24-Simscape-Model/2018-04-24-Simscape-Model.pdf +** DONE [#B] Make sure to well model the micro-hexapod +CLOSED: [2024-10-31 Thu 10:36] SCHEDULED: <2024-10-31 Thu> + +- [ ] Find total mass (should be 37 kg) +- [ ] Find mass of top platform, bottom platform, struts +- [ ] Estimation of the strut stiffness from the manufacturer stiffness? + X,Y: 5N/um + Z: 50N/um + From the geometry, compute the strut stiffness: should be 10N/um (currently configured at 20N/um) + +** TODO [#A] Import all relevant report to this file + +Based on: +- [X] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/kinematics.org][kinematics]]: compute sample's motion from each stage motion +- [X] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/simscape_subsystems.org][simscape_subsystems]]: general presentation of the micro-station. Used model: solid body + joints. Presentation of each stage. +- [X] [[file:~/Cloud/work-projects/ID31-NASS/documents/work-package-1/work-package-1.org::*Specification of requirements][Specification of requirements]] +- [X] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/identification.org][identification]]: comparison of measurements and simscape model (not so good?) +- [ ] file:/home/thomas/Cloud/meetings/esrf-meetings/2018-04-24-Simscape-Model/2018-04-24-Simscape-Model.pdf +- [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/experiments.org][experiments]]: simulation of experiments with the Simscape model +- [ ] Disturbances: Similar to what was done for the uniaxial model (the same?) + - [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/disturbances.org::+TITLE: Identification of the disturbances]] +- [ ] Measurement of disturbances / things that will have to be corrected using the NASS: + - [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-measurements/static-to-dynamic/index.org]] + - [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-measurements/disturbance-control-system/index.org]] + - [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-measurements/disturbance-sr-rz/index.org]] + - [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-measurements/ground-motion/index.org]] + - [ ] [[file:~/Cloud/work-projects/ID31-NASS/matlab/nass-measurements/static-spindle/index.org]] + - [ ] Check [[file:~/Cloud/work-projects/ID31-NASS/specifications/id-31-spindle-meas][this directory]] and [[file:~/Cloud/work-projects/ID31-NASS/specifications/stage-by-stage][this directory]] + ** TODO [#B] Make good "init" for the Simscape model -** TODO [#C] Could see the effect of each stage on the compliance +In model properties => Callbacks => Init Fct +There are some loading of .mat files. +Is it the best option? + +** TODO [#C] Check the effect of each stage on the compliance - [ ] Put =rigid= mode one by one to see the effect @@ -215,13 +231,13 @@ By constraining more DoF, the simulation will be faster and the obtain state spa * Introduction :ignore: -#+name: tab:ustation_section_matlab_code -#+caption: Report sections and corresponding Matlab files -#+attr_latex: :environment tabularx :width 0.6\linewidth :align lX -#+attr_latex: :center t :booktabs t -| *Sections* | *Matlab File* | -|---------------------------------------------+-------------------------------------| -| Section ref:sec: | =ustation_1_.m= | +# #+name: tab:ustation_section_matlab_code +# #+caption: Report sections and corresponding Matlab files +# #+attr_latex: :environment tabularx :width 0.6\linewidth :align lX +# #+attr_latex: :center t :booktabs t +# | *Sections* | *Matlab File* | +# |------------------+-----------------| +# | Section ref:sec: | =ustation_1_.m= | * Micro-Station Kinematics @@ -272,7 +288,9 @@ By constraining more DoF, the simulation will be faster and the obtain state spa *** Spindle *** Micro-Hexapod ** Specification for each stage - <> +<> + +Figure here: file:/home/thomas/Cloud/work-projects/ID31-NASS/documents/work-package-1/figures For each stage, after a quick presentation, the specifications (stroke, precision, ...) of the stage, the metrology used with that stage and the parasitic motions associated to it are given. @@ -770,13 +788,7 @@ Some of the springs and dampers values can be estimated from the joints/stages s ** Compare with measurements at the CoM of each element #+begin_src matlab -%% We load the configuration. -load('conf_simulink.mat'); - -% We set a small =StopTime=. -set_param(conf_simulink, 'StopTime', '0.5'); - -%% We initialize all the stages. +%% All stages are initialized initializeGround( 'type', 'rigid'); initializeGranite( 'type', 'flexible'); initializeTy( 'type', 'flexible'); @@ -937,81 +949,86 @@ This is what can impact the nano-hexapod dynamics. - *Was the rotation compensation axis present?* (I don't think so) *** Position of inertial sensors on top of the micro-hexapod -Orientation is relative to the frame determined by the X-ray -| *Num* | *Position* | *Orientation* | *Sensibility* | *Channels* | -|-------+------------+---------------+---------------+------------| -| 1 | [0, +A, 0] | [x, y, z] | 1V/g | 1-3 | -| 2 | [-B, 0, 0] | [x, y, z] | 1V/g | 4-6 | -| 3 | [0, -A, 0] | [x, y, z] | 0.1V/g | 7-9 | -| 4 | [+B, 0, 0] | [x, y, z] | 1V/g | 10-12 | +4 accelerometers are fixed to the micro-hexapod top platform. -Instrumented Hammer: -- Channel 13 -- Sensibility: 230 uV/N +# | *Num* | *Position* | *Orientation* | *Sensibility* | *Channels* | +# |-------+------------+---------------+---------------+------------| +# | 1 | [0, +A, 0] | [x, y, z] | 1V/g | 1-3 | +# | 2 | [-B, 0, 0] | [x, y, z] | 1V/g | 4-6 | +# | 3 | [0, -A, 0] | [x, y, z] | 0.1V/g | 7-9 | +# | 4 | [+B, 0, 0] | [x, y, z] | 1V/g | 10-12 | -| Acc Number | Dir | Channel Number | -|------------+-----+----------------| -| 1 | x | 1 | -| 1 | y | 2 | -| 1 | z | 3 | -| 2 | x | 4 | -| 2 | y | 5 | -| 2 | z | 6 | -| 3 | x | 7 | -| 3 | y | 8 | -| 3 | z | 9 | -| 4 | x | 10 | -| 4 | y | 11 | -| 4 | z | 12 | -| Hammer | | 13 | +# Instrumented Hammer: +# - Channel 13 +# - Sensibility: 230 uV/N -From the acceleration measurement of the 4 accelerometers, we can compute the translations and rotations: -| | *Formula* | *Formula (numbers)* | -|-------+--------------------------+-----------------------| -| $D_x$ | (1x + 2x + 3x + 4x)/4 | (1 + 4 + 7 + 10)/4 | -| $D_y$ | (1y + 2y + 3y + 4y)/4 | (2 + 5 + 8 + 11)/4 | -| $D_z$ | (1z + 2z + 3z + 4z)/4 | (3 + 6 + 9 + 12)/4 | -| $R_x$ | (1z - 3z)/A | (1 - 9)/A | -| $R_y$ | (2z - 4z)/B | (6 - 12)/B | -| $R_z$ | (3x - 1x)/A, (4y - 2y)/B | (7 - 1)/A, (11 - 5)/B | +# | Acc Number | Dir | Channel Number | +# |------------+-----+----------------| +# | 1 | x | 1 | +# | 1 | y | 2 | +# | 1 | z | 3 | +# | 2 | x | 4 | +# | 2 | y | 5 | +# | 2 | z | 6 | +# | 3 | x | 7 | +# | 3 | y | 8 | +# | 3 | z | 9 | +# | 4 | x | 10 | +# | 4 | y | 11 | +# | 4 | z | 12 | +# | Hammer | | 13 | + +To convert the 12 acceleration signals $\mathbf{a}_{\mathcal{L}} = [a_{1x}\ a_{1y}\ a_{1z}\ a_{2x}\ \dots\ a_{4z}]$ to the acceleration expressed in cartesian coordinate $\mathbf{a}_{\mathcal{X}} [a_{dx}\ a_{dy}\ a_{dz}\ a_{rx}\ a_{ry}\ a_{rz}]$, a Jacobian matrix can be written based on the positions and orientations of the accelerometers. + +\begin{equation} +\mathbf{a}_{\mathcal{L}} = J_a \cdot \mathbf{a}_{\mathcal{X}} +\end{equation} + +\begin{equation} +J_a = \begin{bmatrix} +1 & 0 & 0 & 0 & 0 &-d \\ +0 & 1 & 0 & 0 & 0 & 0 \\ +0 & 0 & 1 & d & 0 & 0 \\ +1 & 0 & 0 & 0 & 0 & 0 \\ +0 & 1 & 0 & 0 & 0 &-d \\ +0 & 0 & 1 & 0 & d & 0 \\ +1 & 0 & 0 & 0 & 0 & d \\ +0 & 1 & 0 & 0 & 0 & 0 \\ +0 & 0 & 1 &-d & 0 & 0 \\ +1 & 0 & 0 & 0 & 0 & 0 \\ +0 & 1 & 0 & 0 & 0 & d \\ +0 & 0 & 1 & 0 &-d & 0 +\end{bmatrix} +\end{equation} + +Then, the acceleration in the cartesian frame can be computed +\begin{equation} +\mathbf{a}_{\mathcal{X}} = J_a^\dagger \cdot \mathbf{a}_{\mathcal{L}} +\end{equation} -dL = J X #+begin_src matlab -d = 0.14; -J = [1 0 0 0 0 -d; - 0 1 0 0 0 0; - 0 0 1 d 0 0; - 1 0 0 0 0 0; - 0 1 0 0 0 -d; - 0 0 1 0 d 0; - 1 0 0 0 0 d; - 0 1 0 0 0 0; - 0 0 1 -d 0 0; - 1 0 0 0 0 0; - 0 1 0 0 0 d; - 0 0 1 0 -d 0]; +%% Jacobian for accelerometers +% L = Ja X +d = 0.14; % [m] +Ja = [1 0 0 0 0 -d; + 0 1 0 0 0 0; + 0 0 1 d 0 0; + 1 0 0 0 0 0; + 0 1 0 0 0 -d; + 0 0 1 0 d 0; + 1 0 0 0 0 d; + 0 1 0 0 0 0; + 0 0 1 -d 0 0; + 1 0 0 0 0 0; + 0 1 0 0 0 d; + 0 0 1 0 -d 0]; -J_inv = pinv(J); +Ja_inv = pinv(Ja); #+end_src -| | Dx | Dy | Dz | Rx | Ry | Rz | -|-----+----+----+----+----+----+----| -| a1x | 1 | 0 | 0 | 0 | 0 | -d | -| a1y | 0 | 1 | 0 | 0 | 0 | 0 | -| a1z | 0 | 0 | 1 | d | 0 | 0 | -| a2x | 1 | 0 | 0 | 0 | 0 | 0 | -| a2y | 0 | 1 | 0 | 0 | 0 | -d | -| a2z | 0 | 0 | 1 | 0 | d | 0 | -| a3x | 1 | 0 | 0 | 0 | 0 | d | -| a3y | 0 | 1 | 0 | 0 | 0 | 0 | -| a3z | 0 | 0 | 1 | -d | 0 | 0 | -| a4x | 1 | 0 | 0 | 0 | 0 | 0 | -| a4y | 0 | 1 | 0 | 0 | 0 | d | -| a4z | 0 | 0 | 1 | 0 | -d | 0 | - #+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) -data2orgtable(J_inv, {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'d1x', 'd1y', 'd1z', 'd2x', 'd2y', 'd2z', 'd3x', 'd3y', 'd3z', 'd4x', 'd4y', 'd4z'}, ' %.5f '); +data2orgtable(Ja_inv, {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'d1x', 'd1y', 'd1z', 'd2x', 'd2y', 'd2z', 'd3x', 'd3y', 'd3z', 'd4x', 'd4y', 'd4z'}, ' %.5f '); #+end_src #+RESULTS: @@ -1026,6 +1043,8 @@ data2orgtable(J_inv, {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'d1x', 'd1y', 'd1z', *** Hammer blow position/orientation +10 hammer hits are performed as shown in Figure ... + | *Num* | *Direction* | *Position* | Accelerometer position | Jacobian number | |-------+-------------+------------+------------------------+-----------------| | 1 | -Y | [0, +A, 0] | 1 | -2 | @@ -1039,18 +1058,30 @@ data2orgtable(J_inv, {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'d1x', 'd1y', 'd1z', | 9 | -X | [0, -A, 0] | 3 | -7 | | 10 | -X | [0, +A, 0] | 1 | -1 | -From hammer blows to pure forces / torques: -| | *Formula* | Alternative | -|-------+--------------+-------------| -| $F_x$ | +3 | -7 | -| $F_y$ | -1 | +5 | -| $F_z$ | -(2 + 6)/2 | -(4 + 8)/2 | -| $M_x$ | A/2*(2 - 6) | | -| $M_y$ | B/2*(8 - 4) | | -| $M_z$ | A/2*(10 - 9) | | +Similar to what is done for the accelerometers, a Jacobian matrix can be computed to convert the individual hammer forces to force and torques applied at the center of the micro-hexapod top plate. + +\begin{equation} +\mathbf{F}_{\mathcal{X}} = J_F^t \cdot \mathbf{F}_{\mathcal{L}} +\end{equation} + +\begin{equation} +J_F = \begin{bmatrix} + 0 & -1 & 0 & 0 & 0 & 0\\ + 0 & 0 & -1 & -d & 0 & 0\\ + 1 & 0 & 0 & 0 & 0 & 0\\ + 0 & 0 & -1 & 0 & -d & 0\\ + 0 & 1 & 0 & 0 & 0 & 0\\ + 0 & 0 & -1 & d & 0 & 0\\ +-1 & 0 & 0 & 0 & 0 & 0\\ + 0 & 0 & -1 & 0 & d & 0\\ +-1 & 0 & 0 & 0 & 0 & -d\\ +-1 & 0 & 0 & 0 & 0 & d +\end{bmatrix} +\end{equation} -F = J' tau #+begin_src matlab +%% Jacobian for hammer impacts +% F = Jf' tau Jf = [0 -1 0 0 0 0; 0 0 -1 -d 0 0; 1 0 0 0 0 0; @@ -1079,56 +1110,50 @@ data2orgtable(Jf, {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}, {'-F1y', '-F1z', '+F2x', | Mz | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | -0.14 | 0.14 | *** Compute FRF -Raw measurements are in file:/home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-measurements/micro-station-compliance/data/record - -For each measurement (10): -- Find the location of the 10 impacts based on "track13" -- Then for the 12 accelerometer data, compute the FRF, and average them for the 10 impacts -- Maybe have to take into account the sensitivity, etc... #+begin_src matlab -raw_data_path = '/home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-measurements/micro-station-compliance/data/record/'; +%% Load raw measurement data +% "Track1" to "Track12" are the 12 accelerometers +% "Track13" is the instrumented hammer force sensor data = [ - load(sprintf('%s/Measurement1.mat', raw_data_path)), ... - load(sprintf('%s/Measurement2.mat', raw_data_path)), ... - load(sprintf('%s/Measurement3.mat', raw_data_path)), ... - load(sprintf('%s/Measurement4.mat', raw_data_path)), ... - load(sprintf('%s/Measurement5.mat', raw_data_path)), ... - load(sprintf('%s/Measurement6.mat', raw_data_path)), ... - load(sprintf('%s/Measurement7.mat', raw_data_path)), ... - load(sprintf('%s/Measurement8.mat', raw_data_path)), ... - load(sprintf('%s/Measurement9.mat', raw_data_path)), ... - load(sprintf('%s/Measurement10.mat', raw_data_path))]; -#+end_src + load('ustation_compliance_hammer_1.mat'), ... + load('ustation_compliance_hammer_2.mat'), ... + load('ustation_compliance_hammer_3.mat'), ... + load('ustation_compliance_hammer_4.mat'), ... + load('ustation_compliance_hammer_5.mat'), ... + load('ustation_compliance_hammer_6.mat'), ... + load('ustation_compliance_hammer_7.mat'), ... + load('ustation_compliance_hammer_8.mat'), ... + load('ustation_compliance_hammer_9.mat'), ... + load('ustation_compliance_hammer_10.mat')]; -#+begin_src matlab +%% Prepare the FRF computation Ts = 1e-3; % Sampling Time [s] Nfft = floor(1/Ts); % Number of points for the FFT computation -% win = hanning(Nfft); % Hanning window win = ones(Nfft, 1); % Rectangular window -% Get the frequency vector [~, f] = tfestimate(data(1).Track13, data(1).Track1, win, [], Nfft, 1/Ts); -#+end_src -#+begin_src matlab +% Samples taken before and after the hammer "impact" pre_n = floor(0.1/Ts); post_n = Nfft - pre_n - 1; -#+end_src -#+begin_src matlab +%% Compute the FRFs for the 10 hammer impact locations. +% The FRF from hammer force the 12 accelerometers are computed +% for each of the 10 hammer impacts and averaged G_raw = zeros(12,10,length(f)); -for i = 1:10 - % Find the impacts + +for i = 1:10 % For each impact location + % Find the 10 impacts [~, impacts_i] = find(diff(data(i).Track13 > 50)==1); % Only keep the first 10 impacts if there are more than 10 impacts if length(impacts_i)>10 impacts_i(11:end) = []; end - % Initialize the FRF for the current experiment - G_impact = zeros(12,length(f)); + + % Average the FRF for the 10 impacts for impact_i = impacts_i - i_start = impacts_i - pre_n; - i_end = impacts_i + post_n; + i_start = impact_i - pre_n; + i_end = impact_i + post_n; data_in = data(i).Track13(i_start:i_end); % [N] % Remove hammer DC offset data_in = data_in - mean(data_in(end-pre_n:end)); @@ -1147,162 +1172,56 @@ for i = 1:10 data(i).Track12(i_start:i_end)]; [frf, ~] = tfestimate(data_in, data_out', win, [], Nfft, 1/Ts); - G_raw(:,i,:) = frf'./(-(2*pi*f').^2); + G_raw(:,i,:) = squeeze(G_raw(:,i,:)) + 0.1*frf'./(-(2*pi*f').^2); end end + +%% Compute transfer function in cartesian frame using Jacobian matrices +% FRF_cartesian = inv(Ja) * FRF * inv(Jf) +FRF_cartesian = pagemtimes(Ja_inv, pagemtimes(G_raw, Jf_inv)); #+end_src -#+begin_src matlab -%% Compute transfer function in cartesian frame -G_compl_b = pagemtimes(J_inv, pagemtimes(G_raw, Jf_inv)); -#+end_src - -#+begin_src matlab -colors = colororder; +#+begin_src matlab :exports none :results none +%% Measured FRF of the compliance of the micro-station in the Cartesian frame figure; hold on; -% plot(freqs, abs(squeeze(G_compl(1,1,:))), 'color', colors(1,:), 'DisplayName', '$C_x/F_x$') -% plot(freqs, abs(squeeze(G_compl(2,2,:))), 'color', colors(2,:), 'DisplayName', '$C_y/F_y$') -% plot(freqs, abs(squeeze(G_compl(3,3,:))), 'color', colors(3,:), 'DisplayName', '$C_z/F_z$') -plot(f, abs(squeeze(G_compl_b(1,1,:))), '-', 'color', colors(1,:), 'DisplayName', '$C_x/F_x$') -plot(f, abs(squeeze(G_compl_b(2,2,:))), '-', 'color', colors(2,:), 'DisplayName', '$C_y/F_y$') -plot(f, abs(squeeze(G_compl_b(3,3,:))), '-', 'color', colors(3,:), 'DisplayName', '$C_z/F_z$') +plot(f, abs(squeeze(FRF_cartesian(1,1,:))), '.', 'color', colors(1,:), 'DisplayName', '$D_x/F_x$') +plot(f, abs(squeeze(FRF_cartesian(2,2,:))), '.', 'color', colors(2,:), 'DisplayName', '$D_y/F_y$') +plot(f, abs(squeeze(FRF_cartesian(3,3,:))), '.', 'color', colors(3,:), 'DisplayName', '$D_z/F_z$') hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]'); -xlim([30, 300]); ylim([1e-9, 2e-6]); leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1); leg.ItemTokenSize(1) = 15; -#+end_src - -*** Load Data -#+begin_src matlab -% Load data -data = [load('data/Measurement1.mat'), ... - load('data/Measurement2.mat'), ... - load('data/Measurement3.mat'), ... - load('data/Measurement4.mat'), ... - load('data/Measurement5.mat'), ... - load('data/Measurement6.mat'), ... - load('data/Measurement7.mat'), ... - load('data/Measurement8.mat'), ... - load('data/Measurement9.mat'), ... - load('data/Measurement10.mat')]; -#+end_src - -#+begin_src matlab -% Frequency Vector -freqs = m3.FFT1_H1_1_13_X_Val; -w = 2*pi*freqs; - -% 12 outputs, 10 inputs -G_raw = zeros(12, 10, length(freqs)); - -for j = 1:10 - for i = 1:12 - G_raw(i,j,:) = data(j).(sprintf("FFT1_H1_%i_13_Y_ReIm", i))./(-w.^2); - end -end -#+end_src - -#+begin_src matlab -%% Compute transfer function in cartesian frame -G_compl = pagemtimes(J_inv, pagemtimes(G_raw, Jf_inv)); -#+end_src - -#+begin_src matlab -colors = colororder; -figure; -hold on; -plot(freqs, abs(squeeze(G_compl(1,1,:))), 'color', colors(1,:), 'DisplayName', '$C_x/F_x$') -plot(freqs, abs(squeeze(G_compl(2,2,:))), 'color', colors(2,:), 'DisplayName', '$C_y/F_y$') -plot(freqs, abs(squeeze(G_compl(3,3,:))), 'color', colors(3,:), 'DisplayName', '$C_z/F_z$') -plot(f, abs(squeeze(G_compl_b(1,1,:))), '.', 'color', colors(1,:), 'DisplayName', '$C_x/F_x$') -plot(f, abs(squeeze(G_compl_b(2,2,:))), '.', 'color', colors(2,:), 'DisplayName', '$C_y/F_y$') -plot(f, abs(squeeze(G_compl_b(3,3,:))), '.', 'color', colors(3,:), 'DisplayName', '$C_z/F_z$') -hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]'); -xlim([30, 300]); ylim([1e-9, 2e-6]); -leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1); -leg.ItemTokenSize(1) = 15; +xlim([20, 500]); ylim([1e-9, 2e-6]); +xticks([20, 50, 100, 200, 500]) #+end_src -#+begin_src matlab -colors = colororder; -figure; -hold on; -plot(freqs, abs(squeeze(G_compl(4,4,:))), 'color', colors(1,:), 'DisplayName', '$R_x/M_x$') -plot(freqs, abs(squeeze(G_compl(5,5,:))), 'color', colors(2,:), 'DisplayName', '$R_y/M_y$') -plot(freqs, abs(squeeze(G_compl(6,6,:))), 'color', colors(3,:), 'DisplayName', '$R_z/M_z$') -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]'); -xlim([30, 300]); ylim([5e-7, 5e-5]); -leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1); -leg.ItemTokenSize(1) = 15; +#+begin_src matlab :tangle no :exports results :results file replace +exportFig('figs/ustation_frf_compliance_xyz.pdf', 'width', 'wide', 'height', 'normal'); #+end_src -*** Diagonal Dynamics -#+begin_src matlab -figure; -ax1 = subplot(2,1,1); -hold on; -plot(freqs, abs(squeeze(G(1,1,:)), '-', 'DisplayName', '$D_x/F_x$') -plot(freqs, abs(squeeze(G(2,2,:)), '-', 'DisplayName', '$D_y/F_y$') -plot(freqs, abs(squeeze(G(3,3,:)), '-', 'DisplayName', '$D_z/F_z$') -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]'); -ylim([1e-9, 2e-6]); -legend('location', 'southwest'); -xlim([30, 300]); -#+end_src - -#+begin_src matlab -figure; -ax1 = subplot(2,1,1); -hold on; -plot(freqs, abs(squeeze(G(4,4,:)), '-', 'DisplayName', '$R_x/M_x$') -plot(freqs, abs(squeeze(G(5,5,:)), '-', 'DisplayName', '$R_y/M_y$') -plot(freqs, abs(squeeze(G(6,6,:)), '-', 'DisplayName', '$R_z/M_z$') -hold off; -set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -xlabel('Frequency [Hz]'); ylabel('Magnitude [rad/Nm]'); -ylim([1e-7, 2e-4]); -legend('location', 'southwest'); -xlim([30, 300]); -#+end_src - -*** Equivalent Stiffness and Mass Estimation - -#+begin_src matlab -K = [1e7, 1e7, 2e8, 5e7, 3e7, 2e7]; -f_res = [125, 135, 390, 335, 335, 160]; -#+end_src - -#+begin_src matlab -M = [20, 20, 20, 11, 7, 20]; -f_res_est = sqrt(K./M)./(2*pi); -#+end_src - -Here is the inertia / stiffness to the granite that can represent the micro-station compliance dynamics: -#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) -data2orgtable([K'], {'x', 'y', 'z', 'Rx', 'Ry', 'Rz'}, {'Stiffness', 'Inertia'}, ' %.1g '); -#+end_src - - +#+name: fig:ustation_frf_compliance_xyz +#+caption: Measured FRF of the compliance of the micro-station in the Cartesian frame #+RESULTS: -| Stiffness | Inertia | -|-----------+-------------| -| x | 10000000.0 | -| y | 10000000.0 | -| z | 200000000.0 | -| Rx | 50000000.0 | -| Ry | 30000000.0 | -| Rz | 20000000.0 | +[[file:figs/ustation_frf_compliance_xyz.png]] + +#+begin_src matlab +figure; +hold on; +plot(f, abs(squeeze(FRF_cartesian(4,4,:))), '-', 'color', colors(1,:), 'DisplayName', '$D_x/F_x$') +plot(f, abs(squeeze(FRF_cartesian(5,5,:))), '-', 'color', colors(2,:), 'DisplayName', '$D_y/F_y$') +plot(f, abs(squeeze(FRF_cartesian(6,6,:))), '-', 'color', colors(3,:), 'DisplayName', '$D_z/F_z$') +hold off; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]'); +xlim([30, 300]); ylim([1e-9, 2e-6]); +leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1); +leg.ItemTokenSize(1) = 15; +#+end_src ** Compare with the Model + #+begin_src matlab %% Initialize simulation with default parameters (flexible elements) initializeGround(); @@ -1333,196 +1252,121 @@ Gm.InputName = {'Fmx', 'Fmy', 'Fmz', 'Mmx', 'Mmy', 'Mmz'}; Gm.OutputName = {'Dx', 'Dy', 'Dz', 'Drx', 'Dry', 'Drz'}; #+end_src -#+begin_src matlab :exports none -%% Plot of the compliance curves -labels = {'$D_x/F_{x}$', '$D_y/F_{y}$', '$D_z/F_{z}$', '$R_{x}/M_{x}$', '$R_{y}/M_{y}$', '$R_{R}/M_{z}$'}; - -freqs = logspace(1, 3, 1000); - +#+begin_src matlab :exports none :results none +%% Extracted FRF of the compliance of the micro-station in the Cartesian frame from the Simscape model figure; - hold on; -for i = 1:6 - plot(freqs, abs(squeeze(freqresp(Gm(i, i), freqs, 'Hz'))), 'DisplayName', labels{i}); -end +plot(f, abs(squeeze(FRF_cartesian(1,1,:))), '.', 'color', colors(1,:), 'DisplayName', '$D_x/F_x$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(2,2,:))), '.', 'color', colors(2,:), 'DisplayName', '$D_y/F_y$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(3,3,:))), '.', 'color', colors(3,:), 'DisplayName', '$D_z/F_z$ - Measured') +plot(freqs, abs(squeeze(freqresp(Gm(1,1), freqs, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '$D_x/F_x$ - Model') +plot(freqs, abs(squeeze(freqresp(Gm(2,2), freqs, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '$D_y/F_y$ - Model') +plot(freqs, abs(squeeze(freqresp(Gm(3,3), freqs, 'Hz'))), '--', 'color', colors(3,:), 'DisplayName', '$D_z/F_z$ - Model') hold off; +leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); +leg.ItemTokenSize(1) = 15; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); -xlabel('Frequency [Hz]'); -ylabel('Compliance'); -legend('location', 'northwest'); -#+end_src - -- [ ] Comparison with the estimated (or measured) compliance - -#+begin_src matlab - figure; - ax1 = subplot(2,1,1); - hold on; - plot(freqs, abs(squeeze(G(1,1,:))./(-w.^2)), '.') - plot(freqs, abs(squeeze(G(2,2,:))./(-w.^2)), '.') - plot(freqs, abs(squeeze(G(3,3,:))./(-w.^2)), '.') - set(gca,'ColorOrderIndex',1); - plot(freqs, abs(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-') - plot(freqs, abs(squeeze(freqresp(Gm(2,2,:), freqs, 'Hz'))), '-') - plot(freqs, abs(squeeze(freqresp(Gm(3,3,:), freqs, 'Hz'))), '-') - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]); - ylim([1e-9, 2e-6]); - - ax2 = subplot(2,1,2); - hold on; - plot(freqs, 180/pi*angle(squeeze(G(1,1,:))./(-w.^2)), '.', 'DisplayName', '$D_x/F_x$') - plot(freqs, 180/pi*angle(squeeze(G(2,2,:))./(-w.^2)), '.', 'DisplayName', '$D_y/F_y$') - plot(freqs, 180/pi*angle(squeeze(G(3,3,:))./(-w.^2)), '.', 'DisplayName', '$D_z/F_z$') - set(gca,'ColorOrderIndex',1); - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(2,2,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(3,3,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'southwest'); - - linkaxes([ax1,ax2],'x'); - xlim([30, 300]); +xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]'); +xlim([20, 500]); ylim([2e-10, 1e-6]); +xticks([20, 50, 100, 200, 500]) #+end_src #+begin_src matlab :tangle no :exports results :results file replace - exportFig('figs/compliance_diagonal_translations_comp_model.pdf', 'width', 'full', 'height', 'full'); +exportFig('figs/ustation_frf_compliance_xyz_model.pdf', 'width', 'wide', 'height', 'normal'); #+end_src -#+name: fig:compliance_diagonal_translations_comp_model -#+caption: Dynamics from Forces to Translations +#+name: fig:ustation_frf_compliance_xyz_model +#+caption: Extracted FRF of the compliance of the micro-station in the Cartesian frame from the Simscape model #+RESULTS: -[[file:figs/compliance_diagonal_translations_comp_model.png]] +[[file:figs/ustation_frf_compliance_xyz_model.png]] -#+begin_src matlab - figure; - ax1 = subplot(2,1,1); - hold on; - plot(freqs, abs(squeeze(G(4,4,:))./(-w.^2)), '.') - plot(freqs, abs(squeeze(G(5,5,:))./(-w.^2)), '.') - plot(freqs, abs(squeeze(G(6,6,:))./(-w.^2)), '.') - set(gca,'ColorOrderIndex',1); - plot(freqs, abs(squeeze(freqresp(Gm(4,4,:), freqs, 'Hz'))), '-') - plot(freqs, abs(squeeze(freqresp(Gm(5,5,:), freqs, 'Hz'))), '-') - plot(freqs, abs(squeeze(freqresp(Gm(6,6,:), freqs, 'Hz'))), '-') - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Magnitude [rad/Nm]'); set(gca, 'XTickLabel',[]); - % ylim([1e-9, 2e-6]); - - ax2 = subplot(2,1,2); - hold on; - plot(freqs, 180/pi*angle(squeeze(G(4,4,:))./(-w.^2)), '.', 'DisplayName', '$R_x/M_x$') - plot(freqs, 180/pi*angle(squeeze(G(5,5,:))./(-w.^2)), '.', 'DisplayName', '$R_y/M_y$') - plot(freqs, 180/pi*angle(squeeze(G(6,6,:))./(-w.^2)), '.', 'DisplayName', '$R_z/M_z$') - set(gca,'ColorOrderIndex',1); - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(4,4,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(5,5,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(6,6,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'southwest'); - - linkaxes([ax1,ax2],'x'); - xlim([30, 300]); +#+begin_src matlab :exports none :results none +%% Extracted FRF of the compliance of the micro-station in the Cartesian frame from the Simscape model +figure; +hold on; +plot(f, abs(squeeze(FRF_cartesian(4,4,:))), '.', 'color', colors(1,:), 'DisplayName', '$R_x/M_x$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(5,5,:))), '.', 'color', colors(2,:), 'DisplayName', '$R_y/M_y$ - Measured') +plot(f, abs(squeeze(FRF_cartesian(6,6,:))), '.', 'color', colors(3,:), 'DisplayName', '$R_z/M_z$ - Measured') +plot(freqs, abs(squeeze(freqresp(Gm(4,4), freqs, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '$R_x/M_x$ - Model') +plot(freqs, abs(squeeze(freqresp(Gm(5,5), freqs, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '$R_y/M_y$ - Model') +plot(freqs, abs(squeeze(freqresp(Gm(6,6), freqs, 'Hz'))), '--', 'color', colors(3,:), 'DisplayName', '$R_z/M_z$ - Model') +hold off; +leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2); +leg.ItemTokenSize(1) = 15; +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]'); +xlim([20, 500]); ylim([2e-7, 1e-4]); +xticks([20, 50, 100, 200, 500]) #+end_src #+begin_src matlab :tangle no :exports results :results file replace - exportFig('figs/compliance_diagonal_rotations_comp_model.pdf', 'width', 'full', 'height', 'full'); +exportFig('figs/ustation_frf_compliance_Rxyz_model.pdf', 'width', 'wide', 'height', 'normal'); #+end_src -#+name: fig:compliance_diagonal_rotations_comp_model -#+caption: Dynamics from Torques to Rotations +#+name: fig:ustation_frf_compliance_Rxyz_model +#+caption: Extracted FRF of the compliance of the micro-station in the Cartesian frame from the Simscape model #+RESULTS: -[[file:figs/compliance_diagonal_rotations_comp_model.png]] +[[file:figs/ustation_frf_compliance_Rxyz_model.png]] -| | Stiffness | Unit | -|-----------+-----------+----------| -| $K_x$ | 1e7 | [N/m] | -| $K_y$ | 1e7 | [N/m] | -| $K_z$ | 2e8 | [N/m] | -| $K_{R_x}$ | 5e7 | [Nm/rad] | -| $K_{R_y}$ | 3e7 | [Nm/rad] | -| $K_{R_z}$ | 2e7 | [Nm/rad] | - -*** Coupling Dynamics +** Get resonance frequencies #+begin_src matlab - figure; - ax1 = subplot(2,1,1); - hold on; - plot(freqs, abs(squeeze(G(1,1,:))./(-w.^2)), '.') - plot(freqs, abs(squeeze(G(2,1,:))./(-w.^2)), '.') - plot(freqs, abs(squeeze(G(3,1,:))./(-w.^2)), '.') - set(gca,'ColorOrderIndex',1); - plot(freqs, abs(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-') - plot(freqs, abs(squeeze(freqresp(Gm(2,1,:), freqs, 'Hz'))), '-') - plot(freqs, abs(squeeze(freqresp(Gm(3,1,:), freqs, 'Hz'))), '-') - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]); - ylim([1e-9, 2e-6]); +%% Initialize simulation with default parameters (flexible elements) +initializeGround(); +initializeGranite(); +initializeTy(); +initializeRy(); +initializeRz(); +initializeMicroHexapod(); - ax2 = subplot(2,1,2); - hold on; - plot(freqs, 180/pi*angle(squeeze(G(1,1,:))./(-w.^2)), '.', 'DisplayName', '$D_x/F_x$') - plot(freqs, 180/pi*angle(squeeze(G(2,1,:))./(-w.^2)), '.', 'DisplayName', '$D_y/F_x$') - plot(freqs, 180/pi*angle(squeeze(G(3,1,:))./(-w.^2)), '.', 'DisplayName', '$D_z/F_x$') - set(gca,'ColorOrderIndex',1); - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(1,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(2,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(3,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'southwest'); +initializeReferences(); +initializeDisturbances(); +initializeSimscapeConfiguration(); +initializeLoggingConfiguration(); +#+end_src - linkaxes([ax1,ax2],'x'); - xlim([30, 300]); +And we identify the dynamics from forces/torques applied on the micro-hexapod top platform to the motion of the micro-hexapod top platform at the same point. + +#+begin_src matlab +%% Identification of the compliance +% Input/Output definition +clear io; io_i = 1; +io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Flexible/Fm'], 1, 'openinput'); io_i = io_i + 1; % Direct Forces/Torques applied on the micro-hexapod top platform +io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Flexible/Dm'], 1, 'output'); io_i = io_i + 1; % Absolute displacement of the top platform + +% Run the linearization +Gm = linearize(mdl, io, 0); +Gm.InputName = {'Fmx', 'Fmy', 'Fmz', 'Mmx', 'Mmy', 'Mmz'}; +Gm.OutputName = {'Dx', 'Dy', 'Dz', 'Drx', 'Dry', 'Drz'}; #+end_src #+begin_src matlab - figure; - ax1 = subplot(2,1,1); - hold on; - plot(freqs, abs(squeeze(G(5,1,:))./(-w.^2)), '.') - plot(freqs, abs(squeeze(G(4,2,:))./(-w.^2)), '.') - set(gca,'ColorOrderIndex',1); - plot(freqs, abs(squeeze(freqresp(Gm(5,1,:), freqs, 'Hz'))), '-') - plot(freqs, abs(squeeze(freqresp(Gm(4,2,:), freqs, 'Hz'))), '-') - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Magnitude [m/N]'); set(gca, 'XTickLabel',[]); - ylim([1e-9, 2e-6]); - - ax2 = subplot(2,1,2); - hold on; - plot(freqs, 180/pi*angle(squeeze(G(5,1,:))./(-w.^2)), '.', 'DisplayName', '$R_y/F_x$') - plot(freqs, 180/pi*angle(squeeze(G(4,2,:))./(-w.^2)), '.', 'DisplayName', '$R_x/F_y$') - set(gca,'ColorOrderIndex',1); - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(5,1,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm(4,2,:), freqs, 'Hz'))), '-', 'HandleVisibility', 'off') - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - xlabel('Freqency [Hz]'); ylabel('Phase [deg]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'southwest'); - - linkaxes([ax1,ax2],'x'); - xlim([30, 300]); +modes_freq = imag(eig(Gm))/2/pi; +modes_freq = sort(modes_freq(modes_freq>0)); #+end_src +#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) +data2orgtable([modes_freq(1:16), [11.9, 18.6, 37.8, 39.1, 56.3, 69.8, 72.5, 84.8, 91.3, 105.5, 106.6, 112.7, 124.2, 145.3, 150.5, 165.4]'], {'1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16'}, {'Mode', 'Simscape', 'Modal analysis'}, ' %.1f '); +#+end_src +#+RESULTS: +| Mode | Simscape | Modal analysis | +|------+----------+----------------| +| 1 | 11.7 | 11.9 | +| 2 | 21.3 | 18.6 | +| 3 | 26.1 | 37.8 | +| 4 | 57.5 | 39.1 | +| 5 | 60.6 | 56.3 | +| 6 | 73.0 | 69.8 | +| 7 | 97.9 | 72.5 | +| 8 | 120.2 | 84.8 | +| 9 | 126.2 | 91.3 | +| 10 | 142.4 | 105.5 | +| 11 | 155.9 | 106.6 | +| 12 | 178.5 | 112.7 | +| 13 | 179.3 | 124.2 | +| 14 | 182.6 | 145.3 | +| 15 | 223.6 | 150.5 | +| 16 | 226.4 | 165.4 | ** Conclusion For such a complex system, we believe that the Simscape Model represents the dynamics of the system with enough fidelity. @@ -1589,6 +1433,8 @@ For such a complex system, we believe that the Simscape Model represents the dyn * Estimation of disturbances +This was already done in uni-axial model. + * Conclusion <> @@ -1596,6 +1442,46 @@ For such a complex system, we believe that the Simscape Model represents the dyn * Bibliography :ignore: #+latex: \printbibliography[heading=bibintoc,title={Bibliography}] +* Helping Functions :noexport: +** Initialize Path +#+NAME: m-init-path +#+BEGIN_SRC matlab +addpath('./matlab/'); % Path for scripts + +%% Path for functions, data and scripts +addpath('./matlab/mat/'); % Path for Computed FRF +addpath('./matlab/src/'); % Path for functions +addpath('./matlab/STEPS/'); % Path for STEPS +addpath('./matlab/subsystems/'); % Path for Subsystems Simulink files +#+END_SRC + +#+NAME: m-init-path-tangle +#+BEGIN_SRC matlab +%% Path for functions, data and scripts +addpath('./mat/'); % Path for Data +addpath('./src/'); % Path for functions +addpath('./STEPS/'); % Path for STEPS +addpath('./subsystems/'); % Path for Subsystems Simulink files +#+END_SRC + +** Initialize Simscape Model +#+NAME: m-init-simscape +#+begin_src matlab +% Simulink Model name +mdl = 'ustation_simscape'; + +load('conf_simulink.mat'); +#+end_src + +** Initialize other elements +#+NAME: m-init-other +#+BEGIN_SRC matlab +%% Colors for the figures +colors = colororder; + +%% Frequency Vector +freqs = logspace(log10(10), log10(2e3), 1000); +#+END_SRC * Matlab Functions :noexport: ** Simscape Configuration :PROPERTIES: @@ -1836,8 +1722,8 @@ end arguments args.type char {mustBeMember(args.type,{'rigid', 'flexible', 'none'})} = 'flexible' args.density (1,1) double {mustBeNumeric, mustBeNonnegative} = 2800 % Density [kg/m3] - args.K (3,1) double {mustBeNumeric, mustBeNonnegative} = [4e9; 3e8; 8e8] % [N/m] - args.C (3,1) double {mustBeNumeric, mustBeNonnegative} = [4.0e5; 1.1e5; 9.0e5] % [N/(m/s)] + args.K (6,1) double {mustBeNumeric, mustBeNonnegative} = [5e9; 5e9; 5e9; 2.5e7; 2.5e7; 1e7] % [N/m] + args.C (6,1) double {mustBeNumeric, mustBeNonnegative} = [4.0e5; 1.1e5; 9.0e5; 2e4; 2e4; 1e4] % [N/(m/s)] args.x0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the X direction [m] args.y0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the Y direction [m] args.z0 (1,1) double {mustBeNumeric} = 0 % Rest position of the Joint in the Z direction [m] @@ -2010,7 +1896,7 @@ Define the density of the materials as well as the geometry (STEP files). #+begin_src matlab ty.K = [2e8; 1e8; 2e8; 6e7; 9e7; 6e7]; % [N/m, N*m/rad] - ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 2e4]; % [N/(m/s), N*m/(rad/s)] + ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 1e4]; % [N/(m/s), N*m/(rad/s)] #+end_src *** Save the Structure @@ -4403,41 +4289,3 @@ Otherwise, when the limbs' lengths derived yield complex numbers, then the posit end #+end_src -* Helping Functions :noexport: -** Initialize Path -#+NAME: m-init-path -#+BEGIN_SRC matlab -addpath('./matlab/'); % Path for scripts - -%% Path for functions, data and scripts -addpath('./matlab/mat/'); % Path for Computed FRF -addpath('./matlab/src/'); % Path for functions -addpath('./matlab/STEPS/'); % Path for STEPS -addpath('./matlab/subsystems/'); % Path for Subsystems Simulink files -#+END_SRC - -#+NAME: m-init-path-tangle -#+BEGIN_SRC matlab -%% Path for functions, data and scripts -addpath('./mat/'); % Path for Data -addpath('./src/'); % Path for functions -addpath('./STEPS/'); % Path for STEPS -addpath('./subsystems/'); % Path for Subsystems Simulink files -#+END_SRC - -** Initialize Simscape Model -#+NAME: m-init-simscape -#+begin_src matlab -% Simulink Model name -mdl = 'ustation_simscape'; -#+end_src - -** Initialize other elements -#+NAME: m-init-other -#+BEGIN_SRC matlab -%% Colors for the figures -colors = colororder; - -%% Frequency Vector -freqs = logspace(log10(10), log10(2e3), 1000); -#+END_SRC