diff --git a/figs/plant_G_cart.pdf b/figs/plant_G_cart.pdf index db2e0d8..0cde33a 100644 Binary files a/figs/plant_G_cart.pdf and b/figs/plant_G_cart.pdf differ diff --git a/figs/plant_G_cart.png b/figs/plant_G_cart.png index c2aea36..f3126c7 100644 Binary files a/figs/plant_G_cart.png and b/figs/plant_G_cart.png differ diff --git a/hac_lac/index.html b/hac_lac/index.html new file mode 100644 index 0000000..28709ea --- /dev/null +++ b/hac_lac/index.html @@ -0,0 +1,664 @@ + + + + + + + + +HAC-LAC applied on the Simscape Model + + + + + + + + + + + + + +
+ UP + | + HOME +
+

HAC-LAC applied on the Simscape Model

+
+

Table of Contents

+ +
+ +
+

1 Undamped System

+
+

+ +

+
+ +
+

1.1 Identification of the plant

+
+
+
+

1.1.1 Initialize the Simulation

+
+

+We initialize all the stages with the default parameters. +

+
+
initializeGround();
+initializeGranite();
+initializeTy();
+initializeRy();
+initializeRz();
+initializeMicroHexapod();
+initializeAxisc();
+initializeMirror();
+
+
+ +

+The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. +

+
+
initializeNanoHexapod('actuator', 'piezo');
+initializeSample('mass', 50);
+
+
+ +

+No disturbances. +

+
+
initializeDisturbances('enable', false);
+
+
+ +

+We set the references to zero. +

+
+
initializeReferences();
+
+
+ +

+And all the controllers are set to 0. +

+
+
K = tf(zeros(6));
+save('./mat/controllers.mat', 'K', '-append');
+K_ine = tf(zeros(6));
+save('./mat/controllers.mat', 'K_ine', '-append');
+K_iff = tf(zeros(6));
+save('./mat/controllers.mat', 'K_iff', '-append');
+K_dvf = tf(zeros(6));
+save('./mat/controllers.mat', 'K_dvf', '-append');
+
+
+
+
+ +
+

1.1.2 Identification

+
+

+First, we identify the dynamics of the system using the linearize function. +

