nass-simscape/uniaxial/index.org

43 KiB

Simscape Uniaxial Model

Introduction   ignore

The idea is to use the same model as the full Simscape Model but to restrict the motion only in the vertical direction.

This is done in order to more easily study the system and evaluate control techniques.

Undamped System

Init

We initialize all the stages with the default parameters. The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.

  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();
  initializeNanoHexapod(struct('actuator', 'piezo'));
  initializeSample(struct('mass', 50));

All the controllers are set to 0.

  K = tf(0);
  save('./mat/controllers.mat', 'K', '-append');
  K_iff = tf(0);
  save('./mat/controllers.mat', 'K_iff', '-append');
  K_rmc = tf(0);
  save('./mat/controllers.mat', 'K_rmc', '-append');
  K_dvf = tf(0);
  save('./mat/controllers.mat', 'K_dvf', '-append');

Identification

  %% Options for Linearized
  options = linearizeOptions;
  options.SampleTime = 0;

  %% Name of the Simulink File
  mdl = 'sim_nano_station_uniaxial';
  %% Input/Output definition
  io(1)  = linio([mdl, '/Dw'],    1, 'input');  % Ground Motion
  io(2)  = linio([mdl, '/Fs'],    1, 'input');  % Force applied on the sample
  io(3)  = linio([mdl, '/Fnl'],   1, 'input');  % Force applied by the NASS
  io(4)  = linio([mdl, '/Fdty'],  1, 'input');  % Parasitic force Ty
  io(5)  = linio([mdl, '/Fdrz'],  1, 'input');  % Parasitic force Rz

  io(6)  = linio([mdl, '/Dsm'],  1, 'output'); % Displacement of the sample
  io(7)  = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
  io(8)  = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
  io(9)  = linio([mdl, '/Dgm'],  1, 'output'); % Absolute displacement of the granite
  io(10) = linio([mdl, '/Vlm'],  1, 'output'); % Measured absolute velocity of the top NASS platform
  %% Run the linearization
  G = linearize(mdl, io, options);
  G.InputName  = {'Dw',   ... % Ground Motion [m]
                  'Fs',   ... % Force Applied on Sample [N]
                  'Fn',   ... % Force applied by NASS [N]
                  'Fty',  ... % Parasitic Force Ty [N]
                  'Frz'};     % Parasitic Force Rz [N]
  G.OutputName = {'D',    ... % Measured sample displacement x.r.t. granite [m]
                  'Fnm',  ... % Force Sensor in NASS [N]
                  'Dnm',  ... % Displacement Sensor in NASS [m]
                  'Dgm',  ... % Asbolute displacement of Granite [m]
                  'Vlm'}; ... % Absolute Velocity of NASS [m/s]

