Add Cedrat Actuator

This commit is contained in:
Thomas Dehaeze 2019-10-28 17:36:20 +01:00
parent 8b13893099
commit f6e543ffcc
10 changed files with 715 additions and 137 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

View File

@ -0,0 +1,38 @@
% Cedrat Actuator
% :PROPERTIES:
% :header-args:matlab+: :tangle ../src/initializeCedratPiezo.m
% :header-args:matlab+: :comments org :mkdirp yes
% :header-args:matlab+: :eval no :results none
% :END:
% <<sec:initializeCedratPiezo>>
% This Matlab function is accessible [[file:../src/initializeCedratPiezo.m][here]].
function [cedrat] = initializeCedratPiezo(opts_param)
%% Default values for opts
opts = struct();
%% Populate opts with input parameters
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
%% Stewart Object
cedrat = struct();
cedrat.k = 10e7; % Linear Stiffness of each "blade" [N/m]
cedrat.ka = 10e7; % Linear Stiffness of the stack [N/m]
cedrat.c = 0.1*sqrt(1*cedrat.k); % [N/(m/s)]
cedrat.ca = 0.1*sqrt(1*cedrat.ka); % [N/(m/s)]
cedrat.L = 80; % Total Width of the Actuator[mm]
cedrat.H = 45; % Total Height of the Actuator [mm]
cedrat.L2 = sqrt((cedrat.L/2)^2 + (cedrat.H/2)^2); % Length of the elipsoidal sections [mm]
cedrat.alpha = 180/pi*atan2(cedrat.L/2, cedrat.H/2); % [deg]
%% Save
save('./mat/stages.mat', 'cedrat', '-append');
end

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2019-10-25 ven. 16:02 -->
<!-- 2019-10-28 lun. 17:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simscape Uniaxial Model</title>
@ -280,48 +280,58 @@ for the JavaScript code in this tag.
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org119d8dc">1. Simscape Model</a></li>
<li><a href="#org95b633d">2. Undamped System</a>
<li><a href="#orgfc3044a">1. Simscape Model</a></li>
<li><a href="#org8da4eb0">2. Undamped System</a>
<ul>
<li><a href="#orga87af67">2.1. Init</a></li>
<li><a href="#org2d53583">2.2. Identification</a></li>
<li><a href="#orgc443c0b">2.3. Sensitivity to Disturbances</a></li>
<li><a href="#orgdb21910">2.4. Plant</a></li>
<li><a href="#orgcb2b0a1">2.1. Init</a></li>
<li><a href="#org7f40bf7">2.2. Identification</a></li>
<li><a href="#org7908bab">2.3. Sensitivity to Disturbances</a></li>
<li><a href="#org5a57afd">2.4. Plant</a></li>
</ul>
</li>
<li><a href="#org497a34a">3. Integral Force Feedback</a>
<li><a href="#org68d1bb0">3. Integral Force Feedback</a>
<ul>
<li><a href="#org90d6383">3.1. Control Design</a></li>
<li><a href="#orge5c43d3">3.2. Identification</a></li>
<li><a href="#orgdc6e62f">3.3. Sensitivity to Disturbance</a></li>
<li><a href="#orgf2883d8">3.4. Damped Plant</a></li>
<li><a href="#orgb766da3">3.5. Conclusion</a></li>
<li><a href="#orga5e22eb">3.1. Control Design</a></li>
<li><a href="#org0fdf2fd">3.2. Identification</a></li>
<li><a href="#org8b81fd6">3.3. Sensitivity to Disturbance</a></li>
<li><a href="#org80d5d2d">3.4. Damped Plant</a></li>
<li><a href="#orga9ed49c">3.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#org0216063">4. Relative Motion Control</a>
<li><a href="#org5d0bc94">4. Relative Motion Control</a>
<ul>
<li><a href="#orgda1c98e">4.1. Control Design</a></li>
<li><a href="#orge3806a0">4.2. Identification</a></li>
<li><a href="#orge58c47d">4.3. Sensitivity to Disturbance</a></li>
<li><a href="#org70ec2cf">4.4. Damped Plant</a></li>
<li><a href="#orga845b21">4.5. Conclusion</a></li>
<li><a href="#org4ffacc7">4.1. Control Design</a></li>
<li><a href="#orgf86862c">4.2. Identification</a></li>
<li><a href="#org0211838">4.3. Sensitivity to Disturbance</a></li>
<li><a href="#orgefb061f">4.4. Damped Plant</a></li>
<li><a href="#org467a5d6">4.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#org7666422">5. Direct Velocity Feedback</a>
<li><a href="#org408eed0">5. Direct Velocity Feedback</a>
<ul>
<li><a href="#org58e4d64">5.1. Control Design</a></li>
<li><a href="#org7e8b911">5.2. Identification</a></li>
<li><a href="#org2adcafe">5.3. Sensitivity to Disturbance</a></li>
<li><a href="#orge8b5bd9">5.4. Damped Plant</a></li>
<li><a href="#org22d6515">5.5. Conclusion</a></li>
<li><a href="#org64e7b3f">5.1. Control Design</a></li>
<li><a href="#orga75fa6d">5.2. Identification</a></li>
<li><a href="#org0d535fa">5.3. Sensitivity to Disturbance</a></li>
<li><a href="#org9643807">5.4. Damped Plant</a></li>
<li><a href="#org6e6fd47">5.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#org55010b4">6. Comparison of Active Damping Techniques</a>
<li><a href="#orgd792cab">6. With Cedrat Piezo-electric Actuators</a>
<ul>
<li><a href="#org5cb1e25">6.1. Load the plants</a></li>
<li><a href="#orgc746216">6.2. Sensitivity to Disturbance</a></li>
<li><a href="#orgcd1790f">6.3. Damped Plant</a></li>
<li><a href="#org9a602cb">6.4. Conclusion</a></li>
<li><a href="#org7707a0a">6.1. Identification</a></li>
<li><a href="#orgd921ae7">6.2. Control Design</a></li>
<li><a href="#org1d5a39c">6.3. Identification</a></li>
<li><a href="#orgb163c6c">6.4. Sensitivity to Disturbance</a></li>
<li><a href="#org552dcab">6.5. Damped Plant</a></li>
<li><a href="#org5065aae">6.6. Conclusion</a></li>
</ul>
</li>
<li><a href="#org60dfb12">7. Comparison of Active Damping Techniques</a>
<ul>
<li><a href="#org249a650">7.1. Load the plants</a></li>
<li><a href="#org0c1cccb">7.2. Sensitivity to Disturbance</a></li>
<li><a href="#orgb54c9e3">7.3. Damped Plant</a></li>
<li><a href="#org1c67523">7.4. Conclusion</a></li>
</ul>
</li>
</ul>
@ -336,11 +346,11 @@ The idea is to use the same model as the full Simscape Model but to restrict the
This is done in order to more easily study the system and evaluate control techniques.
</p>
<div id="outline-container-org119d8dc" class="outline-2">
<h2 id="org119d8dc"><span class="section-number-2">1</span> Simscape Model</h2>
<div id="outline-container-orgfc3044a" class="outline-2">
<h2 id="orgfc3044a"><span class="section-number-2">1</span> Simscape Model</h2>
<div class="outline-text-2" id="text-1">
<p>
A schematic of the uniaxial model used for simulations is represented in figure <a href="#org20bfb11">1</a>.
A schematic of the uniaxial model used for simulations is represented in figure <a href="#orgc5e0a56">1</a>.
</p>
<p>
@ -384,7 +394,7 @@ The control signal \(u\) is:
</ul>
<div id="org20bfb11" class="figure">
<div id="orgc5e0a56" class="figure">
<p><img src="figs/uniaxial-model-nass-flexible.png" alt="uniaxial-model-nass-flexible.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Schematic of the uniaxial model used</p>
@ -393,11 +403,11 @@ The control signal \(u\) is:
<p>
Few active damping techniques will be compared in order to decide which sensor is to be included in the system.
Schematics of the active damping techniques are displayed in figure <a href="#org2eb3599">2</a>.
Schematics of the active damping techniques are displayed in figure <a href="#orgdb9985c">2</a>.
</p>
<div id="org2eb3599" class="figure">
<div id="orgdb9985c" class="figure">
<p><img src="figs/uniaxial-model-nass-flexible-active-damping.png" alt="uniaxial-model-nass-flexible-active-damping.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Comparison of used active damping techniques</p>
@ -405,16 +415,16 @@ Schematics of the active damping techniques are displayed in figure <a href="#or
</div>
</div>
<div id="outline-container-org95b633d" class="outline-2">
<h2 id="org95b633d"><span class="section-number-2">2</span> Undamped System</h2>
<div id="outline-container-org8da4eb0" class="outline-2">
<h2 id="org8da4eb0"><span class="section-number-2">2</span> Undamped System</h2>
<div class="outline-text-2" id="text-2">
<p>
Let's start by study the undamped system.
</p>
</div>
<div id="outline-container-orga87af67" class="outline-3">
<h3 id="orga87af67"><span class="section-number-3">2.1</span> Init</h3>
<div id="outline-container-orgcb2b0a1" class="outline-3">
<h3 id="orgcb2b0a1"><span class="section-number-3">2.1</span> Init</h3>
<div class="outline-text-3" id="text-2-1">
<p>
We initialize all the stages with the default parameters.
@ -426,8 +436,8 @@ All the controllers are set to 0 (Open Loop).
</p>
</div>
</div>
<div id="outline-container-org2d53583" class="outline-3">
<h3 id="org2d53583"><span class="section-number-3">2.2</span> Identification</h3>
<div id="outline-container-org7f40bf7" class="outline-3">
<h3 id="org7f40bf7"><span class="section-number-3">2.2</span> Identification</h3>
<div class="outline-text-3" id="text-2-2">
<p>
We identify the dynamics of the system.
@ -490,19 +500,19 @@ Finally, we save the identified system dynamics for further analysis.
</div>
</div>
<div id="outline-container-orgc443c0b" class="outline-3">
<h3 id="orgc443c0b"><span class="section-number-3">2.3</span> Sensitivity to Disturbances</h3>
<div id="outline-container-org7908bab" class="outline-3">
<h3 id="org7908bab"><span class="section-number-3">2.3</span> Sensitivity to Disturbances</h3>
<div class="outline-text-3" id="text-2-3">
<p>
We show several plots representing the sensitivity to disturbances:
</p>
<ul class="org-ul">
<li>in figure <a href="#org4d3097e">3</a> the transfer functions from ground motion \(D_w\) to the sample position \(D\) and the transfer function from direct force on the sample \(F_s\) to the sample position \(D\) are shown</li>
<li>in figure <a href="#orgfd7633d">4</a>, it is the effect of parasitic forces of the positioning stages (\(F_{ty}\) and \(F_{rz}\)) on the position \(D\) of the sample that are shown</li>
<li>in figure <a href="#orgd82c2ce">3</a> the transfer functions from ground motion \(D_w\) to the sample position \(D\) and the transfer function from direct force on the sample \(F_s\) to the sample position \(D\) are shown</li>
<li>in figure <a href="#org72d40e7">4</a>, it is the effect of parasitic forces of the positioning stages (\(F_{ty}\) and \(F_{rz}\)) on the position \(D\) of the sample that are shown</li>
</ul>
<div id="org4d3097e" class="figure">
<div id="orgd82c2ce" class="figure">
<p><img src="figs/uniaxial-sensitivity-disturbances.png" alt="uniaxial-sensitivity-disturbances.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Sensitivity to disturbances (<a href="./figs/uniaxial-sensitivity-disturbances.png">png</a>, <a href="./figs/uniaxial-sensitivity-disturbances.pdf">pdf</a>)</p>
@ -510,7 +520,7 @@ We show several plots representing the sensitivity to disturbances:
<div id="orgfd7633d" class="figure">
<div id="org72d40e7" class="figure">
<p><img src="figs/uniaxial-sensitivity-force-dist.png" alt="uniaxial-sensitivity-force-dist.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Sensitivity to disturbances (<a href="./figs/uniaxial-sensitivity-force-dist.png">png</a>, <a href="./figs/uniaxial-sensitivity-force-dist.pdf">pdf</a>)</p>
@ -518,16 +528,16 @@ We show several plots representing the sensitivity to disturbances:
</div>
</div>
<div id="outline-container-orgdb21910" class="outline-3">
<h3 id="orgdb21910"><span class="section-number-3">2.4</span> Plant</h3>
<div id="outline-container-org5a57afd" class="outline-3">
<h3 id="org5a57afd"><span class="section-number-3">2.4</span> Plant</h3>
<div class="outline-text-3" id="text-2-4">
<p>
The transfer function from the force \(F\) applied by the nano-hexapod to the position of the sample \(D\) is shown in figure <a href="#orgee21d6a">5</a>.
The transfer function from the force \(F\) applied by the nano-hexapod to the position of the sample \(D\) is shown in figure <a href="#org5789c3f">5</a>.
It corresponds to the plant to control.
</p>
<div id="orgee21d6a" class="figure">
<div id="org5789c3f" class="figure">
<p><img src="figs/uniaxial-plant.png" alt="uniaxial-plant.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Bode plot of the Plant (<a href="./figs/uniaxial-plant.png">png</a>, <a href="./figs/uniaxial-plant.pdf">pdf</a>)</p>
@ -536,21 +546,21 @@ It corresponds to the plant to control.
</div>
</div>
<div id="outline-container-org497a34a" class="outline-2">
<h2 id="org497a34a"><span class="section-number-2">3</span> Integral Force Feedback</h2>
<div id="outline-container-org68d1bb0" class="outline-2">
<h2 id="org68d1bb0"><span class="section-number-2">3</span> Integral Force Feedback</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org61a9736"></a>
<a id="org36327e7"></a>
</p>
<div id="orgf30b3b3" class="figure">
<div id="org6ca8a23" class="figure">
<p><img src="figs/uniaxial-model-nass-flexible-iff.png" alt="uniaxial-model-nass-flexible-iff.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Uniaxial IFF Control Schematic</p>
</div>
</div>
<div id="outline-container-org90d6383" class="outline-3">
<h3 id="org90d6383"><span class="section-number-3">3.1</span> Control Design</h3>
<div id="outline-container-orga5e22eb" class="outline-3">
<h3 id="orga5e22eb"><span class="section-number-3">3.1</span> Control Design</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
@ -562,7 +572,7 @@ Let's look at the transfer function from actuator forces in the nano-hexapod to
</p>
<div id="org13e2d05" class="figure">
<div id="org5063cb4" class="figure">
<p><img src="figs/uniaxial_iff_plant.png" alt="uniaxial_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Transfer function from forces applied in the legs to force sensor (<a href="./figs/uniaxial_iff_plant.png">png</a>, <a href="./figs/uniaxial_iff_plant.pdf">pdf</a>)</p>
@ -577,7 +587,7 @@ The controller for each pair of actuator/sensor is:
</div>
<div id="org928425f" class="figure">
<div id="org495687f" class="figure">
<p><img src="figs/uniaxial_iff_open_loop.png" alt="uniaxial_iff_open_loop.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Loop Gain for the Integral Force Feedback (<a href="./figs/uniaxial_iff_open_loop.png">png</a>, <a href="./figs/uniaxial_iff_open_loop.pdf">pdf</a>)</p>
@ -585,8 +595,8 @@ The controller for each pair of actuator/sensor is:
</div>
</div>
<div id="outline-container-orge5c43d3" class="outline-3">
<h3 id="orge5c43d3"><span class="section-number-3">3.2</span> Identification</h3>
<div id="outline-container-org0fdf2fd" class="outline-3">
<h3 id="org0fdf2fd"><span class="section-number-3">3.2</span> Identification</h3>
<div class="outline-text-3" id="text-3-2">
<p>
Let's initialize the system prior to identification.
@ -669,18 +679,18 @@ G_iff.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
</div>
<div id="outline-container-orgdc6e62f" class="outline-3">
<h3 id="orgdc6e62f"><span class="section-number-3">3.3</span> Sensitivity to Disturbance</h3>
<div id="outline-container-org8b81fd6" class="outline-3">
<h3 id="org8b81fd6"><span class="section-number-3">3.3</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-3-3">
<div id="org8df8488" class="figure">
<div id="org307c8d8" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_iff.png" alt="uniaxial_sensitivity_dist_iff.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Sensitivity to disturbance once the IFF controller is applied to the system (<a href="./figs/uniaxial_sensitivity_dist_iff.png">png</a>, <a href="./figs/uniaxial_sensitivity_dist_iff.pdf">pdf</a>)</p>
</div>
<div id="org6003ced" class="figure">
<div id="orgabd6245" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_stages_iff.png" alt="uniaxial_sensitivity_dist_stages_iff.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Sensitivity to force disturbances in various stages when IFF is applied (<a href="./figs/uniaxial_sensitivity_dist_stages_iff.png">png</a>, <a href="./figs/uniaxial_sensitivity_dist_stages_iff.pdf">pdf</a>)</p>
@ -688,11 +698,11 @@ G_iff.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
</div>
<div id="outline-container-orgf2883d8" class="outline-3">
<h3 id="orgf2883d8"><span class="section-number-3">3.4</span> Damped Plant</h3>
<div id="outline-container-org80d5d2d" class="outline-3">
<h3 id="org80d5d2d"><span class="section-number-3">3.4</span> Damped Plant</h3>
<div class="outline-text-3" id="text-3-4">
<div id="org2071f90" class="figure">
<div id="org35f8f43" class="figure">
<p><img src="figs/uniaxial_plant_iff_damped.png" alt="uniaxial_plant_iff_damped.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Damped Plant after IFF is applied (<a href="./figs/uniaxial_plant_iff_damped.png">png</a>, <a href="./figs/uniaxial_plant_iff_damped.pdf">pdf</a>)</p>
@ -700,8 +710,8 @@ G_iff.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
</div>
<div id="outline-container-orgb766da3" class="outline-3">
<h3 id="orgb766da3"><span class="section-number-3">3.5</span> Conclusion</h3>
<div id="outline-container-orga9ed49c" class="outline-3">
<h3 id="orga9ed49c"><span class="section-number-3">3.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-5">
<div class="important">
<p>
@ -713,25 +723,25 @@ Integral Force Feedback:
</div>
</div>
<div id="outline-container-org0216063" class="outline-2">
<h2 id="org0216063"><span class="section-number-2">4</span> Relative Motion Control</h2>
<div id="outline-container-org5d0bc94" class="outline-2">
<h2 id="org5d0bc94"><span class="section-number-2">4</span> Relative Motion Control</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="orgcf7a709"></a>
<a id="org5737634"></a>
</p>
<p>
In the Relative Motion Control (RMC), a derivative feedback is applied between the measured actuator displacement to the actuator force input.
</p>
<div id="org8ed07c5" class="figure">
<div id="org742e0c1" class="figure">
<p><img src="figs/uniaxial-model-nass-flexible-rmc.png" alt="uniaxial-model-nass-flexible-rmc.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Uniaxial RMC Control Schematic</p>
</div>
</div>
<div id="outline-container-orgda1c98e" class="outline-3">
<h3 id="orgda1c98e"><span class="section-number-3">4.1</span> Control Design</h3>
<div id="outline-container-org4ffacc7" class="outline-3">
<h3 id="org4ffacc7"><span class="section-number-3">4.1</span> Control Design</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
@ -743,7 +753,7 @@ Let's look at the transfer function from actuator forces in the nano-hexapod to
</p>
<div id="org75fbb9f" class="figure">
<div id="org9fd5b87" class="figure">
<p><img src="figs/uniaxial_rmc_plant.png" alt="uniaxial_rmc_plant.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Transfer function from forces applied in the legs to leg displacement sensor (<a href="./figs/uniaxial_rmc_plant.png">png</a>, <a href="./figs/uniaxial_rmc_plant.pdf">pdf</a>)</p>
@ -759,7 +769,7 @@ A Low pass Filter is added to make the controller transfer function proper.
</div>
<div id="orgc5d2eb6" class="figure">
<div id="org7d6a1ae" class="figure">
<p><img src="figs/uniaxial_rmc_open_loop.png" alt="uniaxial_rmc_open_loop.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Loop Gain for the Integral Force Feedback (<a href="./figs/uniaxial_rmc_open_loop.png">png</a>, <a href="./figs/uniaxial_rmc_open_loop.pdf">pdf</a>)</p>
@ -767,8 +777,8 @@ A Low pass Filter is added to make the controller transfer function proper.
</div>
</div>
<div id="outline-container-orge3806a0" class="outline-3">
<h3 id="orge3806a0"><span class="section-number-3">4.2</span> Identification</h3>
<div id="outline-container-orgf86862c" class="outline-3">
<h3 id="orgf86862c"><span class="section-number-3">4.2</span> Identification</h3>
<div class="outline-text-3" id="text-4-2">
<p>
Let's initialize the system prior to identification.
@ -852,18 +862,18 @@ G_rmc.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
<div id="outline-container-orge58c47d" class="outline-3">
<h3 id="orge58c47d"><span class="section-number-3">4.3</span> Sensitivity to Disturbance</h3>
<div id="outline-container-org0211838" class="outline-3">
<h3 id="org0211838"><span class="section-number-3">4.3</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-4-3">
<div id="orgd910119" class="figure">
<div id="org00d0d6e" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_rmc.png" alt="uniaxial_sensitivity_dist_rmc.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Sensitivity to disturbance once the RMC controller is applied to the system (<a href="./figs/uniaxial_sensitivity_dist_rmc.png">png</a>, <a href="./figs/uniaxial_sensitivity_dist_rmc.pdf">pdf</a>)</p>
</div>
<div id="org6610f06" class="figure">
<div id="org0006b16" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_stages_rmc.png" alt="uniaxial_sensitivity_dist_stages_rmc.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Sensitivity to force disturbances in various stages when RMC is applied (<a href="./figs/uniaxial_sensitivity_dist_stages_rmc.png">png</a>, <a href="./figs/uniaxial_sensitivity_dist_stages_rmc.pdf">pdf</a>)</p>
@ -871,11 +881,11 @@ G_rmc.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
</div>
<div id="outline-container-org70ec2cf" class="outline-3">
<h3 id="org70ec2cf"><span class="section-number-3">4.4</span> Damped Plant</h3>
<div id="outline-container-orgefb061f" class="outline-3">
<h3 id="orgefb061f"><span class="section-number-3">4.4</span> Damped Plant</h3>
<div class="outline-text-3" id="text-4-4">
<div id="org7508a42" class="figure">
<div id="org2092a67" class="figure">
<p><img src="figs/uniaxial_plant_rmc_damped.png" alt="uniaxial_plant_rmc_damped.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Damped Plant after RMC is applied (<a href="./figs/uniaxial_plant_rmc_damped.png">png</a>, <a href="./figs/uniaxial_plant_rmc_damped.pdf">pdf</a>)</p>
@ -883,8 +893,8 @@ G_rmc.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
</div>
<div id="outline-container-orga845b21" class="outline-3">
<h3 id="orga845b21"><span class="section-number-3">4.5</span> Conclusion</h3>
<div id="outline-container-org467a5d6" class="outline-3">
<h3 id="org467a5d6"><span class="section-number-3">4.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-5">
<div class="important">
<p>
@ -896,25 +906,25 @@ Relative Motion Control:
</div>
</div>
<div id="outline-container-org7666422" class="outline-2">
<h2 id="org7666422"><span class="section-number-2">5</span> Direct Velocity Feedback</h2>
<div id="outline-container-org408eed0" class="outline-2">
<h2 id="org408eed0"><span class="section-number-2">5</span> Direct Velocity Feedback</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="org6b8afcf"></a>
<a id="orgfc1ffa1"></a>
</p>
<p>
In the Relative Motion Control (RMC), a feedback is applied between the measured velocity of the platform to the actuator force input.
</p>
<div id="orga86445d" class="figure">
<div id="org070b73d" class="figure">
<p><img src="figs/uniaxial-model-nass-flexible-dvf.png" alt="uniaxial-model-nass-flexible-dvf.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Uniaxial DVF Control Schematic</p>
</div>
</div>
<div id="outline-container-org58e4d64" class="outline-3">
<h3 id="org58e4d64"><span class="section-number-3">5.1</span> Control Design</h3>
<div id="outline-container-org64e7b3f" class="outline-3">
<h3 id="org64e7b3f"><span class="section-number-3">5.1</span> Control Design</h3>
<div class="outline-text-3" id="text-5-1">
<div class="org-src-container">
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
@ -922,7 +932,7 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
</div>
<div id="orgf4888fb" class="figure">
<div id="org56e8509" class="figure">
<p><img src="figs/uniaxial_dvf_plant.png" alt="uniaxial_dvf_plant.png" />
</p>
<p><span class="figure-number">Figure 19: </span>Transfer function from forces applied in the legs to leg velocity sensor (<a href="./figs/uniaxial_dvf_plant.png">png</a>, <a href="./figs/uniaxial_dvf_plant.pdf">pdf</a>)</p>
@ -934,7 +944,7 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
</div>
<div id="org1a62235" class="figure">
<div id="orgc80a1c2" class="figure">
<p><img src="figs/uniaxial_dvf_loop_gain.png" alt="uniaxial_dvf_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Transfer function from forces applied in the legs to leg velocity sensor (<a href="./figs/uniaxial_dvf_loop_gain.png">png</a>, <a href="./figs/uniaxial_dvf_loop_gain.pdf">pdf</a>)</p>
@ -942,8 +952,8 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
</div>
</div>
<div id="outline-container-org7e8b911" class="outline-3">
<h3 id="org7e8b911"><span class="section-number-3">5.2</span> Identification</h3>
<div id="outline-container-orga75fa6d" class="outline-3">
<h3 id="orga75fa6d"><span class="section-number-3">5.2</span> Identification</h3>
<div class="outline-text-3" id="text-5-2">
<p>
Let's initialize the system prior to identification.
@ -1026,18 +1036,18 @@ G_dvf.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
</div>
<div id="outline-container-org2adcafe" class="outline-3">
<h3 id="org2adcafe"><span class="section-number-3">5.3</span> Sensitivity to Disturbance</h3>
<div id="outline-container-org0d535fa" class="outline-3">
<h3 id="org0d535fa"><span class="section-number-3">5.3</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-5-3">
<div id="org9ca6224" class="figure">
<div id="org30e1316" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_dvf.png" alt="uniaxial_sensitivity_dist_dvf.png" />
</p>
<p><span class="figure-number">Figure 21: </span>Sensitivity to disturbance once the DVF controller is applied to the system (<a href="./figs/uniaxial_sensitivity_dist_dvf.png">png</a>, <a href="./figs/uniaxial_sensitivity_dist_dvf.pdf">pdf</a>)</p>
</div>
<div id="orgd0ada58" class="figure">
<div id="orge40e605" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_stages_dvf.png" alt="uniaxial_sensitivity_dist_stages_dvf.png" />
</p>
<p><span class="figure-number">Figure 22: </span>Sensitivity to force disturbances in various stages when DVF is applied (<a href="./figs/uniaxial_sensitivity_dist_stages_dvf.png">png</a>, <a href="./figs/uniaxial_sensitivity_dist_stages_dvf.pdf">pdf</a>)</p>
@ -1045,11 +1055,11 @@ G_dvf.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
</div>
<div id="outline-container-orge8b5bd9" class="outline-3">
<h3 id="orge8b5bd9"><span class="section-number-3">5.4</span> Damped Plant</h3>
<div id="outline-container-org9643807" class="outline-3">
<h3 id="org9643807"><span class="section-number-3">5.4</span> Damped Plant</h3>
<div class="outline-text-3" id="text-5-4">
<div id="org55c6262" class="figure">
<div id="org48982d0" class="figure">
<p><img src="figs/uniaxial_plant_dvf_damped.png" alt="uniaxial_plant_dvf_damped.png" />
</p>
<p><span class="figure-number">Figure 23: </span>Damped Plant after DVF is applied (<a href="./figs/uniaxial_plant_dvf_damped.png">png</a>, <a href="./figs/uniaxial_plant_dvf_damped.pdf">pdf</a>)</p>
@ -1057,8 +1067,8 @@ G_dvf.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span cl
</div>
</div>
<div id="outline-container-org22d6515" class="outline-3">
<h3 id="org22d6515"><span class="section-number-3">5.5</span> Conclusion</h3>
<div id="outline-container-org6e6fd47" class="outline-3">
<h3 id="org6e6fd47"><span class="section-number-3">5.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-5">
<div class="important">
<p>
@ -1069,16 +1079,235 @@ Direct Velocity Feedback:
</div>
</div>
</div>
<div id="outline-container-org55010b4" class="outline-2">
<h2 id="org55010b4"><span class="section-number-2">6</span> Comparison of Active Damping Techniques</h2>
<div id="outline-container-orgd792cab" class="outline-2">
<h2 id="orgd792cab"><span class="section-number-2">6</span> With Cedrat Piezo-electric Actuators</h2>
<div class="outline-text-2" id="text-6">
</div>
<div id="outline-container-org7707a0a" class="outline-3">
<h3 id="org7707a0a"><span class="section-number-3">6.1</span> Identification</h3>
<div class="outline-text-3" id="text-6-1">
<p>
<a id="org9b9c235"></a>
We identify the dynamics of the system.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
options = linearizeOptions;
options.SampleTime = <span class="org-highlight-numbers-number">0</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'sim_nano_station_uniaxial_cedrat'</span>;
</pre>
</div>
<p>
The inputs and outputs are defined below and corresponds to the name of simulink blocks.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Dw'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Ground Motion</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fs'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Force applied on the sample</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fnl'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Force applied by the NASS</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fdty'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Parasitic force Ty</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fdrz'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Parasitic force Rz</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Dsm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Displacement of the sample</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">7</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fnlm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Force sensor in NASS's legs</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">8</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Dnlm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Displacement of NASS's legs</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">9</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Dgm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Absolute displacement of the granite</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">10</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Vlm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Measured absolute velocity of the top NASS platform</span>
</pre>
</div>
<p>
Finally, we use the <code>linearize</code> Matlab function to extract a state space model from the simscape model.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize<span class="org-rainbow-delimiters-depth-1">(</span>mdl, io, options<span class="org-rainbow-delimiters-depth-1">)</span>;
G.InputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'Dw'</span>, ...<span class="org-comment"> % Ground Motion [m]</span>
<span class="org-string">'Fs'</span>, ...<span class="org-comment"> % Force Applied on Sample [N]</span>
<span class="org-string">'Fn'</span>, ...<span class="org-comment"> % Force applied by NASS [N]</span>
<span class="org-string">'Fty'</span>, ...<span class="org-comment"> % Parasitic Force Ty [N]</span>
<span class="org-string">'Frz'</span><span class="org-rainbow-delimiters-depth-1">}</span>; <span class="org-comment">% Parasitic Force Rz [N]</span>
G.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'D'</span>, ...<span class="org-comment"> % Measured sample displacement x.r.t. granite [m]</span>
<span class="org-string">'Fnm'</span>, ...<span class="org-comment"> % Force Sensor in NASS [N]</span>
<span class="org-string">'Dnm'</span>, ...<span class="org-comment"> % Displacement Sensor in NASS [m]</span>
<span class="org-string">'Dgm'</span>, ...<span class="org-comment"> % Asbolute displacement of Granite [m]</span>
<span class="org-string">'Vlm'</span><span class="org-rainbow-delimiters-depth-1">}</span>; ...<span class="org-comment"> % Absolute Velocity of NASS [m/s]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd921ae7" class="outline-3">
<h3 id="orgd921ae7"><span class="section-number-3">6.2</span> Control Design</h3>
<div class="outline-text-3" id="text-6-2">
<p>
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.
</p>
<div id="org8bae400" class="figure">
<p><img src="figs/uniaxial_cedrat_plant.png" alt="uniaxial_cedrat_plant.png" />
</p>
<p><span class="figure-number">Figure 24: </span>Transfer function from forces applied in the legs to force sensor (<a href="./figs/uniaxial_cedrat_plant.png">png</a>, <a href="./figs/uniaxial_cedrat_plant.pdf">pdf</a>)</p>
</div>
<p>
The controller for each pair of actuator/sensor is:
</p>
<div class="org-src-container">
<pre class="src src-matlab">K_cedrat = <span class="org-highlight-numbers-number">1000</span><span class="org-type">/</span>s;
</pre>
</div>
<div id="org0e53970" class="figure">
<p><img src="figs/uniaxial_cedrat_open_loop.png" alt="uniaxial_cedrat_open_loop.png" />
</p>
<p><span class="figure-number">Figure 25: </span>Loop Gain for the Integral Force Feedback (<a href="./figs/uniaxial_cedrat_open_loop.png">png</a>, <a href="./figs/uniaxial_cedrat_open_loop.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org1d5a39c" class="outline-3">
<h3 id="org1d5a39c"><span class="section-number-3">6.3</span> Identification</h3>
<div class="outline-text-3" id="text-6-3">
<p>
Let's initialize the system prior to identification.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeGranite<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeTy<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeRy<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeRz<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeMicroHexapod<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeAxisc<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeMirror<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeNanoHexapod<span class="org-rainbow-delimiters-depth-1">(</span>struct<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
initializeSample<span class="org-rainbow-delimiters-depth-1">(</span>struct<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'mass'</span>, <span class="org-highlight-numbers-number">50</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<p>
All the controllers are set to 0.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
K_iff = <span class="org-type">-</span>K_cedrat;
save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
K_rmc = tf<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
K_dvf = tf<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
options = linearizeOptions;
options.SampleTime = <span class="org-highlight-numbers-number">0</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'sim_nano_station_uniaxial_cedrat'</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Dw'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Ground Motion</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fs'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Force applied on the sample</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fnl'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Force applied by the NASS</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fdty'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Parasitic force Ty</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fdrz'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'input'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Parasitic force Rz</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Dsm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Displacement of the sample</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">7</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Fnlm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Force sensor in NASS's legs</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">8</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Dnlm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Displacement of NASS's legs</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">9</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Dgm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Absolute displacement of the granite</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">10</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/Vlm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Measured absolute velocity of the top NASS platform</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_cedrat = linearize<span class="org-rainbow-delimiters-depth-1">(</span>mdl, io, options<span class="org-rainbow-delimiters-depth-1">)</span>;
G_cedrat.InputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'Dw'</span>, ...<span class="org-comment"> % Ground Motion [m]</span>
<span class="org-string">'Fs'</span>, ...<span class="org-comment"> % Force Applied on Sample [N]</span>
<span class="org-string">'Fn'</span>, ...<span class="org-comment"> % Force applied by NASS [N]</span>
<span class="org-string">'Fty'</span>, ...<span class="org-comment"> % Parasitic Force Ty [N]</span>
<span class="org-string">'Frz'</span><span class="org-rainbow-delimiters-depth-1">}</span>; <span class="org-comment">% Parasitic Force Rz [N]</span>
G_cedrat.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'D'</span>, ...<span class="org-comment"> % Measured sample displacement x.r.t. granite [m]</span>
<span class="org-string">'Fnm'</span>, ...<span class="org-comment"> % Force Sensor in NASS [N]</span>
<span class="org-string">'Dnm'</span>, ...<span class="org-comment"> % Displacement Sensor in NASS [m]</span>
<span class="org-string">'Dgm'</span>, ...<span class="org-comment"> % Asbolute displacement of Granite [m]</span>
<span class="org-string">'Vlm'</span><span class="org-rainbow-delimiters-depth-1">}</span>; ...<span class="org-comment"> % Absolute Velocity of NASS [m/s]</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G_cedrat'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb163c6c" class="outline-3">
<h3 id="orgb163c6c"><span class="section-number-3">6.4</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-6-4">
<div id="org6c93b19" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_cedrat.png" alt="uniaxial_sensitivity_dist_cedrat.png" />
</p>
<p><span class="figure-number">Figure 26: </span>Sensitivity to disturbance once the CEDRAT controller is applied to the system (<a href="./figs/uniaxial_sensitivity_dist_cedrat.png">png</a>, <a href="./figs/uniaxial_sensitivity_dist_cedrat.pdf">pdf</a>)</p>
</div>
<div id="org1b2d2df" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_stages_cedrat.png" alt="uniaxial_sensitivity_dist_stages_cedrat.png" />
</p>
<p><span class="figure-number">Figure 27: </span>Sensitivity to force disturbances in various stages when CEDRAT is applied (<a href="./figs/uniaxial_sensitivity_dist_stages_cedrat.png">png</a>, <a href="./figs/uniaxial_sensitivity_dist_stages_cedrat.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org552dcab" class="outline-3">
<h3 id="org552dcab"><span class="section-number-3">6.5</span> Damped Plant</h3>
<div class="outline-text-3" id="text-6-5">
<div id="orge59303f" class="figure">
<p><img src="figs/uniaxial_plant_cedrat_damped.png" alt="uniaxial_plant_cedrat_damped.png" />
</p>
<p><span class="figure-number">Figure 28: </span>Damped Plant after CEDRAT is applied (<a href="./figs/uniaxial_plant_cedrat_damped.png">png</a>, <a href="./figs/uniaxial_plant_cedrat_damped.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org5065aae" class="outline-3">
<h3 id="org5065aae"><span class="section-number-3">6.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-6-6">
<div class="important">
<p>
This gives similar results than with a classical force sensor.
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org60dfb12" class="outline-2">
<h2 id="org60dfb12"><span class="section-number-2">7</span> Comparison of Active Damping Techniques</h2>
<div class="outline-text-2" id="text-7">
<p>
<a id="orgc7002a8"></a>
</p>
</div>
<div id="outline-container-org5cb1e25" class="outline-3">
<h3 id="org5cb1e25"><span class="section-number-3">6.1</span> Load the plants</h3>
<div class="outline-text-3" id="text-6-1">
<div id="outline-container-org249a650" class="outline-3">
<h3 id="org249a650"><span class="section-number-3">7.1</span> Load the plants</h3>
<div class="outline-text-3" id="text-7-1">
<div class="org-src-container">
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'G_dvf'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
@ -1086,56 +1315,59 @@ Direct Velocity Feedback:
</div>
</div>
<div id="outline-container-orgc746216" class="outline-3">
<h3 id="orgc746216"><span class="section-number-3">6.2</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-6-2">
<div id="outline-container-org0c1cccb" class="outline-3">
<h3 id="org0c1cccb"><span class="section-number-3">7.2</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-7-2">
<div id="orga056e76" class="figure">
<div id="org9992967" class="figure">
<p><img src="figs/uniaxial_sensitivity_ground_motion.png" alt="uniaxial_sensitivity_ground_motion.png" />
</p>
<p><span class="figure-number">Figure 24: </span>Sensitivity to Ground Motion - Comparison (<a href="./figs/uniaxial_sensitivity_ground_motion.png">png</a>, <a href="./figs/uniaxial_sensitivity_ground_motion.pdf">pdf</a>)</p>
<p><span class="figure-number">Figure 29: </span>Sensitivity to Ground Motion - Comparison (<a href="./figs/uniaxial_sensitivity_ground_motion.png">png</a>, <a href="./figs/uniaxial_sensitivity_ground_motion.pdf">pdf</a>)</p>
</div>
<div id="org5bfe138" class="figure">
<div id="orgc7a133b" class="figure">
<p><img src="figs/uniaxial_sensitivity_direct_force.png" alt="uniaxial_sensitivity_direct_force.png" />
</p>
<p><span class="figure-number">Figure 25: </span>Sensitivity to disturbance - Comparison (<a href="./figs/uniaxial_sensitivity_direct_force.png">png</a>, <a href="./figs/uniaxial_sensitivity_direct_force.pdf">pdf</a>)</p>
<p><span class="figure-number">Figure 30: </span>Sensitivity to disturbance - Comparison (<a href="./figs/uniaxial_sensitivity_direct_force.png">png</a>, <a href="./figs/uniaxial_sensitivity_direct_force.pdf">pdf</a>)</p>
</div>
<div id="org4e0c629" class="figure">
<div id="org8eaf52e" class="figure">
<p><img src="figs/uniaxial_sensitivity_fty.png" alt="uniaxial_sensitivity_fty.png" />
</p>
<p><span class="figure-number">Figure 26: </span>Sensitivity to force disturbances - Comparison (<a href="./figs/uniaxial_sensitivity_fty.png">png</a>, <a href="./figs/uniaxial_sensitivity_fty.pdf">pdf</a>)</p>
<p><span class="figure-number">Figure 31: </span>Sensitivity to force disturbances - Comparison (<a href="./figs/uniaxial_sensitivity_fty.png">png</a>, <a href="./figs/uniaxial_sensitivity_fty.pdf">pdf</a>)</p>
</div>
<div id="orgae22af6" class="figure">
<div id="orgb554437" class="figure">
<p><img src="figs/uniaxial_sensitivity_frz.png" alt="uniaxial_sensitivity_frz.png" />
</p>
<p><span class="figure-number">Figure 27: </span>Sensitivity to force disturbances - Comparison (<a href="./figs/uniaxial_sensitivity_frz.png">png</a>, <a href="./figs/uniaxial_sensitivity_frz.pdf">pdf</a>)</p>
<p><span class="figure-number">Figure 32: </span>Sensitivity to force disturbances - Comparison (<a href="./figs/uniaxial_sensitivity_frz.png">png</a>, <a href="./figs/uniaxial_sensitivity_frz.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-orgcd1790f" class="outline-3">
<h3 id="orgcd1790f"><span class="section-number-3">6.3</span> Damped Plant</h3>
<div class="outline-text-3" id="text-6-3">
<div id="outline-container-orgb54c9e3" class="outline-3">
<h3 id="orgb54c9e3"><span class="section-number-3">7.3</span> Damped Plant</h3>
<div class="outline-text-3" id="text-7-3">
<div id="org38fbe3d" class="figure">
<div id="org9375b1e" class="figure">
<p><img src="figs/uniaxial_plant_damped_comp.png" alt="uniaxial_plant_damped_comp.png" />
</p>
<p><span class="figure-number">Figure 28: </span>Damped Plant - Comparison (<a href="./figs/uniaxial_plant_damped_comp.png">png</a>, <a href="./figs/uniaxial_plant_damped_comp.pdf">pdf</a>)</p>
<p><span class="figure-number">Figure 33: </span>Damped Plant - Comparison (<a href="./figs/uniaxial_plant_damped_comp.png">png</a>, <a href="./figs/uniaxial_plant_damped_comp.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org9a602cb" class="outline-3">
<h3 id="org9a602cb"><span class="section-number-3">6.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-6-4">
<table id="orgf039db4" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<div id="outline-container-org1c67523" class="outline-3">
<h3 id="org1c67523"><span class="section-number-3">7.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-7-4">
<p>
#name: tab:active<sub>damping</sub><sub>comparison</sub>
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Comparison of proposed active damping techniques</caption>
<colgroup>
@ -1205,7 +1437,7 @@ The next step is to take into account the power spectral density of each disturb
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2019-10-25 ven. 16:02</p>
<p class="date">Created: 2019-10-28 lun. 17:34</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>

View File

@ -2106,6 +2106,314 @@ And initialize the controllers.
#+begin_important
Direct Velocity Feedback:
#+end_important
* With Cedrat Piezo-electric Actuators
** 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 'simscape/sim_nano_station_uniaxial_cedrat.slx'
#+end_src
** Identification
We identify the dynamics of the system.
#+begin_src matlab
%% Options for Linearized
options = linearizeOptions;
options.SampleTime = 0;
%% Name of the Simulink File
mdl = 'sim_nano_station_uniaxial_cedrat';
#+end_src
The inputs and outputs are defined below and corresponds to the name of simulink blocks.
#+begin_src matlab
%% 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
#+end_src
Finally, we use the =linearize= Matlab function to extract a state space model from the simscape model.
#+begin_src matlab
%% 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]
#+end_src
** Control Design
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.
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
ax1 = subplot(2, 1, 1);
plot(freqs, abs(squeeze(freqresp(G('Fnm', 'Fn'), freqs, 'Hz'))), 'k-');
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
plot(freqs, 180/pi*angle(squeeze(freqresp(G('Fnm', 'Fn'), freqs, 'Hz'))), 'k-');
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x');
#+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/uniaxial_cedrat_plant.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:uniaxial_cedrat_plant
#+CAPTION: Transfer function from forces applied in the legs to force sensor ([[./figs/uniaxial_cedrat_plant.png][png]], [[./figs/uniaxial_cedrat_plant.pdf][pdf]])
[[file:figs/uniaxial_cedrat_plant.png]]
The controller for each pair of actuator/sensor is:
#+begin_src matlab
K_cedrat = 1000/s;
#+end_src
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
ax1 = subplot(2, 1, 1);
plot(freqs, abs(squeeze(freqresp(K_cedrat*G('Fnm', 'Fn'), freqs, 'Hz'))), 'k-');
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
plot(freqs, 180/pi*angle(squeeze(freqresp(K_cedrat*G('Fnm', 'Fn'), freqs, 'Hz'))), 'k-');
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x');
#+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/uniaxial_cedrat_open_loop.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:uniaxial_cedrat_open_loop
#+CAPTION: Loop Gain for the Integral Force Feedback ([[./figs/uniaxial_cedrat_open_loop.png][png]], [[./figs/uniaxial_cedrat_open_loop.pdf][pdf]])
[[file:figs/uniaxial_cedrat_open_loop.png]]
** Identification
Let's initialize the system prior to identification.
#+begin_src matlab
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(struct('actuator', 'piezo'));
initializeSample(struct('mass', 50));
#+end_src
All the controllers are set to 0.
#+begin_src matlab
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
K_iff = -K_cedrat;
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');
#+end_src
#+begin_src matlab
%% Options for Linearized
options = linearizeOptions;
options.SampleTime = 0;
%% Name of the Simulink File
mdl = 'sim_nano_station_uniaxial_cedrat';
#+end_src
#+begin_src matlab
%% 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
#+end_src
#+begin_src matlab
%% Run the linearization
G_cedrat = linearize(mdl, io, options);
G_cedrat.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_cedrat.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]
#+end_src
#+begin_src matlab
save('./uniaxial/mat/plants.mat', 'G_cedrat', '-append');
#+end_src
** Sensitivity to Disturbance
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
subplot(2, 1, 1);
title('$D_w$ to $D$');
hold on;
plot(freqs, abs(squeeze(freqresp(G('D', 'Dw'), freqs, 'Hz'))), 'k-', 'DisplayName', 'OL');
plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Dw'), freqs, 'Hz'))), 'k--', 'DisplayName', 'CEDRAT');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/m]'); xlabel('Frequency [Hz]');
legend('location', 'northeast');
subplot(2, 1, 2);
title('$F_s$ to $D$');
hold on;
plot(freqs, abs(squeeze(freqresp(G('D', 'Fs'), freqs, 'Hz'))), 'k-');
plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Fs'), freqs, 'Hz'))), 'k--');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]');
#+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/uniaxial_sensitivity_dist_cedrat.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:uniaxial_sensitivity_dist_cedrat
#+CAPTION: Sensitivity to disturbance once the CEDRAT controller is applied to the system ([[./figs/uniaxial_sensitivity_dist_cedrat.png][png]], [[./figs/uniaxial_sensitivity_dist_cedrat.pdf][pdf]])
[[file:figs/uniaxial_sensitivity_dist_cedrat.png]]
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
subplot(2, 1, 1);
title('$F_{ty}$ to $D$');
hold on;
plot(freqs, abs(squeeze(freqresp(G('D', 'Fty'), freqs, 'Hz'))), 'k-', 'DisplayName', 'OL');
plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Fty'), freqs, 'Hz'))), 'k--', 'DisplayName', 'CEDRAT');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]');
legend('location', 'northeast');
subplot(2, 1, 2);
title('$F_{rz}$ to $D$');
hold on;
plot(freqs, abs(squeeze(freqresp(G('D', 'Frz'), freqs, 'Hz'))), 'k-');
plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Frz'), freqs, 'Hz'))), 'k--');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]');
#+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/uniaxial_sensitivity_dist_stages_cedrat.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:uniaxial_sensitivity_dist_stages_cedrat
#+CAPTION: Sensitivity to force disturbances in various stages when CEDRAT is applied ([[./figs/uniaxial_sensitivity_dist_stages_cedrat.png][png]], [[./figs/uniaxial_sensitivity_dist_stages_cedrat.pdf][pdf]])
[[file:figs/uniaxial_sensitivity_dist_stages_cedrat.png]]
** Damped Plant
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(freqs, abs(squeeze(freqresp(G('D', 'Fn'), freqs, 'Hz'))), 'k-', 'DisplayName', 'OL');
plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Fn'), freqs, 'Hz'))), 'k--', 'DisplayName', 'CEDRAT');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
legend('location', 'northeast');
ax2 = subplot(2, 1, 2);
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(G('D', 'Fn'), freqs, 'Hz'))), 'k-');
plot(freqs, 180/pi*angle(squeeze(freqresp(G_cedrat('D', 'Fn'), freqs, 'Hz'))), 'k--');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x');
#+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/uniaxial_plant_cedrat_damped.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:uniaxial_plant_cedrat_damped
#+CAPTION: Damped Plant after CEDRAT is applied ([[./figs/uniaxial_plant_cedrat_damped.png][png]], [[./figs/uniaxial_plant_cedrat_damped.pdf][pdf]])
[[file:figs/uniaxial_plant_cedrat_damped.png]]
** Conclusion
#+begin_important
This gives similar results than with a classical force sensor.
#+end_important
* Comparison of Active Damping Techniques
<<sec:comparison>>
** Matlab Init :noexport:ignore:
@ -2278,7 +2586,7 @@ Direct Velocity Feedback:
** Conclusion
#+name: tab:active_damping_comparison
#name: tab:active_damping_comparison
#+caption: Comparison of proposed active damping techniques
| | IFF | RMC | DVF |
|---------------------------+-----------------+-----------------+----------|