Add compliance analysis of the micro-station
This commit is contained in:
parent
d5ecb2706a
commit
23e7129687
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 119 KiB |
BIN
docs/figs/compliance_micro_station.pdf
Normal file
BIN
docs/figs/compliance_micro_station.pdf
Normal file
Binary file not shown.
BIN
docs/figs/compliance_micro_station.png
Normal file
BIN
docs/figs/compliance_micro_station.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 109 KiB |
Binary file not shown.
@ -80,10 +80,6 @@ Some of the springs and dampers values can be estimated from the joints/stages s
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Prepare the Simulation
|
** Prepare the Simulation
|
||||||
#+begin_src matlab
|
|
||||||
open('nass_model.slx')
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
We load the configuration.
|
We load the configuration.
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
load('mat/conf_simulink.mat');
|
load('mat/conf_simulink.mat');
|
||||||
@ -393,6 +389,96 @@ We then compare the measurements with the identified transfer functions using th
|
|||||||
[[file:figs/identification_comp_top_stages.png]]
|
[[file:figs/identification_comp_top_stages.png]]
|
||||||
|
|
||||||
|
|
||||||
|
* Obtained Compliance of the Micro-Station
|
||||||
|
** Matlab Init :noexport:ignore:
|
||||||
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||||
|
<<matlab-dir>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results silent :noweb yes
|
||||||
|
<<matlab-init>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no
|
||||||
|
simulinkproject('../');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
open('nass_model.slx')
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Initialization
|
||||||
|
We initialize all the stages with the default parameters.
|
||||||
|
#+begin_src matlab
|
||||||
|
initializeGround();
|
||||||
|
initializeGranite();
|
||||||
|
initializeTy();
|
||||||
|
initializeRy();
|
||||||
|
initializeRz();
|
||||||
|
initializeMicroHexapod('type', 'compliance');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
We put nothing on top of the micro-hexapod.
|
||||||
|
#+begin_src matlab
|
||||||
|
initializeAxisc('type', 'none');
|
||||||
|
initializeMirror('type', 'none');
|
||||||
|
initializeNanoHexapod('type', 'none');
|
||||||
|
initializeSample('type', 'none');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
initializeReferences();
|
||||||
|
initializeDisturbances();
|
||||||
|
initializeController();
|
||||||
|
initializeSimscapeConfiguration();
|
||||||
|
initializeLoggingConfiguration();
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
The obtained compliance is shown in Figure [[fig:compliance_micro_station]].
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Name of the Simulink File
|
||||||
|
mdl = 'nass_model';
|
||||||
|
|
||||||
|
%% 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
|
||||||
|
|
||||||
|
%% 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 :exports none
|
||||||
|
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);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
|
||||||
|
hold on;
|
||||||
|
for i = 1:6
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gm(i, i), freqs, 'Hz'))), 'DisplayName', labels{i});
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
ylabel('Compliance');
|
||||||
|
legend('location', 'northwest');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+header: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/compliance_micro_station.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:compliance_micro_station
|
||||||
|
#+caption: Obtained compliance of the Micro-Station ([[./figs/compliance_micro_station.png][png]], [[./figs/compliance_micro_station.pdf][pdf]])
|
||||||
|
[[file:figs/compliance_micro_station.png]]
|
||||||
|
|
||||||
* Conclusion
|
* Conclusion
|
||||||
#+begin_important
|
#+begin_important
|
||||||
For such a complex system, we believe that the Simscape Model represents the dynamics of the system with enough fidelity.
|
For such a complex system, we believe that the Simscape Model represents the dynamics of the system with enough fidelity.
|
||||||
|
@ -859,7 +859,7 @@ The =rz= structure is saved.
|
|||||||
:END:
|
:END:
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
arguments
|
arguments
|
||||||
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init'})} = 'flexible'
|
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init', 'compliance'})} = '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
|
||||||
@ -938,6 +938,8 @@ Equilibrium position of the each joint.
|
|||||||
micro_hexapod.type = 3;
|
micro_hexapod.type = 3;
|
||||||
case 'init'
|
case 'init'
|
||||||
micro_hexapod.type = 4;
|
micro_hexapod.type = 4;
|
||||||
|
case 'compliance'
|
||||||
|
micro_hexapod.type = 5;
|
||||||
end
|
end
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
function [micro_hexapod] = initializeMicroHexapod(args)
|
function [micro_hexapod] = initializeMicroHexapod(args)
|
||||||
|
|
||||||
arguments
|
arguments
|
||||||
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init'})} = 'flexible'
|
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init', 'compliance'})} = '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
|
||||||
@ -65,6 +65,8 @@ switch args.type
|
|||||||
micro_hexapod.type = 3;
|
micro_hexapod.type = 3;
|
||||||
case 'init'
|
case 'init'
|
||||||
micro_hexapod.type = 4;
|
micro_hexapod.type = 4;
|
||||||
|
case 'compliance'
|
||||||
|
micro_hexapod.type = 5;
|
||||||
end
|
end
|
||||||
|
|
||||||
save('./mat/stages.mat', 'micro_hexapod', '-append');
|
save('./mat/stages.mat', 'micro_hexapod', '-append');
|
||||||
|
Loading…
Reference in New Issue
Block a user