Sensitivity to Disturbances

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial-sensitivity-disturbances.png
Sensitivity to disturbances (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial-sensitivity-force-dist.png
Sensitivity to disturbances (png, pdf)

Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial-plant.png
Bode plot of the Plant (png, pdf)

Save

  save('./uniaxial/mat/plants.mat', 'G');

Integral Force Feedback

<<sec:iff>>

Introduction   ignore

Control Design

  load('./uniaxial/mat/plants.mat', 'G');

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.

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

The controller for each pair of actuator/sensor is:

  K_iff = -1000/s;
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_iff_open_loop.png
Loop Gain for the Integral Force Feedback (png, pdf)

Identification

Let's initialize the system prior to identification.

  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();
  initializeNanoHexapod(struct('actuator', 'piezo'));
  initializeSample(struct('mass', 50));

All the controllers are set to 0.

  K = tf(0);
  save('./mat/controllers.mat', 'K', '-append');
  K_iff = -K_iff;
  save('./mat/controllers.mat', 'K_iff', '-append');
  K_rmc = tf(0);
  save('./mat/controllers.mat', 'K_rmc', '-append');
  K_dvf = tf(0);
  save('./mat/controllers.mat', 'K_dvf', '-append');
  %% Options for Linearized
  options = linearizeOptions;
  options.SampleTime = 0;

  %% Name of the Simulink File
  mdl = 'sim_nano_station_uniaxial';
  %% Input/Output definition
  io(1)  = linio([mdl, '/Dw'],    1, 'input');  % Ground Motion
  io(2)  = linio([mdl, '/Fs'],    1, 'input');  % Force applied on the sample
  io(3)  = linio([mdl, '/Fnl'],   1, 'input');  % Force applied by the NASS
  io(4)  = linio([mdl, '/Fdty'],  1, 'input');  % Parasitic force Ty
  io(5)  = linio([mdl, '/Fdrz'],  1, 'input');  % Parasitic force Rz

  io(6)  = linio([mdl, '/Dsm'],  1, 'output'); % Displacement of the sample
  io(7)  = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
  io(8)  = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
  io(9)  = linio([mdl, '/Dgm'],  1, 'output'); % Absolute displacement of the granite
  io(10) = linio([mdl, '/Vlm'],  1, 'output'); % Measured absolute velocity of the top NASS platform
  %% Run the linearization
  G_iff = linearize(mdl, io, options);
  G_iff.InputName  = {'Dw',   ... % Ground Motion [m]
                      'Fs',   ... % Force Applied on Sample [N]
                      'Fn',   ... % Force applied by NASS [N]
                      'Fty',  ... % Parasitic Force Ty [N]
                      'Frz'};     % Parasitic Force Rz [N]
  G_iff.OutputName = {'D',    ... % Measured sample displacement x.r.t. granite [m]
                      'Fnm',  ... % Force Sensor in NASS [N]
                      'Dnm',  ... % Displacement Sensor in NASS [m]
                      'Dgm',  ... % Asbolute displacement of Granite [m]
                      'Vlm'}; ... % Absolute Velocity of NASS [m/s]

Sensitivity to Disturbance

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_sensitivity_dist_iff.png
Sensitivity to disturbance once the IFF controller is applied to the system (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_sensitivity_dist_stages_iff.png
Sensitivity to force disturbances in various stages when IFF is applied (png, pdf)

Damped Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_plant_iff_damped.png
Damped Plant after IFF is applied (png, pdf)

Save

  save('./uniaxial/mat/plants.mat', 'G_iff', '-append');

Conclusion

Integral Force Feedback:

Relative Motion Control

<<sec:rmc>>

Introduction   ignore

In the Relative Motion Control (RMC), a derivative feedback is applied between the measured actuator displacement to the actuator force input.

Control Design

  load('./uniaxial/mat/plants.mat', 'G');

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.

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

The Relative Motion Controller is defined below. A Low pass Filter is added to make the controller transfer function proper.

  K_rmc = s*50000/(1 + s/2/pi/10000);
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_rmc_open_loop.png
Loop Gain for the Integral Force Feedback (png, pdf)

Identification

Let's initialize the system prior to identification.

  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();
  initializeNanoHexapod(struct('actuator', 'piezo'));
  initializeSample(struct('mass', 50));

And initialize the controllers.

  K = tf(0);
  save('./mat/controllers.mat', 'K', '-append');
  K_iff = tf(0);
  save('./mat/controllers.mat', 'K_iff', '-append');
  K_rmc = -K_rmc;
  save('./mat/controllers.mat', 'K_rmc', '-append');
  K_dvf = tf(0);
  save('./mat/controllers.mat', 'K_dvf', '-append');
  %% Options for Linearized
  options = linearizeOptions;
  options.SampleTime = 0;

  %% Name of the Simulink File
  mdl = 'sim_nano_station_uniaxial';
  %% Input/Output definition
  io(1)  = linio([mdl, '/Dw'],    1, 'input');  % Ground Motion
  io(2)  = linio([mdl, '/Fs'],    1, 'input');  % Force applied on the sample
  io(3)  = linio([mdl, '/Fnl'],   1, 'input');  % Force applied by the NASS
  io(4)  = linio([mdl, '/Fdty'],  1, 'input');  % Parasitic force Ty
  io(5)  = linio([mdl, '/Fdrz'],  1, 'input');  % Parasitic force Rz

  io(6)  = linio([mdl, '/Dsm'],  1, 'output'); % Displacement of the sample
  io(7)  = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
  io(8)  = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
  io(9)  = linio([mdl, '/Dgm'],  1, 'output'); % Absolute displacement of the granite
  io(10) = linio([mdl, '/Vlm'],  1, 'output'); % Measured absolute velocity of the top NASS platform
  %% Run the linearization
  G_rmc = linearize(mdl, io, options);
  G_rmc.InputName  = {'Dw',   ... % Ground Motion [m]
                      'Fs',   ... % Force Applied on Sample [N]
                      'Fn',   ... % Force applied by NASS [N]
                      'Fty',  ... % Parasitic Force Ty [N]
                      'Frz'};     % Parasitic Force Rz [N]
  G_rmc.OutputName = {'D',    ... % Measured sample displacement x.r.t. granite [m]
                      'Fnm',  ... % Force Sensor in NASS [N]
                      'Dnm',  ... % Displacement Sensor in NASS [m]
                      'Dgm',  ... % Asbolute displacement of Granite [m]
                      'Vlm'}; ... % Absolute Velocity of NASS [m/s]

Sensitivity to Disturbance

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_sensitivity_dist_rmc.png
Sensitivity to disturbance once the RMC controller is applied to the system (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_sensitivity_dist_stages_rmc.png
Sensitivity to force disturbances in various stages when RMC is applied (png, pdf)

Damped Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_plant_rmc_damped.png
Damped Plant after RMC is applied (png, pdf)

Save

  save('./uniaxial/mat/plants.mat', 'G_rmc', '-append');

Conclusion

Relative Motion Control:

Direct Velocity Feedback

<<sec:dvf>>

Introduction   ignore

In the Relative Motion Control (RMC), a feedback is applied between the measured velocity of the platform to the actuator force input.

Control Design

  load('./uniaxial/mat/plants.mat', 'G');
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_dvf_plant.png
Transfer function from forces applied in the legs to leg velocity sensor (png, pdf)
  K_dvf = tf(5e4);
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_dvf_loop_gain.png
Transfer function from forces applied in the legs to leg velocity sensor (png, pdf)

Identification

Let's initialize the system prior to identification.

  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();
  initializeNanoHexapod(struct('actuator', 'piezo'));
  initializeSample(struct('mass', 50));

And initialize the controllers.

  K = tf(0);
  save('./mat/controllers.mat', 'K', '-append');
  K_iff = tf(0);
  save('./mat/controllers.mat', 'K_iff', '-append');
  K_rmc = tf(0);
  save('./mat/controllers.mat', 'K_rmc', '-append');
  K_dvf = -K_dvf;
  save('./mat/controllers.mat', 'K_dvf', '-append');
  %% Options for Linearized
  options = linearizeOptions;
  options.SampleTime = 0;

  %% Name of the Simulink File
  mdl = 'sim_nano_station_uniaxial';
  %% Input/Output definition
  io(1)  = linio([mdl, '/Dw'],    1, 'input');  % Ground Motion
  io(2)  = linio([mdl, '/Fs'],    1, 'input');  % Force applied on the sample
  io(3)  = linio([mdl, '/Fnl'],   1, 'input');  % Force applied by the NASS
  io(4)  = linio([mdl, '/Fdty'],  1, 'input');  % Parasitic force Ty
  io(5)  = linio([mdl, '/Fdrz'],  1, 'input');  % Parasitic force Rz

  io(6)  = linio([mdl, '/Dsm'],  1, 'output'); % Displacement of the sample
  io(7)  = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
  io(8)  = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
  io(9)  = linio([mdl, '/Dgm'],  1, 'output'); % Absolute displacement of the granite
  io(10) = linio([mdl, '/Vlm'],  1, 'output'); % Measured absolute velocity of the top NASS platform
  %% Run the linearization
  G_dvf = linearize(mdl, io, options);
  G_dvf.InputName  = {'Dw',   ... % Ground Motion [m]
                      'Fs',   ... % Force Applied on Sample [N]
                      'Fn',   ... % Force applied by NASS [N]
                      'Fty',  ... % Parasitic Force Ty [N]
                      'Frz'};     % Parasitic Force Rz [N]
  G_dvf.OutputName = {'D',    ... % Measured sample displacement x.r.t. granite [m]
                      'Fnm',  ... % Force Sensor in NASS [N]
                      'Dnm',  ... % Displacement Sensor in NASS [m]
                      'Dgm',  ... % Asbolute displacement of Granite [m]
                      'Vlm'}; ... % Absolute Velocity of NASS [m/s]

Sensitivity to Disturbance

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_sensitivity_dist_dvf.png
Sensitivity to disturbance once the DVF controller is applied to the system (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_sensitivity_dist_stages_dvf.png
Sensitivity to force disturbances in various stages when DVF is applied (png, pdf)

Damped Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_plant_dvf_damped.png
Damped Plant after DVF is applied (png, pdf)

Save

  save('./uniaxial/mat/plants.mat', 'G_dvf', '-append');

Conclusion

Direct Velocity Feedback:

Comparison of Active Damping Techniques

<<sec:comparison>>

Load the plants

  load('./uniaxial/mat/plants.mat', 'G', 'G_iff', 'G_rmc', 'G_dvf');

Sensitivity to Disturbance

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_sensitivity_dist_comp.png
Sensitivity to disturbance - Comparison (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_sensitivity_dist_stages_comp.png
Sensitivity to force disturbances - Comparison (png, pdf)

Damped Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/ff8df3a9d0abb7d0f573fb48f795bede426a4e01/uniaxial/figs/uniaxial_plant_damped_comp.png
Damped Plant - Comparison (png, pdf)

Conclusion