Simplify even more the Simscape model

This commit is contained in:
Thomas Dehaeze 2024-10-30 16:15:12 +01:00
parent 67071e033a
commit f7c5716c04
2 changed files with 34 additions and 39 deletions

Binary file not shown.

View File

@ -142,11 +142,11 @@ initializeSimscapeConfiguration('gravity', false);
initializeLoggingConfiguration('log', 'none'); initializeLoggingConfiguration('log', 'none');
initializeGround( 'type', 'rigid'); initializeGround( 'type', 'rigid');
initializeGranite( 'type', 'modal-analysis'); initializeGranite( 'type', 'flexible');
initializeTy( 'type', 'modal-analysis'); initializeTy( 'type', 'flexible');
initializeRy( 'type', 'modal-analysis'); initializeRy( 'type', 'flexible');
initializeRz( 'type', 'modal-analysis'); initializeRz( 'type', 'flexible');
initializeMicroHexapod('type', 'modal-analysis'); initializeMicroHexapod('type', 'flexible');
initializeReferences(); initializeReferences();
initializeDisturbances('enable', false); initializeDisturbances('enable', false);
@ -166,14 +166,21 @@ initializeController( 'type', 'open-loop');
** TODO [#B] Make good "init" for the Simscape model ** 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 ** TODO [#B] Just keep smallest number of variants for each stage
- [ ] none
- [ ] rigid - [ ] rigid
- [ ] flexible - [ ] flexible
- [X] Init => Removed - [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: * Introduction :ignore:
@ -741,11 +748,11 @@ set_param(conf_simulink, 'StopTime', '0.5');
%% We initialize all the stages. %% We initialize all the stages.
initializeGround( 'type', 'rigid'); initializeGround( 'type', 'rigid');
initializeGranite( 'type', 'modal-analysis'); initializeGranite( 'type', 'flexible');
initializeTy( 'type', 'modal-analysis'); initializeTy( 'type', 'flexible');
initializeRy( 'type', 'modal-analysis'); initializeRy( 'type', 'flexible');
initializeRz( 'type', 'modal-analysis'); initializeRz( 'type', 'flexible');
initializeMicroHexapod('type', 'modal-analysis'); initializeMicroHexapod('type', 'flexible');
initializeLoggingConfiguration('log', 'none'); initializeLoggingConfiguration('log', 'none');
@ -760,12 +767,12 @@ We use the =linearize= function in order to estimate the dynamics from forces ap
%% Identification %% Identification
% Input/Output definition % Input/Output definition
clear io; io_i = 1; 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/Translation Stage/Flexible/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/Granite/Flexible/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/Translation Stage/Flexible/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/Tilt Stage/Flexible/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/Spindle/Flexible/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/Micro Hexapod/Flexible/accelerometer'], 1, 'openoutput'); io_i = io_i + 1;
% Run the linearization % Run the linearization
G_ms = linearize(mdl, io, 0); G_ms = linearize(mdl, io, 0);
@ -895,7 +902,7 @@ initializeGranite();
initializeTy(); initializeTy();
initializeRy(); initializeRy();
initializeRz(); initializeRz();
initializeMicroHexapod('type', 'compliance'); initializeMicroHexapod();
initializeReferences(); initializeReferences();
initializeDisturbances(); initializeDisturbances();
@ -909,8 +916,8 @@ And we identify the dynamics from forces/torques applied on the micro-hexapod to
%% Identification of the compliance %% Identification of the compliance
% Input/Output definition % Input/Output definition
clear io; io_i = 1; 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/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/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/Dm'], 1, 'output'); io_i = io_i + 1; % Absolute displacement of the top platform
% Run the linearization % Run the linearization
Gm = linearize(mdl, io, 0); Gm = linearize(mdl, io, 0);
@ -1249,7 +1256,7 @@ end
:END: :END:
#+begin_src matlab #+begin_src matlab
arguments 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.density (1,1) double {mustBeNumeric, mustBeNonnegative} = 2800 % Density [kg/m3]
args.K (3,1) double {mustBeNumeric, mustBeNonnegative} = [4e9; 3e8; 8e8] % [N/m] 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.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; granite.type = 1;
case 'flexible' case 'flexible'
granite.type = 2; granite.type = 2;
case 'modal-analysis'
granite.type = 3;
end end
#+end_src #+end_src
@ -1349,7 +1354,7 @@ end
:END: :END:
#+begin_src matlab #+begin_src matlab
arguments 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
#+end_src #+end_src
@ -1374,8 +1379,6 @@ First, we initialize the =ty= structure.
ty.type = 1; ty.type = 1;
case 'flexible' case 'flexible'
ty.type = 2; ty.type = 2;
case 'modal-analysis'
ty.type = 3;
end end
#+end_src #+end_src
@ -1469,7 +1472,7 @@ end
:END: :END:
#+begin_src matlab #+begin_src matlab
arguments 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 args.Ry_init (1,1) double {mustBeNumeric} = 0
end end
#+end_src #+end_src
@ -1496,8 +1499,6 @@ First, we initialize the =ry= structure.
ry.type = 1; ry.type = 1;
case 'flexible' case 'flexible'
ry.type = 2; ry.type = 2;
case 'modal-analysis'
ry.type = 3;
end end
#+end_src #+end_src
@ -1580,7 +1581,7 @@ end
:END: :END:
#+begin_src matlab #+begin_src matlab
arguments 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
#+end_src #+end_src
@ -1605,8 +1606,6 @@ First, we initialize the =rz= structure.
rz.type = 1; rz.type = 1;
case 'flexible' case 'flexible'
rz.type = 2; rz.type = 2;
case 'modal-analysis'
rz.type = 3;
end end
#+end_src #+end_src
@ -1677,7 +1676,7 @@ end
:END: :END:
#+begin_src matlab #+begin_src matlab
arguments 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 % initializeFramesPositions
args.H (1,1) double {mustBeNumeric, mustBePositive} = 350e-3 args.H (1,1) double {mustBeNumeric, mustBePositive} = 350e-3
args.MO_B (1,1) double {mustBeNumeric} = 270e-3 args.MO_B (1,1) double {mustBeNumeric} = 270e-3
@ -1783,10 +1782,6 @@ end
stewart.type = 1; stewart.type = 1;
case 'flexible' case 'flexible'
stewart.type = 2; stewart.type = 2;
case 'modal-analysis'
stewart.type = 3;
case 'compliance'
stewart.type = 5;
end end
#+end_src #+end_src