nass-simscape/org/control_active_damping.org

126 KiB

Active Damping applied on the Simscape Model

Introduction   ignore

The goal of this file is to study the use of active damping for the control of the NASS.

In general, three sensors can be used for Active Damping:

  • A force sensor
  • A relative motion sensor such as a capacitive sensor
  • An inertial sensor such as an accelerometer of geophone

First, in section sec:undamped_system, we look at the undamped system and we identify the dynamics from the actuators to the three sensor types.

Then, in section sec:act_damp_variability_plant, we study the change of dynamics for the active damping plants with respect to various experimental conditions such as the sample mass and the spindle rotation speed.

Then, we will apply and compare the results of three active damping techniques:

  • In section sec:iff: Integral Force Feedback is applied
  • In section sec:dvf: Direct Velocity Feedback using a relative motion sensor is applied
  • In section sec:ine: Inertial Control using a geophone is applied

For each of the active damping technique, we:

  • Look at the obtain damped plant that will be used for High Authority control
  • Simulate tomography experiments
  • Compare the sensitivity from disturbances

Undamped System

<<sec:undamped_system>>

Introduction   ignore

In this section, we identify the dynamic of the system from forces applied in the nano-hexapod legs to the various sensors included in the nano-hexapod that could be use for Active Damping, namely:

  • A relative motion sensor, measuring the relative displacement of each of the leg
  • A force sensor measuring the total force transmitted to the top part of the leg in the direction of the leg
  • A absolute velocity sensor measuring the absolute velocity of the top part of the leg in the direction of the leg

After that, a tomography experiment is simulation without any active damping techniques.

Identification of the dynamics for Active Damping

Identification

We initialize all the stages with the default parameters.

  prepareLinearizeIdentification();

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 = 'nass_model';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/Controller'],    1, 'openinput');               io_i = io_i + 1; % Actuator Inputs
  io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm');  io_i = io_i + 1; % Relative Motion Outputs
  io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Fnlm');  io_i = io_i + 1; % Force Sensors
  io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm');   io_i = io_i + 1; % Absolute Velocity Outputs

  %% Run the linearization
  G = linearize(mdl, io, 0.5, options);
  G.InputName  = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
  G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
                  'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
                  'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'};

