Update files for new definition of hexapods

This commit is contained in:
Thomas Dehaeze 2020-05-05 11:38:52 +02:00
parent 2deb41939d
commit f7714a1449
33 changed files with 4627 additions and 2915 deletions

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:36 --> <!-- 2020-05-05 mar. 10:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Active Damping applied on the Simscape Model</title> <title>Active Damping applied on the Simscape Model</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -39,17 +39,17 @@
<ul> <ul>
<li><a href="#orgb9bb91c">1.1. Identification of the dynamics for Active Damping</a> <li><a href="#orgb9bb91c">1.1. Identification of the dynamics for Active Damping</a>
<ul> <ul>
<li><a href="#org0e0278d">1.1.1. Identification</a></li> <li><a href="#org25cfa54">1.1.1. Identification</a></li>
<li><a href="#org821239d">1.1.2. Obtained Plants for Active Damping</a></li> <li><a href="#org821239d">1.1.2. Obtained Plants for Active Damping</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org21a2e91">1.2. Identification of the dynamics for High Authority Control</a> <li><a href="#org21a2e91">1.2. Identification of the dynamics for High Authority Control</a>
<ul> <ul>
<li><a href="#org25cfa54">1.2.1. Identification</a></li> <li><a href="#org3de8d23">1.2.1. Identification</a></li>
<li><a href="#orgff85811">1.2.2. Obtained Plants</a></li> <li><a href="#orgff85811">1.2.2. Obtained Plants</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org2540d06">1.3. Tomography Experiment</a> <li><a href="#org76bbcf0">1.3. Tomography Experiment</a>
<ul> <ul>
<li><a href="#orgd5305ce">1.3.1. Simulation</a></li> <li><a href="#orgd5305ce">1.3.1. Simulation</a></li>
<li><a href="#orgd64a4bc">1.3.2. Results</a></li> <li><a href="#orgd64a4bc">1.3.2. Results</a></li>
@ -69,55 +69,55 @@
</li> </li>
<li><a href="#org47c5593">2.4. Variation of the Tilt Angle</a></li> <li><a href="#org47c5593">2.4. Variation of the Tilt Angle</a></li>
<li><a href="#org047e39c">2.5. Scans of the Translation Stage</a></li> <li><a href="#org047e39c">2.5. Scans of the Translation Stage</a></li>
<li><a href="#org6e25821">2.6. Conclusion</a></li> <li><a href="#orgdc8e915">2.6. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org11ab68f">3. Integral Force Feedback</a> <li><a href="#org11ab68f">3. Integral Force Feedback</a>
<ul> <ul>
<li><a href="#orga4d47de">3.1. Control Design</a> <li><a href="#orgd4c8167">3.1. Control Design</a>
<ul> <ul>
<li><a href="#org506864d">3.1.1. Plant</a></li> <li><a href="#org9ec605a">3.1.1. Plant</a></li>
<li><a href="#orgd147055">3.1.2. Control Design</a></li> <li><a href="#org9f4c2b3">3.1.2. Control Design</a></li>
<li><a href="#orgeed5a23">3.1.3. Diagonal Controller</a></li> <li><a href="#orgc596f9b">3.1.3. Diagonal Controller</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orge4bf8c1">3.2. Tomography Experiment</a> <li><a href="#org3169fff">3.2. Tomography Experiment</a>
<ul> <ul>
<li><a href="#org132e692">3.2.1. Simulation with IFF Controller</a></li> <li><a href="#org132e692">3.2.1. Simulation with IFF Controller</a></li>
<li><a href="#org9c3f302">3.2.2. Compare with Undamped system</a></li> <li><a href="#org8cb0050">3.2.2. Compare with Undamped system</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgd53cc4e">3.3. Conclusion</a></li> <li><a href="#org4e185a5">3.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org13393f4">4. Direct Velocity Feedback</a> <li><a href="#org13393f4">4. Direct Velocity Feedback</a>
<ul> <ul>
<li><a href="#org22d12df">4.1. Control Design</a> <li><a href="#org4d1af95">4.1. Control Design</a>
<ul> <ul>
<li><a href="#org0b48ca9">4.1.1. Plant</a></li> <li><a href="#org431d628">4.1.1. Plant</a></li>
<li><a href="#org59030a3">4.1.2. Control Design</a></li> <li><a href="#orgbf0fb21">4.1.2. Control Design</a></li>
<li><a href="#org59cf352">4.1.3. Diagonal Controller</a></li> <li><a href="#org7323c20">4.1.3. Diagonal Controller</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org76bbcf0">4.2. Tomography Experiment</a> <li><a href="#orgba6ba0d">4.2. Tomography Experiment</a>
<ul> <ul>
<li><a href="#orge2c011b">4.2.1. Initialize the Simulation</a></li> <li><a href="#org45b5800">4.2.1. Initialize the Simulation</a></li>
<li><a href="#org8cb0050">4.2.2. Compare with Undamped system</a></li> <li><a href="#org17042b3">4.2.2. Compare with Undamped system</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org5f85708">4.3. Conclusion</a></li> <li><a href="#orgc7e7a1c">4.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org8f2508f">5. Inertial Control</a> <li><a href="#org8f2508f">5. Inertial Control</a>
<ul> <ul>
<li><a href="#org9f4c2b3">5.1. Control Design</a> <li><a href="#org4dae7be">5.1. Control Design</a>
<ul> <ul>
<li><a href="#org9ec605a">5.1.1. Plant</a></li> <li><a href="#org434553c">5.1.1. Plant</a></li>
<li><a href="#org94a1419">5.1.2. Control Design</a></li> <li><a href="#orgf8547ea">5.1.2. Control Design</a></li>
<li><a href="#orgc596f9b">5.1.3. Diagonal Controller</a></li> <li><a href="#orge124d93">5.1.3. Diagonal Controller</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgdc8e915">5.2. Conclusion</a></li> <li><a href="#org81b259a">5.2. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org3557ae9">6. Comparison</a> <li><a href="#org3557ae9">6. Comparison</a>
@ -132,16 +132,16 @@
<ul> <ul>
<li><a href="#org8642cf5">7.1. prepareLinearizeIdentification</a> <li><a href="#org8642cf5">7.1. prepareLinearizeIdentification</a>
<ul> <ul>
<li><a href="#orga028903">Function Description</a></li> <li><a href="#org889b896">Function Description</a></li>
<li><a href="#orgbda1bf4">Optional Parameters</a></li> <li><a href="#orgf77fd6f">Optional Parameters</a></li>
<li><a href="#org2131c58">Initialize the Simulation</a></li> <li><a href="#orgef97b73">Initialize the Simulation</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgeb73896">7.2. prepareTomographyExperiment</a> <li><a href="#orgeb73896">7.2. prepareTomographyExperiment</a>
<ul> <ul>
<li><a href="#org889b896">Function Description</a></li> <li><a href="#orga6f2ff5">Function Description</a></li>
<li><a href="#orgf77fd6f">Optional Parameters</a></li> <li><a href="#org7ea3ae9">Optional Parameters</a></li>
<li><a href="#org45b5800">Initialize the Simulation</a></li> <li><a href="#org9ea9c6d">Initialize the Simulation</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -213,8 +213,8 @@ After that, a tomography experiment is simulation without any active damping tec
<h3 id="orgb9bb91c"><span class="section-number-3">1.1</span> Identification of the dynamics for Active Damping</h3> <h3 id="orgb9bb91c"><span class="section-number-3">1.1</span> Identification of the dynamics for Active Damping</h3>
<div class="outline-text-3" id="text-1-1"> <div class="outline-text-3" id="text-1-1">
</div> </div>
<div id="outline-container-org0e0278d" class="outline-4"> <div id="outline-container-org25cfa54" class="outline-4">
<h4 id="org0e0278d"><span class="section-number-4">1.1.1</span> Identification</h4> <h4 id="org25cfa54"><span class="section-number-4">1.1.1</span> Identification</h4>
<div class="outline-text-4" id="text-1-1-1"> <div class="outline-text-4" id="text-1-1-1">
<p> <p>
We initialize all the stages with the default parameters. We initialize all the stages with the default parameters.
@ -228,26 +228,26 @@ We initialize all the stages with the default parameters.
We identify the dynamics of the system using the <code>linearize</code> function. We identify the dynamics of the system using the <code>linearize</code> function.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span> <pre class="src src-matlab">%% Options for Linearized
options = linearizeOptions; options = linearizeOptions;
options.SampleTime = 0; options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span> %% Name of the Simulink File
mdl = <span class="org-string">'nass_model'</span>; mdl = 'nass_model';
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span> io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Dnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Motion Outputs</span> io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Relative Motion Outputs
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Fnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span> io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Fnlm'); io_i = io_i + 1; % Force Sensors
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Vlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Velocity Outputs</span> io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm'); io_i = io_i + 1; % Absolute Velocity Outputs
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span> %% Run the linearization
G = linearize(mdl, io, 0.5, options); G = linearize(mdl, io, 0.5, options);
G.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-string">'Dnlm2'</span>, <span class="org-string">'Dnlm3'</span>, <span class="org-string">'Dnlm4'</span>, <span class="org-string">'Dnlm5'</span>, <span class="org-string">'Dnlm6'</span>, ... G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
<span class="org-string">'Fnlm1'</span>, <span class="org-string">'Fnlm2'</span>, <span class="org-string">'Fnlm3'</span>, <span class="org-string">'Fnlm4'</span>, <span class="org-string">'Fnlm5'</span>, <span class="org-string">'Fnlm6'</span>, ... 'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
<span class="org-string">'Vnlm1'</span>, <span class="org-string">'Vnlm2'</span>, <span class="org-string">'Vnlm3'</span>, <span class="org-string">'Vnlm4'</span>, <span class="org-string">'Vnlm5'</span>, <span class="org-string">'Vnlm6'</span>}; 'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'};
</pre> </pre>
</div> </div>
@ -255,9 +255,9 @@ G.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-string
We then create transfer functions corresponding to the active damping plants. We then create transfer functions corresponding to the active damping plants.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">G_iff = minreal(G({<span class="org-string">'Fnlm1'</span>, <span class="org-string">'Fnlm2'</span>, <span class="org-string">'Fnlm3'</span>, <span class="org-string">'Fnlm4'</span>, <span class="org-string">'Fnlm5'</span>, <span class="org-string">'Fnlm6'</span>}, {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>})); <pre class="src src-matlab">G_iff = minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}));
G_dvf = minreal(G({<span class="org-string">'Dnlm1'</span>, <span class="org-string">'Dnlm2'</span>, <span class="org-string">'Dnlm3'</span>, <span class="org-string">'Dnlm4'</span>, <span class="org-string">'Dnlm5'</span>, <span class="org-string">'Dnlm6'</span>}, {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>})); G_dvf = minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}));
G_ine = minreal(G({<span class="org-string">'Vnlm1'</span>, <span class="org-string">'Vnlm2'</span>, <span class="org-string">'Vnlm3'</span>, <span class="org-string">'Vnlm4'</span>, <span class="org-string">'Vnlm5'</span>, <span class="org-string">'Vnlm6'</span>}, {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>})); G_ine = minreal(G({'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}));
</pre> </pre>
</div> </div>
@ -265,7 +265,7 @@ G_ine = minreal(G({<span class="org-string">'Vnlm1'</span>, <span class="org-str
And we save them for further analysis. And we save them for further analysis.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_undamped_plants.mat'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'G_dvf'</span>, <span class="org-string">'G_ine'</span>); <pre class="src src-matlab">save('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
</pre> </pre>
</div> </div>
</div> </div>
@ -275,7 +275,7 @@ And we save them for further analysis.
<h4 id="org821239d"><span class="section-number-4">1.1.2</span> Obtained Plants for Active Damping</h4> <h4 id="org821239d"><span class="section-number-4">1.1.2</span> Obtained Plants for Active Damping</h4>
<div class="outline-text-4" id="text-1-1-2"> <div class="outline-text-4" id="text-1-1-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_undamped_plants.mat'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'G_dvf'</span>, <span class="org-string">'G_ine'</span>); <pre class="src src-matlab">load('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
</pre> </pre>
</div> </div>
@ -307,8 +307,8 @@ And we save them for further analysis.
<h3 id="org21a2e91"><span class="section-number-3">1.2</span> Identification of the dynamics for High Authority Control</h3> <h3 id="org21a2e91"><span class="section-number-3">1.2</span> Identification of the dynamics for High Authority Control</h3>
<div class="outline-text-3" id="text-1-2"> <div class="outline-text-3" id="text-1-2">
</div> </div>
<div id="outline-container-org25cfa54" class="outline-4"> <div id="outline-container-org3de8d23" class="outline-4">
<h4 id="org25cfa54"><span class="section-number-4">1.2.1</span> Identification</h4> <h4 id="org3de8d23"><span class="section-number-4">1.2.1</span> Identification</h4>
<div class="outline-text-4" id="text-1-2-1"> <div class="outline-text-4" id="text-1-2-1">
<p> <p>
We initialize all the stages with the default parameters. We initialize all the stages with the default parameters.
@ -322,22 +322,22 @@ We initialize all the stages with the default parameters.
We identify the dynamics of the system using the <code>linearize</code> function. We identify the dynamics of the system using the <code>linearize</code> function.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span> <pre class="src src-matlab">%% Options for Linearized
options = linearizeOptions; options = linearizeOptions;
options.SampleTime = 0; options.SampleTime = 0;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span> %% Name of the Simulink File
mdl = <span class="org-string">'nass_model'</span>; mdl = 'nass_model';
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span> io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Metrology Outputs</span> io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'En'); io_i = io_i + 1; % Metrology Outputs
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">masses = [1, 10, 50]; <span class="org-comment">% [kg]</span> <pre class="src src-matlab">masses = [1, 10, 50]; % [kg]
</pre> </pre>
</div> </div>
@ -345,7 +345,7 @@ io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <s
And we save them for further analysis. And we save them for further analysis.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_cart_plants.mat'</span>, <span class="org-string">'G_cart'</span>, <span class="org-string">'masses'</span>); <pre class="src src-matlab">save('./mat/active_damping_cart_plants.mat', 'G_cart', 'masses');
</pre> </pre>
</div> </div>
</div> </div>
@ -355,7 +355,7 @@ And we save them for further analysis.
<h4 id="orgff85811"><span class="section-number-4">1.2.2</span> Obtained Plants</h4> <h4 id="orgff85811"><span class="section-number-4">1.2.2</span> Obtained Plants</h4>
<div class="outline-text-4" id="text-1-2-2"> <div class="outline-text-4" id="text-1-2-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_cart_plants.mat'</span>, <span class="org-string">'G_cart'</span>, <span class="org-string">'masses'</span>); <pre class="src src-matlab">load('./mat/active_damping_cart_plants.mat', 'G_cart', 'masses');
</pre> </pre>
</div> </div>
@ -377,8 +377,8 @@ And we save them for further analysis.
</div> </div>
</div> </div>
<div id="outline-container-org2540d06" class="outline-3"> <div id="outline-container-org76bbcf0" class="outline-3">
<h3 id="org2540d06"><span class="section-number-3">1.3</span> Tomography Experiment</h3> <h3 id="org76bbcf0"><span class="section-number-3">1.3</span> Tomography Experiment</h3>
<div class="outline-text-3" id="text-1-3"> <div class="outline-text-3" id="text-1-3">
</div> </div>
<div id="outline-container-orgd5305ce" class="outline-4"> <div id="outline-container-orgd5305ce" class="outline-4">
@ -396,8 +396,8 @@ We initialize elements for the tomography experiment.
We change the simulation stop time. We change the simulation stop time.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>); <pre class="src src-matlab">load('mat/conf_simulink.mat');
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'4.5'</span>); set_param(conf_simulink, 'StopTime', '4.5');
</pre> </pre>
</div> </div>
@ -405,7 +405,7 @@ We change the simulation stop time.
And we simulate the system. And we simulate the system.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -413,7 +413,7 @@ And we simulate the system.
Finally, we save the simulation results for further analysis Finally, we save the simulation results for further analysis
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span class="org-string">'En'</span>, <span class="org-string">'Eg'</span>, <span class="org-string">'-append'</span>); <pre class="src src-matlab">save('./mat/active_damping_tomo_exp.mat', 'En', 'Eg', '-append');
</pre> </pre>
</div> </div>
</div> </div>
@ -426,9 +426,9 @@ Finally, we save the simulation results for further analysis
We load the results of tomography experiments. We load the results of tomography experiments.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span class="org-string">'En'</span>); <pre class="src src-matlab">load('./mat/active_damping_tomo_exp.mat', 'En');
Fs = 1e3; <span class="org-comment">% Sampling Frequency of the Data</span> Fs = 1e3; % Sampling Frequency of the Data
t = (1<span class="org-type">/</span>Fs)<span class="org-type">*</span>[0<span class="org-type">:</span>length(En(<span class="org-type">:</span>,1))<span class="org-type">-</span>1]; t = (1/Fs)*[0:length(En(:,1))-1];
</pre> </pre>
</div> </div>
@ -495,7 +495,7 @@ We initialize all the stages with the default parameters.
We identify the dynamics for the following sample mass. We identify the dynamics for the following sample mass.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">masses = [1, 10, 50]; <span class="org-comment">% [kg]</span> <pre class="src src-matlab">masses = [1, 10, 50]; % [kg]
</pre> </pre>
</div> </div>
@ -539,7 +539,7 @@ We initialize all the stages with the default parameters.
We identify the dynamics for the following Spindle angles. We identify the dynamics for the following Spindle angles.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Rz_amplitudes = [0, <span class="org-constant">pi</span><span class="org-type">/</span>4, <span class="org-constant">pi</span><span class="org-type">/</span>2, <span class="org-constant">pi</span>]; <span class="org-comment">% [rad]</span> <pre class="src src-matlab">Rz_amplitudes = [0, pi/4, pi/2, pi]; % [rad]
</pre> </pre>
</div> </div>
@ -583,7 +583,7 @@ We initialize all the stages with the default parameters.
We identify the dynamics for the following Spindle rotation periods. We identify the dynamics for the following Spindle rotation periods.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Rz_periods = [60, 6, 2, 1]; <span class="org-comment">% [s]</span> <pre class="src src-matlab">Rz_periods = [60, 6, 2, 1]; % [s]
</pre> </pre>
</div> </div>
@ -676,7 +676,7 @@ We initialize all the stages with the default parameters.
We identify the dynamics for the following Tilt stage angles. We identify the dynamics for the following Tilt stage angles.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ry_amplitudes = [<span class="org-type">-</span>3<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>180, 3<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>180]; <span class="org-comment">% [rad]</span> <pre class="src src-matlab">Ry_amplitudes = [-3*pi/180, 3*pi/180]; % [rad]
</pre> </pre>
</div> </div>
@ -723,9 +723,9 @@ We initialize all the stages with the default parameters.
We initialize the translation stage reference to be a sinus with an amplitude of 5mm and a period of 1s (Figure <a href="#org476fbf1">25</a>). We initialize the translation stage reference to be a sinus with an amplitude of 5mm and a period of 1s (Figure <a href="#org476fbf1">25</a>).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Dy_type'</span>, <span class="org-string">'sinusoidal'</span>, ... <pre class="src src-matlab">initializeReferences('Dy_type', 'sinusoidal', ...
<span class="org-string">'Dy_amplitude'</span>, 5e<span class="org-type">-</span>3, ...<span class="org-comment"> % [m]</span> 'Dy_amplitude', 5e-3, ... % [m]
<span class="org-string">'Dy_period'</span>, 1); <span class="org-comment">% [s]</span> 'Dy_period', 1); % [s]
</pre> </pre>
</div> </div>
@ -766,8 +766,8 @@ We identify the dynamics at different positions (times) when scanning with the T
</div> </div>
</div> </div>
<div id="outline-container-org6e25821" class="outline-3"> <div id="outline-container-orgdc8e915" class="outline-3">
<h3 id="org6e25821"><span class="section-number-3">2.6</span> Conclusion</h3> <h3 id="orgdc8e915"><span class="section-number-3">2.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-6"> <div class="outline-text-3" id="text-2-6">
<table id="orgbd1a9f9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="orgbd1a9f9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Conclusion on the variability of the system dynamics for active damping</caption> <caption class="t-above"><span class="table-number">Table 1:</span> Conclusion on the variability of the system dynamics for active damping</caption>
@ -858,19 +858,19 @@ The control architecture is represented in figure <a href="#org3a1dbf1">29</a> w
</div> </div>
</div> </div>
<div id="outline-container-orga4d47de" class="outline-3"> <div id="outline-container-orgd4c8167" class="outline-3">
<h3 id="orga4d47de"><span class="section-number-3">3.1</span> Control Design</h3> <h3 id="orgd4c8167"><span class="section-number-3">3.1</span> Control Design</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
</div> </div>
<div id="outline-container-org506864d" class="outline-4"> <div id="outline-container-org9ec605a" class="outline-4">
<h4 id="org506864d"><span class="section-number-4">3.1.1</span> Plant</h4> <h4 id="org9ec605a"><span class="section-number-4">3.1.1</span> Plant</h4>
<div class="outline-text-4" id="text-3-1-1"> <div class="outline-text-4" id="text-3-1-1">
<p> <p>
Let&rsquo;s load the previously identified undamped plant: Let&rsquo;s load the previously identified undamped plant:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_undamped_plants.mat'</span>, <span class="org-string">'G_iff'</span>); <pre class="src src-matlab">load('./mat/active_damping_undamped_plants.mat', 'G_iff');
load(<span class="org-string">'./mat/active_damping_plants_variable.mat'</span>, <span class="org-string">'masses'</span>, <span class="org-string">'Gm_iff'</span>); load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_iff');
</pre> </pre>
</div> </div>
@ -887,15 +887,15 @@ Let&rsquo;s look at the transfer function from actuator forces in the nano-hexap
</div> </div>
</div> </div>
<div id="outline-container-orgd147055" class="outline-4"> <div id="outline-container-org9f4c2b3" class="outline-4">
<h4 id="orgd147055"><span class="section-number-4">3.1.2</span> Control Design</h4> <h4 id="org9f4c2b3"><span class="section-number-4">3.1.2</span> Control Design</h4>
<div class="outline-text-4" id="text-3-1-2"> <div class="outline-text-4" id="text-3-1-2">
<p> <p>
The controller for each pair of actuator/sensor is: The controller for each pair of actuator/sensor is:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50; <pre class="src src-matlab">w0 = 2*pi*50;
K_iff = <span class="org-type">-</span>5000<span class="org-type">/</span>s <span class="org-type">*</span> (s<span class="org-type">/</span>w0)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>w0); K_iff = -5000/s * (s/w0)/(1 + s/w0);
</pre> </pre>
</div> </div>
@ -912,15 +912,15 @@ The corresponding loop gains are shown in figure <a href="#org1f5c623">31</a>.
</div> </div>
</div> </div>
<div id="outline-container-orgeed5a23" class="outline-4"> <div id="outline-container-orgc596f9b" class="outline-4">
<h4 id="orgeed5a23"><span class="section-number-4">3.1.3</span> Diagonal Controller</h4> <h4 id="orgc596f9b"><span class="section-number-4">3.1.3</span> Diagonal Controller</h4>
<div class="outline-text-4" id="text-3-1-3"> <div class="outline-text-4" id="text-3-1-3">
<p> <p>
We create the diagonal controller and we add a minus sign as we have a positive We create the diagonal controller and we add a minus sign as we have a positive
feedback architecture. feedback architecture.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">K_iff = <span class="org-type">-</span>K_iff<span class="org-type">*</span>eye(6); <pre class="src src-matlab">K_iff = -K_iff*eye(6);
</pre> </pre>
</div> </div>
@ -928,15 +928,15 @@ feedback architecture.
We save the controller for further analysis. We save the controller for further analysis.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_K_iff.mat'</span>, <span class="org-string">'K_iff'</span>); <pre class="src src-matlab">save('./mat/active_damping_K_iff.mat', 'K_iff');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orge4bf8c1" class="outline-3"> <div id="outline-container-org3169fff" class="outline-3">
<h3 id="orge4bf8c1"><span class="section-number-3">3.2</span> Tomography Experiment</h3> <h3 id="org3169fff"><span class="section-number-3">3.2</span> Tomography Experiment</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-3-2">
</div> </div>
<div id="outline-container-org132e692" class="outline-4"> <div id="outline-container-org132e692" class="outline-4">
@ -954,8 +954,8 @@ We initialize elements for the tomography experiment.
We set the IFF controller. We set the IFF controller.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_K_iff.mat'</span>, <span class="org-string">'K_iff'</span>); <pre class="src src-matlab">load('./mat/active_damping_K_iff.mat', 'K_iff');
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'iff'</span>); initializeController('type', 'iff');
</pre> </pre>
</div> </div>
@ -963,8 +963,8 @@ initializeController(<span class="org-string">'type'</span>, <span class="org-st
We change the simulation stop time. We change the simulation stop time.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>); <pre class="src src-matlab">load('mat/conf_simulink.mat');
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'4.5'</span>); set_param(conf_simulink, 'StopTime', '4.5');
</pre> </pre>
</div> </div>
@ -972,7 +972,7 @@ We change the simulation stop time.
And we simulate the system. And we simulate the system.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -982,14 +982,14 @@ Finally, we save the simulation results for further analysis
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">En_iff = En; <pre class="src src-matlab">En_iff = En;
Eg_iff = Eg; Eg_iff = Eg;
save(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span class="org-string">'En_iff'</span>, <span class="org-string">'Eg_iff'</span>, <span class="org-string">'-append'</span>); save('./mat/active_damping_tomo_exp.mat', 'En_iff', 'Eg_iff', '-append');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org9c3f302" class="outline-4"> <div id="outline-container-org8cb0050" class="outline-4">
<h4 id="org9c3f302"><span class="section-number-4">3.2.2</span> Compare with Undamped system</h4> <h4 id="org8cb0050"><span class="section-number-4">3.2.2</span> Compare with Undamped system</h4>
<div class="outline-text-4" id="text-3-2-2"> <div class="outline-text-4" id="text-3-2-2">
<div id="org7547861" class="figure"> <div id="org7547861" class="figure">
@ -1015,8 +1015,8 @@ save(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span
</div> </div>
</div> </div>
<div id="outline-container-orgd53cc4e" class="outline-3"> <div id="outline-container-org4e185a5" class="outline-3">
<h3 id="orgd53cc4e"><span class="section-number-3">3.3</span> Conclusion</h3> <h3 id="org4e185a5"><span class="section-number-3">3.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-3"> <div class="outline-text-3" id="text-3-3">
<div class="important"> <div class="important">
<p> <p>
@ -1051,19 +1051,19 @@ The actuator displacement can be measured with a capacitive sensor for instance.
</p> </p>
</div> </div>
<div id="outline-container-org22d12df" class="outline-3"> <div id="outline-container-org4d1af95" class="outline-3">
<h3 id="org22d12df"><span class="section-number-3">4.1</span> Control Design</h3> <h3 id="org4d1af95"><span class="section-number-3">4.1</span> Control Design</h3>
<div class="outline-text-3" id="text-4-1"> <div class="outline-text-3" id="text-4-1">
</div> </div>
<div id="outline-container-org0b48ca9" class="outline-4"> <div id="outline-container-org431d628" class="outline-4">
<h4 id="org0b48ca9"><span class="section-number-4">4.1.1</span> Plant</h4> <h4 id="org431d628"><span class="section-number-4">4.1.1</span> Plant</h4>
<div class="outline-text-4" id="text-4-1-1"> <div class="outline-text-4" id="text-4-1-1">
<p> <p>
Let&rsquo;s load the undamped plant: Let&rsquo;s load the undamped plant:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_undamped_plants.mat'</span>, <span class="org-string">'G_dvf'</span>); <pre class="src src-matlab">load('./mat/active_damping_undamped_plants.mat', 'G_dvf');
load(<span class="org-string">'./mat/active_damping_plants_variable.mat'</span>, <span class="org-string">'masses'</span>, <span class="org-string">'Gm_dvf'</span>); load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_dvf');
</pre> </pre>
</div> </div>
@ -1080,15 +1080,15 @@ Let&rsquo;s look at the transfer function from actuator forces in the nano-hexap
</div> </div>
</div> </div>
<div id="outline-container-org59030a3" class="outline-4"> <div id="outline-container-orgbf0fb21" class="outline-4">
<h4 id="org59030a3"><span class="section-number-4">4.1.2</span> Control Design</h4> <h4 id="orgbf0fb21"><span class="section-number-4">4.1.2</span> Control Design</h4>
<div class="outline-text-4" id="text-4-1-2"> <div class="outline-text-4" id="text-4-1-2">
<p> <p>
The Direct Velocity Feedback is defined below. The Direct Velocity Feedback is defined below.
A Low pass Filter is added to make the controller transfer function proper. A Low pass Filter is added to make the controller transfer function proper.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">K_dvf = s<span class="org-type">*</span>30000<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10000); <pre class="src src-matlab">K_dvf = s*30000/(1 + s/2/pi/10000);
</pre> </pre>
</div> </div>
@ -1105,14 +1105,14 @@ The obtained loop gains are shown in figure <a href="#org3568457">36</a>.
</div> </div>
</div> </div>
<div id="outline-container-org59cf352" class="outline-4"> <div id="outline-container-org7323c20" class="outline-4">
<h4 id="org59cf352"><span class="section-number-4">4.1.3</span> Diagonal Controller</h4> <h4 id="org7323c20"><span class="section-number-4">4.1.3</span> Diagonal Controller</h4>
<div class="outline-text-4" id="text-4-1-3"> <div class="outline-text-4" id="text-4-1-3">
<p> <p>
We create the diagonal controller and we add a minus sign as we have a positive feedback architecture. We create the diagonal controller and we add a minus sign as we have a positive feedback architecture.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">K_dvf = <span class="org-type">-</span>K_dvf<span class="org-type">*</span>eye(6); <pre class="src src-matlab">K_dvf = -K_dvf*eye(6);
</pre> </pre>
</div> </div>
@ -1120,19 +1120,19 @@ We create the diagonal controller and we add a minus sign as we have a positive
We save the controller for further analysis. We save the controller for further analysis.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_K_dvf.mat'</span>, <span class="org-string">'K_dvf'</span>); <pre class="src src-matlab">save('./mat/active_damping_K_dvf.mat', 'K_dvf');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org76bbcf0" class="outline-3"> <div id="outline-container-orgba6ba0d" class="outline-3">
<h3 id="org76bbcf0"><span class="section-number-3">4.2</span> Tomography Experiment</h3> <h3 id="orgba6ba0d"><span class="section-number-3">4.2</span> Tomography Experiment</h3>
<div class="outline-text-3" id="text-4-2"> <div class="outline-text-3" id="text-4-2">
</div> </div>
<div id="outline-container-orge2c011b" class="outline-4"> <div id="outline-container-org45b5800" class="outline-4">
<h4 id="orge2c011b"><span class="section-number-4">4.2.1</span> Initialize the Simulation</h4> <h4 id="org45b5800"><span class="section-number-4">4.2.1</span> Initialize the Simulation</h4>
<div class="outline-text-4" id="text-4-2-1"> <div class="outline-text-4" id="text-4-2-1">
<p> <p>
We initialize elements for the tomography experiment. We initialize elements for the tomography experiment.
@ -1146,8 +1146,8 @@ We initialize elements for the tomography experiment.
We set the DVF controller. We set the DVF controller.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_K_dvf.mat'</span>, <span class="org-string">'K_dvf'</span>); <pre class="src src-matlab">load('./mat/active_damping_K_dvf.mat', 'K_dvf');
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>); initializeController('type', 'dvf');
</pre> </pre>
</div> </div>
@ -1155,8 +1155,8 @@ initializeController(<span class="org-string">'type'</span>, <span class="org-st
We change the simulation stop time. We change the simulation stop time.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>); <pre class="src src-matlab">load('mat/conf_simulink.mat');
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'4.5'</span>); set_param(conf_simulink, 'StopTime', '4.5');
</pre> </pre>
</div> </div>
@ -1164,7 +1164,7 @@ We change the simulation stop time.
And we simulate the system. And we simulate the system.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -1174,14 +1174,14 @@ Finally, we save the simulation results for further analysis
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">En_dvf = En; <pre class="src src-matlab">En_dvf = En;
Eg_dvf = Eg; Eg_dvf = Eg;
save(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span class="org-string">'En_dvf'</span>, <span class="org-string">'Eg_dvf'</span>, <span class="org-string">'-append'</span>); save('./mat/active_damping_tomo_exp.mat', 'En_dvf', 'Eg_dvf', '-append');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org8cb0050" class="outline-4"> <div id="outline-container-org17042b3" class="outline-4">
<h4 id="org8cb0050"><span class="section-number-4">4.2.2</span> Compare with Undamped system</h4> <h4 id="org17042b3"><span class="section-number-4">4.2.2</span> Compare with Undamped system</h4>
<div class="outline-text-4" id="text-4-2-2"> <div class="outline-text-4" id="text-4-2-2">
<div id="orgfe01054" class="figure"> <div id="orgfe01054" class="figure">
@ -1207,8 +1207,8 @@ save(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span
</div> </div>
</div> </div>
<div id="outline-container-org5f85708" class="outline-3"> <div id="outline-container-orgc7e7a1c" class="outline-3">
<h3 id="org5f85708"><span class="section-number-3">4.3</span> Conclusion</h3> <h3 id="orgc7e7a1c"><span class="section-number-3">4.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-3"> <div class="outline-text-3" id="text-4-3">
<div class="important"> <div class="important">
<p> <p>
@ -1240,19 +1240,19 @@ In Inertial Control, a feedback is applied between the measured <b>absolute</b>
</p> </p>
</div> </div>
<div id="outline-container-org9f4c2b3" class="outline-3"> <div id="outline-container-org4dae7be" class="outline-3">
<h3 id="org9f4c2b3"><span class="section-number-3">5.1</span> Control Design</h3> <h3 id="org4dae7be"><span class="section-number-3">5.1</span> Control Design</h3>
<div class="outline-text-3" id="text-5-1"> <div class="outline-text-3" id="text-5-1">
</div> </div>
<div id="outline-container-org9ec605a" class="outline-4"> <div id="outline-container-org434553c" class="outline-4">
<h4 id="org9ec605a"><span class="section-number-4">5.1.1</span> Plant</h4> <h4 id="org434553c"><span class="section-number-4">5.1.1</span> Plant</h4>
<div class="outline-text-4" id="text-5-1-1"> <div class="outline-text-4" id="text-5-1-1">
<p> <p>
Let&rsquo;s load the undamped plant: Let&rsquo;s load the undamped plant:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_undamped_plants.mat'</span>, <span class="org-string">'G_ine'</span>); <pre class="src src-matlab">load('./mat/active_damping_undamped_plants.mat', 'G_ine');
load(<span class="org-string">'./mat/active_damping_plants_variable.mat'</span>, <span class="org-string">'masses'</span>, <span class="org-string">'Gm_ine'</span>); load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_ine');
</pre> </pre>
</div> </div>
@ -1269,8 +1269,8 @@ Let&rsquo;s look at the transfer function from actuator forces in the nano-hexap
</div> </div>
</div> </div>
<div id="outline-container-org94a1419" class="outline-4"> <div id="outline-container-orgf8547ea" class="outline-4">
<h4 id="org94a1419"><span class="section-number-4">5.1.2</span> Control Design</h4> <h4 id="orgf8547ea"><span class="section-number-4">5.1.2</span> Control Design</h4>
<div class="outline-text-4" id="text-5-1-2"> <div class="outline-text-4" id="text-5-1-2">
<p> <p>
The controller is defined below and the obtained loop gain is shown in figure <a href="#orga2f6fdb">41</a>. The controller is defined below and the obtained loop gain is shown in figure <a href="#orga2f6fdb">41</a>.
@ -1290,14 +1290,14 @@ The controller is defined below and the obtained loop gain is shown in figure <a
</div> </div>
</div> </div>
<div id="outline-container-orgc596f9b" class="outline-4"> <div id="outline-container-orge124d93" class="outline-4">
<h4 id="orgc596f9b"><span class="section-number-4">5.1.3</span> Diagonal Controller</h4> <h4 id="orge124d93"><span class="section-number-4">5.1.3</span> Diagonal Controller</h4>
<div class="outline-text-4" id="text-5-1-3"> <div class="outline-text-4" id="text-5-1-3">
<p> <p>
We create the diagonal controller and we add a minus sign as we have a positive feedback architecture. We create the diagonal controller and we add a minus sign as we have a positive feedback architecture.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">K_ine = <span class="org-type">-</span>K_ine<span class="org-type">*</span>eye(6); <pre class="src src-matlab">K_ine = -K_ine*eye(6);
</pre> </pre>
</div> </div>
@ -1305,15 +1305,15 @@ We create the diagonal controller and we add a minus sign as we have a positive
We save the controller for further analysis. We save the controller for further analysis.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_K_ine.mat'</span>, <span class="org-string">'K_ine'</span>); <pre class="src src-matlab">save('./mat/active_damping_K_ine.mat', 'K_ine');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgdc8e915" class="outline-3"> <div id="outline-container-org81b259a" class="outline-3">
<h3 id="orgdc8e915"><span class="section-number-3">5.2</span> Conclusion</h3> <h3 id="org81b259a"><span class="section-number-3">5.2</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-2"> <div class="outline-text-3" id="text-5-2">
<div class="important"> <div class="important">
<p> <p>
@ -1336,7 +1336,7 @@ Inertial Control should not be used.
<h3 id="org03e2d9a"><span class="section-number-3">6.1</span> Load the plants</h3> <h3 id="org03e2d9a"><span class="section-number-3">6.1</span> Load the plants</h3>
<div class="outline-text-3" id="text-6-1"> <div class="outline-text-3" id="text-6-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_plants.mat'</span>, <span class="org-string">'G'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'G_ine'</span>, <span class="org-string">'G_dvf'</span>); <pre class="src src-matlab">load('./mat/active_damping_plants.mat', 'G', 'G_iff', 'G_ine', 'G_dvf');
</pre> </pre>
</div> </div>
</div> </div>
@ -1414,9 +1414,9 @@ Inertial Control should not be used.
<h3 id="org2658efc"><span class="section-number-3">6.4</span> Tomography Experiment - Frequency Domain analysis</h3> <h3 id="org2658efc"><span class="section-number-3">6.4</span> Tomography Experiment - Frequency Domain analysis</h3>
<div class="outline-text-3" id="text-6-4"> <div class="outline-text-3" id="text-6-4">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span class="org-string">'En'</span>, <span class="org-string">'En_iff'</span>, <span class="org-string">'En_dvf'</span>); <pre class="src src-matlab">load('./mat/active_damping_tomo_exp.mat', 'En', 'En_iff', 'En_dvf');
Fs = 1e3; <span class="org-comment">% Sampling Frequency of the Data</span> Fs = 1e3; % Sampling Frequency of the Data
t = (1<span class="org-type">/</span>Fs)<span class="org-type">*</span>[0<span class="org-type">:</span>length(En(<span class="org-type">:</span>,1))<span class="org-type">-</span>1]; t = (1/Fs)*[0:length(En(:,1))-1];
</pre> </pre>
</div> </div>
@ -1424,12 +1424,12 @@ t = (1<span class="org-type">/</span>Fs)<span class="org-type">*</span>[0<span c
We remove the first 0.5 seconds where the transient behavior is fading out. We remove the first 0.5 seconds where the transient behavior is fading out.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">[<span class="org-type">~</span>, i_start] = min(abs(t <span class="org-type">-</span> 0.5)); <span class="org-comment">% find the indice corresponding to 0.5s</span> <pre class="src src-matlab">[~, i_start] = min(abs(t - 0.5)); % find the indice corresponding to 0.5s
t = t(i_start<span class="org-type">:</span>end) <span class="org-type">-</span> t(i_start); t = t(i_start:end) - t(i_start);
En = En(i_start<span class="org-type">:</span>end, <span class="org-type">:</span>); En = En(i_start:end, :);
En_dvf = En_dvf(i_start<span class="org-type">:</span>end, <span class="org-type">:</span>); En_dvf = En_dvf(i_start:end, :);
En_iff = En_iff(i_start<span class="org-type">:</span>end, <span class="org-type">:</span>); En_iff = En_iff(i_start:end, :);
</pre> </pre>
</div> </div>
@ -1438,7 +1438,7 @@ Window used for <code>pwelch</code> function.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">n_av = 4; <pre class="src src-matlab">n_av = 4;
han_win = hanning(ceil(length(En(<span class="org-type">:</span>, 1))<span class="org-type">/</span>n_av)); han_win = hanning(ceil(length(En(:, 1))/n_av));
</pre> </pre>
</div> </div>
@ -1489,32 +1489,32 @@ This Matlab function is accessible <a href="src/prepareLinearizeIdentification.m
</p> </p>
</div> </div>
<div id="outline-container-orga028903" class="outline-4"> <div id="outline-container-org889b896" class="outline-4">
<h4 id="orga028903">Function Description</h4> <h4 id="org889b896">Function Description</h4>
<div class="outline-text-4" id="text-orga028903"> <div class="outline-text-4" id="text-org889b896">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[]</span> = <span class="org-function-name">prepareLinearizeIdentification</span>(<span class="org-variable-name">args</span>) <pre class="src src-matlab">function [] = prepareLinearizeIdentification(args)
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgbda1bf4" class="outline-4"> <div id="outline-container-orgf77fd6f" class="outline-4">
<h4 id="orgbda1bf4">Optional Parameters</h4> <h4 id="orgf77fd6f">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgbda1bf4"> <div class="outline-text-4" id="text-orgf77fd6f">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">arguments <pre class="src src-matlab">arguments
args.nass_actuator char {mustBeMember(args.nass_actuator,{<span class="org-string">'piezo'</span>, <span class="org-string">'lorentz'</span>})} = <span class="org-string">'piezo'</span> args.nass_actuator char {mustBeMember(args.nass_actuator,{'piezo', 'lorentz'})} = 'piezo'
args.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 <span class="org-comment">% [kg]</span> args.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 % [kg]
<span class="org-keyword">end</span> end
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org2131c58" class="outline-4"> <div id="outline-container-orgef97b73" class="outline-4">
<h4 id="org2131c58">Initialize the Simulation</h4> <h4 id="orgef97b73">Initialize the Simulation</h4>
<div class="outline-text-4" id="text-org2131c58"> <div class="outline-text-4" id="text-orgef97b73">
<p> <p>
We initialize all the stages with the default parameters. We initialize all the stages with the default parameters.
</p> </p>
@ -1534,8 +1534,8 @@ initializeMirror();
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, args.nass_actuator); <pre class="src src-matlab">initializeNanoHexapod('actuator', args.nass_actuator);
initializeSample(<span class="org-string">'mass'</span>, args.sample_mass); initializeSample('mass', args.sample_mass);
</pre> </pre>
</div> </div>
@ -1544,7 +1544,7 @@ We set the references and disturbances to zero.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(); <pre class="src src-matlab">initializeReferences();
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>); initializeDisturbances('enable', false);
</pre> </pre>
</div> </div>
@ -1552,7 +1552,7 @@ initializeDisturbances(<span class="org-string">'enable'</span>, <span class="or
We set the controller type to Open-Loop. We set the controller type to Open-Loop.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>); <pre class="src src-matlab">initializeController('type', 'open-loop');
</pre> </pre>
</div> </div>
@ -1560,7 +1560,7 @@ We set the controller type to Open-Loop.
And we put some gravity. And we put some gravity.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>); <pre class="src src-matlab">initializeSimscapeConfiguration('gravity', true);
</pre> </pre>
</div> </div>
@ -1568,7 +1568,7 @@ And we put some gravity.
We do not need to log any signal. We do not need to log any signal.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>); <pre class="src src-matlab">initializeLoggingConfiguration('log', 'none');
</pre> </pre>
</div> </div>
</div> </div>
@ -1587,33 +1587,33 @@ This Matlab function is accessible <a href="src/prepareTomographyExperiment.m">h
</p> </p>
</div> </div>
<div id="outline-container-org889b896" class="outline-4"> <div id="outline-container-orga6f2ff5" class="outline-4">
<h4 id="org889b896">Function Description</h4> <h4 id="orga6f2ff5">Function Description</h4>
<div class="outline-text-4" id="text-org889b896"> <div class="outline-text-4" id="text-orga6f2ff5">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[]</span> = <span class="org-function-name">prepareTomographyExperiment</span>(<span class="org-variable-name">args</span>) <pre class="src src-matlab">function [] = prepareTomographyExperiment(args)
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgf77fd6f" class="outline-4"> <div id="outline-container-org7ea3ae9" class="outline-4">
<h4 id="orgf77fd6f">Optional Parameters</h4> <h4 id="org7ea3ae9">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgf77fd6f"> <div class="outline-text-4" id="text-org7ea3ae9">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">arguments <pre class="src src-matlab">arguments
args.nass_actuator char {mustBeMember(args.nass_actuator,{<span class="org-string">'piezo'</span>, <span class="org-string">'lorentz'</span>})} = <span class="org-string">'piezo'</span> args.nass_actuator char {mustBeMember(args.nass_actuator,{'piezo', 'lorentz'})} = 'piezo'
args.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 <span class="org-comment">% [kg]</span> args.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 % [kg]
args.Rz_period (1,1) double {mustBeNumeric, mustBePositive} = 1 <span class="org-comment">% [s]</span> args.Rz_period (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s]
<span class="org-keyword">end</span> end
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org45b5800" class="outline-4"> <div id="outline-container-org9ea9c6d" class="outline-4">
<h4 id="org45b5800">Initialize the Simulation</h4> <h4 id="org9ea9c6d">Initialize the Simulation</h4>
<div class="outline-text-4" id="text-org45b5800"> <div class="outline-text-4" id="text-org9ea9c6d">
<p> <p>
We initialize all the stages with the default parameters. We initialize all the stages with the default parameters.
</p> </p>
@ -1633,8 +1633,8 @@ initializeMirror();
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, args.nass_actuator); <pre class="src src-matlab">initializeNanoHexapod('actuator', args.nass_actuator);
initializeSample(<span class="org-string">'mass'</span>, args.sample_mass); initializeSample('mass', args.sample_mass);
</pre> </pre>
</div> </div>
@ -1642,7 +1642,7 @@ initializeSample(<span class="org-string">'mass'</span>, args.sample_mass);
We set the references that corresponds to a tomography experiment. We set the references that corresponds to a tomography experiment.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, args.Rz_period); <pre class="src src-matlab">initializeReferences('Rz_type', 'rotating', 'Rz_period', args.Rz_period);
</pre> </pre>
</div> </div>
@ -1655,7 +1655,7 @@ We set the references that corresponds to a tomography experiment.
Open Loop. Open Loop.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>); <pre class="src src-matlab">initializeController('type', 'open-loop');
</pre> </pre>
</div> </div>
@ -1663,7 +1663,7 @@ Open Loop.
And we put some gravity. And we put some gravity.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>); <pre class="src src-matlab">initializeSimscapeConfiguration('gravity', true);
</pre> </pre>
</div> </div>
@ -1671,7 +1671,7 @@ And we put some gravity.
We log the signals. We log the signals.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>); <pre class="src src-matlab">initializeLoggingConfiguration('log', 'all');
</pre> </pre>
</div> </div>
</div> </div>
@ -1681,7 +1681,7 @@ We log the signals.
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:36</p> <p class="date">Created: 2020-05-05 mar. 10:34</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:35 --> <!-- 2020-05-05 mar. 10:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>HAC-LAC applied on the Simscape Model</title> <title>HAC-LAC applied on the Simscape Model</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -94,8 +94,8 @@ initializeMirror();
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span>); <pre class="src src-matlab">initializeNanoHexapod('actuator', 'piezo');
initializeSample(<span class="org-string">'mass'</span>, 1); initializeSample('mass', 1);
</pre> </pre>
</div> </div>
@ -103,7 +103,7 @@ initializeSample(<span class="org-string">'mass'</span>, 1);
We set the references that corresponds to a tomography experiment. We set the references that corresponds to a tomography experiment.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1); <pre class="src src-matlab">initializeReferences('Rz_type', 'rotating', 'Rz_period', 1);
</pre> </pre>
</div> </div>
@ -116,7 +116,7 @@ We set the references that corresponds to a tomography experiment.
Open Loop. Open Loop.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>); <pre class="src src-matlab">initializeController('type', 'open-loop');
</pre> </pre>
</div> </div>
@ -124,7 +124,7 @@ Open Loop.
And we put some gravity. And we put some gravity.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>); <pre class="src src-matlab">initializeSimscapeConfiguration('gravity', true);
</pre> </pre>
</div> </div>
@ -132,7 +132,7 @@ And we put some gravity.
We log the signals. We log the signals.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>); <pre class="src src-matlab">initializeLoggingConfiguration('log', 'all');
</pre> </pre>
</div> </div>
</div> </div>
@ -154,18 +154,18 @@ The design of the associated decentralized controller is explained in <a href="c
<h3 id="orga860160"><span class="section-number-3">2.1</span> Identification</h3> <h3 id="orga860160"><span class="section-number-3">2.1</span> Identification</h3>
<div class="outline-text-3" id="text-2-1"> <div class="outline-text-3" id="text-2-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span> <pre class="src src-matlab">%% Name of the Simulink File
mdl = <span class="org-string">'nass_model'</span>; mdl = 'nass_model';
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span> io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Dnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Motion Outputs</span> io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Relative Motion Outputs
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span> %% Run the linearization
G_dvf = linearize(mdl, io, 0); G_dvf = linearize(mdl, io, 0);
G_dvf.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>}; G_dvf.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G_dvf.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-string">'Dnlm2'</span>, <span class="org-string">'Dnlm3'</span>, <span class="org-string">'Dnlm4'</span>, <span class="org-string">'Dnlm5'</span>, <span class="org-string">'Dnlm6'</span>}; G_dvf.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'};
</pre> </pre>
</div> </div>
</div> </div>
@ -181,12 +181,12 @@ G_dvf.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-st
<h3 id="orgafbd7d0"><span class="section-number-3">2.4</span> Controller and Loop Gain</h3> <h3 id="orgafbd7d0"><span class="section-number-3">2.4</span> Controller and Loop Gain</h3>
<div class="outline-text-3" id="text-2-4"> <div class="outline-text-3" id="text-2-4">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">K_dvf = s<span class="org-type">*</span>15000<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10000); <pre class="src src-matlab">K_dvf = s*15000/(1 + s/2/pi/10000);
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">K_dvf = <span class="org-type">-</span>K_dvf<span class="org-type">*</span>eye(6); <pre class="src src-matlab">K_dvf = -K_dvf*eye(6);
</pre> </pre>
</div> </div>
</div> </div>
@ -198,23 +198,23 @@ G_dvf.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-st
<div class="outline-text-2" id="text-3"> <div class="outline-text-2" id="text-3">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">K_dvf_backup = K_dvf; <pre class="src src-matlab">K_dvf_backup = K_dvf;
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>); initializeController('type', 'hac-dvf');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">masses = [1, 10, 50]; <span class="org-comment">% [kg]</span> <pre class="src src-matlab">masses = [1, 10, 50]; % [kg]
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span> <pre class="src src-matlab">%% Name of the Simulink File
mdl = <span class="org-string">'nass_model'</span>; mdl = 'nass_model';
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span> io(io_i) = linio([mdl, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span> io(io_i) = linio([mdl, '/Tracking Error'], 1, 'output', [], 'En'); io_i = io_i + 1; % Position Errror
</pre> </pre>
</div> </div>
</div> </div>
@ -233,23 +233,23 @@ io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <s
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>); <pre class="src src-matlab">initializeController('type', 'hac-dvf');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span> <pre class="src src-matlab">%% Name of the Simulink File
mdl = <span class="org-string">'nass_model'</span>; mdl = 'nass_model';
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span> %% Input/Output definition
clear io; io_i = 1; clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span> io(io_i) = linio([mdl, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span> io(io_i) = linio([mdl, '/Tracking Error'], 1, 'output', [], 'En'); io_i = io_i + 1; % Position Errror
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span> %% Run the linearization
G = linearize(mdl, io, 0); G = linearize(mdl, io, 0);
G.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">'Ey'</span>, <span class="org-string">'Ez'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>}; G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
</pre> </pre>
</div> </div>
@ -257,10 +257,10 @@ G.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">'
The minus sine is put here because there is already a minus sign included due to the computation of the position error. The minus sine is put here because there is already a minus sign included due to the computation of the position error.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>); <pre class="src src-matlab">load('mat/stages.mat', 'nano_hexapod');
Gx = <span class="org-type">-</span>G<span class="org-type">*</span>inv(nano_hexapod.J<span class="org-type">'</span>); Gx = -G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
</pre> </pre>
</div> </div>
</div> </div>
@ -280,29 +280,29 @@ The controller consists of:
</ul> </ul>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>15; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span> <pre class="src src-matlab">wc = 2*pi*15; % Bandwidth Bandwidth [rad/s]
h = 1.5; <span class="org-comment">% Lead parameter</span> h = 1.5; % Lead parameter
Kx = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> wc<span class="org-type">/</span>s <span class="org-type">*</span> ((s<span class="org-type">/</span>wc<span class="org-type">*</span>2 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>wc<span class="org-type">*</span>2)) <span class="org-type">*</span> (1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>2)); Kx = (1/h) * (1 + s/wc*h)/(1 + s/wc/h) * wc/s * ((s/wc*2 + 1)/(s/wc*2)) * (1/(1 + s/wc/2));
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span> % Normalization of the gain of have a loop gain of 1 at frequency wc
Kx = Kx<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gx<span class="org-type">*</span>Kx, wc)))); Kx = Kx.*diag(1./diag(abs(freqresp(Gx*Kx, wc))));
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">isstable(feedback(Gx<span class="org-type">*</span>Kx, eye(6), <span class="org-type">-</span>1)) <pre class="src src-matlab">isstable(feedback(Gx*Kx, eye(6), -1))
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kx = inv(nano_hexapod.J<span class="org-type">'</span>)<span class="org-type">*</span>Kx; <pre class="src src-matlab">Kx = inv(nano_hexapod.kinematics.J')*Kx;
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">isstable(feedback(G<span class="org-type">*</span>Kx, eye(6), 1)) <pre class="src src-matlab">isstable(feedback(G*Kx, eye(6), 1))
</pre> </pre>
</div> </div>
</div> </div>
@ -313,8 +313,8 @@ Kx = Kx<span class="org-type">.*</span>diag(1<span class="org-type">./</span>dia
<h2 id="orgb7ffa65"><span class="section-number-2">5</span> Simulation</h2> <h2 id="orgb7ffa65"><span class="section-number-2">5</span> Simulation</h2>
<div class="outline-text-2" id="text-5"> <div class="outline-text-2" id="text-5">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>); <pre class="src src-matlab">load('mat/conf_simulink.mat');
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>); set_param(conf_simulink, 'StopTime', '2');
</pre> </pre>
</div> </div>
@ -322,13 +322,13 @@ Kx = Kx<span class="org-type">.*</span>diag(1<span class="org-type">./</span>dia
And we simulate the system. And we simulate the system.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">hac_dvf = simout; <pre class="src src-matlab">hac_dvf = simout;
save(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="org-string">'hac_dvf'</span>); save('./mat/tomo_exp_hac_lac.mat', 'hac_dvf');
</pre> </pre>
</div> </div>
</div> </div>
@ -341,8 +341,8 @@ save(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="
Let&rsquo;s load the simulation when no control is applied. Let&rsquo;s load the simulation when no control is applied.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>); <pre class="src src-matlab">load('./mat/experiment_tomography.mat', 'tomo_align_dist');
load(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="org-string">'hac_dvf'</span>); load('./mat/tomo_exp_hac_lac.mat', 'hac_dvf');
</pre> </pre>
</div> </div>
</div> </div>
@ -350,7 +350,7 @@ load(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p> <p class="date">Created: 2020-05-05 mar. 10:34</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 14:32 --> <!-- 2020-05-05 mar. 10:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Decentralize control to add virtual mass</title> <title>Decentralize control to add virtual mass</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -39,16 +39,16 @@
<li><a href="#org35a3822">2. Identification</a></li> <li><a href="#org35a3822">2. Identification</a></li>
<li><a href="#orgd6fc719">3. Adding Virtual Mass in the Leg&rsquo;s Space</a> <li><a href="#orgd6fc719">3. Adding Virtual Mass in the Leg&rsquo;s Space</a>
<ul> <ul>
<li><a href="#org9ed2d4c">3.1. Plant</a></li> <li><a href="#orga27c9a0">3.1. Plant</a></li>
<li><a href="#org4f03a34">3.2. Controller Design</a></li> <li><a href="#orgcbce41a">3.2. Controller Design</a></li>
<li><a href="#org2fe0ce0">3.3. Identification of the Primary Plant</a></li> <li><a href="#orgca1f525">3.3. Identification of the Primary Plant</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgc9131d0">4. Adding Virtual Mass in the Task Space</a> <li><a href="#orgc9131d0">4. Adding Virtual Mass in the Task Space</a>
<ul> <ul>
<li><a href="#orga27c9a0">4.1. Plant</a></li> <li><a href="#orgdbe6a25">4.1. Plant</a></li>
<li><a href="#orgcbce41a">4.2. Controller Design</a></li> <li><a href="#org571922f">4.2. Controller Design</a></li>
<li><a href="#orgca1f525">4.3. Identification of the Primary Plant</a></li> <li><a href="#org4960701">4.3. Identification of the Primary Plant</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -69,10 +69,10 @@ initializeAxisc();
initializeMirror(); initializeMirror();
initializeSimscapeConfiguration(); initializeSimscapeConfiguration();
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>); initializeDisturbances('enable', false);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>); initializeLoggingConfiguration('log', 'none');
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>); initializeController('type', 'hac-dvf');
</pre> </pre>
</div> </div>
@ -80,7 +80,7 @@ initializeController(<span class="org-string">'type'</span>, <span class="org-st
The nano-hexapod has the following leg&rsquo;s stiffness and damping. The nano-hexapod has the following leg&rsquo;s stiffness and damping.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'k'</span>, 1e5, <span class="org-string">'c'</span>, 2e2); <pre class="src src-matlab">initializeNanoHexapod('k', 1e5, 'c', 2e2);
</pre> </pre>
</div> </div>
@ -88,7 +88,7 @@ The nano-hexapod has the following leg&rsquo;s stiffness and damping.
We set the stiffness of the payload fixation: We set the stiffness of the payload fixation:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kp = 1e8; <span class="org-comment">% [N/m]</span> <pre class="src src-matlab">Kp = 1e8; % [N/m]
</pre> </pre>
</div> </div>
</div> </div>
@ -115,8 +115,8 @@ Identification of the Primary plant without virtual add of mass
<h2 id="orgd6fc719"><span class="section-number-2">3</span> Adding Virtual Mass in the Leg&rsquo;s Space</h2> <h2 id="orgd6fc719"><span class="section-number-2">3</span> Adding Virtual Mass in the Leg&rsquo;s Space</h2>
<div class="outline-text-2" id="text-3"> <div class="outline-text-2" id="text-3">
</div> </div>
<div id="outline-container-org9ed2d4c" class="outline-3"> <div id="outline-container-orga27c9a0" class="outline-3">
<h3 id="org9ed2d4c"><span class="section-number-3">3.1</span> Plant</h3> <h3 id="orga27c9a0"><span class="section-number-3">3.1</span> Plant</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<div id="org98e7ba8" class="figure"> <div id="org98e7ba8" class="figure">
@ -127,11 +127,11 @@ Identification of the Primary plant without virtual add of mass
</div> </div>
</div> </div>
<div id="outline-container-org4f03a34" class="outline-3"> <div id="outline-container-orgcbce41a" class="outline-3">
<h3 id="org4f03a34"><span class="section-number-3">3.2</span> Controller Design</h3> <h3 id="orgcbce41a"><span class="section-number-3">3.2</span> Controller Design</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-3-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kdvf = 10<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>500)<span class="org-type">^</span>2<span class="org-type">*</span>eye(6); <pre class="src src-matlab">Kdvf = 10*s^2/(1+s/2/pi/500)^2*eye(6);
</pre> </pre>
</div> </div>
@ -144,8 +144,8 @@ Identification of the Primary plant without virtual add of mass
</div> </div>
</div> </div>
<div id="outline-container-org2fe0ce0" class="outline-3"> <div id="outline-container-orgca1f525" class="outline-3">
<h3 id="org2fe0ce0"><span class="section-number-3">3.3</span> Identification of the Primary Plant</h3> <h3 id="orgca1f525"><span class="section-number-3">3.3</span> Identification of the Primary Plant</h3>
<div class="outline-text-3" id="text-3-3"> <div class="outline-text-3" id="text-3-3">
<div id="orgd49505e" class="figure"> <div id="orgd49505e" class="figure">
@ -168,8 +168,8 @@ Identification of the Primary plant without virtual add of mass
<h2 id="orgc9131d0"><span class="section-number-2">4</span> Adding Virtual Mass in the Task Space</h2> <h2 id="orgc9131d0"><span class="section-number-2">4</span> Adding Virtual Mass in the Task Space</h2>
<div class="outline-text-2" id="text-4"> <div class="outline-text-2" id="text-4">
</div> </div>
<div id="outline-container-orga27c9a0" class="outline-3"> <div id="outline-container-orgdbe6a25" class="outline-3">
<h3 id="orga27c9a0"><span class="section-number-3">4.1</span> Plant</h3> <h3 id="orgdbe6a25"><span class="section-number-3">4.1</span> Plant</h3>
<div class="outline-text-3" id="text-4-1"> <div class="outline-text-3" id="text-4-1">
<p> <p>
Let&rsquo;s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\mathcal{X}}\): Let&rsquo;s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\mathcal{X}}\):
@ -185,11 +185,11 @@ Let&rsquo;s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\m
</div> </div>
</div> </div>
<div id="outline-container-orgcbce41a" class="outline-3"> <div id="outline-container-org571922f" class="outline-3">
<h3 id="orgcbce41a"><span class="section-number-3">4.2</span> Controller Design</h3> <h3 id="org571922f"><span class="section-number-3">4.2</span> Controller Design</h3>
<div class="outline-text-3" id="text-4-2"> <div class="outline-text-3" id="text-4-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">KmX = (s<span class="org-type">^</span>2<span class="org-type">*</span>1<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>500)<span class="org-type">^</span>2<span class="org-type">*</span>diag([1 1 50 0 0 0])); <pre class="src src-matlab">KmX = (s^2*1/(1+s/2/pi/500)^2*diag([1 1 50 0 0 0]));
</pre> </pre>
</div> </div>
@ -201,14 +201,14 @@ Let&rsquo;s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\m
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kdvf = inv(nano_hexapod.J<span class="org-type">'</span>)<span class="org-type">*</span>KmX<span class="org-type">*</span>inv(nano_hexapod.J); <pre class="src src-matlab">Kdvf = inv(nano_hexapod.kinematics.J')*KmX*inv(nano_hexapod.kinematics.J);
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgca1f525" class="outline-3"> <div id="outline-container-org4960701" class="outline-3">
<h3 id="orgca1f525"><span class="section-number-3">4.3</span> Identification of the Primary Plant</h3> <h3 id="org4960701"><span class="section-number-3">4.3</span> Identification of the Primary Plant</h3>
<div class="outline-text-3" id="text-4-3"> <div class="outline-text-3" id="text-4-3">
<div id="orge1df87b" class="figure"> <div id="orge1df87b" class="figure">
@ -229,7 +229,7 @@ Let&rsquo;s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\m
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 14:32</p> <p class="date">Created: 2020-05-05 mar. 10:34</p>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 10:25 --> <!-- 2020-05-05 mar. 10:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Simulation of Scientific Experiments</title> <title>Simulation of Scientific Experiments</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -30,37 +30,37 @@
<li><a href="#org03b2a76">1. Simscape Model</a></li> <li><a href="#org03b2a76">1. Simscape Model</a></li>
<li><a href="#org6ed78a0">2. Tomography Experiment with no disturbances</a> <li><a href="#org6ed78a0">2. Tomography Experiment with no disturbances</a>
<ul> <ul>
<li><a href="#orgdebc736">2.1. Simulation Setup</a></li> <li><a href="#orge3f0741">2.1. Simulation Setup</a></li>
<li><a href="#orge0e2e88">2.2. Analysis</a></li> <li><a href="#org1836f98">2.2. Analysis</a></li>
<li><a href="#org38ba07f">2.3. Conclusion</a></li> <li><a href="#org8cf54cb">2.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org16d8e58">3. Tomography Experiment with included perturbations</a> <li><a href="#org16d8e58">3. Tomography Experiment with included perturbations</a>
<ul> <ul>
<li><a href="#orgc2a0926">3.1. Simulation Setup</a></li> <li><a href="#org9d04c8b">3.1. Simulation Setup</a></li>
<li><a href="#org388be58">3.2. Analysis</a></li> <li><a href="#org746ee08">3.2. Analysis</a></li>
<li><a href="#org51b3617">3.3. Conclusion</a></li> <li><a href="#org42ba456">3.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org7202245">4. Tomography Experiment with Ty raster scans</a> <li><a href="#org7202245">4. Tomography Experiment with Ty raster scans</a>
<ul> <ul>
<li><a href="#org94c3461">4.1. Simulation Setup</a></li> <li><a href="#org0b606be">4.1. Simulation Setup</a></li>
<li><a href="#org65d4246">4.2. Analysis</a></li> <li><a href="#org2e0557a">4.2. Analysis</a></li>
<li><a href="#org41a2a1d">4.3. Conclusion</a></li> <li><a href="#org6c8cc28">4.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org72f01ab">5. Tomography when the micro-hexapod is not centered</a> <li><a href="#org72f01ab">5. Tomography when the micro-hexapod is not centered</a>
<ul> <ul>
<li><a href="#org8a5fae6">5.1. Simulation Setup</a></li> <li><a href="#org98d14be">5.1. Simulation Setup</a></li>
<li><a href="#orgf8b4f39">5.2. Analysis</a></li> <li><a href="#org6dc8ae4">5.2. Analysis</a></li>
<li><a href="#orgdd34703">5.3. Conclusion</a></li> <li><a href="#orgb632268">5.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org8fa1632">6. Raster Scans with the translation stage</a> <li><a href="#org8fa1632">6. Raster Scans with the translation stage</a>
<ul> <ul>
<li><a href="#orge3f0741">6.1. Simulation Setup</a></li> <li><a href="#orgdd9a5de">6.1. Simulation Setup</a></li>
<li><a href="#org1836f98">6.2. Analysis</a></li> <li><a href="#orgad49d2c">6.2. Analysis</a></li>
<li><a href="#org8cf54cb">6.3. Conclusion</a></li> <li><a href="#org57c774f">6.3. Conclusion</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -103,8 +103,8 @@ The document in organized as follow:
We load the shared simulink configuration and we set the <code>StopTime</code>. We load the shared simulink configuration and we set the <code>StopTime</code>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>); <pre class="src src-matlab">load('mat/conf_simulink.mat');
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>); set_param(conf_simulink, 'StopTime', '2');
</pre> </pre>
</div> </div>
@ -121,8 +121,8 @@ initializeRz();
initializeMicroHexapod(); initializeMicroHexapod();
initializeAxisc(); initializeAxisc();
initializeMirror(); initializeMirror();
initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>); initializeNanoHexapod('type', 'rigid');
initializeSample(<span class="org-string">'mass'</span>, 1); initializeSample('mass', 1);
</pre> </pre>
</div> </div>
@ -130,7 +130,7 @@ initializeSample(<span class="org-string">'mass'</span>, 1);
No controller is used (Open Loop). No controller is used (Open Loop).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>); <pre class="src src-matlab">initializeController('type', 'open-loop');
</pre> </pre>
</div> </div>
@ -138,7 +138,7 @@ No controller is used (Open Loop).
We don&rsquo;t gravity. We don&rsquo;t gravity.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">false</span>); <pre class="src src-matlab">initializeSimscapeConfiguration('gravity', false);
</pre> </pre>
</div> </div>
@ -146,7 +146,7 @@ We don&rsquo;t gravity.
We log the signals for further analysis. We log the signals for further analysis.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>); <pre class="src src-matlab">initializeLoggingConfiguration('log', 'all');
</pre> </pre>
</div> </div>
</div> </div>
@ -163,20 +163,20 @@ In this section, a tomography experiment is performed with the sample aligned wi
No disturbance is included. No disturbance is included.
</p> </p>
</div> </div>
<div id="outline-container-orgdebc736" class="outline-3"> <div id="outline-container-orge3f0741" class="outline-3">
<h3 id="orgdebc736"><span class="section-number-3">2.1</span> Simulation Setup</h3> <h3 id="orge3f0741"><span class="section-number-3">2.1</span> Simulation Setup</h3>
<div class="outline-text-3" id="text-2-1"> <div class="outline-text-3" id="text-2-1">
<p> <p>
And we initialize the disturbances to be equal to zero. And we initialize the disturbances to be equal to zero.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(... <pre class="src src-matlab">initializeDisturbances(...
<span class="org-string">'Dwx'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - X direction</span> 'Dwx', false, ... % Ground Motion - X direction
<span class="org-string">'Dwy'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span> 'Dwy', false, ... % Ground Motion - Y direction
<span class="org-string">'Dwz'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span> 'Dwz', false, ... % Ground Motion - Z direction
<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - X direction</span> 'Fty_x', false, ... % Translation Stage - X direction
<span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span> 'Fty_z', false, ... % Translation Stage - Z direction
<span class="org-string">'Frz_z'</span>, <span class="org-constant">false</span> ...<span class="org-comment"> % Spindle - Z direction</span> 'Frz_z', false ... % Spindle - Z direction
); );
</pre> </pre>
</div> </div>
@ -186,7 +186,7 @@ We initialize the reference path for all the stages.
All stage is set to its zero position except the Spindle which is rotating at 60rpm. All stage is set to its zero position except the Spindle which is rotating at 60rpm.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1); <pre class="src src-matlab">initializeReferences('Rz_type', 'rotating', 'Rz_period', 1);
</pre> </pre>
</div> </div>
@ -194,7 +194,7 @@ All stage is set to its zero position except the Spindle which is rotating at 60
We simulate the model. We simulate the model.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -203,17 +203,17 @@ And we save the obtained data.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">tomo_align_no_dist = simout; <pre class="src src-matlab">tomo_align_no_dist = simout;
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_no_dist'</span>, <span class="org-string">'-append'</span>); save('./mat/experiment_tomography.mat', 'tomo_align_no_dist', '-append');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orge0e2e88" class="outline-3"> <div id="outline-container-org1836f98" class="outline-3">
<h3 id="orge0e2e88"><span class="section-number-3">2.2</span> Analysis</h3> <h3 id="org1836f98"><span class="section-number-3">2.2</span> Analysis</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_no_dist'</span>); <pre class="src src-matlab">load('./mat/experiment_tomography.mat', 'tomo_align_no_dist');
</pre> </pre>
</div> </div>
@ -226,8 +226,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
</div> </div>
</div> </div>
<div id="outline-container-org38ba07f" class="outline-3"> <div id="outline-container-org8cf54cb" class="outline-3">
<h3 id="org38ba07f"><span class="section-number-3">2.3</span> Conclusion</h3> <h3 id="org8cf54cb"><span class="section-number-3">2.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-3"> <div class="outline-text-3" id="text-2-3">
<div class="important"> <div class="important">
<p> <p>
@ -251,20 +251,20 @@ In this section, we also perform a tomography experiment with the sample&rsquo;s
However this time, we include perturbations such as ground motion and stage vibrations. However this time, we include perturbations such as ground motion and stage vibrations.
</p> </p>
</div> </div>
<div id="outline-container-orgc2a0926" class="outline-3"> <div id="outline-container-org9d04c8b" class="outline-3">
<h3 id="orgc2a0926"><span class="section-number-3">3.1</span> Simulation Setup</h3> <h3 id="org9d04c8b"><span class="section-number-3">3.1</span> Simulation Setup</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<p> <p>
We now activate the disturbances. We now activate the disturbances.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(... <pre class="src src-matlab">initializeDisturbances(...
<span class="org-string">'Dwx'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - X direction</span> 'Dwx', true, ... % Ground Motion - X direction
<span class="org-string">'Dwy'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span> 'Dwy', true, ... % Ground Motion - Y direction
<span class="org-string">'Dwz'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span> 'Dwz', true, ... % Ground Motion - Z direction
<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - X direction</span> 'Fty_x', false, ... % Translation Stage - X direction
<span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span> 'Fty_z', false, ... % Translation Stage - Z direction
<span class="org-string">'Frz_z'</span>, <span class="org-constant">true</span> ...<span class="org-comment"> % Spindle - Z direction</span> 'Frz_z', true ... % Spindle - Z direction
); );
</pre> </pre>
</div> </div>
@ -274,7 +274,7 @@ We initialize the reference path for all the stages.
All stage is set to its zero position except the Spindle which is rotating at 60rpm. All stage is set to its zero position except the Spindle which is rotating at 60rpm.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1); <pre class="src src-matlab">initializeReferences('Rz_type', 'rotating', 'Rz_period', 1);
</pre> </pre>
</div> </div>
@ -282,7 +282,7 @@ All stage is set to its zero position except the Spindle which is rotating at 60
We simulate the model. We simulate the model.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -291,17 +291,17 @@ And we save the obtained data.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">tomo_align_dist = simout; <pre class="src src-matlab">tomo_align_dist = simout;
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>, <span class="org-string">'-append'</span>); save('./mat/experiment_tomography.mat', 'tomo_align_dist', '-append');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org388be58" class="outline-3"> <div id="outline-container-org746ee08" class="outline-3">
<h3 id="org388be58"><span class="section-number-3">3.2</span> Analysis</h3> <h3 id="org746ee08"><span class="section-number-3">3.2</span> Analysis</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-3-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>, <span class="org-string">'tomo_align_no_dist'</span>); <pre class="src src-matlab">load('./mat/experiment_tomography.mat', 'tomo_align_dist', 'tomo_align_no_dist');
</pre> </pre>
</div> </div>
@ -314,8 +314,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
</div> </div>
</div> </div>
<div id="outline-container-org51b3617" class="outline-3"> <div id="outline-container-org42ba456" class="outline-3">
<h3 id="org51b3617"><span class="section-number-3">3.3</span> Conclusion</h3> <h3 id="org42ba456"><span class="section-number-3">3.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-3"> <div class="outline-text-3" id="text-3-3">
<div class="important"> <div class="important">
<p> <p>
@ -338,20 +338,20 @@ In this section, we also perform a tomography experiment with scans of the Trans
All the perturbations are included. All the perturbations are included.
</p> </p>
</div> </div>
<div id="outline-container-org94c3461" class="outline-3"> <div id="outline-container-org0b606be" class="outline-3">
<h3 id="org94c3461"><span class="section-number-3">4.1</span> Simulation Setup</h3> <h3 id="org0b606be"><span class="section-number-3">4.1</span> Simulation Setup</h3>
<div class="outline-text-3" id="text-4-1"> <div class="outline-text-3" id="text-4-1">
<p> <p>
We now activate the disturbances. We now activate the disturbances.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(... <pre class="src src-matlab">initializeDisturbances(...
<span class="org-string">'Dwx'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - X direction</span> 'Dwx', true, ... % Ground Motion - X direction
<span class="org-string">'Dwy'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span> 'Dwy', true, ... % Ground Motion - Y direction
<span class="org-string">'Dwz'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span> 'Dwz', true, ... % Ground Motion - Z direction
<span class="org-string">'Fty_x'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Translation Stage - X direction</span> 'Fty_x', true, ... % Translation Stage - X direction
<span class="org-string">'Fty_z'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span> 'Fty_z', true, ... % Translation Stage - Z direction
<span class="org-string">'Frz_z'</span>, <span class="org-constant">true</span> ...<span class="org-comment"> % Spindle - Z direction</span> 'Frz_z', true ... % Spindle - Z direction
); );
</pre> </pre>
</div> </div>
@ -362,7 +362,7 @@ The Spindle which is rotating at 60rpm and the translation stage not moving as i
However, vibrations of the Ty stage are included. However, vibrations of the Ty stage are included.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1); <pre class="src src-matlab">initializeReferences('Rz_type', 'rotating', 'Rz_period', 1);
</pre> </pre>
</div> </div>
@ -370,7 +370,7 @@ However, vibrations of the Ty stage are included.
We simulate the model. We simulate the model.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -379,17 +379,17 @@ And we save the obtained data.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">scans_rz_align_dist = simout; <pre class="src src-matlab">scans_rz_align_dist = simout;
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'scans_rz_align_dist'</span>, <span class="org-string">'-append'</span>); save('./mat/experiment_tomography.mat', 'scans_rz_align_dist', '-append');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org65d4246" class="outline-3"> <div id="outline-container-org2e0557a" class="outline-3">
<h3 id="org65d4246"><span class="section-number-3">4.2</span> Analysis</h3> <h3 id="org2e0557a"><span class="section-number-3">4.2</span> Analysis</h3>
<div class="outline-text-3" id="text-4-2"> <div class="outline-text-3" id="text-4-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'scans_rz_align_dist'</span>); <pre class="src src-matlab">load('./mat/experiment_tomography.mat', 'scans_rz_align_dist');
</pre> </pre>
</div> </div>
@ -402,8 +402,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
</div> </div>
</div> </div>
<div id="outline-container-org41a2a1d" class="outline-3"> <div id="outline-container-org6c8cc28" class="outline-3">
<h3 id="org41a2a1d"><span class="section-number-3">4.3</span> Conclusion</h3> <h3 id="org6c8cc28"><span class="section-number-3">4.3</span> Conclusion</h3>
</div> </div>
</div> </div>
@ -422,14 +422,14 @@ This is due to the fact that the micro-hexapod has performed some displacement.
No disturbances are included. No disturbances are included.
</p> </p>
</div> </div>
<div id="outline-container-org8a5fae6" class="outline-3"> <div id="outline-container-org98d14be" class="outline-3">
<h3 id="org8a5fae6"><span class="section-number-3">5.1</span> Simulation Setup</h3> <h3 id="org98d14be"><span class="section-number-3">5.1</span> Simulation Setup</h3>
<div class="outline-text-3" id="text-5-1"> <div class="outline-text-3" id="text-5-1">
<p> <p>
We first set the wanted translation of the Micro Hexapod. We first set the wanted translation of the Micro Hexapod.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">P_micro_hexapod = [0.01; 0; 0]; <span class="org-comment">% [m]</span> <pre class="src src-matlab">P_micro_hexapod = [0.01; 0; 0]; % [m]
</pre> </pre>
</div> </div>
@ -437,7 +437,7 @@ We first set the wanted translation of the Micro Hexapod.
We initialize the reference path. We initialize the reference path.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Dh_pos'</span>, [P_micro_hexapod; 0; 0; 0], <span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1); <pre class="src src-matlab">initializeReferences('Dh_pos', [P_micro_hexapod; 0; 0; 0], 'Rz_type', 'rotating', 'Rz_period', 1);
</pre> </pre>
</div> </div>
@ -445,7 +445,7 @@ We initialize the reference path.
We initialize the stages. We initialize the stages.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeMicroHexapod(<span class="org-string">'AP'</span>, P_micro_hexapod); <pre class="src src-matlab">initializeMicroHexapod('AP', P_micro_hexapod);
</pre> </pre>
</div> </div>
@ -454,12 +454,12 @@ And we initialize the disturbances to zero.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(... <pre class="src src-matlab">initializeDisturbances(...
<span class="org-string">'Dwx'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - X direction</span> 'Dwx', false, ... % Ground Motion - X direction
<span class="org-string">'Dwy'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span> 'Dwy', false, ... % Ground Motion - Y direction
<span class="org-string">'Dwz'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span> 'Dwz', false, ... % Ground Motion - Z direction
<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - X direction</span> 'Fty_x', false, ... % Translation Stage - X direction
<span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span> 'Fty_z', false, ... % Translation Stage - Z direction
<span class="org-string">'Frz_z'</span>, <span class="org-constant">false</span> ...<span class="org-comment"> % Spindle - Z direction</span> 'Frz_z', false ... % Spindle - Z direction
); );
</pre> </pre>
</div> </div>
@ -468,7 +468,7 @@ And we initialize the disturbances to zero.
We simulate the model. We simulate the model.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -477,17 +477,17 @@ And we save the obtained data.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">tomo_not_align = simout; <pre class="src src-matlab">tomo_not_align = simout;
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_not_align'</span>, <span class="org-string">'-append'</span>); save('./mat/experiment_tomography.mat', 'tomo_not_align', '-append');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgf8b4f39" class="outline-3"> <div id="outline-container-org6dc8ae4" class="outline-3">
<h3 id="orgf8b4f39"><span class="section-number-3">5.2</span> Analysis</h3> <h3 id="org6dc8ae4"><span class="section-number-3">5.2</span> Analysis</h3>
<div class="outline-text-3" id="text-5-2"> <div class="outline-text-3" id="text-5-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_not_align'</span>, <span class="org-string">'tomo_align_no_dist'</span>); <pre class="src src-matlab">load('./mat/experiment_tomography.mat', 'tomo_not_align', 'tomo_align_no_dist');
</pre> </pre>
</div> </div>
@ -500,8 +500,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
</div> </div>
</div> </div>
<div id="outline-container-orgdd34703" class="outline-3"> <div id="outline-container-orgb632268" class="outline-3">
<h3 id="orgdd34703"><span class="section-number-3">5.3</span> Conclusion</h3> <h3 id="orgb632268"><span class="section-number-3">5.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-3"> <div class="outline-text-3" id="text-5-3">
<div class="important"> <div class="important">
<p> <p>
@ -524,8 +524,8 @@ This is mainly due to finite stiffness of the elements.
In this section, scans with the translation stage are performed. In this section, scans with the translation stage are performed.
</p> </p>
</div> </div>
<div id="outline-container-orge3f0741" class="outline-3"> <div id="outline-container-orgdd9a5de" class="outline-3">
<h3 id="orge3f0741"><span class="section-number-3">6.1</span> Simulation Setup</h3> <h3 id="orgdd9a5de"><span class="section-number-3">6.1</span> Simulation Setup</h3>
<div class="outline-text-3" id="text-6-1"> <div class="outline-text-3" id="text-6-1">
<p> <p>
We initialize the stages. We initialize the stages.
@ -539,8 +539,8 @@ initializeRz();
initializeMicroHexapod(); initializeMicroHexapod();
initializeAxisc(); initializeAxisc();
initializeMirror(); initializeMirror();
initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>); initializeNanoHexapod('type', 'rigid');
initializeSample(<span class="org-string">'mass'</span>, 1); initializeSample('mass', 1);
</pre> </pre>
</div> </div>
@ -549,12 +549,12 @@ And we initialize the disturbances to zero.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(... <pre class="src src-matlab">initializeDisturbances(...
<span class="org-string">'Dwx'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - X direction</span> 'Dwx', false, ... % Ground Motion - X direction
<span class="org-string">'Dwy'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span> 'Dwy', false, ... % Ground Motion - Y direction
<span class="org-string">'Dwz'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span> 'Dwz', false, ... % Ground Motion - Z direction
<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - X direction</span> 'Fty_x', false, ... % Translation Stage - X direction
<span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span> 'Fty_z', false, ... % Translation Stage - Z direction
<span class="org-string">'Frz_z'</span>, <span class="org-constant">false</span> ...<span class="org-comment"> % Spindle - Z direction</span> 'Frz_z', false ... % Spindle - Z direction
); );
</pre> </pre>
</div> </div>
@ -563,7 +563,7 @@ And we initialize the disturbances to zero.
We set the reference path to be a triangular signal for the Translation Stage. We set the reference path to be a triangular signal for the Translation Stage.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Dy_type'</span>, <span class="org-string">'triangular'</span>, <span class="org-string">'Dy_amplitude'</span>, 10e<span class="org-type">-</span>3, <span class="org-string">'Dy_period'</span>, 1); <pre class="src src-matlab">initializeReferences('Dy_type', 'triangular', 'Dy_amplitude', 10e-3, 'Dy_period', 1);
</pre> </pre>
</div> </div>
@ -571,7 +571,7 @@ We set the reference path to be a triangular signal for the Translation Stage.
We simulate the model. We simulate the model.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -580,7 +580,7 @@ And we save the obtained data.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ty_scan_triangle = simout; <pre class="src src-matlab">ty_scan_triangle = simout;
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'ty_scan_triangle'</span>, <span class="org-string">'-append'</span>); save('./mat/experiment_tomography.mat', 'ty_scan_triangle', '-append');
</pre> </pre>
</div> </div>
@ -588,7 +588,7 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
We now set the reference path to be a sinusoidal signal for the Translation Stage. We now set the reference path to be a sinusoidal signal for the Translation Stage.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Dy_type'</span>, <span class="org-string">'sinusoidal'</span>, <span class="org-string">'Dy_amplitude'</span>, 10e<span class="org-type">-</span>3, <span class="org-string">'Dy_period'</span>, 1); <pre class="src src-matlab">initializeReferences('Dy_type', 'sinusoidal', 'Dy_amplitude', 10e-3, 'Dy_period', 1);
</pre> </pre>
</div> </div>
@ -596,7 +596,7 @@ We now set the reference path to be a sinusoidal signal for the Translation Stag
We simulate the model. We simulate the model.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>); <pre class="src src-matlab">sim('nass_model');
</pre> </pre>
</div> </div>
@ -605,17 +605,17 @@ And we save the obtained data.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ty_scan_sinus = simout; <pre class="src src-matlab">ty_scan_sinus = simout;
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'ty_scan_sinus'</span>, <span class="org-string">'-append'</span>); save('./mat/experiment_tomography.mat', 'ty_scan_sinus', '-append');
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org1836f98" class="outline-3"> <div id="outline-container-orgad49d2c" class="outline-3">
<h3 id="org1836f98"><span class="section-number-3">6.2</span> Analysis</h3> <h3 id="orgad49d2c"><span class="section-number-3">6.2</span> Analysis</h3>
<div class="outline-text-3" id="text-6-2"> <div class="outline-text-3" id="text-6-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'ty_scan_triangle'</span>, <span class="org-string">'ty_scan_sinus'</span>); <pre class="src src-matlab">load('./mat/experiment_tomography.mat', 'ty_scan_triangle', 'ty_scan_sinus');
</pre> </pre>
</div> </div>
@ -628,8 +628,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
</div> </div>
</div> </div>
<div id="outline-container-org8cf54cb" class="outline-3"> <div id="outline-container-org57c774f" class="outline-3">
<h3 id="org8cf54cb"><span class="section-number-3">6.3</span> Conclusion</h3> <h3 id="org57c774f"><span class="section-number-3">6.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-6-3"> <div class="outline-text-3" id="text-6-3">
<div class="important"> <div class="important">
<p> <p>
@ -648,7 +648,7 @@ Thus, this should be preferred.
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 10:25</p> <p class="date">Created: 2020-05-05 mar. 10:34</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:35 --> <!-- 2020-05-05 mar. 10:33 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Matlab Functions used for the NASS Project</title> <title>Matlab Functions used for the NASS Project</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -59,16 +59,16 @@
<h3 id="org3615302">Function description</h3> <h3 id="org3615302">Function description</h3>
<div class="outline-text-3" id="text-org3615302"> <div class="outline-text-3" id="text-org3615302">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[]</span> = <span class="org-function-name">describeNassSetup</span>() <pre class="src src-matlab">function [] = describeNassSetup()
<span class="org-comment">% describeNassSetup -</span> % describeNassSetup -
<span class="org-comment">%</span> %
<span class="org-comment">% Syntax: [] = describeNassSetup()</span> % Syntax: [] = describeNassSetup()
<span class="org-comment">%</span> %
<span class="org-comment">% Inputs:</span> % Inputs:
<span class="org-comment">% - -</span> % - -
<span class="org-comment">%</span> %
<span class="org-comment">% Outputs:</span> % Outputs:
<span class="org-comment">% - -</span> % - -
</pre> </pre>
</div> </div>
</div> </div>
@ -78,20 +78,20 @@
<h3 id="org3b8c4f7">Simscape Configuration</h3> <h3 id="org3b8c4f7">Simscape Configuration</h3>
<div class="outline-text-3" id="text-org3b8c4f7"> <div class="outline-text-3" id="text-org3b8c4f7">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/conf_simscape.mat'</span>, <span class="org-string">'conf_simscape'</span>); <pre class="src src-matlab">load('./mat/conf_simscape.mat', 'conf_simscape');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">fprintf(<span class="org-string">'Simscape Configuration:\n'</span>); <pre class="src src-matlab">fprintf('Simscape Configuration:\n');
<span class="org-keyword">if</span> conf_simscape.type <span class="org-type">==</span> 1 if conf_simscape.type == 1
fprintf(<span class="org-string">'- Gravity is included\n'</span>); fprintf('- Gravity is included\n');
<span class="org-keyword">else</span> else
fprintf(<span class="org-string">'- Gravity is not included\n'</span>); fprintf('- Gravity is not included\n');
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'\n'</span>); fprintf('\n');
</pre> </pre>
</div> </div>
</div> </div>
@ -101,26 +101,26 @@ fprintf(<span class="org-string">'\n'</span>);
<h3 id="org5b65749">Disturbances</h3> <h3 id="org5b65749">Disturbances</h3>
<div class="outline-text-3" id="text-org5b65749"> <div class="outline-text-3" id="text-org5b65749">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/nass_disturbances.mat'</span>, <span class="org-string">'args'</span>); <pre class="src src-matlab">load('./mat/nass_disturbances.mat', 'args');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">fprintf(<span class="org-string">'Disturbances:\n'</span>); <pre class="src src-matlab">fprintf('Disturbances:\n');
<span class="org-keyword">if</span> <span class="org-type">~</span>args.enable if ~args.enable
fprintf(<span class="org-string">'- No disturbance is included\n'</span>); fprintf('- No disturbance is included\n');
<span class="org-keyword">else</span> else
<span class="org-keyword">if</span> args.Dwx <span class="org-type">&amp;&amp;</span> args.Dwy <span class="org-type">&amp;&amp;</span> args.Dwz if args.Dwx &amp;&amp; args.Dwy &amp;&amp; args.Dwz
fprintf(<span class="org-string">'- Ground motion\n'</span>); fprintf('- Ground motion\n');
<span class="org-keyword">end</span> end
<span class="org-keyword">if</span> args.Fty_x <span class="org-type">&amp;&amp;</span> args.Fty_z if args.Fty_x &amp;&amp; args.Fty_z
fprintf(<span class="org-string">'- Vibrations of the Translation Stage\n'</span>); fprintf('- Vibrations of the Translation Stage\n');
<span class="org-keyword">end</span> end
<span class="org-keyword">if</span> args.Frz_z if args.Frz_z
fprintf(<span class="org-string">'- Vibrations of the Spindle\n'</span>); fprintf('- Vibrations of the Spindle\n');
<span class="org-keyword">end</span> end
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'\n'</span>); fprintf('\n');
</pre> </pre>
</div> </div>
</div> </div>
@ -130,62 +130,62 @@ fprintf(<span class="org-string">'\n'</span>);
<h3 id="org59f7825">References</h3> <h3 id="org59f7825">References</h3>
<div class="outline-text-3" id="text-org59f7825"> <div class="outline-text-3" id="text-org59f7825">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/nass_references.mat'</span>, <span class="org-string">'args'</span>); <pre class="src src-matlab">load('./mat/nass_references.mat', 'args');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">fprintf(<span class="org-string">'Reference Tracking:\n'</span>); <pre class="src src-matlab">fprintf('Reference Tracking:\n');
fprintf(<span class="org-string">'- Translation Stage:\n'</span>); fprintf('- Translation Stage:\n');
<span class="org-keyword">switch</span> <span class="org-constant">args.Dy_type</span> switch args.Dy_type
<span class="org-keyword">case</span> <span class="org-string">'constant'</span> case 'constant'
fprintf(<span class="org-string">' - Constant Position\n'</span>); fprintf(' - Constant Position\n');
fprintf(<span class="org-string">' - Dy = %.0f [mm]\n'</span>, args.Dy_amplitude<span class="org-type">*</span>1e3); fprintf(' - Dy = %.0f [mm]\n', args.Dy_amplitude*1e3);
<span class="org-keyword">case</span> <span class="org-string">'triangular'</span> case 'triangular'
fprintf(<span class="org-string">' - Triangular Path\n'</span>); fprintf(' - Triangular Path\n');
fprintf(<span class="org-string">' - Amplitude = %.0f [mm]\n'</span>, args.Dy_amplitude<span class="org-type">*</span>1e3); fprintf(' - Amplitude = %.0f [mm]\n', args.Dy_amplitude*1e3);
fprintf(<span class="org-string">' - Period = %.0f [s]\n'</span>, args.Dy_period); fprintf(' - Period = %.0f [s]\n', args.Dy_period);
<span class="org-keyword">case</span> <span class="org-string">'sinusoidal'</span> case 'sinusoidal'
fprintf(<span class="org-string">' - Sinusoidal Path\n'</span>); fprintf(' - Sinusoidal Path\n');
fprintf(<span class="org-string">' - Amplitude = %.0f [mm]\n'</span>, args.Dy_amplitude<span class="org-type">*</span>1e3); fprintf(' - Amplitude = %.0f [mm]\n', args.Dy_amplitude*1e3);
fprintf(<span class="org-string">' - Period = %.0f [s]\n'</span>, args.Dy_period); fprintf(' - Period = %.0f [s]\n', args.Dy_period);
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'- Tilt Stage:\n'</span>); fprintf('- Tilt Stage:\n');
<span class="org-keyword">switch</span> <span class="org-constant">args.Ry_type</span> switch args.Ry_type
<span class="org-keyword">case</span> <span class="org-string">'constant'</span> case 'constant'
fprintf(<span class="org-string">' - Constant Position\n'</span>); fprintf(' - Constant Position\n');
fprintf(<span class="org-string">' - Ry = %.0f [mm]\n'</span>, args.Ry_amplitude<span class="org-type">*</span>1e3); fprintf(' - Ry = %.0f [mm]\n', args.Ry_amplitude*1e3);
<span class="org-keyword">case</span> <span class="org-string">'triangular'</span> case 'triangular'
fprintf(<span class="org-string">' - Triangular Path\n'</span>); fprintf(' - Triangular Path\n');
fprintf(<span class="org-string">' - Amplitude = %.0f [mm]\n'</span>, args.Ry_amplitude<span class="org-type">*</span>1e3); fprintf(' - Amplitude = %.0f [mm]\n', args.Ry_amplitude*1e3);
fprintf(<span class="org-string">' - Period = %.0f [s]\n'</span>, args.Ry_period); fprintf(' - Period = %.0f [s]\n', args.Ry_period);
<span class="org-keyword">case</span> <span class="org-string">'sinusoidal'</span> case 'sinusoidal'
fprintf(<span class="org-string">' - Sinusoidal Path\n'</span>); fprintf(' - Sinusoidal Path\n');
fprintf(<span class="org-string">' - Amplitude = %.0f [mm]\n'</span>, args.Ry_amplitude<span class="org-type">*</span>1e3); fprintf(' - Amplitude = %.0f [mm]\n', args.Ry_amplitude*1e3);
fprintf(<span class="org-string">' - Period = %.0f [s]\n'</span>, args.Ry_period); fprintf(' - Period = %.0f [s]\n', args.Ry_period);
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'- Spindle:\n'</span>); fprintf('- Spindle:\n');
<span class="org-keyword">switch</span> <span class="org-constant">args.Rz_type</span> switch args.Rz_type
<span class="org-keyword">case</span> <span class="org-string">'constant'</span> case 'constant'
fprintf(<span class="org-string">' - Constant Position\n'</span>); fprintf(' - Constant Position\n');
fprintf(<span class="org-string">' - Rz = %.0f [deg]\n'</span>, 180<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>args.Rz_amplitude); fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude);
<span class="org-keyword">case</span> { <span class="org-string">'rotating'</span>, <span class="org-string">'rotating-not-filtered'</span> } case { 'rotating', 'rotating-not-filtered' }
fprintf(<span class="org-string">' - Rotating\n'</span>); fprintf(' - Rotating\n');
fprintf(<span class="org-string">' - Speed = %.0f [rpm]\n'</span>, 60<span class="org-type">/</span>Rz_period); fprintf(' - Speed = %.0f [rpm]\n', 60/args.Rz_period);
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'- Micro Hexapod:\n'</span>); fprintf('- Micro Hexapod:\n');
<span class="org-keyword">switch</span> <span class="org-constant">args.Dh_type</span> switch args.Dh_type
<span class="org-keyword">case</span> <span class="org-string">'constant'</span> case 'constant'
fprintf(<span class="org-string">' - Constant Position\n'</span>); fprintf(' - Constant Position\n');
fprintf(<span class="org-string">' - Dh = %.0f, %.0f, %.0f [mm]\n'</span>, args.Dh_pos(1), args.Dh_pos(2), args.Dh_pos(3)); fprintf(' - Dh = %.0f, %.0f, %.0f [mm]\n', args.Dh_pos(1), args.Dh_pos(2), args.Dh_pos(3));
fprintf(<span class="org-string">' - Rh = %.0f, %.0f, %.0f [deg]\n'</span>, args.Dh_pos(4), args.Dh_pos(5), args.Dh_pos(6)); fprintf(' - Rh = %.0f, %.0f, %.0f [deg]\n', args.Dh_pos(4), args.Dh_pos(5), args.Dh_pos(6));
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'\n'</span>); fprintf('\n');
</pre> </pre>
</div> </div>
</div> </div>
@ -195,14 +195,14 @@ fprintf(<span class="org-string">'\n'</span>);
<h3 id="org90b1ac8">Controller</h3> <h3 id="org90b1ac8">Controller</h3>
<div class="outline-text-3" id="text-org90b1ac8"> <div class="outline-text-3" id="text-org90b1ac8">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/controller.mat'</span>, <span class="org-string">'controller'</span>); <pre class="src src-matlab">load('./mat/controller.mat', 'controller');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">fprintf(<span class="org-string">'Controller:\n'</span>); <pre class="src src-matlab">fprintf('Controller:\n');
fprintf(<span class="org-string">'- %s\n'</span>, controller.name); fprintf('- %s\n', controller.name);
fprintf(<span class="org-string">'\n'</span>); fprintf('\n');
</pre> </pre>
</div> </div>
</div> </div>
@ -212,55 +212,55 @@ fprintf(<span class="org-string">'\n'</span>);
<h3 id="orgdd5b7a5">Micro-Station</h3> <h3 id="orgdd5b7a5">Micro-Station</h3>
<div class="outline-text-3" id="text-orgdd5b7a5"> <div class="outline-text-3" id="text-orgdd5b7a5">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'ground'</span>, <span class="org-string">'granite'</span>, <span class="org-string">'ty'</span>, <span class="org-string">'ry'</span>, <span class="org-string">'rz'</span>, <span class="org-string">'micro_hexapod'</span>, <span class="org-string">'axisc'</span>); <pre class="src src-matlab">load('./mat/stages.mat', 'ground', 'granite', 'ty', 'ry', 'rz', 'micro_hexapod', 'axisc');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">fprintf(<span class="org-string">'Micro Station:\n'</span>); <pre class="src src-matlab">fprintf('Micro Station:\n');
<span class="org-keyword">if</span> granite.type <span class="org-type">==</span> 1 <span class="org-type">&amp;&amp;</span> ... if granite.type == 1 &amp;&amp; ...
ty.type <span class="org-type">==</span> 1 <span class="org-type">&amp;&amp;</span> ... ty.type == 1 &amp;&amp; ...
ry.type <span class="org-type">==</span> 1 <span class="org-type">&amp;&amp;</span> ... ry.type == 1 &amp;&amp; ...
rz.type <span class="org-type">==</span> 1 <span class="org-type">&amp;&amp;</span> ... rz.type == 1 &amp;&amp; ...
micro_hexapod.type <span class="org-type">==</span> 1; micro_hexapod.type == 1;
fprintf(<span class="org-string">'- All stages are rigid\n'</span>); fprintf('- All stages are rigid\n');
<span class="org-keyword">elseif</span> granite.type <span class="org-type">==</span> 2 <span class="org-type">&amp;&amp;</span> ... elseif granite.type == 2 &amp;&amp; ...
ty.type <span class="org-type">==</span> 2 <span class="org-type">&amp;&amp;</span> ... ty.type == 2 &amp;&amp; ...
ry.type <span class="org-type">==</span> 2 <span class="org-type">&amp;&amp;</span> ... ry.type == 2 &amp;&amp; ...
rz.type <span class="org-type">==</span> 2 <span class="org-type">&amp;&amp;</span> ... rz.type == 2 &amp;&amp; ...
micro_hexapod.type <span class="org-type">==</span> 2; micro_hexapod.type == 2;
fprintf(<span class="org-string">'- All stages are flexible\n'</span>); fprintf('- All stages are flexible\n');
<span class="org-keyword">else</span> else
<span class="org-keyword">if</span> granite.type <span class="org-type">==</span> 1 <span class="org-type">||</span> granite.type <span class="org-type">==</span> 4 if granite.type == 1 || granite.type == 4
fprintf(<span class="org-string">'- Granite is rigid\n'</span>); fprintf('- Granite is rigid\n');
<span class="org-keyword">else</span> else
fprintf(<span class="org-string">'- Granite is flexible\n'</span>); fprintf('- Granite is flexible\n');
<span class="org-keyword">end</span> end
<span class="org-keyword">if</span> ty.type <span class="org-type">==</span> 1 <span class="org-type">||</span> ty.type <span class="org-type">==</span> 4 if ty.type == 1 || ty.type == 4
fprintf(<span class="org-string">'- Translation Stage is rigid\n'</span>); fprintf('- Translation Stage is rigid\n');
<span class="org-keyword">else</span> else
fprintf(<span class="org-string">'- Translation Stage is flexible\n'</span>); fprintf('- Translation Stage is flexible\n');
<span class="org-keyword">end</span> end
<span class="org-keyword">if</span> ry.type <span class="org-type">==</span> 1 <span class="org-type">||</span> ry.type <span class="org-type">==</span> 4 if ry.type == 1 || ry.type == 4
fprintf(<span class="org-string">'- Tilt Stage is rigid\n'</span>); fprintf('- Tilt Stage is rigid\n');
<span class="org-keyword">else</span> else
fprintf(<span class="org-string">'- Tilt Stage is flexible\n'</span>); fprintf('- Tilt Stage is flexible\n');
<span class="org-keyword">end</span> end
<span class="org-keyword">if</span> rz.type <span class="org-type">==</span> 1 <span class="org-type">||</span> rz.type <span class="org-type">==</span> 4 if rz.type == 1 || rz.type == 4
fprintf(<span class="org-string">'- Spindle is rigid\n'</span>); fprintf('- Spindle is rigid\n');
<span class="org-keyword">else</span> else
fprintf(<span class="org-string">'- Spindle is flexible\n'</span>); fprintf('- Spindle is flexible\n');
<span class="org-keyword">end</span> end
<span class="org-keyword">if</span> micro_hexapod.type <span class="org-type">==</span> 1 <span class="org-type">||</span> micro_hexapod.type <span class="org-type">==</span> 4 if micro_hexapod.type == 1 || micro_hexapod.type == 4
fprintf(<span class="org-string">'- Micro Hexapod is rigid\n'</span>); fprintf('- Micro Hexapod is rigid\n');
<span class="org-keyword">else</span> else
fprintf(<span class="org-string">'- Micro Hexapod is flexible\n'</span>); fprintf('- Micro Hexapod is flexible\n');
<span class="org-keyword">end</span> end
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'\n'</span>); fprintf('\n');
</pre> </pre>
</div> </div>
</div> </div>
@ -270,21 +270,21 @@ fprintf(<span class="org-string">'\n'</span>);
<h3 id="org1687c05">Metrology</h3> <h3 id="org1687c05">Metrology</h3>
<div class="outline-text-3" id="text-org1687c05"> <div class="outline-text-3" id="text-org1687c05">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'mirror'</span>); <pre class="src src-matlab">load('./mat/stages.mat', 'mirror');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">fprintf(<span class="org-string">'Reference Mirror:\n'</span>); <pre class="src src-matlab">fprintf('Reference Mirror:\n');
<span class="org-keyword">if</span> mirror.type <span class="org-type">==</span> 2; if mirror.type == 2;
fprintf(<span class="org-string">'- flexible fixation\n'</span>); fprintf('- flexible fixation\n');
fprintf(<span class="org-string">'- w = %.0f [Hz]\n'</span>, mirror.freq(1)); fprintf('- w = %.0f [Hz]\n', mirror.freq(1));
<span class="org-keyword">else</span> else
fprintf(<span class="org-string">'- rigidly attached to the nano-hexapod\n'</span>); fprintf('- rigidly attached to the nano-hexapod\n');
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'- m = %.0f [kg]\n'</span>, mirror.mass); fprintf('- m = %.0f [kg]\n', mirror.mass);
fprintf(<span class="org-string">'\n'</span>); fprintf('\n');
</pre> </pre>
</div> </div>
</div> </div>
@ -294,23 +294,23 @@ fprintf(<span class="org-string">'\n'</span>);
<h3 id="orgee5944e">Nano Hexapod</h3> <h3 id="orgee5944e">Nano Hexapod</h3>
<div class="outline-text-3" id="text-orgee5944e"> <div class="outline-text-3" id="text-orgee5944e">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>); <pre class="src src-matlab">load('./mat/stages.mat', 'nano_hexapod');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">fprintf(<span class="org-string">'Nano Hexapod:\n'</span>); <pre class="src src-matlab">fprintf('Nano Hexapod:\n');
<span class="org-keyword">if</span> nano_hexapod.type <span class="org-type">==</span> 0; if nano_hexapod.type == 0;
fprintf(<span class="org-string">'- no included\n'</span>); fprintf('- no included\n');
<span class="org-keyword">elseif</span> nano_hexapod.type <span class="org-type">==</span> 1 <span class="org-type">||</span> nano_hexapod.type <span class="org-type">==</span> 3; elseif nano_hexapod.type == 1 || nano_hexapod.type == 3;
fprintf(<span class="org-string">'- rigid\n'</span>); fprintf('- rigid\n');
<span class="org-keyword">elseif</span> nano_hexapod.type <span class="org-type">==</span> 2; elseif nano_hexapod.type == 2;
fprintf(<span class="org-string">'- flexible\n'</span>); fprintf('- flexible\n');
fprintf(<span class="org-string">'- Ki = %.0g [N/m]\n'</span>, nano_hexapod.Ki(1)); fprintf('- Ki = %.0g [N/m]\n', nano_hexapod.actuators.K(1));
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'\n'</span>); fprintf('\n');
</pre> </pre>
</div> </div>
</div> </div>
@ -320,29 +320,29 @@ fprintf(<span class="org-string">'\n'</span>);
<h3 id="orga499c17">Sample</h3> <h3 id="orga499c17">Sample</h3>
<div class="outline-text-3" id="text-orga499c17"> <div class="outline-text-3" id="text-orga499c17">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'sample'</span>); <pre class="src src-matlab">load('./mat/stages.mat', 'sample');
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">fprintf(<span class="org-string">'Sample:\n'</span>); <pre class="src src-matlab">fprintf('Sample:\n');
<span class="org-keyword">if</span> sample.type <span class="org-type">==</span> 0; if sample.type == 0;
fprintf(<span class="org-string">'- no included\n'</span>); fprintf('- no included\n');
<span class="org-keyword">elseif</span> sample.type <span class="org-type">==</span> 1 <span class="org-type">||</span> sample.type <span class="org-type">==</span> 3; elseif sample.type == 1 || sample.type == 3;
fprintf(<span class="org-string">'- rigid\n'</span>); fprintf('- rigid\n');
fprintf(<span class="org-string">'- mass = %.0f [kg]\n'</span>, sample.mass); fprintf('- mass = %.0f [kg]\n', sample.mass);
fprintf(<span class="org-string">'- moment of inertia = %.2f, %.2f, %.2f [kg m2]\n'</span>, sample.inertia(1), sample.inertia(2), sample.inertia(3)); fprintf('- moment of inertia = %.2f, %.2f, %.2f [kg m2]\n', sample.inertia(1), sample.inertia(2), sample.inertia(3));
<span class="org-keyword">elseif</span> sample.type <span class="org-type">==</span> 2; elseif sample.type == 2;
fprintf(<span class="org-string">'- flexible\n'</span>); fprintf('- flexible\n');
fprintf(<span class="org-string">'- mass = %.0f [kg]\n'</span>, sample.mass); fprintf('- mass = %.0f [kg]\n', sample.mass);
fprintf(<span class="org-string">'- moment of inertia = %.2f, %.2f, %.2f [kg m2]\n'</span>, sample.inertia(1), sample.inertia(2), sample.inertia(3)); fprintf('- moment of inertia = %.2f, %.2f, %.2f [kg m2]\n', sample.inertia(1), sample.inertia(2), sample.inertia(3));
<span class="org-comment">% fprintf('- Kt = %.0g, %.0g, %.0g [N/m]\n', sample.K(1), sample.K(2), sample.K(3));</span> % fprintf('- Kt = %.0g, %.0g, %.0g [N/m]\n', sample.K(1), sample.K(2), sample.K(3));
<span class="org-comment">% fprintf('- Kr = %.0g, %.0g, %.0g [Nm/rad]\n', sample.K(4), sample.K(5), sample.K(6));</span> % fprintf('- Kr = %.0g, %.0g, %.0g [Nm/rad]\n', sample.K(4), sample.K(5), sample.K(6));
fprintf(<span class="org-string">'- wt(x,y,z) = %.0f, %.0f, %.0f [Hz]\n'</span>, 1<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>sqrt(sample.K(1)<span class="org-type">/</span>sample.mass), 1<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>sqrt(sample.K(1)<span class="org-type">/</span>sample.mass), 1<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>sqrt(sample.K(1)<span class="org-type">/</span>sample.mass)); fprintf('- wt(x,y,z) = %.0f, %.0f, %.0f [Hz]\n', 1/2/pi*sqrt(sample.K(1)/sample.mass), 1/2/pi*sqrt(sample.K(1)/sample.mass), 1/2/pi*sqrt(sample.K(1)/sample.mass));
fprintf(<span class="org-string">'- wr(x,y,z) = %.0f, %.0f, %.0f [Hz]\n'</span>, 1<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>sqrt(sample.K(4)<span class="org-type">/</span>sample.inertia(1)), 1<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>sqrt(sample.K(5)<span class="org-type">/</span>sample.inertia(2)), 1<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>sqrt(sample.K(6)<span class="org-type">/</span>sample.inertia(3))); fprintf('- wr(x,y,z) = %.0f, %.0f, %.0f [Hz]\n', 1/2/pi*sqrt(sample.K(4)/sample.inertia(1)), 1/2/pi*sqrt(sample.K(5)/sample.inertia(2)), 1/2/pi*sqrt(sample.K(6)/sample.inertia(3)));
<span class="org-keyword">end</span> end
fprintf(<span class="org-string">'\n'</span>); fprintf('\n');
</pre> </pre>
</div> </div>
</div> </div>
@ -361,50 +361,50 @@ This Matlab function is accessible <a href="..//src/computeReferencePose.m">here
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[WTr]</span> = <span class="org-function-name">computeReferencePose</span>(<span class="org-variable-name">Dy</span>, <span class="org-variable-name">Ry</span>, <span class="org-variable-name">Rz</span>, <span class="org-variable-name">Dh</span>, <span class="org-variable-name">Dn</span>) <pre class="src src-matlab">function [WTr] = computeReferencePose(Dy, Ry, Rz, Dh, Dn)
<span class="org-comment">% computeReferencePose - Compute the homogeneous transformation matrix corresponding to the wanted pose of the sample</span> % computeReferencePose - Compute the homogeneous transformation matrix corresponding to the wanted pose of the sample
<span class="org-comment">%</span> %
<span class="org-comment">% Syntax: [WTr] = computeReferencePose(Dy, Ry, Rz, Dh, Dn)</span> % Syntax: [WTr] = computeReferencePose(Dy, Ry, Rz, Dh, Dn)
<span class="org-comment">%</span> %
<span class="org-comment">% Inputs:</span> % Inputs:
<span class="org-comment">% - Dy - Reference of the Translation Stage [m]</span> % - Dy - Reference of the Translation Stage [m]
<span class="org-comment">% - Ry - Reference of the Tilt Stage [rad]</span> % - Ry - Reference of the Tilt Stage [rad]
<span class="org-comment">% - Rz - Reference of the Spindle [rad]</span> % - Rz - Reference of the Spindle [rad]
<span class="org-comment">% - Dh - Reference of the Micro Hexapod (Pitch, Roll, Yaw angles) [m, m, m, rad, rad, rad]</span> % - Dh - Reference of the Micro Hexapod (Pitch, Roll, Yaw angles) [m, m, m, rad, rad, rad]
<span class="org-comment">% - Dn - Reference of the Nano Hexapod [m, m, m, rad, rad, rad]</span> % - Dn - Reference of the Nano Hexapod [m, m, m, rad, rad, rad]
<span class="org-comment">%</span> %
<span class="org-comment">% Outputs:</span> % Outputs:
<span class="org-comment">% - WTr -</span> % - WTr -
<span class="org-matlab-cellbreak"><span class="org-comment">%% Translation Stage</span></span> %% Translation Stage
Rty = [1 0 0 0; Rty = [1 0 0 0;
0 1 0 Dy; 0 1 0 Dy;
0 0 1 0; 0 0 1 0;
0 0 0 1]; 0 0 0 1];
<span class="org-matlab-cellbreak"><span class="org-comment">%% Tilt Stage - Pure rotating aligned with Ob</span></span> %% Tilt Stage - Pure rotating aligned with Ob
Rry = [ cos(Ry) 0 sin(Ry) 0; Rry = [ cos(Ry) 0 sin(Ry) 0;
0 1 0 0; 0 1 0 0;
<span class="org-type">-</span>sin(Ry) 0 cos(Ry) 0; -sin(Ry) 0 cos(Ry) 0;
0 0 0 1]; 0 0 0 1];
<span class="org-matlab-cellbreak"><span class="org-comment">%% Spindle - Rotation along the Z axis</span></span> %% Spindle - Rotation along the Z axis
Rrz = [cos(Rz) <span class="org-type">-</span>sin(Rz) 0 0 ; Rrz = [cos(Rz) -sin(Rz) 0 0 ;
sin(Rz) cos(Rz) 0 0 ; sin(Rz) cos(Rz) 0 0 ;
0 0 1 0 ; 0 0 1 0 ;
0 0 0 1 ]; 0 0 0 1 ];
<span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span> %% Micro-Hexapod
Rhx = [1 0 0; Rhx = [1 0 0;
0 cos(Dh(4)) <span class="org-type">-</span>sin(Dh(4)); 0 cos(Dh(4)) -sin(Dh(4));
0 sin(Dh(4)) cos(Dh(4))]; 0 sin(Dh(4)) cos(Dh(4))];
Rhy = [ cos(Dh(5)) 0 sin(Dh(5)); Rhy = [ cos(Dh(5)) 0 sin(Dh(5));
0 1 0; 0 1 0;
<span class="org-type">-</span>sin(Dh(5)) 0 cos(Dh(5))]; -sin(Dh(5)) 0 cos(Dh(5))];
Rhz = [cos(Dh(6)) <span class="org-type">-</span>sin(Dh(6)) 0; Rhz = [cos(Dh(6)) -sin(Dh(6)) 0;
sin(Dh(6)) cos(Dh(6)) 0; sin(Dh(6)) cos(Dh(6)) 0;
0 0 1]; 0 0 1];
@ -413,18 +413,18 @@ This Matlab function is accessible <a href="..//src/computeReferencePose.m">here
0 0 1 Dh(3) ; 0 0 1 Dh(3) ;
0 0 0 1 ]; 0 0 0 1 ];
Rh(1<span class="org-type">:</span>3, 1<span class="org-type">:</span>3) = Rhz<span class="org-type">*</span>Rhy<span class="org-type">*</span>Rhx; Rh(1:3, 1:3) = Rhz*Rhy*Rhx;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Nano-Hexapod</span></span> %% Nano-Hexapod
Rnx = [1 0 0; Rnx = [1 0 0;
0 cos(Dn(4)) <span class="org-type">-</span>sin(Dn(4)); 0 cos(Dn(4)) -sin(Dn(4));
0 sin(Dn(4)) cos(Dn(4))]; 0 sin(Dn(4)) cos(Dn(4))];
Rny = [ cos(Dn(5)) 0 sin(Dn(5)); Rny = [ cos(Dn(5)) 0 sin(Dn(5));
0 1 0; 0 1 0;
<span class="org-type">-</span>sin(Dn(5)) 0 cos(Dn(5))]; -sin(Dn(5)) 0 cos(Dn(5))];
Rnz = [cos(Dn(6)) <span class="org-type">-</span>sin(Dn(6)) 0; Rnz = [cos(Dn(6)) -sin(Dn(6)) 0;
sin(Dn(6)) cos(Dn(6)) 0; sin(Dn(6)) cos(Dn(6)) 0;
0 0 1]; 0 0 1];
@ -433,11 +433,11 @@ This Matlab function is accessible <a href="..//src/computeReferencePose.m">here
0 0 1 Dn(3) ; 0 0 1 Dn(3) ;
0 0 0 1 ]; 0 0 0 1 ];
Rn(1<span class="org-type">:</span>3, 1<span class="org-type">:</span>3) = Rnz<span class="org-type">*</span>Rny<span class="org-type">*</span>Rnx; Rn(1:3, 1:3) = Rnz*Rny*Rnx;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Total Homogeneous transformation</span></span> %% Total Homogeneous transformation
WTr = Rty<span class="org-type">*</span>Rry<span class="org-type">*</span>Rrz<span class="org-type">*</span>Rh<span class="org-type">*</span>Rn; WTr = Rty*Rry*Rrz*Rh*Rn;
<span class="org-keyword">end</span> end
</pre> </pre>
</div> </div>
</div> </div>
@ -455,26 +455,26 @@ This Matlab function is accessible <a href="..//src/computeSampleError.m">here</
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[MTr]</span> = <span class="org-function-name">computeSampleError</span>(<span class="org-variable-name">WTm</span>, <span class="org-variable-name">WTr</span>) <pre class="src src-matlab">function [MTr] = computeSampleError(WTm, WTr)
<span class="org-comment">% computeSampleError -</span> % computeSampleError -
<span class="org-comment">%</span> %
<span class="org-comment">% Syntax: [MTr] = computeSampleError(WTm, WTr)</span> % Syntax: [MTr] = computeSampleError(WTm, WTr)
<span class="org-comment">%</span> %
<span class="org-comment">% Inputs:</span> % Inputs:
<span class="org-comment">% - WTm - Homoegeneous transformation that represent the</span> % - WTm - Homoegeneous transformation that represent the
<span class="org-comment">% wanted pose of the sample with respect to the granite</span> % wanted pose of the sample with respect to the granite
<span class="org-comment">% - WTr - Homoegeneous transformation that represent the</span> % - WTr - Homoegeneous transformation that represent the
<span class="org-comment">% measured pose of the sample with respect to the granite</span> % measured pose of the sample with respect to the granite
<span class="org-comment">%</span> %
<span class="org-comment">% Outputs:</span> % Outputs:
<span class="org-comment">% - MTr - Homoegeneous transformation that represent the</span> % - MTr - Homoegeneous transformation that represent the
<span class="org-comment">% wanted pose of the sample expressed in a frame</span> % wanted pose of the sample expressed in a frame
<span class="org-comment">% attached to the top platform of the nano-hexapod</span> % attached to the top platform of the nano-hexapod
MTr = zeros(4,4); MTr = zeros(4,4);
MTr = [WTm(1<span class="org-type">:</span>3,1<span class="org-type">:</span>3)<span class="org-type">'</span>, <span class="org-type">-</span>WTm(1<span class="org-type">:</span>3,1<span class="org-type">:</span>3)<span class="org-type">'*</span>WTm(1<span class="org-type">:</span>3,4) ; 0 0 0 1]<span class="org-type">*</span>WTr; MTr = [WTm(1:3,1:3)', -WTm(1:3,1:3)'*WTm(1:3,4) ; 0 0 0 1]*WTr;
<span class="org-keyword">end</span> end
</pre> </pre>
</div> </div>
</div> </div>
@ -482,7 +482,7 @@ MTr = [WTm(1<span class="org-type">:</span>3,1<span class="org-type">:</span>3)<
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p> <p class="date">Created: 2020-05-05 mar. 10:33</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:35 --> <!-- 2020-05-05 mar. 10:33 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Study of the Metrology Frame</title> <title>Study of the Metrology Frame</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -86,7 +86,7 @@ initializeNanoHexapod();
We first consider a rigid Sample to simplify the analysis. We first consider a rigid Sample to simplify the analysis.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>); <pre class="src src-matlab">initializeSample('type', 'rigid');
</pre> </pre>
</div> </div>
</div> </div>
@ -99,7 +99,7 @@ We first consider a rigid Sample to simplify the analysis.
Let&rsquo;s first consider a rigid reference mirror and we identify the dynamics of the system. Let&rsquo;s first consider a rigid reference mirror and we identify the dynamics of the system.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeMirror(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>); <pre class="src src-matlab">initializeMirror('type', 'rigid');
</pre> </pre>
</div> </div>
</div> </div>
@ -112,7 +112,7 @@ Let&rsquo;s first consider a rigid reference mirror and we identify the dynamics
We now initialize a reference mirror with a main resonance frequency at \(200\ [Hz]\). We now initialize a reference mirror with a main resonance frequency at \(200\ [Hz]\).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeMirror(<span class="org-string">'type'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'freq'</span>, 200<span class="org-type">*</span>ones(6,1)); <pre class="src src-matlab">initializeMirror('type', 'flexible', 'freq', 200*ones(6,1));
</pre> </pre>
</div> </div>
@ -158,7 +158,7 @@ Thus, care should be taken when designing the fixation of the reference mirror o
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p> <p class="date">Created: 2020-05-05 mar. 10:33</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 14:10 --> <!-- 2020-05-05 mar. 10:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Control of the NASS with optimal stiffness</title> <title>Control of the NASS with optimal stiffness</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -42,7 +42,7 @@
<li><a href="#orgfef1a3f">1.3. Controller Design</a></li> <li><a href="#orgfef1a3f">1.3. Controller Design</a></li>
<li><a href="#org3c73014">1.4. Effect of the Low Authority Control on the Primary Plant</a></li> <li><a href="#org3c73014">1.4. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#orgee5dbee">1.5. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li> <li><a href="#orgee5dbee">1.5. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li>
<li><a href="#org882e1ac">1.6. Conclusion</a></li> <li><a href="#org8c0882d">1.6. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org81dc0a8">2. Primary Control in the leg space</a> <li><a href="#org81dc0a8">2. Primary Control in the leg space</a>
@ -50,21 +50,38 @@
<li><a href="#org1e7a412">2.1. Plant in the leg space</a></li> <li><a href="#org1e7a412">2.1. Plant in the leg space</a></li>
<li><a href="#orgf39520c">2.2. Control in the leg space</a></li> <li><a href="#orgf39520c">2.2. Control in the leg space</a></li>
<li><a href="#org16d192f">2.3. Sensibility to Disturbances and Noise Budget</a></li> <li><a href="#org16d192f">2.3. Sensibility to Disturbances and Noise Budget</a></li>
<li><a href="#org84f68cc">2.4. Simulations</a></li> <li><a href="#org8f34c09">2.4. Simulations of Tomography Experiment</a></li>
<li><a href="#orgbeadec8">2.5. Results</a></li> <li><a href="#orgbeadec8">2.5. Results</a></li>
<li><a href="#orgd61852c">2.6. Conclusion</a></li> <li><a href="#orgf709759">2.6. Actuator Stroke and Forces</a></li>
<li><a href="#orgb0f5db9">2.7. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org9bd2bf8">3. Primary Control in the task space</a> <li><a href="#org56b28cd">3. Further More complex simulations</a>
<ul> <ul>
<li><a href="#org07b4a9d">3.1. Plant in the task space</a></li> <li><a href="#org6c1ddb5">3.1. Simulation with Micro-Hexapod Offset</a>
<li><a href="#org7d888f9">3.2. Control in the task space</a>
<ul> <ul>
<li><a href="#orgb28634b">3.2.1. Stability</a></li> <li><a href="#org57e2cfd">3.1.1. Simulation</a></li>
<li><a href="#org2c93370">3.1.2. Results</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org57e2cfd">3.3. Simulation</a></li> <li><a href="#org5cb899b">3.2. Simultaneous Translation scans and Spindle&rsquo;s rotation</a>
<li><a href="#org8c0882d">3.4. Conclusion</a></li> <ul>
<li><a href="#org6710f28">3.2.1. Simulation</a></li>
<li><a href="#org035df39">3.2.2. Results</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org9bd2bf8">4. Primary Control in the task space</a>
<ul>
<li><a href="#org07b4a9d">4.1. Plant in the task space</a></li>
<li><a href="#org7d888f9">4.2. Control in the task space</a>
<ul>
<li><a href="#orgb28634b">4.2.1. Stability</a></li>
</ul>
</li>
<li><a href="#org9ea6a0a">4.3. Simulation</a></li>
<li><a href="#org21304f7">4.4. Conclusion</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -98,10 +115,10 @@ initializeAxisc();
initializeMirror(); initializeMirror();
initializeSimscapeConfiguration(); initializeSimscapeConfiguration();
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>); initializeDisturbances('enable', false);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>); initializeLoggingConfiguration('log', 'none');
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>); initializeController('type', 'hac-dvf');
</pre> </pre>
</div> </div>
@ -109,7 +126,7 @@ initializeController(<span class="org-string">'type'</span>, <span class="org-st
We set the stiffness of the payload fixation: We set the stiffness of the payload fixation:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kp = 1e8; <span class="org-comment">% [N/m]</span> <pre class="src src-matlab">Kp = 1e8; % [N/m]
</pre> </pre>
</div> </div>
</div> </div>
@ -136,7 +153,7 @@ We identify the system for the following payload masses:
The nano-hexapod has the following leg&rsquo;s stiffness and damping. The nano-hexapod has the following leg&rsquo;s stiffness and damping.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'k'</span>, 1e5, <span class="org-string">'c'</span>, 2e2); <pre class="src src-matlab">initializeNanoHexapod('k', 1e5, 'c', 2e2);
</pre> </pre>
</div> </div>
</div> </div>
@ -185,7 +202,7 @@ Damping as function of the gain
Finally, we use the following controller for the Decentralized Direct Velocity Feedback: Finally, we use the following controller for the Decentralized Direct Velocity Feedback:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kdvf = 5e3<span class="org-type">*</span>s<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1e3)<span class="org-type">*</span>eye(6); <pre class="src src-matlab">Kdvf = 5e3*s/(1+s/2/pi/1e3)*eye(6);
</pre> </pre>
</div> </div>
</div> </div>
@ -308,8 +325,8 @@ Decentralized Direct Velocity Feedback is shown to increase the effect of stages
</div> </div>
</div> </div>
<div id="outline-container-org882e1ac" class="outline-3"> <div id="outline-container-org8c0882d" class="outline-3">
<h3 id="org882e1ac"><span class="section-number-3">1.6</span> Conclusion</h3> <h3 id="org8c0882d"><span class="section-number-3">1.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-6"> <div class="outline-text-3" id="text-1-6">
<div class="important"> <div class="important">
<p> <p>
@ -403,11 +420,11 @@ The loop gain is shown in Figure <a href="#orgbcc0acb">12</a>.
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">h = 2.0; <pre class="src src-matlab">h = 2.0;
Kl = 2e7 <span class="org-type">*</span> eye(6) <span class="org-type">*</span> ... Kl = 2e7 * eye(6) * ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ... 1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>200<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>200<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ... 1/h*(s/(2*pi*200/h) + 1)/(s/(2*pi*200*h) + 1) * ...
(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10) <span class="org-type">*</span> ... (s/2/pi/10 + 1)/(s/2/pi/10) * ...
1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>300); 1/(1 + s/2/pi/300);
</pre> </pre>
</div> </div>
@ -422,8 +439,8 @@ Kl = 2e7 <span class="org-type">*</span> eye(6) <span class="org-type">*</span>
Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system. Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>); <pre class="src src-matlab">load('mat/stages.mat', 'nano_hexapod');
K = Kl<span class="org-type">*</span>nano_hexapod.J<span class="org-type">*</span>diag([1, 1, 1, 1, 1, 0]); K = Kl*nano_hexapod.kinematics.J*diag([1, 1, 1, 1, 1, 0]);
</pre> </pre>
</div> </div>
</div> </div>
@ -477,8 +494,8 @@ Then, we load the Power Spectral Density of the perturbations and we look at the
</div> </div>
</div> </div>
<div id="outline-container-org84f68cc" class="outline-3"> <div id="outline-container-org8f34c09" class="outline-3">
<h3 id="org84f68cc"><span class="section-number-3">2.4</span> Simulations</h3> <h3 id="org8f34c09"><span class="section-number-3">2.4</span> Simulations of Tomography Experiment</h3>
<div class="outline-text-3" id="text-2-4"> <div class="outline-text-3" id="text-2-4">
<p> <p>
Let&rsquo;s now simulate a tomography experiment. Let&rsquo;s now simulate a tomography experiment.
@ -486,8 +503,8 @@ To do so, we include all disturbances except vibrations of the translation stage
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(); <pre class="src src-matlab">initializeDisturbances();
initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">false</span>); initializeSimscapeConfiguration('gravity', false);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>); initializeLoggingConfiguration('log', 'all');
</pre> </pre>
</div> </div>
@ -537,9 +554,28 @@ Finally, the time domain position error signals are shown in Figure <a href="#or
</div> </div>
</div> </div>
<div id="outline-container-orgd61852c" class="outline-3"> <div id="outline-container-orgf709759" class="outline-3">
<h3 id="orgd61852c"><span class="section-number-3">2.6</span> Conclusion</h3> <h3 id="orgf709759"><span class="section-number-3">2.6</span> Actuator Stroke and Forces</h3>
<div class="outline-text-3" id="text-2-6"> <div class="outline-text-3" id="text-2-6">
<div id="orgf9d6367" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_L_act_force.png" alt="opt_stiff_hac_dvf_L_act_force.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Force applied by the actuator during the simulation</p>
</div>
<div id="org11b8730" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_L_act_stroke.png" alt="opt_stiff_hac_dvf_L_act_stroke.png" />
</p>
<p><span class="figure-number">Figure 21: </span>Leg&rsquo;s stroke during the simulation</p>
</div>
</div>
</div>
<div id="outline-container-orgb0f5db9" class="outline-3">
<h3 id="orgb0f5db9"><span class="section-number-3">2.7</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-7">
<div class="important"> <div class="important">
<p> <p>
@ -550,14 +586,128 @@ Finally, the time domain position error signals are shown in Figure <a href="#or
</div> </div>
</div> </div>
<div id="outline-container-org9bd2bf8" class="outline-2"> <div id="outline-container-org56b28cd" class="outline-2">
<h2 id="org9bd2bf8"><span class="section-number-2">3</span> Primary Control in the task space</h2> <h2 id="org56b28cd"><span class="section-number-2">3</span> Further More complex simulations</h2>
<div class="outline-text-2" id="text-3"> <div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-org6c1ddb5" class="outline-3">
<h3 id="org6c1ddb5"><span class="section-number-3">3.1</span> Simulation with Micro-Hexapod Offset</h3>
<div class="outline-text-3" id="text-3-1">
</div>
<div id="outline-container-org57e2cfd" class="outline-4">
<h4 id="org57e2cfd"><span class="section-number-4">3.1.1</span> Simulation</h4>
<div class="outline-text-4" id="text-3-1-1">
<p>
The micro-hexapod is inducing a 10mm offset of the sample center of mass with the rotation axis.
A tomography experiment is then simulated.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
initializeSimscapeConfiguration('gravity', false);
initializeLoggingConfiguration('log', 'all');
initializeSample('mass', 1, 'freq', 200);
initializeMicroHexapod('AP', [10e-3 0 0]);
initializeReferences('Rz_type', 'rotating', 'Rz_period', 1, ...
'Dh_pos', [10e-3; 0; 0; 0; 0; 0]);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">load('mat/conf_simulink.mat');
set_param(conf_simulink, 'StopTime', '3');
sim('nass_model');
</pre>
</div>
</div>
</div>
<div id="outline-container-org2c93370" class="outline-4">
<h4 id="org2c93370"><span class="section-number-4">3.1.2</span> Results</h4>
<div class="outline-text-4" id="text-3-1-2">
<div id="org6be7e46" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dh_offset_disp_error.png" alt="opt_stiff_hac_dvf_Dh_offset_disp_error.png" />
</p>
</div>
<div id="org07fa12d" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dh_offset_F.png" alt="opt_stiff_hac_dvf_Dh_offset_F.png" />
</p>
</div>
<div id="orga4d03c5" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dh_offset_dL.png" alt="opt_stiff_hac_dvf_Dh_offset_dL.png" />
</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org5cb899b" class="outline-3">
<h3 id="org5cb899b"><span class="section-number-3">3.2</span> Simultaneous Translation scans and Spindle&rsquo;s rotation</h3>
<div class="outline-text-3" id="text-3-2">
</div>
<div id="outline-container-org6710f28" class="outline-4">
<h4 id="org6710f28"><span class="section-number-4">3.2.1</span> Simulation</h4>
<div class="outline-text-4" id="text-3-2-1">
<p>
A simulation is now performed with translation scans and spindle rotation at the same time.
</p>
<p>
The sample has a mass one 1kg, the spindle rotation speed is 60rpm and the translation scans have a period of 4s and a triangular shape.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
initializeSimscapeConfiguration('gravity', false);
initializeLoggingConfiguration('log', 'all');
initializeSample('mass', 1, 'freq', 200);
initializeReferences('Rz_type', 'rotating', 'Rz_period', 1, ...
'Dy_type', 'triangular', 'Dy_amplitude', 5e-3, 'Dy_period', 4);
</pre>
</div>
</div>
</div>
<div id="outline-container-org035df39" class="outline-4">
<h4 id="org035df39"><span class="section-number-4">3.2.2</span> Results</h4>
<div class="outline-text-4" id="text-3-2-2">
<div id="orgbfa1d02" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dy_scans_disp_error.png" alt="opt_stiff_hac_dvf_Dy_scans_disp_error.png" />
</p>
</div>
<div id="org760b96c" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dy_scans_F.png" alt="opt_stiff_hac_dvf_Dy_scans_F.png" />
</p>
</div>
<div id="orgae36e3d" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dy_scans_dL.png" alt="opt_stiff_hac_dvf_Dy_scans_dL.png" />
</p>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-org9bd2bf8" class="outline-2">
<h2 id="org9bd2bf8"><span class="section-number-2">4</span> Primary Control in the task space</h2>
<div class="outline-text-2" id="text-4">
<p> <p>
<a id="orge9c2f9a"></a> <a id="orge9c2f9a"></a>
</p> </p>
<p> <p>
In this section, the control architecture shown in Figure <a href="#org7e70ccc">20</a> is applied and consists of: In this section, the control architecture shown in Figure <a href="#org7e70ccc">28</a> is applied and consists of:
</p> </p>
<ul class="org-ul"> <ul class="org-ul">
<li>an inner Low Authority Control loop consisting of a decentralized direct velocity control controller</li> <li>an inner Low Authority Control loop consisting of a decentralized direct velocity control controller</li>
@ -568,12 +718,12 @@ In this section, the control architecture shown in Figure <a href="#org7e70ccc">
<div id="org7e70ccc" class="figure"> <div id="org7e70ccc" class="figure">
<p><img src="figs/control_architecture_hac_dvf_pos_X.png" alt="control_architecture_hac_dvf_pos_X.png" /> <p><img src="figs/control_architecture_hac_dvf_pos_X.png" alt="control_architecture_hac_dvf_pos_X.png" />
</p> </p>
<p><span class="figure-number">Figure 20: </span>HAC-LAC architecture</p> <p><span class="figure-number">Figure 28: </span>HAC-LAC architecture</p>
</div> </div>
</div> </div>
<div id="outline-container-org07b4a9d" class="outline-3"> <div id="outline-container-org07b4a9d" class="outline-3">
<h3 id="org07b4a9d"><span class="section-number-3">3.1</span> Plant in the task space</h3> <h3 id="org07b4a9d"><span class="section-number-3">4.1</span> Plant in the task space</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-4-1">
<p> <p>
Let&rsquo;s look \(\bm{G}_\mathcal{X}(s)\). Let&rsquo;s look \(\bm{G}_\mathcal{X}(s)\).
</p> </p>
@ -581,60 +731,60 @@ Let&rsquo;s look \(\bm{G}_\mathcal{X}(s)\).
</div> </div>
<div id="outline-container-org7d888f9" class="outline-3"> <div id="outline-container-org7d888f9" class="outline-3">
<h3 id="org7d888f9"><span class="section-number-3">3.2</span> Control in the task space</h3> <h3 id="org7d888f9"><span class="section-number-3">4.2</span> Control in the task space</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-4-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kx = tf(zeros(6)); <pre class="src src-matlab">Kx = tf(zeros(6));
h = 2.5; h = 2.5;
Kx<span class="org-type">(1,1) </span>= 3e7 <span class="org-type">*</span> ... Kx(1,1) = 3e7 * ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ... 1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1); (s/2/pi/1 + 1)/(s/2/pi/1);
Kx<span class="org-type">(2,2) </span>= Kx(1,1); Kx(2,2) = Kx(1,1);
h = 2.5; h = 2.5;
Kx<span class="org-type">(3,3) </span>= 3e7 <span class="org-type">*</span> ... Kx(3,3) = 3e7 * ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ... 1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1); (s/2/pi/1 + 1)/(s/2/pi/1);
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">h = 1.5; <pre class="src src-matlab">h = 1.5;
Kx<span class="org-type">(4,4) </span>= 5e5 <span class="org-type">*</span> ... Kx(4,4) = 5e5 * ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ... 1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1); (s/2/pi/1 + 1)/(s/2/pi/1);
Kx<span class="org-type">(5,5) </span>= Kx(4,4); Kx(5,5) = Kx(4,4);
h = 1.5; h = 1.5;
Kx<span class="org-type">(6,6) </span>= 5e4 <span class="org-type">*</span> ... Kx(6,6) = 5e4 * ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>30<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>30<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ... 1/h*(s/(2*pi*30/h) + 1)/(s/(2*pi*30*h) + 1) * ...
(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1); (s/2/pi/1 + 1)/(s/2/pi/1);
</pre> </pre>
</div> </div>
</div> </div>
<div id="outline-container-orgb28634b" class="outline-4"> <div id="outline-container-orgb28634b" class="outline-4">
<h4 id="orgb28634b"><span class="section-number-4">3.2.1</span> Stability</h4> <h4 id="orgb28634b"><span class="section-number-4">4.2.1</span> Stability</h4>
<div class="outline-text-4" id="text-3-2-1"> <div class="outline-text-4" id="text-4-2-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ms)</span> <pre class="src src-matlab">for i = 1:length(Ms)
isstable(feedback(Gm_x{<span class="org-constant">i</span>}<span class="org-type">*</span>Kx, eye(6), <span class="org-type">-</span>1)) isstable(feedback(Gm_x{i}*Kx, eye(6), -1))
<span class="org-keyword">end</span> end
</pre> </pre>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org57e2cfd" class="outline-3"> <div id="outline-container-org9ea6a0a" class="outline-3">
<h3 id="org57e2cfd"><span class="section-number-3">3.3</span> Simulation</h3> <h3 id="org9ea6a0a"><span class="section-number-3">4.3</span> Simulation</h3>
</div> </div>
<div id="outline-container-org8c0882d" class="outline-3"> <div id="outline-container-org21304f7" class="outline-3">
<h3 id="org8c0882d"><span class="section-number-3">3.4</span> Conclusion</h3> <h3 id="org21304f7"><span class="section-number-3">4.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-4"> <div class="outline-text-3" id="text-4-4">
<div class="important"> <div class="important">
<p> <p>
@ -647,7 +797,7 @@ Kx<span class="org-type">(6,6) </span>= 5e4 <span class="org-type">*</span> ...
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 14:10</p> <p class="date">Created: 2020-05-05 mar. 10:34</p>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:35 --> <!-- 2020-05-05 mar. 10:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Evaluating the Plant Uncertainty in various experimental conditions</title> <title>Evaluating the Plant Uncertainty in various experimental conditions</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -39,13 +39,13 @@
<li><a href="#orga0077c1">2. Variation of the Sample Resonance Frequency</a></li> <li><a href="#orga0077c1">2. Variation of the Sample Resonance Frequency</a></li>
<li><a href="#orgb49a967">3. Variation of the Spindle Angle</a> <li><a href="#orgb49a967">3. Variation of the Spindle Angle</a>
<ul> <ul>
<li><a href="#org07d9092">3.1. Identification</a></li> <li><a href="#org027e6cb">3.1. Identification</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org9081b0f">4. Variation of the Spindle Rotation Speed</a> <li><a href="#org9081b0f">4. Variation of the Spindle Rotation Speed</a>
<ul> <ul>
<li><a href="#orgd625617">4.1. Initialization of gravity compensation forces</a></li> <li><a href="#orgd625617">4.1. Initialization of gravity compensation forces</a></li>
<li><a href="#org027e6cb">4.2. Identification</a></li> <li><a href="#orgd69bd8a">4.2. Identification</a></li>
<li><a href="#org70dd336">4.3. Plots</a></li> <li><a href="#org70dd336">4.3. Plots</a></li>
</ul> </ul>
</li> </li>
@ -107,7 +107,7 @@ We initialize all the stages with the default parameters.
We identify the dynamics for the following sample masses, both with a soft and stiff nano-hexapod. We identify the dynamics for the following sample masses, both with a soft and stiff nano-hexapod.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">masses = [1, 10, 50]; <span class="org-comment">% [kg]</span> <pre class="src src-matlab">masses = [1, 10, 50]; % [kg]
</pre> </pre>
</div> </div>
<p> <p>
@ -214,8 +214,8 @@ We initialize all the stages with the default parameters.
We identify the dynamics for the following sample resonance frequency. We identify the dynamics for the following sample resonance frequency.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">mass_w = [50, 100, 500]; <span class="org-comment">% [Hz]</span> <pre class="src src-matlab">mass_w = [50, 100, 500]; % [Hz]
mass = 10; <span class="org-comment">% [Kg]</span> mass = 10; % [Kg]
</pre> </pre>
</div> </div>
<p> <p>
@ -300,15 +300,15 @@ Let&rsquo;s note \(\omega_m\) the frequency of the resonance of the Payload.
<a id="org58b9cae"></a> <a id="org58b9cae"></a>
</p> </p>
</div> </div>
<div id="outline-container-org07d9092" class="outline-3"> <div id="outline-container-org027e6cb" class="outline-3">
<h3 id="org07d9092"><span class="section-number-3">3.1</span> Identification</h3> <h3 id="org027e6cb"><span class="section-number-3">3.1</span> Identification</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<p> <p>
We identify the dynamics for the following Tilt stage angles. We identify the dynamics for the following Tilt stage angles.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'mass'</span>, 50); <pre class="src src-matlab">initializeSample('mass', 50);
Rz_amplitudes = [0, <span class="org-constant">pi</span><span class="org-type">/</span>4, <span class="org-constant">pi</span><span class="org-type">/</span>2, <span class="org-constant">pi</span>]; <span class="org-comment">% [rad]</span> Rz_amplitudes = [0, pi/4, pi/2, pi]; % [rad]
</pre> </pre>
</div> </div>
</div> </div>
@ -369,8 +369,8 @@ We initialize all the stages such that their joints are blocked and we record th
We set a payload mass of 10Kg. We set a payload mass of 10Kg.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'init'</span>, <span class="org-string">'mass'</span>, 10); <pre class="src src-matlab">initializeSample('type', 'init', 'mass', 10);
nano_hexapod = initializeNanoHexapod( <span class="org-string">'type'</span>, <span class="org-string">'init'</span>); nano_hexapod = initializeNanoHexapod( 'type', 'init');
</pre> </pre>
</div> </div>
@ -379,15 +379,15 @@ Finally, we simulate the system and same the forces/torques applied in each join
</p> </p>
</div> </div>
</div> </div>
<div id="outline-container-org027e6cb" class="outline-3"> <div id="outline-container-orgd69bd8a" class="outline-3">
<h3 id="org027e6cb"><span class="section-number-3">4.2</span> Identification</h3> <h3 id="orgd69bd8a"><span class="section-number-3">4.2</span> Identification</h3>
<div class="outline-text-3" id="text-4-2"> <div class="outline-text-3" id="text-4-2">
<p> <p>
We initialize the stages with forces/torques compensating the gravity forces. We initialize the stages with forces/torques compensating the gravity forces.
We identify the dynamics for the following Spindle rotation periods. We identify the dynamics for the following Spindle rotation periods.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Rz_periods = [60, 6, 2, 1]; <span class="org-comment">% [s]</span> <pre class="src src-matlab">Rz_periods = [60, 6, 2, 1]; % [s]
</pre> </pre>
</div> </div>
</div> </div>
@ -472,8 +472,8 @@ We initialize all the stages with the default parameters.
We identify the dynamics for the following Tilt stage angles. We identify the dynamics for the following Tilt stage angles.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'mass'</span>, 50); <pre class="src src-matlab">initializeSample('mass', 50);
Ry_amplitudes = [<span class="org-type">-</span>3<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>180 0 3<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>180]; <span class="org-comment">% [rad]</span> Ry_amplitudes = [-3*pi/180 0 3*pi/180]; % [rad]
</pre> </pre>
</div> </div>
<p> <p>
@ -517,7 +517,7 @@ We initialize all the stages with the default parameters.
We identify the dynamics for the following translations of the micro-hexapod in the X direction. We identify the dynamics for the following translations of the micro-hexapod in the X direction.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Tx_amplitudes = [0, 5e<span class="org-type">-</span>3, 10e<span class="org-type">-</span>3]; <span class="org-comment">% [m]</span> <pre class="src src-matlab">Tx_amplitudes = [0, 5e-3, 10e-3]; % [m]
</pre> </pre>
</div> </div>
@ -603,7 +603,7 @@ From all the experimental condition studied, the only ones that have significant
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p> <p class="date">Created: 2020-05-05 mar. 10:34</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:35 --> <!-- 2020-05-05 mar. 10:33 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Determination of the optimal nano-hexapod&rsquo;s stiffness</title> <title>Determination of the optimal nano-hexapod&rsquo;s stiffness</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -37,7 +37,7 @@
<ul> <ul>
<li><a href="#org157c07d">1. Spindle Rotation Speed</a> <li><a href="#org157c07d">1. Spindle Rotation Speed</a>
<ul> <ul>
<li><a href="#orgf8f2ffc">1.1. Initialization</a></li> <li><a href="#orgd45a5be">1.1. Initialization</a></li>
<li><a href="#org687bdef">1.2. Identification when rotating at maximum speed</a></li> <li><a href="#org687bdef">1.2. Identification when rotating at maximum speed</a></li>
<li><a href="#org7dcfddb">1.3. Change of dynamics</a></li> <li><a href="#org7dcfddb">1.3. Change of dynamics</a></li>
</ul> </ul>
@ -52,7 +52,7 @@
</li> </li>
<li><a href="#org19559b0">3. Payload &ldquo;Impedance&rdquo; Effect</a> <li><a href="#org19559b0">3. Payload &ldquo;Impedance&rdquo; Effect</a>
<ul> <ul>
<li><a href="#orgd45a5be">3.1. Initialization</a></li> <li><a href="#org654fcb6">3.1. Initialization</a></li>
<li><a href="#org73f1c6e">3.2. Identification of the dynamics while change the payload dynamics</a></li> <li><a href="#org73f1c6e">3.2. Identification of the dynamics while change the payload dynamics</a></li>
<li><a href="#orgd7a519b">3.3. Change of dynamics for the primary controller</a> <li><a href="#orgd7a519b">3.3. Change of dynamics for the primary controller</a>
<ul> <ul>
@ -109,8 +109,8 @@ The rotation speed will have an effect due to the Coriolis effect.
</p> </p>
</div> </div>
<div id="outline-container-orgf8f2ffc" class="outline-3"> <div id="outline-container-orgd45a5be" class="outline-3">
<h3 id="orgf8f2ffc"><span class="section-number-3">1.1</span> Initialization</h3> <h3 id="orgd45a5be"><span class="section-number-3">1.1</span> Initialization</h3>
<div class="outline-text-3" id="text-1-1"> <div class="outline-text-3" id="text-1-1">
<p> <p>
We initialize all the stages with the default parameters. We initialize all the stages with the default parameters.
@ -131,7 +131,7 @@ initializeMirror();
We use a sample mass of 10kg. We use a sample mass of 10kg.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'mass'</span>, 10); <pre class="src src-matlab">initializeSample('mass', 10);
</pre> </pre>
</div> </div>
@ -140,9 +140,9 @@ We don&rsquo;t include disturbances in this model as it adds complexity to the s
We however include gravity. We however include gravity.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>); <pre class="src src-matlab">initializeSimscapeConfiguration('gravity', true);
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>); initializeDisturbances('enable', false);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>); initializeLoggingConfiguration('log', 'none');
initializeController(); initializeController();
</pre> </pre>
</div> </div>
@ -164,7 +164,7 @@ We identify the dynamics for the following spindle rotation speeds <code>Rz_rpm<
And for the following nano-hexapod actuator stiffness <code>Ks</code>: And for the following nano-hexapod actuator stiffness <code>Ks</code>:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span> <pre class="src src-matlab">Ks = logspace(3,9,7); % [N/m]
</pre> </pre>
</div> </div>
</div> </div>
@ -262,7 +262,7 @@ initializeGranite();
initializeTy(); initializeTy();
initializeRy(); initializeRy();
initializeRz(); initializeRz();
initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-string">'compliance'</span>); initializeMicroHexapod('type', 'compliance');
</pre> </pre>
</div> </div>
@ -270,10 +270,10 @@ initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-
We put nothing on top of the micro-hexapod. We put nothing on top of the micro-hexapod.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeAxisc(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); <pre class="src src-matlab">initializeAxisc('type', 'none');
initializeMirror(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); initializeMirror('type', 'none');
initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); initializeNanoHexapod('type', 'none');
initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>); initializeSample('type', 'none');
</pre> </pre>
</div> </div>
@ -300,7 +300,7 @@ This is equivalent of identifying the dynamics of the nano-hexapod when fixed to
We also choose the sample to be rigid and to have a mass of 10kg. We also choose the sample to be rigid and to have a mass of 10kg.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'mass'</span>, 10); <pre class="src src-matlab">initializeSample('type', 'rigid', 'mass', 10);
</pre> </pre>
</div> </div>
@ -308,7 +308,7 @@ We also choose the sample to be rigid and to have a mass of 10kg.
As before, we identify the dynamics for the following actuator stiffnesses: As before, we identify the dynamics for the following actuator stiffnesses:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span> <pre class="src src-matlab">Ks = logspace(3,9,7); % [N/m]
</pre> </pre>
</div> </div>
</div> </div>
@ -386,15 +386,15 @@ When the nano-hexapod is stiff (\(k>10^7\ [N/m]\)), the compliance of the micro-
</p> </p>
</div> </div>
<div id="outline-container-orgd45a5be" class="outline-3"> <div id="outline-container-org654fcb6" class="outline-3">
<h3 id="orgd45a5be"><span class="section-number-3">3.1</span> Initialization</h3> <h3 id="org654fcb6"><span class="section-number-3">3.1</span> Initialization</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<p> <p>
We initialize all the stages with the default parameters. We initialize all the stages with the default parameters.
We don&rsquo;t include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. :exports none We don&rsquo;t include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. :exports none
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>); <pre class="src src-matlab">initializeDisturbances('enable', false);
</pre> </pre>
</div> </div>
@ -402,9 +402,9 @@ We don&rsquo;t include disturbances in this model as it adds complexity to the s
We set the controller type to Open-Loop, and we do not need to log any signal. We set the controller type to Open-Loop, and we do not need to log any signal.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>); <pre class="src src-matlab">initializeSimscapeConfiguration('gravity', true);
initializeController(); initializeController();
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>); initializeLoggingConfiguration('log', 'none');
initializeReferences(); initializeReferences();
</pre> </pre>
</div> </div>
@ -427,8 +427,8 @@ We make the following change of payload dynamics:
We identify the dynamics for the following payload masses <code>Ms</code> and nano-hexapod leg&rsquo;s stiffnesses <code>Ks</code>: We identify the dynamics for the following payload masses <code>Ms</code> and nano-hexapod leg&rsquo;s stiffnesses <code>Ks</code>:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ms = [1, 20, 50]; <span class="org-comment">% [Kg]</span> <pre class="src src-matlab">Ms = [1, 20, 50]; % [Kg]
Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span> Ks = logspace(3,9,7); % [N/m]
</pre> </pre>
</div> </div>
@ -436,7 +436,7 @@ Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span>
We then identify the dynamics for the following payload resonance frequencies <code>Fs</code>: We then identify the dynamics for the following payload resonance frequencies <code>Fs</code>:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Fs = [50, 200, 500]; <span class="org-comment">% [Hz]</span> <pre class="src src-matlab">Fs = [50, 200, 500]; % [Hz]
</pre> </pre>
</div> </div>
</div> </div>
@ -629,7 +629,7 @@ And finally, in Figures <a href="#orge05feb5">21</a> and <a href="#org17c5c95">2
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p> <p class="date">Created: 2020-05-05 mar. 10:33</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:35 --> <!-- 2020-05-05 mar. 10:33 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Effect of Uncertainty on the payload&rsquo;s dynamics on the isolation platform dynamics</title> <title>Effect of Uncertainty on the payload&rsquo;s dynamics on the isolation platform dynamics</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -37,17 +37,17 @@
<ul> <ul>
<li><a href="#orgcc5f0ec">1. Simple Introductory Example</a> <li><a href="#orgcc5f0ec">1. Simple Introductory Example</a>
<ul> <ul>
<li><a href="#orgf75e223">1.1. Equations of motion</a></li> <li><a href="#org5ed1517">1.1. Equations of motion</a></li>
<li><a href="#org4efccbf">1.2. Initialization of the payload dynamics</a></li> <li><a href="#org4efccbf">1.2. Initialization of the payload dynamics</a></li>
<li><a href="#orgb400ca3">1.3. Initialization of the isolation platform</a></li> <li><a href="#orgb400ca3">1.3. Initialization of the isolation platform</a></li>
<li><a href="#orgd0dd88b">1.4. Comparison</a></li> <li><a href="#orgd0dd88b">1.4. Comparison</a></li>
<li><a href="#orgd1e600e">1.5. Conclusion</a></li> <li><a href="#org3f697cc">1.5. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org1f8e63e">2. Generalization to arbitrary dynamics</a> <li><a href="#org1f8e63e">2. Generalization to arbitrary dynamics</a>
<ul> <ul>
<li><a href="#orgc4fa63e">2.1. Introduction</a></li> <li><a href="#orgc4fa63e">2.1. Introduction</a></li>
<li><a href="#org5ed1517">2.2. Equations of motion</a></li> <li><a href="#org3367211">2.2. Equations of motion</a></li>
<li><a href="#orge217a33">2.3. Impedance \(G^\prime(s)\) of a mass-spring-damper payload</a></li> <li><a href="#orge217a33">2.3. Impedance \(G^\prime(s)\) of a mass-spring-damper payload</a></li>
<li><a href="#org0ee44da">2.4. First Analytical analysis</a></li> <li><a href="#org0ee44da">2.4. First Analytical analysis</a></li>
<li><a href="#orgfe81c1c">2.5. Impedance of the Payload and Dynamical Uncertainty</a></li> <li><a href="#orgfe81c1c">2.5. Impedance of the Payload and Dynamical Uncertainty</a></li>
@ -60,7 +60,7 @@
<li><a href="#org9086831">2.8.3. Effect of the platform&rsquo;s mass \(m\)</a></li> <li><a href="#org9086831">2.8.3. Effect of the platform&rsquo;s mass \(m\)</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org3f697cc">2.9. Conclusion</a></li> <li><a href="#org272e76a">2.9. Conclusion</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -114,8 +114,8 @@ The goal is to stabilize \(x\) using \(F\) in spite of uncertainty on the payloa
</div> </div>
</div> </div>
<div id="outline-container-orgf75e223" class="outline-3"> <div id="outline-container-org5ed1517" class="outline-3">
<h3 id="orgf75e223"><span class="section-number-3">1.1</span> Equations of motion</h3> <h3 id="org5ed1517"><span class="section-number-3">1.1</span> Equations of motion</h3>
<div class="outline-text-3" id="text-1-1"> <div class="outline-text-3" id="text-1-1">
<p> <p>
If we write the equation of motion of the system in Figure <a href="#orgaa77a57">1</a>, we obtain: If we write the equation of motion of the system in Figure <a href="#orgaa77a57">1</a>, we obtain:
@ -152,8 +152,8 @@ Let the payload have:
kpi = 5e6; kpi = 5e6;
cpi = 3e3; cpi = 3e3;
kpi = (2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50)<span class="org-type">^</span>2<span class="org-type">*</span>mpi; kpi = (2*pi*50)^2*mpi;
cpi = 0.2<span class="org-type">*</span>sqrt(kpi<span class="org-type">*</span>mpi); cpi = 0.2*sqrt(kpi*mpi);
</pre> </pre>
</div> </div>
@ -161,9 +161,9 @@ cpi = 0.2<span class="org-type">*</span>sqrt(kpi<span class="org-type">*</span>m
Let&rsquo;s also consider some uncertainty in those parameters: Let&rsquo;s also consider some uncertainty in those parameters:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">mp = ureal(<span class="org-string">'m'</span>, mpi, <span class="org-string">'Range'</span>, [1, 100]); <pre class="src src-matlab">mp = ureal('m', mpi, 'Range', [1, 100]);
cp = ureal(<span class="org-string">'c'</span>, cpi, <span class="org-string">'Percentage'</span>, 30); cp = ureal('c', cpi, 'Percentage', 30);
kp = ureal(<span class="org-string">'k'</span>, kpi, <span class="org-string">'Percentage'</span>, 30); kp = ureal('k', kpi, 'Percentage', 30);
</pre> </pre>
</div> </div>
@ -222,8 +222,8 @@ The obtained dynamics from \(F\) to \(x\) for the three isolation platform are s
</div> </div>
</div> </div>
<div id="outline-container-orgd1e600e" class="outline-3"> <div id="outline-container-org3f697cc" class="outline-3">
<h3 id="orgd1e600e"><span class="section-number-3">1.5</span> Conclusion</h3> <h3 id="org3f697cc"><span class="section-number-3">1.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-5"> <div class="outline-text-3" id="text-1-5">
<div class="important"> <div class="important">
<p> <p>
@ -275,8 +275,8 @@ Now let&rsquo;s consider the system consisting of a mass-spring-system (the isol
</div> </div>
</div> </div>
<div id="outline-container-org5ed1517" class="outline-3"> <div id="outline-container-org3367211" class="outline-3">
<h3 id="org5ed1517"><span class="section-number-3">2.2</span> Equations of motion</h3> <h3 id="org3367211"><span class="section-number-3">2.2</span> Equations of motion</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<p> <p>
We have to following equations of motion: We have to following equations of motion:
@ -343,7 +343,7 @@ And we obtain
\end{align*} \end{align*}
<p> <p>
Which is the same transfer function that was obtained in section <a href="#org971d11c">1</a> (Eq. \eqref{orge5d69a3}). Which is the same transfer function that was obtained in section <a href="#org971d11c">1</a> (Eq. \eqref{eq:plant_simple_system}).
</p> </p>
<p> <p>
@ -455,7 +455,7 @@ The main resonance of the payload is then \(\omega^\prime = \sqrt{\frac{m^\prime
c0 = 3e2; c0 = 3e2;
k0 = 5e5; k0 = 5e5;
Gp0 = (m0<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">*</span> (c0<span class="org-type">*</span>s <span class="org-type">+</span> k0))<span class="org-type">/</span>(m0<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c0<span class="org-type">*</span>s <span class="org-type">+</span> k0); Gp0 = (m0*s^2 * (c0*s + k0))/(m0*s^2 + c0*s + k0);
</pre> </pre>
</div> </div>
@ -486,10 +486,10 @@ The parameters are defined below.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">r0 = 0.5; <pre class="src src-matlab">r0 = 0.5;
tau = 1<span class="org-type">/</span>(50<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span>); tau = 1/(50*2*pi);
rinf = 10; rinf = 10;
wI = (tau<span class="org-type">*</span>s <span class="org-type">+</span> r0)<span class="org-type">/</span>((tau<span class="org-type">/</span>rinf)<span class="org-type">*</span>s <span class="org-type">+</span> 1); wI = (tau*s + r0)/((tau/rinf)*s + 1);
</pre> </pre>
</div> </div>
@ -497,7 +497,7 @@ wI = (tau<span class="org-type">*</span>s <span class="org-type">+</span> r0)<sp
We then generate a complex \(\Delta\). We then generate a complex \(\Delta\).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">DeltaI = ucomplex(<span class="org-string">'A'</span>,0); <pre class="src src-matlab">DeltaI = ucomplex('A',0);
</pre> </pre>
</div> </div>
@ -505,7 +505,7 @@ We then generate a complex \(\Delta\).
We generate the uncertain plant \(G^\prime(s)\). We generate the uncertain plant \(G^\prime(s)\).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Gp = Gp0<span class="org-type">*</span>(1<span class="org-type">+</span>wI<span class="org-type">*</span>DeltaI); <pre class="src src-matlab">Gp = Gp0*(1+wI*DeltaI);
</pre> </pre>
</div> </div>
@ -583,12 +583,12 @@ And we generate three isolation platforms:
Soft Isolation Platform: Soft Isolation Platform:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">k_soft = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5)<span class="org-type">^</span>2; <pre class="src src-matlab">k_soft = m*(2*pi*5)^2;
c_soft = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_soft); c_soft = 0.1*sqrt(m*k_soft);
G_soft = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft <span class="org-type">+</span> Gp); G_soft = 1/(m*s^2 + c_soft*s + k_soft + Gp);
G0_soft = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft <span class="org-type">+</span> Gp0); G0_soft = 1/(m*s^2 + c_soft*s + k_soft + Gp0);
wiI_soft = Gp0<span class="org-type">*</span>G0_soft<span class="org-type">*</span>wI; wiI_soft = Gp0*G0_soft*wI;
</pre> </pre>
</div> </div>
@ -596,12 +596,12 @@ wiI_soft = Gp0<span class="org-type">*</span>G0_soft<span class="org-type">*</sp
Mid Isolation Platform Mid Isolation Platform
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">k_mid = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50)<span class="org-type">^</span>2; <pre class="src src-matlab">k_mid = m*(2*pi*50)^2;
c_mid = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_mid); c_mid = 0.1*sqrt(m*k_mid);
G_mid = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid <span class="org-type">+</span> Gp); G_mid = 1/(m*s^2 + c_mid*s + k_mid + Gp);
G0_mid = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid <span class="org-type">+</span> Gp0); G0_mid = 1/(m*s^2 + c_mid*s + k_mid + Gp0);
wiI_mid = Gp0<span class="org-type">*</span>G0_mid<span class="org-type">*</span>wI; wiI_mid = Gp0*G0_mid*wI;
</pre> </pre>
</div> </div>
@ -609,12 +609,12 @@ wiI_mid = Gp0<span class="org-type">*</span>G0_mid<span class="org-type">*</span
Stiff Isolation Platform Stiff Isolation Platform
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">k_stiff = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>500)<span class="org-type">^</span>2; <pre class="src src-matlab">k_stiff = m*(2*pi*500)^2;
c_stiff = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_stiff); c_stiff = 0.1*sqrt(m*k_stiff);
G_stiff = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff <span class="org-type">+</span> Gp); G_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + Gp);
G0_stiff = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff <span class="org-type">+</span> Gp0); G0_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + Gp0);
wiI_stiff = Gp0<span class="org-type">*</span>G0_stiff<span class="org-type">*</span>wI; wiI_stiff = Gp0*G0_stiff*wI;
</pre> </pre>
</div> </div>
@ -732,8 +732,8 @@ Let&rsquo;s fix \(k = 10^7\ [N/m]\), \(\xi = \frac{c}{2\sqrt{km}} = 0.1\) and se
</div> </div>
</div> </div>
<div id="outline-container-org3f697cc" class="outline-3"> <div id="outline-container-org272e76a" class="outline-3">
<h3 id="org3f697cc"><span class="section-number-3">2.9</span> Conclusion</h3> <h3 id="org272e76a"><span class="section-number-3">2.9</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-9"> <div class="outline-text-3" id="text-2-9">
<div class="important"> <div class="important">
<p> <p>
@ -757,7 +757,7 @@ In that case, maximizing the stiffness of the payload is a good idea.
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p> <p class="date">Created: 2020-05-05 mar. 10:33</p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-17 ven. 09:35 --> <!-- 2020-05-05 mar. 10:33 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Effect of Uncertainty on the support&rsquo;s dynamics on the isolation platform dynamics</title> <title>Effect of Uncertainty on the support&rsquo;s dynamics on the isolation platform dynamics</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
@ -37,17 +37,17 @@
<ul> <ul>
<li><a href="#orgbe6e0b8">1. Simple Introductory Example</a> <li><a href="#orgbe6e0b8">1. Simple Introductory Example</a>
<ul> <ul>
<li><a href="#orgf4562a5">1.1. Equations of motion</a></li> <li><a href="#org3d4902a">1.1. Equations of motion</a></li>
<li><a href="#org8bd2a4a">1.2. Initialization of the support dynamics</a></li> <li><a href="#org8bd2a4a">1.2. Initialization of the support dynamics</a></li>
<li><a href="#orgefb9b71">1.3. Initialization of the isolation platform</a></li> <li><a href="#orgefb9b71">1.3. Initialization of the isolation platform</a></li>
<li><a href="#org3bc4ad1">1.4. Comparison</a></li> <li><a href="#org3bc4ad1">1.4. Comparison</a></li>
<li><a href="#org2a9bf99">1.5. Conclusion</a></li> <li><a href="#org999e1c5">1.5. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orge1d3484">2. Generalization to arbitrary dynamics</a> <li><a href="#orge1d3484">2. Generalization to arbitrary dynamics</a>
<ul> <ul>
<li><a href="#org3948d1f">2.1. Introduction</a></li> <li><a href="#org3948d1f">2.1. Introduction</a></li>
<li><a href="#org3d4902a">2.2. Equations of motion</a></li> <li><a href="#org18c1c3f">2.2. Equations of motion</a></li>
<li><a href="#orgc20cabb">2.3. Compliance of the Support</a></li> <li><a href="#orgc20cabb">2.3. Compliance of the Support</a></li>
<li><a href="#org67810a4">2.4. Equivalent Inverse Multiplicative Uncertainty</a></li> <li><a href="#org67810a4">2.4. Equivalent Inverse Multiplicative Uncertainty</a></li>
<li><a href="#orge950395">2.5. Effect of the Isolation platform Stiffness</a></li> <li><a href="#orge950395">2.5. Effect of the Isolation platform Stiffness</a></li>
@ -58,7 +58,7 @@
<li><a href="#orgd2fc303">2.6.3. Effect of the platform&rsquo;s mass \(m\)</a></li> <li><a href="#orgd2fc303">2.6.3. Effect of the platform&rsquo;s mass \(m\)</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org999e1c5">2.7. Conclusion</a></li> <li><a href="#orgde3616e">2.7. Conclusion</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -112,8 +112,8 @@ The goal is to stabilize \(x\) using \(F\) in spite of uncertainty on the suppor
</div> </div>
</div> </div>
<div id="outline-container-orgf4562a5" class="outline-3"> <div id="outline-container-org3d4902a" class="outline-3">
<h3 id="orgf4562a5"><span class="section-number-3">1.1</span> Equations of motion</h3> <h3 id="org3d4902a"><span class="section-number-3">1.1</span> Equations of motion</h3>
<div class="outline-text-3" id="text-1-1"> <div class="outline-text-3" id="text-1-1">
<p> <p>
If we write the equation of motion of the system in Figure <a href="#org41bc770">1</a>, we obtain: If we write the equation of motion of the system in Figure <a href="#org41bc770">1</a>, we obtain:
@ -156,9 +156,9 @@ kpi = 1e8;
Let&rsquo;s also consider some uncertainty in those parameters: Let&rsquo;s also consider some uncertainty in those parameters:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">mp = ureal(<span class="org-string">'m'</span>, mpi, <span class="org-string">'Percentage'</span>, 30); <pre class="src src-matlab">mp = ureal('m', mpi, 'Percentage', 30);
cp = ureal(<span class="org-string">'c'</span>, cpi, <span class="org-string">'Percentage'</span>, 30); cp = ureal('c', cpi, 'Percentage', 30);
kp = ureal(<span class="org-string">'k'</span>, kpi, <span class="org-string">'Percentage'</span>, 30); kp = ureal('k', kpi, 'Percentage', 30);
</pre> </pre>
</div> </div>
@ -217,8 +217,8 @@ The obtained dynamics from \(F\) to \(x\) for the three isolation platform are s
</div> </div>
</div> </div>
<div id="outline-container-org2a9bf99" class="outline-3"> <div id="outline-container-org999e1c5" class="outline-3">
<h3 id="org2a9bf99"><span class="section-number-3">1.5</span> Conclusion</h3> <h3 id="org999e1c5"><span class="section-number-3">1.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-5"> <div class="outline-text-3" id="text-1-5">
<div class="important"> <div class="important">
<p> <p>
@ -263,8 +263,8 @@ Now let&rsquo;s consider the system consisting of a mass-spring-system (the isol
</div> </div>
</div> </div>
<div id="outline-container-org3d4902a" class="outline-3"> <div id="outline-container-org18c1c3f" class="outline-3">
<h3 id="org3d4902a"><span class="section-number-3">2.2</span> Equations of motion</h3> <h3 id="org18c1c3f"><span class="section-number-3">2.2</span> Equations of motion</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<p> <p>
We have to following equations of motion: We have to following equations of motion:
@ -294,7 +294,7 @@ In order to verify that the formula is correct, let&rsquo;s take the same mass-s
<p> <p>
And we obtain And we obtain
\[ \frac{x}{F} = \frac{m^\prime s^2 + c^\prime s + k^\prime}{(ms^2 + cs + k)(m^\prime s^2 + c^\prime s + k^\prime) + ms^2(cs + k)} \] \[ \frac{x}{F} = \frac{m^\prime s^2 + c^\prime s + k^\prime}{(ms^2 + cs + k)(m^\prime s^2 + c^\prime s + k^\prime) + ms^2(cs + k)} \]
Which is the same transfer function that was obtained in section <a href="#org232d01f">1</a> (Eq. \eqref{org2d73355}). Which is the same transfer function that was obtained in section <a href="#org232d01f">1</a> (Eq. \eqref{eq:plant_simple_system}).
</p> </p>
</div> </div>
</div> </div>
@ -316,7 +316,7 @@ The main resonance of the support is then \(\omega^\prime = \sqrt{\frac{m^\prime
c0 = 5e4; c0 = 5e4;
k0 = 1e8; k0 = 1e8;
Gp0 = 1<span class="org-type">/</span>(m0<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c0<span class="org-type">*</span>s <span class="org-type">+</span> k0); Gp0 = 1/(m0*s^2 + c0*s + k0);
</pre> </pre>
</div> </div>
@ -347,10 +347,10 @@ The parameters are defined below.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">r0 = 0.5; <pre class="src src-matlab">r0 = 0.5;
tau = 1<span class="org-type">/</span>(100<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span>); tau = 1/(100*2*pi);
rinf = 10; rinf = 10;
wI = (tau<span class="org-type">*</span>s <span class="org-type">+</span> r0)<span class="org-type">/</span>((tau<span class="org-type">/</span>rinf)<span class="org-type">*</span>s <span class="org-type">+</span> 1); wI = (tau*s + r0)/((tau/rinf)*s + 1);
</pre> </pre>
</div> </div>
@ -358,7 +358,7 @@ wI = (tau<span class="org-type">*</span>s <span class="org-type">+</span> r0)<sp
We then generate a complex \(\Delta\). We then generate a complex \(\Delta\).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">DeltaI = ucomplex(<span class="org-string">'A'</span>,0); <pre class="src src-matlab">DeltaI = ucomplex('A',0);
</pre> </pre>
</div> </div>
@ -366,7 +366,7 @@ We then generate a complex \(\Delta\).
We generate the uncertain plant \(G^\prime(s)\). We generate the uncertain plant \(G^\prime(s)\).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Gp = Gp0<span class="org-type">*</span>(1<span class="org-type">+</span>wI<span class="org-type">*</span>DeltaI); <pre class="src src-matlab">Gp = Gp0*(1+wI*DeltaI);
</pre> </pre>
</div> </div>
@ -445,12 +445,12 @@ And we generate three isolation platforms:
Soft Isolation Platform: Soft Isolation Platform:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">k_soft = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5)<span class="org-type">^</span>2; <pre class="src src-matlab">k_soft = m*(2*pi*5)^2;
c_soft = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_soft); c_soft = 0.1*sqrt(m*k_soft);
G_soft = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft)<span class="org-type">*</span>Gp); G_soft = 1/(m*s^2 + c_soft*s + k_soft + m*s^2*(c_soft*s + k_soft)*Gp);
G0_soft = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft)<span class="org-type">*</span>Gp0); G0_soft = 1/(m*s^2 + c_soft*s + k_soft + m*s^2*(c_soft*s + k_soft)*Gp0);
wiI_soft = Gp0<span class="org-type">*</span>m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_soft<span class="org-type">*</span>s <span class="org-type">+</span> k_soft)<span class="org-type">*</span>G0_soft<span class="org-type">*</span>wI; wiI_soft = Gp0*m*s^2*(c_soft*s + k_soft)*G0_soft*wI;
</pre> </pre>
</div> </div>
@ -458,12 +458,12 @@ wiI_soft = Gp0<span class="org-type">*</span>m<span class="org-type">*</span>s<s
Mid Isolation Platform Mid Isolation Platform
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">k_mid = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50)<span class="org-type">^</span>2; <pre class="src src-matlab">k_mid = m*(2*pi*50)^2;
c_mid = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_mid); c_mid = 0.1*sqrt(m*k_mid);
G_mid = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid)<span class="org-type">*</span>Gp); G_mid = 1/(m*s^2 + c_mid*s + k_mid + m*s^2*(c_mid*s + k_mid)*Gp);
G0_mid = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid)<span class="org-type">*</span>Gp0); G0_mid = 1/(m*s^2 + c_mid*s + k_mid + m*s^2*(c_mid*s + k_mid)*Gp0);
wiI_mid = Gp0<span class="org-type">*</span>m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_mid<span class="org-type">*</span>s <span class="org-type">+</span> k_mid)<span class="org-type">*</span>G0_mid<span class="org-type">*</span>wI; wiI_mid = Gp0*m*s^2*(c_mid*s + k_mid)*G0_mid*wI;
</pre> </pre>
</div> </div>
@ -471,12 +471,12 @@ wiI_mid = Gp0<span class="org-type">*</span>m<span class="org-type">*</span>s<sp
Stiff Isolation Platform Stiff Isolation Platform
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">k_stiff = m<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>500)<span class="org-type">^</span>2; <pre class="src src-matlab">k_stiff = m*(2*pi*500)^2;
c_stiff = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_stiff); c_stiff = 0.1*sqrt(m*k_stiff);
G_stiff = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff)<span class="org-type">*</span>Gp); G_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + m*s^2*(c_stiff*s + k_stiff)*Gp);
G0_stiff = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff <span class="org-type">+</span> m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff)<span class="org-type">*</span>Gp0); G0_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + m*s^2*(c_stiff*s + k_stiff)*Gp0);
wiI_stiff = Gp0<span class="org-type">*</span>m<span class="org-type">*</span>s<span class="org-type">^</span>2<span class="org-type">*</span>(c_stiff<span class="org-type">*</span>s <span class="org-type">+</span> k_stiff)<span class="org-type">*</span>G0_stiff<span class="org-type">*</span>wI; wiI_stiff = Gp0*m*s^2*(c_stiff*s + k_stiff)*G0_stiff*wI;
</pre> </pre>
</div> </div>
@ -600,8 +600,8 @@ Let&rsquo;s fix \(k = 10^7\ [N/m]\), \(\xi = \frac{c}{2\sqrt{km}} = 0.1\) and se
</div> </div>
</div> </div>
<div id="outline-container-org999e1c5" class="outline-3"> <div id="outline-container-orgde3616e" class="outline-3">
<h3 id="org999e1c5"><span class="section-number-3">2.7</span> Conclusion</h3> <h3 id="orgde3616e"><span class="section-number-3">2.7</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-7"> <div class="outline-text-3" id="text-2-7">
<div class="important"> <div class="important">
<p> <p>
@ -629,7 +629,7 @@ Thus, if a stiff isolation platform is used, the recommendation is to have the l
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p> <p class="date">Created: 2020-05-05 mar. 10:33</p>
</div> </div>
</body> </body>
</html> </html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -257,7 +257,7 @@ We identify the dynamics of the system using the =linearize= function.
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'}; G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'};
G_cart_i = G*inv(nano_hexapod.J'); G_cart_i = G*inv(nano_hexapod.kinematics.J');
G_cart_i.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; G_cart_i.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
G_cart(i) = {G_cart_i}; G_cart(i) = {G_cart_i};
@ -1828,7 +1828,7 @@ We identify the dynamics for the following sample mass.
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'}; G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'};
G_cart = G*inv(nano_hexapod.J'); G_cart = G*inv(nano_hexapod.kinematics.J');
G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
G_cart_iff(i) = {G_cart}; G_cart_iff(i) = {G_cart};
@ -2308,7 +2308,7 @@ We identify the dynamics for the following sample mass.
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'}; G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'};
G_cart = G*inv(nano_hexapod.J'); G_cart = G*inv(nano_hexapod.kinematics.J');
G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
G_cart_dvf(i) = {G_cart}; G_cart_dvf(i) = {G_cart};
@ -2783,7 +2783,7 @@ We identify the dynamics for the following sample mass.
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'}; G.OutputName = {'Dnx', 'Dny', 'Dnz', 'Rnx', 'Rny', 'Rnz'};
G_cart = G*inv(nano_hexapod.J'); G_cart = G*inv(nano_hexapod.kinematics.J');
G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
G_cart_ine(i) = {G_cart}; G_cart_ine(i) = {G_cart};