+
+
%% Options for Linearized
+options = linearizeOptions;
+options.SampleTime = 0;
+
+%% Name of the Simulink File
+mdl = 'sim_nass_hac_lac';
+
+%% Input/Output definition
+clear io; io_i = 1;
+io(io_i) = linio([mdl, '/HAC'],                        1, 'openinput');  io_i = io_i + 1;
+io(io_i) = linio([mdl, '/Compute Error in NASS base'], 2, 'openoutput'); io_i = io_i + 1;
+
+%% Run the linearization
+G = linearize(mdl, io, options);
+G.InputName  = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
+G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
+
+
+ +
+
load('mat/stages.mat', 'nano_hexapod');
+G_cart = minreal(G*inv(nano_hexapod.J'));
+G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
+
+
+ +
+
G_legs = minreal(inv(nano_hexapod.J)*G);
+G_legs.OutputName = {'e1', 'e2', 'e3', 'e4', 'e5', 'e6'};
+
+
+
+
+ +
+

1.1.3 Display TF

+
+ +
+

plant_G_cart.png +

+

Figure 1: Transfer Function from forces applied by the nano-hexapod to position error (png, pdf)

+
+
+
+ +
+

1.1.4 Obtained Plants for Active Damping

+
+ +
+

nass_active_damping_iff_plant.png +

+

Figure 2: G_iff: IFF Plant (png, pdf)

+
+ + +
+

nass_active_damping_ine_plant.png +

+

Figure 3: G_dvf: Plant for Direct Velocity Feedback (png, pdf)

+
+ + +
+

nass_active_damping_inertial_plant.png +

+

Figure 4: Inertial Feedback Plant (png, pdf)

+
+
+
+
+ +
+

1.2 Tomography Experiment

+
+
+
+

1.2.1 Simulation

+
+

+We initialize elements for the tomography experiment. +

+
+
prepareTomographyExperiment();
+
+
+ +

+We change the simulation stop time. +

+
+
load('mat/conf_simscape.mat');
+set_param(conf_simscape, 'StopTime', '3');
+
+
+ +

+And we simulate the system. +

+
+
sim('sim_nass_active_damping');
+
+
+ +

+Finally, we save the simulation results for further analysis +

+
+
save('./active_damping/mat/tomo_exp.mat', 'En', 'Eg', '-append');
+
+
+
+
+ +
+

1.2.2 Results

+
+

+We load the results of tomography experiments. +

+
+
load('./active_damping/mat/tomo_exp.mat', 'En');
+t = linspace(0, 3, length(En(:,1)));
+
+
+ + +
+

nass_act_damp_undamped_sim_tomo_trans.png +

+

Figure 5: Position Error during tomography experiment - Translations (png, pdf)

+
+ + +
+

nass_act_damp_undamped_sim_tomo_rot.png +

+

Figure 6: Position Error during tomography experiment - Rotations (png, pdf)

+
+
+
+
+
+

1.3 Verification of the transfer function from nano hexapod to metrology

+
+
+
+

1.3.1 Initialize the Simulation

+
+

+We initialize all the stages with the default parameters. +

+
+
initializeGround();
+initializeGranite();
+initializeTy();
+initializeRy();
+initializeRz();
+initializeMicroHexapod();
+initializeAxisc();
+initializeMirror();
+
+
+ +

+The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. +

+
+
initializeNanoHexapod('actuator', 'piezo');
+initializeSample('mass', 50);
+
+
+ +

+No disturbances. +

+
+
initializeDisturbances('enable', false);
+
+
+ +

+We set the references to zero. +

+
+
initializeReferences();
+
+
+ +

+And all the controllers are set to 0. +

+
+
K = tf(zeros(6));
+save('./mat/controllers.mat', 'K', '-append');
+K_ine = tf(zeros(6));
+save('./mat/controllers.mat', 'K_ine', '-append');
+K_iff = tf(zeros(6));
+save('./mat/controllers.mat', 'K_iff', '-append');
+K_dvf = tf(zeros(6));
+save('./mat/controllers.mat', 'K_dvf', '-append');
+
+
+
+
+ +
+

1.3.2 Identification

+
+

+First, we identify the dynamics of the system using the linearize function. +

+
+
%% Options for Linearized
+options = linearizeOptions;
+options.SampleTime = 0;
+
+%% Name of the Simulink File
+mdl = 'sim_nass_hac_lac';
+
+%% Input/Output definition
+clear io; io_i = 1;
+io(io_i) = linio([mdl, '/HAC'],                        1, 'openinput');  io_i = io_i + 1;
+io(io_i) = linio([mdl, '/Compute Error in NASS base'], 2, 'openoutput'); io_i = io_i + 1;
+
+%% Run the linearization
+G = linearize(mdl, io, options);
+G.InputName  = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
+G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'};
+
+
+ +
+
load('mat/stages.mat', 'nano_hexapod');
+G_cart = minreal(G*inv(nano_hexapod.J'));
+G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
+
+
+ +
+
G_legs = minreal(inv(nano_hexapod.J)*G);
+G_legs.OutputName = {'e1', 'e2', 'e3', 'e4', 'e5', 'e6'};
+
+
+
+
+ +
+

1.3.3 Display TF

+
+ +
+

plant_G_cart.png +

+

Figure 7: Transfer Function from forces applied by the nano-hexapod to position error (png, pdf)

+
+
+
+ +
+

1.3.4 Obtained Plants for Active Damping

+
+ +
+

nass_active_damping_iff_plant.png +

+

Figure 8: G_iff: IFF Plant (png, pdf)

+
+ + +
+

nass_active_damping_ine_plant.png +

+

Figure 9: G_dvf: Plant for Direct Velocity Feedback (png, pdf)

+
+ + +
+

nass_active_damping_inertial_plant.png +

+

Figure 10: Inertial Feedback Plant (png, pdf)

+
+
+
+
+
+
+
+

Author: Dehaeze Thomas

+

Created: 2020-01-29 mer. 20:35

+
+ + diff --git a/hac_lac/index.org b/hac_lac/index.org index ef66a0b..e4f3f5a 100644 --- a/hac_lac/index.org +++ b/hac_lac/index.org @@ -167,7 +167,7 @@ First, we identify the dynamics of the system using the =linearize= function. ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-180, 180]); yticks([-180, -90, 0, 90, 180]); - legend(); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); #+end_src