We then create transfer functions corresponding to the active damping plants.

  G_iff = minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}));
  G_dvf = minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}));
  G_ine = minreal(G({'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}));

And we save them for further analysis.

  save('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');

Obtained Plants for Active Damping

  load('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_active_damping_iff_plant.png
G_iff: Transfer functions from forces applied in the actuators to the force sensor in each actuator (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_active_damping_dvf_plant.png
G_dvf: Transfer functions from forces applied in the actuators to the relative motion sensor in each actuator (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_active_damping_inertial_plant.png
G_ine: Transfer functions from forces applied in the actuators to the geophone located in each leg measuring the absolute velocity of the top part of the leg in the direction of the leg (png, pdf)

Identification of the dynamics for High Authority Control

Identification

We initialize all the stages with the default parameters.

  prepareLinearizeIdentification();

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 = 'nass_model';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/Controller'],     1, 'openinput');            io_i = io_i + 1; % Actuator Inputs
  io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'En'); io_i = io_i + 1; % Metrology Outputs
  masses = [1, 10, 50]; % [kg]

And we save them for further analysis.

  save('./mat/active_damping_cart_plants.mat', 'G_cart', 'masses');

Obtained Plants

  load('./mat/active_damping_cart_plants.mat', 'G_cart', 'masses');
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/undamped_hac_plant_translations.png
Undamped Plant - Translations (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/undamped_hac_plant_rotations.png
Undamped Plant - Rotations (png, pdf)

Tomography Experiment

Simulation

We initialize elements for the tomography experiment.

  prepareTomographyExperiment();

We change the simulation stop time.

  load('mat/conf_simulink.mat');
  set_param(conf_simulink, 'StopTime', '4.5');

And we simulate the system.

  sim('nass_model');

Finally, we save the simulation results for further analysis

  save('./mat/active_damping_tomo_exp.mat', 'En', 'Eg', '-append');

Results

We load the results of tomography experiments.

  load('./mat/active_damping_tomo_exp.mat', 'En');
  Fs = 1e3; % Sampling Frequency of the Data
  t = (1/Fs)*[0:length(En(:,1))-1];
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_act_damp_undamped_sim_tomo_trans.png
Position Error during tomography experiment - Translations (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_act_damp_undamped_sim_tomo_rot.png
Position Error during tomography experiment - Rotations (png, pdf)

Variability of the system dynamics for Active Damping

<<sec:act_damp_variability_plant>>

Introduction   ignore

The goal of this section is to study how the dynamics of the Active Damping plants are changing with the experimental conditions. These experimental conditions are:

For the identification of the dynamics, the system is simulation for $\approx 0.5s$ before the linearization is performed. This is done in order for the transient phase to be over.

Variation of the Sample Mass

<<sec:variability_sample_mass>>

Introduction   ignore

For all the identifications, the disturbances are disabled and no controller are used.

Identification   ignore

We initialize all the stages with the default parameters.

  prepareLinearizeIdentification();

We identify the dynamics for the following sample mass.

  masses = [1, 10, 50]; % [kg]

Plots   ignore

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_iff_sample_mass.png
Variability of the dynamics from actuator force to force sensor with the Sample Mass (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_dvf_sample_mass.png
Variability of the dynamics from actuator force to relative motion sensor with the Sample Mass (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_ine_sample_mass.png
Variability of the dynamics from actuator force to absolute velocity with the Sample Mass (png, pdf)

Variation of the Spindle Angle

<<sec:variability_spindle_angle>>

Introduction   ignore

Identification   ignore

We initialize all the stages with the default parameters.

  prepareLinearizeIdentification();

We identify the dynamics for the following Spindle angles.

  Rz_amplitudes = [0, pi/4, pi/2, pi]; % [rad]

Plots   ignore

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_iff_spindle_angle.png
Variability of the dynamics from the actuator force to the force sensor with the Spindle Angle (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_dvf_spindle_angle.png
Variability of the dynamics from actuator force to relative motion sensor with the Spindle Angle (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_ine_spindle_angle.png
Variability of the dynamics from actuator force to absolute velocity with the Spindle Angle (png, pdf)

Variation of the Spindle Rotation Speed

<<sec:variability_rotation_speed>>

Introduction   ignore

Identification   ignore

We initialize all the stages with the default parameters.

  prepareLinearizeIdentification();

We identify the dynamics for the following Spindle rotation periods.

  Rz_periods = [60, 6, 2, 1]; % [s]

The identification of the dynamics is done at the same Spindle angle position.

Dynamics of the Active Damping plants

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_iff_spindle_speed.png
Variability of the dynamics from the actuator force to the force sensor with the Spindle rotation speed (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_iff_spindle_speed_zoom.png
Variability of the dynamics from the actuator force to the force sensor with the Spindle rotation speed (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_dvf_spindle_speed.png
Variability of the dynamics from the actuator force to the relative motion sensor with the Spindle rotation speed (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_dvf_spindle_speed_zoom.png
Variability of the dynamics from the actuator force to the relative motion sensor with the Spindle rotation speed (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_ine_spindle_speed.png
Variability of the dynamics from the actuator force to the absolute velocity sensor with the Spindle rotation speed (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_ine_spindle_speed_zoom.png
Variability of the dynamics from the actuator force to the absolute velocity sensor with the Spindle rotation speed (png, pdf)

Variation of the poles and zeros with the Spindle rotation frequency

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/campbell_diagram_spindle_rotation.png
Evolution of the pole with respect to the spindle rotation speed (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/variation_zeros_active_damping_plants.png
Evolution of the zero with respect to the spindle rotation speed (png, pdf)

Variation of the Tilt Angle

<<sec:variability_tilt_angle>>

Introduction   ignore

Identification   ignore

We initialize all the stages with the default parameters.

  prepareLinearizeIdentification();

We identify the dynamics for the following Tilt stage angles.

  Ry_amplitudes = [-3*pi/180, 3*pi/180]; % [rad]

Plots   ignore

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_iff_tilt_angle.png
Variability of the dynamics from the actuator force to the force sensor with the Tilt stage Angle (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_dvf_tilt_angle.png
Variability of the dynamics from the actuator force to the relative motion sensor with the Tilt Angle (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_ine_tilt_angle.png
Variability of the dynamics from the actuator force to the absolute velocity sensor with the Tilt Angle (png, pdf)

Scans of the Translation Stage

<<sec:variability_ty_scans>>

Introduction   ignore

We want here to verify if the dynamics used for Active damping is varying when using the translation stage for scans.

Identification   ignore

We initialize all the stages with the default parameters.

  prepareLinearizeIdentification();

We initialize the translation stage reference to be a sinus with an amplitude of 5mm and a period of 1s (Figure fig:ty_scanning_reference_sinus).

  initializeReferences('Dy_type', 'sinusoidal', ...
                       'Dy_amplitude', 5e-3, ... % [m]
                       'Dy_period', 1); % [s]
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/ty_scanning_reference_sinus.png
Reference path for the translation stage (png, pdf)

We identify the dynamics at different positions (times) when scanning with the Translation stage.

  t_lin = [0.5, 0.75, 1, 1.25];

Plots   ignore

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_iff_ty_scans.png
Variability of the dynamics from the actuator force to the absolute velocity sensor plant at different Ty scan positions (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_dvf_ty_scans.png
Variability of the dynamics from actuator force to relative displacement sensor at different Ty scan positions (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_variability_ine_ty_scans.png
Variability of the Inertial plant at different Ty scan positions (png, pdf)

Conclusion

Change of Dynamics
Sample Mass Large
Spindle Angle Small
Spindle Rotation Speed First resonance is split in two resonances
Tilt Angle Negligible
Translation Stage scans Negligible
Conclusion on the variability of the system dynamics for active damping

Also, for the Inertial Sensor, a RHP zero may appear when the spindle is rotating fast.

When using either a force sensor or a relative motion sensor for active damping, the only "parameter" that induce a large change for the dynamics to be controlled is the sample mass. Thus, the developed damping techniques should be robust to variations of the sample mass.

Integral Force Feedback

<<sec:iff>>

ZIP file containing the data and matlab files   ignore

All the files (data and Matlab scripts) are accessible here.

Introduction   ignore

Here, we study the use of Integral Force Feedback (IFF) to actively damp the resonances.

The IFF control is applied in a decentralized way: there is on controller for each leg.

The control architecture is represented in figure fig:iff_1dof where one of the 6 nano-hexapod legs is represented.

/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/iff_1dof.png

Integral Force Feedback applied to a 1dof system

Control Design

Plant

Let's load the previously identified undamped plant:

  load('./mat/active_damping_undamped_plants.mat', 'G_iff');
  load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_iff');

Let's look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor (figure fig:iff_plant).

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/iff_plant.png
Transfer function from forces applied in the legs to force sensor (png, pdf)

Control Design

The controller for each pair of actuator/sensor is:

  w0 = 2*pi*50;
  K_iff = -5000/s * (s/w0)/(1 + s/w0);

The corresponding loop gains are shown in figure fig:iff_open_loop.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/iff_open_loop.png
Loop Gain for the Integral Force Feedback (png, pdf)

Diagonal Controller

We create the diagonal controller and we add a minus sign as we have a positive feedback architecture.

  K_iff = -K_iff*eye(6);

We save the controller for further analysis.

  save('./mat/active_damping_K_iff.mat', 'K_iff');

Tomography Experiment

Simulation with IFF Controller

We initialize elements for the tomography experiment.

  prepareTomographyExperiment();

We set the IFF controller.

  load('./mat/active_damping_K_iff.mat', 'K_iff');
  initializeController('type', 'iff');

We change the simulation stop time.

  load('mat/conf_simulink.mat');
  set_param(conf_simulink, 'StopTime', '4.5');

And we simulate the system.

  sim('nass_model');

Finally, we save the simulation results for further analysis

  En_iff = En;
  Eg_iff = Eg;
  save('./mat/active_damping_tomo_exp.mat', 'En_iff', 'Eg_iff', '-append');

Compare with Undamped system

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_act_damp_iff_sim_tomo_xy.png
Position Error during tomography experiment - XY Motion (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_act_damp_iff_sim_tomo_trans.png
Position Error during tomography experiment - Translations (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_act_damp_iff_sim_tomo_rot.png
Position Error during tomography experiment - Rotations (png, pdf)

Conclusion

Integral Force Feedback using a force sensor:

  • Robust (guaranteed stability)
  • Acceptable Damping
  • Increase the sensitivity to disturbances at low frequencies

Direct Velocity Feedback

<<sec:dvf>>

ZIP file containing the data and matlab files   ignore

All the files (data and Matlab scripts) are accessible here.

Introduction   ignore

In the Direct Velocity Feedback (DVF), a derivative feedback is applied between the measured actuator displacement to the actuator force input. The actuator displacement can be measured with a capacitive sensor for instance.

Control Design

Plant

Let's load the undamped plant:

  load('./mat/active_damping_undamped_plants.mat', 'G_dvf');
  load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_dvf');

Let's look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor (figure fig:dvf_plant).

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/dvf_plant.png
Transfer function from forces applied in the legs to leg displacement sensor (png, pdf)

Control Design

The Direct Velocity Feedback is defined below. A Low pass Filter is added to make the controller transfer function proper.

  K_dvf = s*30000/(1 + s/2/pi/10000);

The obtained loop gains are shown in figure fig:dvf_open_loop.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/dvf_open_loop.png
Loop Gain for the Integral Force Feedback (png, pdf)

Diagonal Controller

We create the diagonal controller and we add a minus sign as we have a positive feedback architecture.

  K_dvf = -K_dvf*eye(6);

We save the controller for further analysis.

  save('./mat/active_damping_K_dvf.mat', 'K_dvf');

Tomography Experiment

Initialize the Simulation

We initialize elements for the tomography experiment.

  prepareTomographyExperiment();

We set the DVF controller.

  load('./mat/active_damping_K_dvf.mat', 'K_dvf');
  initializeController('type', 'dvf');

We change the simulation stop time.

  load('mat/conf_simulink.mat');
  set_param(conf_simulink, 'StopTime', '4.5');

And we simulate the system.

  sim('nass_model');

Finally, we save the simulation results for further analysis

  En_dvf = En;
  Eg_dvf = Eg;
  save('./mat/active_damping_tomo_exp.mat', 'En_dvf', 'Eg_dvf', '-append');

Compare with Undamped system

<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_act_damp_dvf_sim_tomo_xy.png
Position Error during tomography experiment - XY Motion (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_act_damp_dvf_sim_tomo_trans.png
Position Error during tomography experiment - Translations (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/nass_act_damp_dvf_sim_tomo_rot.png
Position Error during tomography experiment - Rotations (png, pdf)

Conclusion

Direct Velocity Feedback using a relative motion sensor:

  • Robust (guaranteed stability)

Inertial Control

<<sec:ine>>

ZIP file containing the data and matlab files   ignore

All the files (data and Matlab scripts) are accessible here.

Introduction   ignore

In Inertial Control, a feedback is applied between the measured absolute motion (velocity or acceleration) of the platform to the actuator force input.

Control Design

Plant

Let's load the undamped plant:

  load('./mat/active_damping_undamped_plants.mat', 'G_ine');
  load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_ine');

Let's look at the transfer function from actuator forces in the nano-hexapod to the measured velocity of the nano-hexapod platform in the direction of the corresponding actuator for all 6 pairs of actuator/sensor (figure fig:ine_plant).

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/ine_plant.png
Transfer function from forces applied in the legs to leg velocity sensor (png, pdf)

Control Design

The controller is defined below and the obtained loop gain is shown in figure fig:ine_open_loop_gain.

  K_ine = 2.5e4;
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/ine_open_loop_gain.png
Loop Gain for Inertial Control (png, pdf)

Diagonal Controller

We create the diagonal controller and we add a minus sign as we have a positive feedback architecture.

  K_ine = -K_ine*eye(6);

We save the controller for further analysis.

  save('./mat/active_damping_K_ine.mat', 'K_ine');

Conclusion

Inertial Control should not be used.

TODO Comparison

<<sec:comparison>>

Introduction   ignore

Load the plants

  load('./mat/active_damping_plants.mat', 'G', 'G_iff', 'G_ine', 'G_dvf');

TODO Sensitivity to Disturbance

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/sensitivity_comp_ground_motion_z.png
Sensitivity to ground motion in the Z direction on the Z motion error (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/sensitivity_comp_direct_forces_z.png
Compliance in the Z direction: Sensitivity of direct forces applied on the sample in the Z direction on the Z motion error (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/sensitivity_comp_spindle_z.png
Sensitivity to forces applied in the Z direction by the Spindle on the Z motion error (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/sensitivity_comp_ty_z.png
Sensitivity to forces applied in the Z direction by the Y translation stage on the Z motion error (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/sensitivity_comp_ty_x.png
Sensitivity to forces applied in the X direction by the Y translation stage on the X motion error (png, pdf)

TODO Damped Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/plant_comp_damping_z.png
Plant for the $z$ direction for different active damping technique used (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/plant_comp_damping_x.png
Plant for the $x$ direction for different active damping technique used (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/plant_comp_damping_coupling.png
Comparison of one off-diagonal plant for different damping technique applied (png, pdf)

Tomography Experiment - Frequency Domain analysis

  load('./mat/active_damping_tomo_exp.mat', 'En', 'En_iff', 'En_dvf');
  Fs = 1e3; % Sampling Frequency of the Data
  t = (1/Fs)*[0:length(En(:,1))-1];

We remove the first 0.5 seconds where the transient behavior is fading out.

  [~, i_start] = min(abs(t - 0.5)); % find the indice corresponding to 0.5s

  t = t(i_start:end) - t(i_start);
  En = En(i_start:end, :);
  En_dvf = En_dvf(i_start:end, :);
  En_iff = En_iff(i_start:end, :);

Window used for pwelch function.

  n_av = 4;
  han_win = hanning(ceil(length(En(:, 1))/n_av));
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_tomo_exp_comp_psd_trans.png
PSD of the translation errors in the X direction for applied Active Damping techniques (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_tomo_exp_comp_psd_rot.png
PSD of the rotation errors in the X direction for applied Active Damping techniques (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_tomo_exp_comp_cps_trans.png
CPS of the translation errors in the X direction for applied Active Damping techniques (png, pdf)
<<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/2a6e6bab27e4bf99d5f48c0bd0119af81a44af14/org/figs/act_damp_tomo_exp_comp_cps_rot.png
CPS of the rotation errors in the X direction for applied Active Damping techniques (png, pdf)

Useful Functions

prepareLinearizeIdentification

<<sec:prepareLinearizeIdentification>>

This Matlab function is accessible here.

Function Description

  function [] = prepareLinearizeIdentification(args)

Optional Parameters

  arguments
      args.nass_actuator       char   {mustBeMember(args.nass_actuator,{'piezo', 'lorentz'})} = 'piezo'
      args.sample_mass   (1,1) double {mustBeNumeric, mustBePositive} = 50 % [kg]
  end

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', args.nass_actuator);
  initializeSample('mass', args.sample_mass);

We set the references and disturbances to zero.

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

We set the controller type to Open-Loop.

  initializeController('type', 'open-loop');

And we put some gravity.

  initializeSimscapeConfiguration('gravity', true);

We do not need to log any signal.

  initializeLoggingConfiguration('log', 'none');

prepareTomographyExperiment

<<sec:prepareTomographyExperiment>>

This Matlab function is accessible here.

Function Description

  function [] = prepareTomographyExperiment(args)

Optional Parameters

  arguments
      args.nass_actuator       char   {mustBeMember(args.nass_actuator,{'piezo', 'lorentz'})} = 'piezo'
      args.sample_mass   (1,1) double {mustBeNumeric, mustBePositive} = 50 % [kg]
      args.Rz_period     (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s]
  end

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', args.nass_actuator);
  initializeSample('mass', args.sample_mass);

We set the references that corresponds to a tomography experiment.

  initializeReferences('Rz_type', 'rotating', 'Rz_period', args.Rz_period);
  initializeDisturbances();

Open Loop.

  initializeController('type', 'open-loop');

And we put some gravity.

  initializeSimscapeConfiguration('gravity', true);

We log the signals.

  initializeLoggingConfiguration('log', 'all');