View File

@ -375,7 +375,7 @@ The minus sine is put here because there is already a minus sign included due to
#+begin_src matlab #+begin_src matlab
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
Gx = -G*inv(nano_hexapod.J'); Gx = -G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
#+end_src #+end_src
@ -495,7 +495,7 @@ The controller consists of:
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
Kx = inv(nano_hexapod.J')*Kx; Kx = inv(nano_hexapod.kinematics.J')*Kx;
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab

View File

@ -106,11 +106,11 @@ Identification of the Primary plant without virtual add of mass
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}; G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gx = -G*inv(nano_hexapod.J'); Gx = -G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
G_x(i) = {Gx}; G_x(i) = {Gx};
Gl = -nano_hexapod.J*G; Gl = -nano_hexapod.kinematics.J*G;
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'}; Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
G_l(i) = {Gl}; G_l(i) = {Gl};
end end
@ -231,11 +231,11 @@ exportFig('figs/virtual_mass_loop_gain_L.pdf', 'width', 'full', 'height', 'full'
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}; G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gx = -G*inv(nano_hexapod.J'); Gx = -G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
GmL_x(i) = {Gx}; GmL_x(i) = {Gx};
Gl = -nano_hexapod.J*G; Gl = -nano_hexapod.kinematics.J*G;
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'}; Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
GmL_l(i) = {Gl}; GmL_l(i) = {Gl};
end end
@ -379,7 +379,7 @@ Let's look at the transfer function from $\bm{\mathcal{F}}$ to $d\bm{\mathcal{X}
GmX = {zeros(length(Ms), 1)}; GmX = {zeros(length(Ms), 1)};
for i = 1:length(Ms) for i = 1:length(Ms)
GmX(i) = {inv(nano_hexapod.J) * Gm{i} * inv(nano_hexapod.J')}; GmX(i) = {inv(nano_hexapod.kinematics.J) * Gm{i} * inv(nano_hexapod.kinematics.J')};
end end
#+end_src #+end_src
@ -539,7 +539,7 @@ exportFig('figs/virtual_mass_loop_gain_X.pdf', 'width', 'full', 'height', 'full'
[[file:figs/virtual_mass_loop_gain_X.png]] [[file:figs/virtual_mass_loop_gain_X.png]]
#+begin_src matlab #+begin_src matlab
Kdvf = inv(nano_hexapod.J')*KmX*inv(nano_hexapod.J); Kdvf = inv(nano_hexapod.kinematics.J')*KmX*inv(nano_hexapod.kinematics.J);
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
@ -572,11 +572,11 @@ exportFig('figs/virtual_mass_loop_gain_X.pdf', 'width', 'full', 'height', 'full'
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}; G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gx = -G*inv(nano_hexapod.J'); Gx = -G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
GmX_x(i) = {Gx}; GmX_x(i) = {Gx};
Gl = -nano_hexapod.J*G; Gl = -nano_hexapod.kinematics.J*G;
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'}; Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
GmX_l(i) = {Gl}; GmX_l(i) = {Gl};
end end

View File

@ -439,10 +439,10 @@ A minus sign is added because the minus sign is already included in the plant id
#+begin_src matlab #+begin_src matlab
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
Gpx = Gp*inv(nano_hexapod.J'); Gpx = Gp*inv(nano_hexapod.kinematics.J');
Gpx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gpx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Gpl = nano_hexapod.J*Gp; Gpl = nano_hexapod.kinematics.J*Gp;
Gpl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'}; Gpl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
#+end_src #+end_src
@ -647,7 +647,7 @@ A minus sign is added because the minus sign is already included in the plant id
And now we include the Jacobian inside the controller. And now we include the Jacobian inside the controller.
#+begin_src matlab #+begin_src matlab
Kp = inv(nano_hexapod.J')*Kp; Kp = inv(nano_hexapod.kinematics.J')*Kp;
#+end_src #+end_src
#+begin_src matlab :exports none :tangle no #+begin_src matlab :exports none :tangle no
@ -686,11 +686,11 @@ And we simulate the system.
#+begin_src matlab :exports none #+begin_src matlab :exports none
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
F_pz = [nano_hexapod.J'*cascade_hac_lac.u.Data']'; F_pz = [nano_hexapod.kinematics.J'*cascade_hac_lac.u.Data']';
F_vc = [nano_hexapod.J'*cascade_hac_lac_lorentz.u.Data']'; F_vc = [nano_hexapod.kinematics.J'*cascade_hac_lac_lorentz.u.Data']';
% F_pz = [-nano_hexapod.J'*cascade_hac_lac.yn.Fnlm.Data']'; % F_pz = [-nano_hexapod.kinematics.J'*cascade_hac_lac.yn.Fnlm.Data']';
% F_vc = [-nano_hexapod.J'*cascade_hac_lac_lorentz.yn.Fnlm.Data']'; % F_vc = [-nano_hexapod.kinematics.J'*cascade_hac_lac_lorentz.yn.Fnlm.Data']';
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
@ -1384,10 +1384,10 @@ A minus sign is added to cancel the minus sign already included in the identifie
#+begin_src matlab #+begin_src matlab
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
Gpx_m = Gp_m*inv(nano_hexapod.J'); Gpx_m = Gp_m*inv(nano_hexapod.kinematics.J');
Gpx_m.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gpx_m.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Gpl_m = nano_hexapod.J*Gp_m; Gpl_m = nano_hexapod.kinematics.J*Gp_m;
Gpl_m.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'}; Gpl_m.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
#+end_src #+end_src
@ -1490,7 +1490,7 @@ We load the primary controller that was design when the payload has a mass of 1K
We load the HAC controller design when the payload has a mass of 1Kg. We load the HAC controller design when the payload has a mass of 1Kg.
#+begin_src matlab #+begin_src matlab
load('mat/hac_lac_cascade_vc_controllers.mat', 'Kp') load('mat/hac_lac_cascade_vc_controllers.mat', 'Kp')
Kp_x = nano_hexapod.J'*Kp; Kp_x = nano_hexapod.kinematics.J'*Kp;
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
@ -1670,10 +1670,10 @@ And we simulate the system.
#+begin_src matlab #+begin_src matlab
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
Gx = G*inv(nano_hexapod.J'); Gx = G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Gl = nano_hexapod.J*G; Gl = nano_hexapod.kinematics.J*G;
Gl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'}; Gl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
#+end_src #+end_src
@ -2010,7 +2010,7 @@ We can do that in two different ways:
The obtained plant is shown in Figure The obtained plant is shown in Figure
#+begin_src matlab #+begin_src matlab
Gx = G*inv(nano_hexapod.J'); Gx = G*inv(nano_hexapod.kinematics.J');
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
@ -2076,7 +2076,7 @@ The obtained plant is shown in Figure
*** Plant in the Leg's space *** Plant in the Leg's space
#+begin_src matlab #+begin_src matlab
Gl = nano_hexapod.J*G; Gl = nano_hexapod.kinematics.J*G;
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
@ -2287,10 +2287,10 @@ The obtained plant is shown in Figure
#+begin_src matlab #+begin_src matlab
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
Gx = G*inv(nano_hexapod.J'); Gx = G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Gl = nano_hexapod.J*G; Gl = nano_hexapod.kinematics.J*G;
Gl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'}; Gl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
#+end_src #+end_src

View File

@ -119,7 +119,7 @@
fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude); fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude);
case { 'rotating', 'rotating-not-filtered' } case { 'rotating', 'rotating-not-filtered' }
fprintf(' - Rotating\n'); fprintf(' - Rotating\n');
fprintf(' - Speed = %.0f [rpm]\n', 60/Rz_period); fprintf(' - Speed = %.0f [rpm]\n', 60/args.Rz_period);
end end
@ -241,7 +241,7 @@
fprintf('- rigid\n'); fprintf('- rigid\n');
elseif nano_hexapod.type == 2; elseif nano_hexapod.type == 2;
fprintf('- flexible\n'); fprintf('- flexible\n');
fprintf('- Ki = %.0g [N/m]\n', nano_hexapod.Ki(1)); fprintf('- Ki = %.0g [N/m]\n', nano_hexapod.actuators.K(1));
end end
fprintf('\n'); fprintf('\n');

View File

@ -76,7 +76,7 @@ Let's first consider a rigid reference mirror and we identify the dynamics of th
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}; G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
Gx = -G*inv(nano_hexapod.J'); Gx = -G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
#+end_src #+end_src
@ -94,7 +94,7 @@ And we re identify the plant dynamics.
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}; G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
Gxb = -G*inv(nano_hexapod.J'); Gxb = -G*inv(nano_hexapod.kinematics.J');
Gxb.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gxb.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
#+end_src #+end_src

View File

@ -275,11 +275,11 @@ The obtained dynamics is shown in Figure [[fig:opt_stiff_primary_plant_damped_L]
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}; G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gx = -G*inv(nano_hexapod.J'); Gx = -G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
G_x(i) = {Gx}; G_x(i) = {Gx};
Gl = -nano_hexapod.J*G; Gl = -nano_hexapod.kinematics.J*G;
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'}; Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
G_l(i) = {Gl}; G_l(i) = {Gl};
end end
@ -305,11 +305,11 @@ The obtained dynamics is shown in Figure [[fig:opt_stiff_primary_plant_damped_L]
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}; G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
Gx = -G*inv(nano_hexapod.J'); Gx = -G*inv(nano_hexapod.kinematics.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Gm_x(i) = {Gx}; Gm_x(i) = {Gx};
Gl = -nano_hexapod.J*G; Gl = -nano_hexapod.kinematics.J*G;
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'}; Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
Gm_l(i) = {Gl}; Gm_l(i) = {Gl};
end end
@ -834,12 +834,12 @@ exportFig('figs/opt_stiff_primary_loop_gain_L.pdf', 'width', 'full', 'height', '
Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system. Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system.
#+begin_src matlab #+begin_src matlab
load('mat/stages.mat', 'nano_hexapod'); load('mat/stages.mat', 'nano_hexapod');
K = Kl*nano_hexapod.J*diag([1, 1, 1, 1, 1, 0]); K = Kl*nano_hexapod.kinematics.J*diag([1, 1, 1, 1, 1, 0]);
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
for i = 1:length(Ms) for i = 1:length(Ms)
isstable(feedback(nano_hexapod.J\Gm_l{i}*K, eye(6), -1)) isstable(feedback(nano_hexapod.kinematics.J\Gm_l{i}*K, eye(6), -1))
end end
#+end_src #+end_src

View File

@ -1283,16 +1283,20 @@ The =mirror= structure is saved.
args.k (1,1) double {mustBeNumeric} = -1 args.k (1,1) double {mustBeNumeric} = -1
args.c (1,1) double {mustBeNumeric} = -1 args.c (1,1) double {mustBeNumeric} = -1
% initializeJointDynamics % initializeJointDynamics
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'universal' args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof'})} = 'universal'
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'spherical' args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'spherical_3dof'})} = 'spherical'
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1) args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1) args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1) args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1) args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Kz_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 60e6*ones(6,1)
args.Cz_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e2*ones(6,1)
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1) args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1) args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1) args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1) args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Kz_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 60e6*ones(6,1)
args.Cz_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e2*ones(6,1)
% initializeCylindricalPlatforms % initializeCylindricalPlatforms
args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1 args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1
args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3 args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3
@ -1353,10 +1357,14 @@ The =mirror= structure is saved.
'Cf_M' , args.Cf_M, ... 'Cf_M' , args.Cf_M, ...
'Kt_M' , args.Kt_M, ... 'Kt_M' , args.Kt_M, ...
'Ct_M' , args.Ct_M, ... 'Ct_M' , args.Ct_M, ...
'Kz_M' , args.Kz_M, ...
'Cz_M' , args.Cz_M, ...
'Kf_F' , args.Kf_F, ... 'Kf_F' , args.Kf_F, ...
'Cf_F' , args.Cf_F, ... 'Cf_F' , args.Cf_F, ...
'Kt_F' , args.Kt_F, ... 'Kt_F' , args.Kt_F, ...
'Ct_F' , args.Ct_F); 'Ct_F' , args.Ct_F, ...
'Kz_F' , args.Kz_F, ...
'Cz_F' , args.Cz_F);
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab

View File

@ -970,10 +970,14 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
% - Kt_M [6x1] - Torsion (Rz) Stiffness for each top joints [(N.m)/rad] % - Kt_M [6x1] - Torsion (Rz) Stiffness for each top joints [(N.m)/rad]
% - Cf_M [6x1] - Bending (Rx, Ry) Damping of each top joint [(N.m)/(rad/s)] % - Cf_M [6x1] - Bending (Rx, Ry) Damping of each top joint [(N.m)/(rad/s)]
% - Ct_M [6x1] - Torsion (Rz) Damping of each top joint [(N.m)/(rad/s)] % - Ct_M [6x1] - Torsion (Rz) Damping of each top joint [(N.m)/(rad/s)]
% - Kz_M [6x1] - Translation (Tz) Stiffness for each top joints [N/m]
% - Cz_M [6x1] - Translation (Tz) Damping of each top joint [N/m]
% - Kf_F [6x1] - Bending (Rx, Ry) Stiffness for each bottom joints [(N.m)/rad] % - Kf_F [6x1] - Bending (Rx, Ry) Stiffness for each bottom joints [(N.m)/rad]
% - Kt_F [6x1] - Torsion (Rz) Stiffness for each bottom joints [(N.m)/rad] % - Kt_F [6x1] - Torsion (Rz) Stiffness for each bottom joints [(N.m)/rad]
% - Cf_F [6x1] - Bending (Rx, Ry) Damping of each bottom joint [(N.m)/(rad/s)] % - Cf_F [6x1] - Bending (Rx, Ry) Damping of each bottom joint [(N.m)/(rad/s)]
% - Cf_F [6x1] - Torsion (Rz) Damping of each bottom joint [(N.m)/(rad/s)] % - Cf_F [6x1] - Torsion (Rz) Damping of each bottom joint [(N.m)/(rad/s)]
% - Kz_F [6x1] - Translation (Tz) Stiffness for each bottom joints [N/m]
% - Cz_F [6x1] - Translation (Tz) Damping of each bottom joint [N/m]
% %
% Outputs: % Outputs:
% - stewart - updated Stewart structure with the added fields: % - stewart - updated Stewart structure with the added fields:
@ -994,16 +998,20 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
#+begin_src matlab #+begin_src matlab
arguments arguments
stewart stewart
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'universal' args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p', 'universal_3dof'})} = 'universal'
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'spherical' args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p', 'spherical_3dof'})} = 'spherical'
args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1) args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1) args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1) args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1) args.Ct_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Kz_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 60e6*ones(6,1)
args.Cz_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e2*ones(6,1)
args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1) args.Kf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1) args.Cf_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1) args.Kt_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1) args.Ct_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-3*ones(6,1)
args.Kz_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 60e6*ones(6,1)
args.Cz_F (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e2*ones(6,1)
end end
#+end_src #+end_src
@ -1021,6 +1029,8 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
stewart.joints_F.type = 3; stewart.joints_F.type = 3;
case 'spherical_p' case 'spherical_p'
stewart.joints_F.type = 4; stewart.joints_F.type = 4;
case 'universal_3dof'
stewart.joints_F.type = 5;
end end
switch args.type_M switch args.type_M
@ -1032,6 +1042,8 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
stewart.joints_M.type = 3; stewart.joints_M.type = 3;
case 'spherical_p' case 'spherical_p'
stewart.joints_M.type = 4; stewart.joints_M.type = 4;
case 'spherical_3dof'
stewart.joints_M.type = 6;
end end
#+end_src #+end_src
@ -1043,22 +1055,22 @@ Translation Stiffness
#+begin_src matlab #+begin_src matlab
stewart.joints_M.Kx = zeros(6,1); stewart.joints_M.Kx = zeros(6,1);
stewart.joints_M.Ky = zeros(6,1); stewart.joints_M.Ky = zeros(6,1);
stewart.joints_M.Kz = zeros(6,1); stewart.joints_M.Kz = args.Kz_M;
stewart.joints_F.Kx = zeros(6,1); stewart.joints_F.Kx = zeros(6,1);
stewart.joints_F.Ky = zeros(6,1); stewart.joints_F.Ky = zeros(6,1);
stewart.joints_F.Kz = zeros(6,1); stewart.joints_F.Kz = args.Kz_F;
#+end_src #+end_src
Translation Damping Translation Damping
#+begin_src matlab #+begin_src matlab
stewart.joints_M.Cx = zeros(6,1); stewart.joints_M.Cx = zeros(6,1);
stewart.joints_M.Cy = zeros(6,1); stewart.joints_M.Cy = zeros(6,1);
stewart.joints_M.Cz = zeros(6,1); stewart.joints_M.Cz = args.Cz_M;
stewart.joints_F.Cx = zeros(6,1); stewart.joints_F.Cx = zeros(6,1);
stewart.joints_F.Cy = zeros(6,1); stewart.joints_F.Cy = zeros(6,1);
stewart.joints_F.Cz = zeros(6,1); stewart.joints_F.Cz = args.Cz_F;
#+end_src #+end_src
** Add Stiffness and Damping in Rotation of each strut ** Add Stiffness and Damping in Rotation of each strut

View File

@ -78,7 +78,7 @@ We identify the dynamics for the following sample masses, both with a soft and s
Gm_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gm_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gm_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gm_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gm_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gm_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -107,7 +107,7 @@ We identify the dynamics for the following sample masses, both with a soft and s
Gm_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gm_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gm_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gm_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -461,7 +461,7 @@ We identify the dynamics for the following sample resonance frequency.
Gmf_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gmf_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gmf_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gmf_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gmf_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gmf_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -489,7 +489,7 @@ We identify the dynamics for the following sample resonance frequency.
Gmf_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gmf_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gmf_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gmf_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -764,7 +764,7 @@ We identify the dynamics for the following Tilt stage angles.
Grz_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Grz_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Grz_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Grz_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Grz_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Grz_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -792,7 +792,7 @@ We identify the dynamics for the following Tilt stage angles.
Grz_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Grz_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Grz_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Grz_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -1031,7 +1031,7 @@ We identify the dynamics for the following Spindle rotation periods.
Gwz_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gwz_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gwz_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gwz_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gwz_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gwz_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -1065,7 +1065,7 @@ We identify the dynamics for the following Spindle rotation periods.
Gwz_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gwz_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gwz_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gwz_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -1392,7 +1392,7 @@ We identify the dynamics for the following Tilt stage angles.
Gry_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gry_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gry_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gry_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gry_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gry_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -1420,7 +1420,7 @@ We identify the dynamics for the following Tilt stage angles.
Gry_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gry_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gry_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gry_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -1622,7 +1622,7 @@ We identify the dynamics for the following translations of the micro-hexapod in
Gtx_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gtx_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gtx_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gtx_vc_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gtx_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gtx_vc_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -1651,7 +1651,7 @@ We identify the dynamics for the following translations of the micro-hexapod in
Gtx_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gtx_pz_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gtx_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gtx_pz_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};

