diff --git a/matlab/ustation_simscape.slx b/matlab/ustation_simscape.slx index a43ec14..9b3afcc 100644 Binary files a/matlab/ustation_simscape.slx and b/matlab/ustation_simscape.slx differ diff --git a/simscape-micro-station.org b/simscape-micro-station.org index e293b7b..ccc0db2 100644 --- a/simscape-micro-station.org +++ b/simscape-micro-station.org @@ -142,11 +142,11 @@ initializeSimscapeConfiguration('gravity', false); initializeLoggingConfiguration('log', 'none'); initializeGround( 'type', 'rigid'); -initializeGranite( 'type', 'modal-analysis'); -initializeTy( 'type', 'modal-analysis'); -initializeRy( 'type', 'modal-analysis'); -initializeRz( 'type', 'modal-analysis'); -initializeMicroHexapod('type', 'modal-analysis'); +initializeGranite( 'type', 'flexible'); +initializeTy( 'type', 'flexible'); +initializeRy( 'type', 'flexible'); +initializeRz( 'type', 'flexible'); +initializeMicroHexapod('type', 'flexible'); initializeReferences(); initializeDisturbances('enable', false); @@ -166,14 +166,21 @@ initializeController( 'type', 'open-loop'); ** TODO [#B] Make good "init" for the Simscape model -** TODO [#A] Verify that we get "correct" compliance -SCHEDULED: <2024-10-30 Wed> - ** TODO [#B] Just keep smallest number of variants for each stage +- [ ] none - [ ] rigid - [ ] flexible - [X] Init => Removed +- [X] modal analysis => Removed + +** TODO [#A] Verify that we get "correct" compliance +SCHEDULED: <2024-10-30 Wed> + +- [ ] Find the compliance measurements +- [ ] See if it matches somehow the current model +- [ ] 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 * Introduction :ignore: @@ -741,11 +748,11 @@ set_param(conf_simulink, 'StopTime', '0.5'); %% We initialize all the stages. initializeGround( 'type', 'rigid'); -initializeGranite( 'type', 'modal-analysis'); -initializeTy( 'type', 'modal-analysis'); -initializeRy( 'type', 'modal-analysis'); -initializeRz( 'type', 'modal-analysis'); -initializeMicroHexapod('type', 'modal-analysis'); +initializeGranite( 'type', 'flexible'); +initializeTy( 'type', 'flexible'); +initializeRy( 'type', 'flexible'); +initializeRz( 'type', 'flexible'); +initializeMicroHexapod('type', 'flexible'); initializeLoggingConfiguration('log', 'none'); @@ -760,12 +767,12 @@ We use the =linearize= function in order to estimate the dynamics from forces ap %% Identification % Input/Output definition clear io; io_i = 1; -io(io_i) = linio([mdl, '/Micro-Station/Translation Stage/Modal Analysis/F_hammer'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Micro-Station/Granite/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Micro-Station/Translation Stage/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Micro-Station/Tilt Stage/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Micro-Station/Spindle/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Micro-Station/Translation Stage/Flexible/F_hammer'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Micro-Station/Granite/Flexible/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Micro-Station/Translation Stage/Flexible/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Micro-Station/Tilt Stage/Flexible/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Micro-Station/Spindle/Flexible/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Flexible/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; % Run the linearization G_ms = linearize(mdl, io, 0); @@ -895,7 +902,7 @@ initializeGranite(); initializeTy(); initializeRy(); initializeRz(); -initializeMicroHexapod('type', 'compliance'); +initializeMicroHexapod(); initializeReferences(); initializeDisturbances(); @@ -909,8 +916,8 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to %% Identification of the compliance % Input/Output definition clear io; io_i = 1; -io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Compliance/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/Compliance/Dm'], 1, 'output'); io_i = io_i + 1; % Absolute displacement of the top platform +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); @@ -1249,7 +1256,7 @@ end :END: #+begin_src matlab arguments - args.type char {mustBeMember(args.type,{'rigid', 'flexible', 'none', 'modal-analysis'})} = 'flexible' + 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)] @@ -1281,8 +1288,6 @@ First, we initialize the =granite= structure. granite.type = 1; case 'flexible' granite.type = 2; - case 'modal-analysis' - granite.type = 3; end #+end_src @@ -1349,7 +1354,7 @@ end :END: #+begin_src matlab arguments - args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis'})} = 'flexible' + args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'flexible' end #+end_src @@ -1374,8 +1379,6 @@ First, we initialize the =ty= structure. ty.type = 1; case 'flexible' ty.type = 2; - case 'modal-analysis' - ty.type = 3; end #+end_src @@ -1469,7 +1472,7 @@ end :END: #+begin_src matlab arguments - args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis'})} = 'flexible' + args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'flexible' args.Ry_init (1,1) double {mustBeNumeric} = 0 end #+end_src @@ -1496,8 +1499,6 @@ First, we initialize the =ry= structure. ry.type = 1; case 'flexible' ry.type = 2; - case 'modal-analysis' - ry.type = 3; end #+end_src @@ -1580,7 +1581,7 @@ end :END: #+begin_src matlab arguments - args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis'})} = 'flexible' + args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'flexible' end #+end_src @@ -1605,8 +1606,6 @@ First, we initialize the =rz= structure. rz.type = 1; case 'flexible' rz.type = 2; - case 'modal-analysis' - rz.type = 3; end #+end_src @@ -1677,7 +1676,7 @@ end :END: #+begin_src matlab arguments - args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', '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 @@ -1783,10 +1782,6 @@ end stewart.type = 1; case 'flexible' stewart.type = 2; - case 'modal-analysis' - stewart.type = 3; - case 'compliance' - stewart.type = 5; end #+end_src