View File

@ -115,7 +115,7 @@ And for the following nano-hexapod actuator stiffness =Ks=:
Gk_wz_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gk_wz_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gk_wz_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gk_wz_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gk_wz_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gk_wz_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -639,7 +639,7 @@ As before, we identify the dynamics for the following actuator stiffnesses:
Gmr_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gmr_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gmr_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gmr_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gmr_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gmr_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -680,7 +680,7 @@ And we identify the dynamics of the nano-hexapod.
Gmf_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gmf_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gmf_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gmf_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gmf_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gmf_err(i) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -993,7 +993,7 @@ We identify the dynamics for the following payload masses =Ms= and nano-hexapod
Gm_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gm_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gm_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gm_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gm_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gm_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};
@ -1027,7 +1027,7 @@ We then identify the dynamics for the following payload resonance frequencies =F
Gf_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gf_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gf_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))}; Gf_dvf(i,j) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Jinvt = tf(inv(nano_hexapod.J)'); Jinvt = tf(inv(nano_hexapod.kinematics.J)');
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'}; Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; Jinvt.OutputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
Gf_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt}; Gf_err(i,j) = {-minreal(G({'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*Jinvt};

View File

@ -79,7 +79,7 @@ switch args.Rz_type
fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude); fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude);
case { 'rotating', 'rotating-not-filtered' } case { 'rotating', 'rotating-not-filtered' }
fprintf(' - Rotating\n'); fprintf(' - Rotating\n');
fprintf(' - Speed = %.0f [rpm]\n', 60/Rz_period); fprintf(' - Speed = %.0f [rpm]\n', 60/args.Rz_period);
end end
@ -169,7 +169,7 @@ elseif nano_hexapod.type == 1 || nano_hexapod.type == 3;
fprintf('- rigid\n'); fprintf('- rigid\n');
elseif nano_hexapod.type == 2; elseif nano_hexapod.type == 2;
fprintf('- flexible\n'); fprintf('- flexible\n');
fprintf('- Ki = %.0g [N/m]\n', nano_hexapod.Ki(1)); fprintf('- Ki = %.0g [N/m]\n', nano_hexapod.actuators.K(1));
end end
fprintf('\n'); fprintf('\n');