Update files for new definition of hexapods
This commit is contained in:
parent
2deb41939d
commit
f7714a1449
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 09:36 -->
|
||||
<!-- 2020-05-05 mar. 10:34 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Active Damping applied on the Simscape Model</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -39,17 +39,17 @@
|
||||
<ul>
|
||||
<li><a href="#orgb9bb91c">1.1. Identification of the dynamics for Active Damping</a>
|
||||
<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>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org21a2e91">1.2. Identification of the dynamics for High Authority Control</a>
|
||||
<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>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org2540d06">1.3. Tomography Experiment</a>
|
||||
<li><a href="#org76bbcf0">1.3. Tomography Experiment</a>
|
||||
<ul>
|
||||
<li><a href="#orgd5305ce">1.3.1. Simulation</a></li>
|
||||
<li><a href="#orgd64a4bc">1.3.2. Results</a></li>
|
||||
@ -69,55 +69,55 @@
|
||||
</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="#org6e25821">2.6. Conclusion</a></li>
|
||||
<li><a href="#orgdc8e915">2.6. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org11ab68f">3. Integral Force Feedback</a>
|
||||
<ul>
|
||||
<li><a href="#orga4d47de">3.1. Control Design</a>
|
||||
<li><a href="#orgd4c8167">3.1. Control Design</a>
|
||||
<ul>
|
||||
<li><a href="#org506864d">3.1.1. Plant</a></li>
|
||||
<li><a href="#orgd147055">3.1.2. Control Design</a></li>
|
||||
<li><a href="#orgeed5a23">3.1.3. Diagonal Controller</a></li>
|
||||
<li><a href="#org9ec605a">3.1.1. Plant</a></li>
|
||||
<li><a href="#org9f4c2b3">3.1.2. Control Design</a></li>
|
||||
<li><a href="#orgc596f9b">3.1.3. Diagonal Controller</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orge4bf8c1">3.2. Tomography Experiment</a>
|
||||
<li><a href="#org3169fff">3.2. Tomography Experiment</a>
|
||||
<ul>
|
||||
<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>
|
||||
</li>
|
||||
<li><a href="#orgd53cc4e">3.3. Conclusion</a></li>
|
||||
<li><a href="#org4e185a5">3.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org13393f4">4. Direct Velocity Feedback</a>
|
||||
<ul>
|
||||
<li><a href="#org22d12df">4.1. Control Design</a>
|
||||
<li><a href="#org4d1af95">4.1. Control Design</a>
|
||||
<ul>
|
||||
<li><a href="#org0b48ca9">4.1.1. Plant</a></li>
|
||||
<li><a href="#org59030a3">4.1.2. Control Design</a></li>
|
||||
<li><a href="#org59cf352">4.1.3. Diagonal Controller</a></li>
|
||||
<li><a href="#org431d628">4.1.1. Plant</a></li>
|
||||
<li><a href="#orgbf0fb21">4.1.2. Control Design</a></li>
|
||||
<li><a href="#org7323c20">4.1.3. Diagonal Controller</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org76bbcf0">4.2. Tomography Experiment</a>
|
||||
<li><a href="#orgba6ba0d">4.2. Tomography Experiment</a>
|
||||
<ul>
|
||||
<li><a href="#orge2c011b">4.2.1. Initialize the Simulation</a></li>
|
||||
<li><a href="#org8cb0050">4.2.2. Compare with Undamped system</a></li>
|
||||
<li><a href="#org45b5800">4.2.1. Initialize the Simulation</a></li>
|
||||
<li><a href="#org17042b3">4.2.2. Compare with Undamped system</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org5f85708">4.3. Conclusion</a></li>
|
||||
<li><a href="#orgc7e7a1c">4.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org8f2508f">5. Inertial Control</a>
|
||||
<ul>
|
||||
<li><a href="#org9f4c2b3">5.1. Control Design</a>
|
||||
<li><a href="#org4dae7be">5.1. Control Design</a>
|
||||
<ul>
|
||||
<li><a href="#org9ec605a">5.1.1. Plant</a></li>
|
||||
<li><a href="#org94a1419">5.1.2. Control Design</a></li>
|
||||
<li><a href="#orgc596f9b">5.1.3. Diagonal Controller</a></li>
|
||||
<li><a href="#org434553c">5.1.1. Plant</a></li>
|
||||
<li><a href="#orgf8547ea">5.1.2. Control Design</a></li>
|
||||
<li><a href="#orge124d93">5.1.3. Diagonal Controller</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgdc8e915">5.2. Conclusion</a></li>
|
||||
<li><a href="#org81b259a">5.2. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org3557ae9">6. Comparison</a>
|
||||
@ -132,16 +132,16 @@
|
||||
<ul>
|
||||
<li><a href="#org8642cf5">7.1. prepareLinearizeIdentification</a>
|
||||
<ul>
|
||||
<li><a href="#orga028903">Function Description</a></li>
|
||||
<li><a href="#orgbda1bf4">Optional Parameters</a></li>
|
||||
<li><a href="#org2131c58">Initialize the Simulation</a></li>
|
||||
<li><a href="#org889b896">Function Description</a></li>
|
||||
<li><a href="#orgf77fd6f">Optional Parameters</a></li>
|
||||
<li><a href="#orgef97b73">Initialize the Simulation</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgeb73896">7.2. prepareTomographyExperiment</a>
|
||||
<ul>
|
||||
<li><a href="#org889b896">Function Description</a></li>
|
||||
<li><a href="#orgf77fd6f">Optional Parameters</a></li>
|
||||
<li><a href="#org45b5800">Initialize the Simulation</a></li>
|
||||
<li><a href="#orga6f2ff5">Function Description</a></li>
|
||||
<li><a href="#org7ea3ae9">Optional Parameters</a></li>
|
||||
<li><a href="#org9ea9c6d">Initialize the Simulation</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</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>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
</div>
|
||||
<div id="outline-container-org0e0278d" class="outline-4">
|
||||
<h4 id="org0e0278d"><span class="section-number-4">1.1.1</span> Identification</h4>
|
||||
<div id="outline-container-org25cfa54" class="outline-4">
|
||||
<h4 id="org25cfa54"><span class="section-number-4">1.1.1</span> Identification</h4>
|
||||
<div class="outline-text-4" id="text-1-1-1">
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
||||
<pre class="src src-matlab">%% Options for Linearized
|
||||
options = linearizeOptions;
|
||||
options.SampleTime = 0;
|
||||
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
|
||||
mdl = <span class="org-string">'nass_model'</span>;
|
||||
%% Name of the Simulink File
|
||||
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;
|
||||
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, <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, <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, <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, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
|
||||
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Relative Motion Outputs
|
||||
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Fnlm'); io_i = io_i + 1; % Force Sensors
|
||||
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm'); io_i = io_i + 1; % Absolute Velocity Outputs
|
||||
|
||||
<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.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.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>, ...
|
||||
<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">'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>};
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
|
||||
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
|
||||
'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'};
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>}));
|
||||
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_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>}));
|
||||
<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({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}));
|
||||
G_ine = minreal(G({'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}));
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</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>
|
||||
<div class="outline-text-4" id="text-1-1-2">
|
||||
<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>
|
||||
</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>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
</div>
|
||||
<div id="outline-container-org25cfa54" class="outline-4">
|
||||
<h4 id="org25cfa54"><span class="section-number-4">1.2.1</span> Identification</h4>
|
||||
<div id="outline-container-org3de8d23" class="outline-4">
|
||||
<h4 id="org3de8d23"><span class="section-number-4">1.2.1</span> Identification</h4>
|
||||
<div class="outline-text-4" id="text-1-2-1">
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
||||
<pre class="src src-matlab">%% Options for Linearized
|
||||
options = linearizeOptions;
|
||||
options.SampleTime = 0;
|
||||
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
|
||||
mdl = <span class="org-string">'nass_model'</span>;
|
||||
%% Name of the Simulink File
|
||||
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;
|
||||
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, <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, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
|
||||
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'En'); io_i = io_i + 1; % Metrology Outputs
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</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>
|
||||
<div class="outline-text-4" id="text-1-2-2">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -377,8 +377,8 @@ And we save them for further analysis.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2540d06" class="outline-3">
|
||||
<h3 id="org2540d06"><span class="section-number-3">1.3</span> Tomography Experiment</h3>
|
||||
<div id="outline-container-org76bbcf0" class="outline-3">
|
||||
<h3 id="org76bbcf0"><span class="section-number-3">1.3</span> Tomography Experiment</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
</div>
|
||||
<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.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
|
||||
<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>);
|
||||
<pre class="src src-matlab">load('mat/conf_simulink.mat');
|
||||
set_param(conf_simulink, 'StopTime', '4.5');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -405,7 +405,7 @@ We change the simulation stop time.
|
||||
And we simulate the system.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -413,7 +413,7 @@ And we simulate the system.
|
||||
Finally, we save the simulation results for further analysis
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -426,9 +426,9 @@ Finally, we save the simulation results for further analysis
|
||||
We load the results of tomography experiments.
|
||||
</p>
|
||||
<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>);
|
||||
Fs = 1e3; <span class="org-comment">% Sampling Frequency of the Data</span>
|
||||
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];
|
||||
<pre class="src src-matlab">load('./mat/active_damping_tomo_exp.mat', 'En');
|
||||
Fs = 1e3; % Sampling Frequency of the Data
|
||||
t = (1/Fs)*[0:length(En(:,1))-1];
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -495,7 +495,7 @@ We initialize all the stages with the default parameters.
|
||||
We identify the dynamics for the following sample mass.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -539,7 +539,7 @@ We initialize all the stages with the default parameters.
|
||||
We identify the dynamics for the following Spindle angles.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -583,7 +583,7 @@ We initialize all the stages with the default parameters.
|
||||
We identify the dynamics for the following Spindle rotation periods.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -676,7 +676,7 @@ We initialize all the stages with the default parameters.
|
||||
We identify the dynamics for the following Tilt stage angles.
|
||||
</p>
|
||||
<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>
|
||||
</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>).
|
||||
</p>
|
||||
<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>, 5e<span class="org-type">-</span>3, ...<span class="org-comment"> % [m]</span>
|
||||
<span class="org-string">'Dy_period'</span>, 1); <span class="org-comment">% [s]</span>
|
||||
<pre class="src src-matlab">initializeReferences('Dy_type', 'sinusoidal', ...
|
||||
'Dy_amplitude', 5e-3, ... % [m]
|
||||
'Dy_period', 1); % [s]
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -766,8 +766,8 @@ We identify the dynamics at different positions (times) when scanning with the T
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org6e25821" class="outline-3">
|
||||
<h3 id="org6e25821"><span class="section-number-3">2.6</span> Conclusion</h3>
|
||||
<div id="outline-container-orgdc8e915" class="outline-3">
|
||||
<h3 id="orgdc8e915"><span class="section-number-3">2.6</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-2-6">
|
||||
<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>
|
||||
@ -858,19 +858,19 @@ The control architecture is represented in figure <a href="#org3a1dbf1">29</a> w
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga4d47de" class="outline-3">
|
||||
<h3 id="orga4d47de"><span class="section-number-3">3.1</span> Control Design</h3>
|
||||
<div id="outline-container-orgd4c8167" class="outline-3">
|
||||
<h3 id="orgd4c8167"><span class="section-number-3">3.1</span> Control Design</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
</div>
|
||||
<div id="outline-container-org506864d" class="outline-4">
|
||||
<h4 id="org506864d"><span class="section-number-4">3.1.1</span> Plant</h4>
|
||||
<div id="outline-container-org9ec605a" class="outline-4">
|
||||
<h4 id="org9ec605a"><span class="section-number-4">3.1.1</span> Plant</h4>
|
||||
<div class="outline-text-4" id="text-3-1-1">
|
||||
<p>
|
||||
Let’s load the previously identified undamped plant:
|
||||
</p>
|
||||
<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>);
|
||||
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>);
|
||||
<pre class="src src-matlab">load('./mat/active_damping_undamped_plants.mat', 'G_iff');
|
||||
load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_iff');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -887,15 +887,15 @@ Let’s look at the transfer function from actuator forces in the nano-hexap
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd147055" class="outline-4">
|
||||
<h4 id="orgd147055"><span class="section-number-4">3.1.2</span> Control Design</h4>
|
||||
<div id="outline-container-org9f4c2b3" class="outline-4">
|
||||
<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">
|
||||
<p>
|
||||
The controller for each pair of actuator/sensor is:
|
||||
</p>
|
||||
<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;
|
||||
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);
|
||||
<pre class="src src-matlab">w0 = 2*pi*50;
|
||||
K_iff = -5000/s * (s/w0)/(1 + s/w0);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -912,15 +912,15 @@ The corresponding loop gains are shown in figure <a href="#org1f5c623">31</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgeed5a23" class="outline-4">
|
||||
<h4 id="orgeed5a23"><span class="section-number-4">3.1.3</span> Diagonal Controller</h4>
|
||||
<div id="outline-container-orgc596f9b" class="outline-4">
|
||||
<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">
|
||||
<p>
|
||||
We create the diagonal controller and we add a minus sign as we have a positive
|
||||
feedback architecture.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -928,15 +928,15 @@ feedback architecture.
|
||||
We save the controller for further analysis.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge4bf8c1" class="outline-3">
|
||||
<h3 id="orge4bf8c1"><span class="section-number-3">3.2</span> Tomography Experiment</h3>
|
||||
<div id="outline-container-org3169fff" class="outline-3">
|
||||
<h3 id="org3169fff"><span class="section-number-3">3.2</span> Tomography Experiment</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
</div>
|
||||
<div id="outline-container-org132e692" class="outline-4">
|
||||
@ -954,8 +954,8 @@ We initialize elements for the tomography experiment.
|
||||
We set the IFF controller.
|
||||
</p>
|
||||
<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>);
|
||||
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'iff'</span>);
|
||||
<pre class="src src-matlab">load('./mat/active_damping_K_iff.mat', 'K_iff');
|
||||
initializeController('type', 'iff');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -963,8 +963,8 @@ initializeController(<span class="org-string">'type'</span>, <span class="org-st
|
||||
We change the simulation stop time.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
|
||||
<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>);
|
||||
<pre class="src src-matlab">load('mat/conf_simulink.mat');
|
||||
set_param(conf_simulink, 'StopTime', '4.5');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -972,7 +972,7 @@ We change the simulation stop time.
|
||||
And we simulate the system.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -982,14 +982,14 @@ Finally, we save the simulation results for further analysis
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">En_iff = En;
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9c3f302" class="outline-4">
|
||||
<h4 id="org9c3f302"><span class="section-number-4">3.2.2</span> Compare with Undamped system</h4>
|
||||
<div id="outline-container-org8cb0050" class="outline-4">
|
||||
<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 id="org7547861" class="figure">
|
||||
@ -1015,8 +1015,8 @@ save(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd53cc4e" class="outline-3">
|
||||
<h3 id="orgd53cc4e"><span class="section-number-3">3.3</span> Conclusion</h3>
|
||||
<div id="outline-container-org4e185a5" class="outline-3">
|
||||
<h3 id="org4e185a5"><span class="section-number-3">3.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -1051,19 +1051,19 @@ The actuator displacement can be measured with a capacitive sensor for instance.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org22d12df" class="outline-3">
|
||||
<h3 id="org22d12df"><span class="section-number-3">4.1</span> Control Design</h3>
|
||||
<div id="outline-container-org4d1af95" class="outline-3">
|
||||
<h3 id="org4d1af95"><span class="section-number-3">4.1</span> Control Design</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
</div>
|
||||
<div id="outline-container-org0b48ca9" class="outline-4">
|
||||
<h4 id="org0b48ca9"><span class="section-number-4">4.1.1</span> Plant</h4>
|
||||
<div id="outline-container-org431d628" class="outline-4">
|
||||
<h4 id="org431d628"><span class="section-number-4">4.1.1</span> Plant</h4>
|
||||
<div class="outline-text-4" id="text-4-1-1">
|
||||
<p>
|
||||
Let’s load the undamped plant:
|
||||
</p>
|
||||
<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>);
|
||||
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>);
|
||||
<pre class="src src-matlab">load('./mat/active_damping_undamped_plants.mat', 'G_dvf');
|
||||
load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_dvf');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -1080,15 +1080,15 @@ Let’s look at the transfer function from actuator forces in the nano-hexap
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org59030a3" class="outline-4">
|
||||
<h4 id="org59030a3"><span class="section-number-4">4.1.2</span> Control Design</h4>
|
||||
<div id="outline-container-orgbf0fb21" class="outline-4">
|
||||
<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">
|
||||
<p>
|
||||
The Direct Velocity Feedback is defined below.
|
||||
A Low pass Filter is added to make the controller transfer function proper.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -1105,14 +1105,14 @@ The obtained loop gains are shown in figure <a href="#org3568457">36</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org59cf352" class="outline-4">
|
||||
<h4 id="org59cf352"><span class="section-number-4">4.1.3</span> Diagonal Controller</h4>
|
||||
<div id="outline-container-org7323c20" class="outline-4">
|
||||
<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">
|
||||
<p>
|
||||
We create the diagonal controller and we add a minus sign as we have a positive feedback architecture.
|
||||
</p>
|
||||
<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>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org76bbcf0" class="outline-3">
|
||||
<h3 id="org76bbcf0"><span class="section-number-3">4.2</span> Tomography Experiment</h3>
|
||||
<div id="outline-container-orgba6ba0d" class="outline-3">
|
||||
<h3 id="orgba6ba0d"><span class="section-number-3">4.2</span> Tomography Experiment</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
</div>
|
||||
<div id="outline-container-orge2c011b" class="outline-4">
|
||||
<h4 id="orge2c011b"><span class="section-number-4">4.2.1</span> Initialize the Simulation</h4>
|
||||
<div id="outline-container-org45b5800" class="outline-4">
|
||||
<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">
|
||||
<p>
|
||||
We initialize elements for the tomography experiment.
|
||||
@ -1146,8 +1146,8 @@ We initialize elements for the tomography experiment.
|
||||
We set the DVF controller.
|
||||
</p>
|
||||
<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>);
|
||||
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>);
|
||||
<pre class="src src-matlab">load('./mat/active_damping_K_dvf.mat', 'K_dvf');
|
||||
initializeController('type', 'dvf');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -1155,8 +1155,8 @@ initializeController(<span class="org-string">'type'</span>, <span class="org-st
|
||||
We change the simulation stop time.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
|
||||
<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>);
|
||||
<pre class="src src-matlab">load('mat/conf_simulink.mat');
|
||||
set_param(conf_simulink, 'StopTime', '4.5');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -1164,7 +1164,7 @@ We change the simulation stop time.
|
||||
And we simulate the system.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -1174,14 +1174,14 @@ Finally, we save the simulation results for further analysis
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">En_dvf = En;
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8cb0050" class="outline-4">
|
||||
<h4 id="org8cb0050"><span class="section-number-4">4.2.2</span> Compare with Undamped system</h4>
|
||||
<div id="outline-container-org17042b3" class="outline-4">
|
||||
<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 id="orgfe01054" class="figure">
|
||||
@ -1207,8 +1207,8 @@ save(<span class="org-string">'./mat/active_damping_tomo_exp.mat'</span>, <span
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5f85708" class="outline-3">
|
||||
<h3 id="org5f85708"><span class="section-number-3">4.3</span> Conclusion</h3>
|
||||
<div id="outline-container-orgc7e7a1c" class="outline-3">
|
||||
<h3 id="orgc7e7a1c"><span class="section-number-3">4.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-4-3">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -1240,19 +1240,19 @@ In Inertial Control, a feedback is applied between the measured <b>absolute</b>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9f4c2b3" class="outline-3">
|
||||
<h3 id="org9f4c2b3"><span class="section-number-3">5.1</span> Control Design</h3>
|
||||
<div id="outline-container-org4dae7be" class="outline-3">
|
||||
<h3 id="org4dae7be"><span class="section-number-3">5.1</span> Control Design</h3>
|
||||
<div class="outline-text-3" id="text-5-1">
|
||||
</div>
|
||||
<div id="outline-container-org9ec605a" class="outline-4">
|
||||
<h4 id="org9ec605a"><span class="section-number-4">5.1.1</span> Plant</h4>
|
||||
<div id="outline-container-org434553c" class="outline-4">
|
||||
<h4 id="org434553c"><span class="section-number-4">5.1.1</span> Plant</h4>
|
||||
<div class="outline-text-4" id="text-5-1-1">
|
||||
<p>
|
||||
Let’s load the undamped plant:
|
||||
</p>
|
||||
<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>);
|
||||
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>);
|
||||
<pre class="src src-matlab">load('./mat/active_damping_undamped_plants.mat', 'G_ine');
|
||||
load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_ine');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -1269,8 +1269,8 @@ Let’s look at the transfer function from actuator forces in the nano-hexap
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org94a1419" class="outline-4">
|
||||
<h4 id="org94a1419"><span class="section-number-4">5.1.2</span> Control Design</h4>
|
||||
<div id="outline-container-orgf8547ea" class="outline-4">
|
||||
<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">
|
||||
<p>
|
||||
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 id="outline-container-orgc596f9b" class="outline-4">
|
||||
<h4 id="orgc596f9b"><span class="section-number-4">5.1.3</span> Diagonal Controller</h4>
|
||||
<div id="outline-container-orge124d93" class="outline-4">
|
||||
<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">
|
||||
<p>
|
||||
We create the diagonal controller and we add a minus sign as we have a positive feedback architecture.
|
||||
</p>
|
||||
<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>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgdc8e915" class="outline-3">
|
||||
<h3 id="orgdc8e915"><span class="section-number-3">5.2</span> Conclusion</h3>
|
||||
<div id="outline-container-org81b259a" class="outline-3">
|
||||
<h3 id="org81b259a"><span class="section-number-3">5.2</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-5-2">
|
||||
<div class="important">
|
||||
<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>
|
||||
<div class="outline-text-3" id="text-6-1">
|
||||
<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>
|
||||
</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>
|
||||
<div class="outline-text-3" id="text-6-4">
|
||||
<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>);
|
||||
Fs = 1e3; <span class="org-comment">% Sampling Frequency of the Data</span>
|
||||
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];
|
||||
<pre class="src src-matlab">load('./mat/active_damping_tomo_exp.mat', 'En', 'En_iff', 'En_dvf');
|
||||
Fs = 1e3; % Sampling Frequency of the Data
|
||||
t = (1/Fs)*[0:length(En(:,1))-1];
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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);
|
||||
En = En(i_start<span class="org-type">:</span>end, <span class="org-type">:</span>);
|
||||
En_dvf = En_dvf(i_start<span class="org-type">:</span>end, <span class="org-type">:</span>);
|
||||
En_iff = En_iff(i_start<span class="org-type">:</span>end, <span class="org-type">:</span>);
|
||||
t = t(i_start:end) - t(i_start);
|
||||
En = En(i_start:end, :);
|
||||
En_dvf = En_dvf(i_start:end, :);
|
||||
En_iff = En_iff(i_start:end, :);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -1438,7 +1438,7 @@ Window used for <code>pwelch</code> function.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -1489,32 +1489,32 @@ This Matlab function is accessible <a href="src/prepareLinearizeIdentification.m
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga028903" class="outline-4">
|
||||
<h4 id="orga028903">Function Description</h4>
|
||||
<div class="outline-text-4" id="text-orga028903">
|
||||
<div id="outline-container-org889b896" class="outline-4">
|
||||
<h4 id="org889b896">Function Description</h4>
|
||||
<div class="outline-text-4" id="text-org889b896">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgbda1bf4" class="outline-4">
|
||||
<h4 id="orgbda1bf4">Optional Parameters</h4>
|
||||
<div class="outline-text-4" id="text-orgbda1bf4">
|
||||
<div id="outline-container-orgf77fd6f" class="outline-4">
|
||||
<h4 id="orgf77fd6f">Optional Parameters</h4>
|
||||
<div class="outline-text-4" id="text-orgf77fd6f">
|
||||
<div class="org-src-container">
|
||||
<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.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 <span class="org-comment">% [kg]</span>
|
||||
<span class="org-keyword">end</span>
|
||||
args.nass_actuator char {mustBeMember(args.nass_actuator,{'piezo', 'lorentz'})} = 'piezo'
|
||||
args.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 % [kg]
|
||||
end
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2131c58" class="outline-4">
|
||||
<h4 id="org2131c58">Initialize the Simulation</h4>
|
||||
<div class="outline-text-4" id="text-org2131c58">
|
||||
<div id="outline-container-orgef97b73" class="outline-4">
|
||||
<h4 id="orgef97b73">Initialize the Simulation</h4>
|
||||
<div class="outline-text-4" id="text-orgef97b73">
|
||||
<p>
|
||||
We initialize all the stages with the default parameters.
|
||||
</p>
|
||||
@ -1534,8 +1534,8 @@ initializeMirror();
|
||||
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, args.nass_actuator);
|
||||
initializeSample(<span class="org-string">'mass'</span>, args.sample_mass);
|
||||
<pre class="src src-matlab">initializeNanoHexapod('actuator', args.nass_actuator);
|
||||
initializeSample('mass', args.sample_mass);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -1544,7 +1544,7 @@ We set the references and disturbances to zero.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeReferences();
|
||||
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
|
||||
initializeDisturbances('enable', false);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -1552,7 +1552,7 @@ initializeDisturbances(<span class="org-string">'enable'</span>, <span class="or
|
||||
We set the controller type to Open-Loop.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -1560,7 +1560,7 @@ We set the controller type to Open-Loop.
|
||||
And we put some gravity.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -1568,7 +1568,7 @@ And we put some gravity.
|
||||
We do not need to log any signal.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -1587,33 +1587,33 @@ This Matlab function is accessible <a href="src/prepareTomographyExperiment.m">h
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org889b896" class="outline-4">
|
||||
<h4 id="org889b896">Function Description</h4>
|
||||
<div class="outline-text-4" id="text-org889b896">
|
||||
<div id="outline-container-orga6f2ff5" class="outline-4">
|
||||
<h4 id="orga6f2ff5">Function Description</h4>
|
||||
<div class="outline-text-4" id="text-orga6f2ff5">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf77fd6f" class="outline-4">
|
||||
<h4 id="orgf77fd6f">Optional Parameters</h4>
|
||||
<div class="outline-text-4" id="text-orgf77fd6f">
|
||||
<div id="outline-container-org7ea3ae9" class="outline-4">
|
||||
<h4 id="org7ea3ae9">Optional Parameters</h4>
|
||||
<div class="outline-text-4" id="text-org7ea3ae9">
|
||||
<div class="org-src-container">
|
||||
<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.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 <span class="org-comment">% [kg]</span>
|
||||
args.Rz_period (1,1) double {mustBeNumeric, mustBePositive} = 1 <span class="org-comment">% [s]</span>
|
||||
<span class="org-keyword">end</span>
|
||||
args.nass_actuator char {mustBeMember(args.nass_actuator,{'piezo', 'lorentz'})} = 'piezo'
|
||||
args.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 % [kg]
|
||||
args.Rz_period (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s]
|
||||
end
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org45b5800" class="outline-4">
|
||||
<h4 id="org45b5800">Initialize the Simulation</h4>
|
||||
<div class="outline-text-4" id="text-org45b5800">
|
||||
<div id="outline-container-org9ea9c6d" class="outline-4">
|
||||
<h4 id="org9ea9c6d">Initialize the Simulation</h4>
|
||||
<div class="outline-text-4" id="text-org9ea9c6d">
|
||||
<p>
|
||||
We initialize all the stages with the default parameters.
|
||||
</p>
|
||||
@ -1633,8 +1633,8 @@ initializeMirror();
|
||||
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, args.nass_actuator);
|
||||
initializeSample(<span class="org-string">'mass'</span>, args.sample_mass);
|
||||
<pre class="src src-matlab">initializeNanoHexapod('actuator', args.nass_actuator);
|
||||
initializeSample('mass', args.sample_mass);
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -1655,7 +1655,7 @@ We set the references that corresponds to a tomography experiment.
|
||||
Open Loop.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -1663,7 +1663,7 @@ Open Loop.
|
||||
And we put some gravity.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -1671,7 +1671,7 @@ And we put some gravity.
|
||||
We log the signals.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -1681,7 +1681,7 @@ We log the signals.
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 09:35 -->
|
||||
<!-- 2020-05-05 mar. 10:34 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>HAC-LAC applied on the Simscape Model</title>
|
||||
<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.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span>);
|
||||
initializeSample(<span class="org-string">'mass'</span>, 1);
|
||||
<pre class="src src-matlab">initializeNanoHexapod('actuator', 'piezo');
|
||||
initializeSample('mass', 1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -103,7 +103,7 @@ initializeSample(<span class="org-string">'mass'</span>, 1);
|
||||
We set the references that corresponds to a tomography experiment.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -116,7 +116,7 @@ We set the references that corresponds to a tomography experiment.
|
||||
Open Loop.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -124,7 +124,7 @@ Open Loop.
|
||||
And we put some gravity.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -132,7 +132,7 @@ And we put some gravity.
|
||||
We log the signals.
|
||||
</p>
|
||||
<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>
|
||||
</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>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<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>
|
||||
mdl = <span class="org-string">'nass_model'</span>;
|
||||
<pre class="src src-matlab">%% Name of the Simulink File
|
||||
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;
|
||||
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, <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, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
|
||||
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Relative Motion Outputs
|
||||
|
||||
<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.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.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.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G_dvf.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'};
|
||||
</pre>
|
||||
</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>
|
||||
<div class="outline-text-3" id="text-2-4">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</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="org-src-container">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
mdl = <span class="org-string">'nass_model'</span>;
|
||||
<pre class="src src-matlab">%% Name of the Simulink File
|
||||
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;
|
||||
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, <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, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs
|
||||
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'output', [], 'En'); io_i = io_i + 1; % Position Errror
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -233,23 +233,23 @@ io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <s
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
mdl = <span class="org-string">'nass_model'</span>;
|
||||
<pre class="src src-matlab">%% Name of the Simulink File
|
||||
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;
|
||||
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, <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, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs
|
||||
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.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.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.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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.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 = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -280,29 +280,29 @@ The controller consists of:
|
||||
</ul>
|
||||
|
||||
<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>
|
||||
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))));
|
||||
% Normalization of the gain of have a loop gain of 1 at frequency wc
|
||||
Kx = Kx.*diag(1./diag(abs(freqresp(Gx*Kx, wc))));
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</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>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
|
||||
<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>);
|
||||
<pre class="src src-matlab">load('mat/conf_simulink.mat');
|
||||
set_param(conf_simulink, 'StopTime', '2');
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -341,8 +341,8 @@ save(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="
|
||||
Let’s load the simulation when no control is applied.
|
||||
</p>
|
||||
<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>);
|
||||
load(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="org-string">'hac_dvf'</span>);
|
||||
<pre class="src src-matlab">load('./mat/experiment_tomography.mat', 'tomo_align_dist');
|
||||
load('./mat/tomo_exp_hac_lac.mat', 'hac_dvf');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -350,7 +350,7 @@ load(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 14:32 -->
|
||||
<!-- 2020-05-05 mar. 10:34 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Decentralize control to add virtual mass</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -39,16 +39,16 @@
|
||||
<li><a href="#org35a3822">2. Identification</a></li>
|
||||
<li><a href="#orgd6fc719">3. Adding Virtual Mass in the Leg’s Space</a>
|
||||
<ul>
|
||||
<li><a href="#org9ed2d4c">3.1. Plant</a></li>
|
||||
<li><a href="#org4f03a34">3.2. Controller Design</a></li>
|
||||
<li><a href="#org2fe0ce0">3.3. Identification of the Primary Plant</a></li>
|
||||
<li><a href="#orga27c9a0">3.1. Plant</a></li>
|
||||
<li><a href="#orgcbce41a">3.2. Controller Design</a></li>
|
||||
<li><a href="#orgca1f525">3.3. Identification of the Primary Plant</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgc9131d0">4. Adding Virtual Mass in the Task Space</a>
|
||||
<ul>
|
||||
<li><a href="#orga27c9a0">4.1. Plant</a></li>
|
||||
<li><a href="#orgcbce41a">4.2. Controller Design</a></li>
|
||||
<li><a href="#orgca1f525">4.3. Identification of the Primary Plant</a></li>
|
||||
<li><a href="#orgdbe6a25">4.1. Plant</a></li>
|
||||
<li><a href="#org571922f">4.2. Controller Design</a></li>
|
||||
<li><a href="#org4960701">4.3. Identification of the Primary Plant</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@ -69,10 +69,10 @@ initializeAxisc();
|
||||
initializeMirror();
|
||||
|
||||
initializeSimscapeConfiguration();
|
||||
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
|
||||
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
|
||||
initializeDisturbances('enable', false);
|
||||
initializeLoggingConfiguration('log', 'none');
|
||||
|
||||
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>);
|
||||
initializeController('type', 'hac-dvf');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -80,7 +80,7 @@ initializeController(<span class="org-string">'type'</span>, <span class="org-st
|
||||
The nano-hexapod has the following leg’s stiffness and damping.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -88,7 +88,7 @@ The nano-hexapod has the following leg’s stiffness and damping.
|
||||
We set the stiffness of the payload fixation:
|
||||
</p>
|
||||
<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>
|
||||
</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’s Space</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
</div>
|
||||
<div id="outline-container-org9ed2d4c" class="outline-3">
|
||||
<h3 id="org9ed2d4c"><span class="section-number-3">3.1</span> Plant</h3>
|
||||
<div id="outline-container-orga27c9a0" class="outline-3">
|
||||
<h3 id="orga27c9a0"><span class="section-number-3">3.1</span> Plant</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
|
||||
<div id="org98e7ba8" class="figure">
|
||||
@ -127,11 +127,11 @@ Identification of the Primary plant without virtual add of mass
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4f03a34" class="outline-3">
|
||||
<h3 id="org4f03a34"><span class="section-number-3">3.2</span> Controller Design</h3>
|
||||
<div id="outline-container-orgcbce41a" class="outline-3">
|
||||
<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="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>
|
||||
</div>
|
||||
|
||||
@ -144,8 +144,8 @@ Identification of the Primary plant without virtual add of mass
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2fe0ce0" class="outline-3">
|
||||
<h3 id="org2fe0ce0"><span class="section-number-3">3.3</span> Identification of the Primary Plant</h3>
|
||||
<div id="outline-container-orgca1f525" class="outline-3">
|
||||
<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 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>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
</div>
|
||||
<div id="outline-container-orga27c9a0" class="outline-3">
|
||||
<h3 id="orga27c9a0"><span class="section-number-3">4.1</span> Plant</h3>
|
||||
<div id="outline-container-orgdbe6a25" class="outline-3">
|
||||
<h3 id="orgdbe6a25"><span class="section-number-3">4.1</span> Plant</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
Let’s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\mathcal{X}}\):
|
||||
@ -185,11 +185,11 @@ Let’s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\m
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgcbce41a" class="outline-3">
|
||||
<h3 id="orgcbce41a"><span class="section-number-3">4.2</span> Controller Design</h3>
|
||||
<div id="outline-container-org571922f" class="outline-3">
|
||||
<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="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>
|
||||
</div>
|
||||
|
||||
@ -201,14 +201,14 @@ Let’s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\m
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgca1f525" class="outline-3">
|
||||
<h3 id="orgca1f525"><span class="section-number-3">4.3</span> Identification of the Primary Plant</h3>
|
||||
<div id="outline-container-org4960701" class="outline-3">
|
||||
<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 id="orge1df87b" class="figure">
|
||||
@ -229,7 +229,7 @@ Let’s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\m
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 10:25 -->
|
||||
<!-- 2020-05-05 mar. 10:34 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Simulation of Scientific Experiments</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -30,37 +30,37 @@
|
||||
<li><a href="#org03b2a76">1. Simscape Model</a></li>
|
||||
<li><a href="#org6ed78a0">2. Tomography Experiment with no disturbances</a>
|
||||
<ul>
|
||||
<li><a href="#orgdebc736">2.1. Simulation Setup</a></li>
|
||||
<li><a href="#orge0e2e88">2.2. Analysis</a></li>
|
||||
<li><a href="#org38ba07f">2.3. Conclusion</a></li>
|
||||
<li><a href="#orge3f0741">2.1. Simulation Setup</a></li>
|
||||
<li><a href="#org1836f98">2.2. Analysis</a></li>
|
||||
<li><a href="#org8cf54cb">2.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org16d8e58">3. Tomography Experiment with included perturbations</a>
|
||||
<ul>
|
||||
<li><a href="#orgc2a0926">3.1. Simulation Setup</a></li>
|
||||
<li><a href="#org388be58">3.2. Analysis</a></li>
|
||||
<li><a href="#org51b3617">3.3. Conclusion</a></li>
|
||||
<li><a href="#org9d04c8b">3.1. Simulation Setup</a></li>
|
||||
<li><a href="#org746ee08">3.2. Analysis</a></li>
|
||||
<li><a href="#org42ba456">3.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org7202245">4. Tomography Experiment with Ty raster scans</a>
|
||||
<ul>
|
||||
<li><a href="#org94c3461">4.1. Simulation Setup</a></li>
|
||||
<li><a href="#org65d4246">4.2. Analysis</a></li>
|
||||
<li><a href="#org41a2a1d">4.3. Conclusion</a></li>
|
||||
<li><a href="#org0b606be">4.1. Simulation Setup</a></li>
|
||||
<li><a href="#org2e0557a">4.2. Analysis</a></li>
|
||||
<li><a href="#org6c8cc28">4.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org72f01ab">5. Tomography when the micro-hexapod is not centered</a>
|
||||
<ul>
|
||||
<li><a href="#org8a5fae6">5.1. Simulation Setup</a></li>
|
||||
<li><a href="#orgf8b4f39">5.2. Analysis</a></li>
|
||||
<li><a href="#orgdd34703">5.3. Conclusion</a></li>
|
||||
<li><a href="#org98d14be">5.1. Simulation Setup</a></li>
|
||||
<li><a href="#org6dc8ae4">5.2. Analysis</a></li>
|
||||
<li><a href="#orgb632268">5.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org8fa1632">6. Raster Scans with the translation stage</a>
|
||||
<ul>
|
||||
<li><a href="#orge3f0741">6.1. Simulation Setup</a></li>
|
||||
<li><a href="#org1836f98">6.2. Analysis</a></li>
|
||||
<li><a href="#org8cf54cb">6.3. Conclusion</a></li>
|
||||
<li><a href="#orgdd9a5de">6.1. Simulation Setup</a></li>
|
||||
<li><a href="#orgad49d2c">6.2. Analysis</a></li>
|
||||
<li><a href="#org57c774f">6.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@ -103,8 +103,8 @@ The document in organized as follow:
|
||||
We load the shared simulink configuration and we set the <code>StopTime</code>.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
|
||||
<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>);
|
||||
<pre class="src src-matlab">load('mat/conf_simulink.mat');
|
||||
set_param(conf_simulink, 'StopTime', '2');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -121,8 +121,8 @@ initializeRz();
|
||||
initializeMicroHexapod();
|
||||
initializeAxisc();
|
||||
initializeMirror();
|
||||
initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
|
||||
initializeSample(<span class="org-string">'mass'</span>, 1);
|
||||
initializeNanoHexapod('type', 'rigid');
|
||||
initializeSample('mass', 1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -130,7 +130,7 @@ initializeSample(<span class="org-string">'mass'</span>, 1);
|
||||
No controller is used (Open Loop).
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -138,7 +138,7 @@ No controller is used (Open Loop).
|
||||
We don’t gravity.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -146,7 +146,7 @@ We don’t gravity.
|
||||
We log the signals for further analysis.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -163,20 +163,20 @@ In this section, a tomography experiment is performed with the sample aligned wi
|
||||
No disturbance is included.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-orgdebc736" class="outline-3">
|
||||
<h3 id="orgdebc736"><span class="section-number-3">2.1</span> Simulation Setup</h3>
|
||||
<div id="outline-container-orge3f0741" class="outline-3">
|
||||
<h3 id="orge3f0741"><span class="section-number-3">2.1</span> Simulation Setup</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
And we initialize the disturbances to be equal to zero.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
<span class="org-string">'Dwy'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span>
|
||||
<span class="org-string">'Dwz'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span>
|
||||
<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - X direction</span>
|
||||
<span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span>
|
||||
<span class="org-string">'Frz_z'</span>, <span class="org-constant">false</span> ...<span class="org-comment"> % Spindle - Z direction</span>
|
||||
'Dwx', false, ... % Ground Motion - X direction
|
||||
'Dwy', false, ... % Ground Motion - Y direction
|
||||
'Dwz', false, ... % Ground Motion - Z direction
|
||||
'Fty_x', false, ... % Translation Stage - X direction
|
||||
'Fty_z', false, ... % Translation Stage - Z direction
|
||||
'Frz_z', false ... % Spindle - Z direction
|
||||
);
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -203,17 +203,17 @@ And we save the obtained data.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge0e2e88" class="outline-3">
|
||||
<h3 id="orge0e2e88"><span class="section-number-3">2.2</span> Analysis</h3>
|
||||
<div id="outline-container-org1836f98" class="outline-3">
|
||||
<h3 id="org1836f98"><span class="section-number-3">2.2</span> Analysis</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -226,8 +226,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org38ba07f" class="outline-3">
|
||||
<h3 id="org38ba07f"><span class="section-number-3">2.3</span> Conclusion</h3>
|
||||
<div id="outline-container-org8cf54cb" class="outline-3">
|
||||
<h3 id="org8cf54cb"><span class="section-number-3">2.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -251,20 +251,20 @@ In this section, we also perform a tomography experiment with the sample’s
|
||||
However this time, we include perturbations such as ground motion and stage vibrations.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-orgc2a0926" class="outline-3">
|
||||
<h3 id="orgc2a0926"><span class="section-number-3">3.1</span> Simulation Setup</h3>
|
||||
<div id="outline-container-org9d04c8b" class="outline-3">
|
||||
<h3 id="org9d04c8b"><span class="section-number-3">3.1</span> Simulation Setup</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
We now activate the disturbances.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
<span class="org-string">'Dwy'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span>
|
||||
<span class="org-string">'Dwz'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span>
|
||||
<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - X direction</span>
|
||||
<span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span>
|
||||
<span class="org-string">'Frz_z'</span>, <span class="org-constant">true</span> ...<span class="org-comment"> % Spindle - Z direction</span>
|
||||
'Dwx', true, ... % Ground Motion - X direction
|
||||
'Dwy', true, ... % Ground Motion - Y direction
|
||||
'Dwz', true, ... % Ground Motion - Z direction
|
||||
'Fty_x', false, ... % Translation Stage - X direction
|
||||
'Fty_z', false, ... % Translation Stage - Z direction
|
||||
'Frz_z', true ... % Spindle - Z direction
|
||||
);
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -291,17 +291,17 @@ And we save the obtained data.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org388be58" class="outline-3">
|
||||
<h3 id="org388be58"><span class="section-number-3">3.2</span> Analysis</h3>
|
||||
<div id="outline-container-org746ee08" class="outline-3">
|
||||
<h3 id="org746ee08"><span class="section-number-3">3.2</span> Analysis</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -314,8 +314,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org51b3617" class="outline-3">
|
||||
<h3 id="org51b3617"><span class="section-number-3">3.3</span> Conclusion</h3>
|
||||
<div id="outline-container-org42ba456" class="outline-3">
|
||||
<h3 id="org42ba456"><span class="section-number-3">3.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -338,20 +338,20 @@ In this section, we also perform a tomography experiment with scans of the Trans
|
||||
All the perturbations are included.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-org94c3461" class="outline-3">
|
||||
<h3 id="org94c3461"><span class="section-number-3">4.1</span> Simulation Setup</h3>
|
||||
<div id="outline-container-org0b606be" class="outline-3">
|
||||
<h3 id="org0b606be"><span class="section-number-3">4.1</span> Simulation Setup</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
We now activate the disturbances.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
<span class="org-string">'Dwy'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span>
|
||||
<span class="org-string">'Dwz'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span>
|
||||
<span class="org-string">'Fty_x'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Translation Stage - X direction</span>
|
||||
<span class="org-string">'Fty_z'</span>, <span class="org-constant">true</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span>
|
||||
<span class="org-string">'Frz_z'</span>, <span class="org-constant">true</span> ...<span class="org-comment"> % Spindle - Z direction</span>
|
||||
'Dwx', true, ... % Ground Motion - X direction
|
||||
'Dwy', true, ... % Ground Motion - Y direction
|
||||
'Dwz', true, ... % Ground Motion - Z direction
|
||||
'Fty_x', true, ... % Translation Stage - X direction
|
||||
'Fty_z', true, ... % Translation Stage - Z direction
|
||||
'Frz_z', true ... % Spindle - Z direction
|
||||
);
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -370,7 +370,7 @@ However, vibrations of the Ty stage are included.
|
||||
We simulate the model.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -379,17 +379,17 @@ And we save the obtained data.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org65d4246" class="outline-3">
|
||||
<h3 id="org65d4246"><span class="section-number-3">4.2</span> Analysis</h3>
|
||||
<div id="outline-container-org2e0557a" class="outline-3">
|
||||
<h3 id="org2e0557a"><span class="section-number-3">4.2</span> Analysis</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -402,8 +402,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org41a2a1d" class="outline-3">
|
||||
<h3 id="org41a2a1d"><span class="section-number-3">4.3</span> Conclusion</h3>
|
||||
<div id="outline-container-org6c8cc28" class="outline-3">
|
||||
<h3 id="org6c8cc28"><span class="section-number-3">4.3</span> Conclusion</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -422,14 +422,14 @@ This is due to the fact that the micro-hexapod has performed some displacement.
|
||||
No disturbances are included.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-org8a5fae6" class="outline-3">
|
||||
<h3 id="org8a5fae6"><span class="section-number-3">5.1</span> Simulation Setup</h3>
|
||||
<div id="outline-container-org98d14be" class="outline-3">
|
||||
<h3 id="org98d14be"><span class="section-number-3">5.1</span> Simulation Setup</h3>
|
||||
<div class="outline-text-3" id="text-5-1">
|
||||
<p>
|
||||
We first set the wanted translation of the Micro Hexapod.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -437,7 +437,7 @@ We first set the wanted translation of the Micro Hexapod.
|
||||
We initialize the reference path.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -445,7 +445,7 @@ We initialize the reference path.
|
||||
We initialize the stages.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -454,12 +454,12 @@ And we initialize the disturbances to zero.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
<span class="org-string">'Dwy'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span>
|
||||
<span class="org-string">'Dwz'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span>
|
||||
<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - X direction</span>
|
||||
<span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span>
|
||||
<span class="org-string">'Frz_z'</span>, <span class="org-constant">false</span> ...<span class="org-comment"> % Spindle - Z direction</span>
|
||||
'Dwx', false, ... % Ground Motion - X direction
|
||||
'Dwy', false, ... % Ground Motion - Y direction
|
||||
'Dwz', false, ... % Ground Motion - Z direction
|
||||
'Fty_x', false, ... % Translation Stage - X direction
|
||||
'Fty_z', false, ... % Translation Stage - Z direction
|
||||
'Frz_z', false ... % Spindle - Z direction
|
||||
);
|
||||
</pre>
|
||||
</div>
|
||||
@ -468,7 +468,7 @@ And we initialize the disturbances to zero.
|
||||
We simulate the model.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -477,17 +477,17 @@ And we save the obtained data.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf8b4f39" class="outline-3">
|
||||
<h3 id="orgf8b4f39"><span class="section-number-3">5.2</span> Analysis</h3>
|
||||
<div id="outline-container-org6dc8ae4" class="outline-3">
|
||||
<h3 id="org6dc8ae4"><span class="section-number-3">5.2</span> Analysis</h3>
|
||||
<div class="outline-text-3" id="text-5-2">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -500,8 +500,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgdd34703" class="outline-3">
|
||||
<h3 id="orgdd34703"><span class="section-number-3">5.3</span> Conclusion</h3>
|
||||
<div id="outline-container-orgb632268" class="outline-3">
|
||||
<h3 id="orgb632268"><span class="section-number-3">5.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-5-3">
|
||||
<div class="important">
|
||||
<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.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-orge3f0741" class="outline-3">
|
||||
<h3 id="orge3f0741"><span class="section-number-3">6.1</span> Simulation Setup</h3>
|
||||
<div id="outline-container-orgdd9a5de" class="outline-3">
|
||||
<h3 id="orgdd9a5de"><span class="section-number-3">6.1</span> Simulation Setup</h3>
|
||||
<div class="outline-text-3" id="text-6-1">
|
||||
<p>
|
||||
We initialize the stages.
|
||||
@ -539,8 +539,8 @@ initializeRz();
|
||||
initializeMicroHexapod();
|
||||
initializeAxisc();
|
||||
initializeMirror();
|
||||
initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
|
||||
initializeSample(<span class="org-string">'mass'</span>, 1);
|
||||
initializeNanoHexapod('type', 'rigid');
|
||||
initializeSample('mass', 1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -549,12 +549,12 @@ And we initialize the disturbances to zero.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
<span class="org-string">'Dwy'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Y direction</span>
|
||||
<span class="org-string">'Dwz'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Ground Motion - Z direction</span>
|
||||
<span class="org-string">'Fty_x'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - X direction</span>
|
||||
<span class="org-string">'Fty_z'</span>, <span class="org-constant">false</span>, ...<span class="org-comment"> % Translation Stage - Z direction</span>
|
||||
<span class="org-string">'Frz_z'</span>, <span class="org-constant">false</span> ...<span class="org-comment"> % Spindle - Z direction</span>
|
||||
'Dwx', false, ... % Ground Motion - X direction
|
||||
'Dwy', false, ... % Ground Motion - Y direction
|
||||
'Dwz', false, ... % Ground Motion - Z direction
|
||||
'Fty_x', false, ... % Translation Stage - X direction
|
||||
'Fty_z', false, ... % Translation Stage - Z direction
|
||||
'Frz_z', false ... % Spindle - Z direction
|
||||
);
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -571,7 +571,7 @@ We set the reference path to be a triangular signal for the Translation Stage.
|
||||
We simulate the model.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -580,7 +580,7 @@ And we save the obtained data.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -596,7 +596,7 @@ We now set the reference path to be a sinusoidal signal for the Translation Stag
|
||||
We simulate the model.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -605,17 +605,17 @@ And we save the obtained data.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1836f98" class="outline-3">
|
||||
<h3 id="org1836f98"><span class="section-number-3">6.2</span> Analysis</h3>
|
||||
<div id="outline-container-orgad49d2c" class="outline-3">
|
||||
<h3 id="orgad49d2c"><span class="section-number-3">6.2</span> Analysis</h3>
|
||||
<div class="outline-text-3" id="text-6-2">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -628,8 +628,8 @@ save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span cl
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8cf54cb" class="outline-3">
|
||||
<h3 id="org8cf54cb"><span class="section-number-3">6.3</span> Conclusion</h3>
|
||||
<div id="outline-container-org57c774f" class="outline-3">
|
||||
<h3 id="org57c774f"><span class="section-number-3">6.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-6-3">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -648,7 +648,7 @@ Thus, this should be preferred.
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 09:35 -->
|
||||
<!-- 2020-05-05 mar. 10:33 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Matlab Functions used for the NASS Project</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -59,16 +59,16 @@
|
||||
<h3 id="org3615302">Function description</h3>
|
||||
<div class="outline-text-3" id="text-org3615302">
|
||||
<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>()
|
||||
<span class="org-comment">% describeNassSetup -</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Syntax: [] = describeNassSetup()</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Inputs:</span>
|
||||
<span class="org-comment">% - -</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Outputs:</span>
|
||||
<span class="org-comment">% - -</span>
|
||||
<pre class="src src-matlab">function [] = describeNassSetup()
|
||||
% describeNassSetup -
|
||||
%
|
||||
% Syntax: [] = describeNassSetup()
|
||||
%
|
||||
% Inputs:
|
||||
% - -
|
||||
%
|
||||
% Outputs:
|
||||
% - -
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -78,20 +78,20 @@
|
||||
<h3 id="org3b8c4f7">Simscape Configuration</h3>
|
||||
<div class="outline-text-3" id="text-org3b8c4f7">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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
|
||||
fprintf(<span class="org-string">'- Gravity is included\n'</span>);
|
||||
<span class="org-keyword">else</span>
|
||||
fprintf(<span class="org-string">'- Gravity is not included\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
if conf_simscape.type == 1
|
||||
fprintf('- Gravity is included\n');
|
||||
else
|
||||
fprintf('- Gravity is not included\n');
|
||||
end
|
||||
|
||||
fprintf(<span class="org-string">'\n'</span>);
|
||||
fprintf('\n');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -101,26 +101,26 @@ fprintf(<span class="org-string">'\n'</span>);
|
||||
<h3 id="org5b65749">Disturbances</h3>
|
||||
<div class="outline-text-3" id="text-org5b65749">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">fprintf(<span class="org-string">'Disturbances:\n'</span>);
|
||||
<span class="org-keyword">if</span> <span class="org-type">~</span>args.enable
|
||||
fprintf(<span class="org-string">'- No disturbance is included\n'</span>);
|
||||
<span class="org-keyword">else</span>
|
||||
<span class="org-keyword">if</span> args.Dwx <span class="org-type">&&</span> args.Dwy <span class="org-type">&&</span> args.Dwz
|
||||
fprintf(<span class="org-string">'- Ground motion\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
<span class="org-keyword">if</span> args.Fty_x <span class="org-type">&&</span> args.Fty_z
|
||||
fprintf(<span class="org-string">'- Vibrations of the Translation Stage\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
<span class="org-keyword">if</span> args.Frz_z
|
||||
fprintf(<span class="org-string">'- Vibrations of the Spindle\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
<span class="org-keyword">end</span>
|
||||
fprintf(<span class="org-string">'\n'</span>);
|
||||
<pre class="src src-matlab">fprintf('Disturbances:\n');
|
||||
if ~args.enable
|
||||
fprintf('- No disturbance is included\n');
|
||||
else
|
||||
if args.Dwx && args.Dwy && args.Dwz
|
||||
fprintf('- Ground motion\n');
|
||||
end
|
||||
if args.Fty_x && args.Fty_z
|
||||
fprintf('- Vibrations of the Translation Stage\n');
|
||||
end
|
||||
if args.Frz_z
|
||||
fprintf('- Vibrations of the Spindle\n');
|
||||
end
|
||||
end
|
||||
fprintf('\n');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -130,62 +130,62 @@ fprintf(<span class="org-string">'\n'</span>);
|
||||
<h3 id="org59f7825">References</h3>
|
||||
<div class="outline-text-3" id="text-org59f7825">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">fprintf(<span class="org-string">'Reference Tracking:\n'</span>);
|
||||
fprintf(<span class="org-string">'- Translation Stage:\n'</span>);
|
||||
<span class="org-keyword">switch</span> <span class="org-constant">args.Dy_type</span>
|
||||
<span class="org-keyword">case</span> <span class="org-string">'constant'</span>
|
||||
fprintf(<span class="org-string">' - Constant Position\n'</span>);
|
||||
fprintf(<span class="org-string">' - Dy = %.0f [mm]\n'</span>, args.Dy_amplitude<span class="org-type">*</span>1e3);
|
||||
<span class="org-keyword">case</span> <span class="org-string">'triangular'</span>
|
||||
fprintf(<span class="org-string">' - Triangular Path\n'</span>);
|
||||
fprintf(<span class="org-string">' - Amplitude = %.0f [mm]\n'</span>, args.Dy_amplitude<span class="org-type">*</span>1e3);
|
||||
fprintf(<span class="org-string">' - Period = %.0f [s]\n'</span>, args.Dy_period);
|
||||
<span class="org-keyword">case</span> <span class="org-string">'sinusoidal'</span>
|
||||
fprintf(<span class="org-string">' - Sinusoidal Path\n'</span>);
|
||||
fprintf(<span class="org-string">' - Amplitude = %.0f [mm]\n'</span>, args.Dy_amplitude<span class="org-type">*</span>1e3);
|
||||
fprintf(<span class="org-string">' - Period = %.0f [s]\n'</span>, args.Dy_period);
|
||||
<span class="org-keyword">end</span>
|
||||
<pre class="src src-matlab">fprintf('Reference Tracking:\n');
|
||||
fprintf('- Translation Stage:\n');
|
||||
switch args.Dy_type
|
||||
case 'constant'
|
||||
fprintf(' - Constant Position\n');
|
||||
fprintf(' - Dy = %.0f [mm]\n', args.Dy_amplitude*1e3);
|
||||
case 'triangular'
|
||||
fprintf(' - Triangular Path\n');
|
||||
fprintf(' - Amplitude = %.0f [mm]\n', args.Dy_amplitude*1e3);
|
||||
fprintf(' - Period = %.0f [s]\n', args.Dy_period);
|
||||
case 'sinusoidal'
|
||||
fprintf(' - Sinusoidal Path\n');
|
||||
fprintf(' - Amplitude = %.0f [mm]\n', args.Dy_amplitude*1e3);
|
||||
fprintf(' - Period = %.0f [s]\n', args.Dy_period);
|
||||
end
|
||||
|
||||
fprintf(<span class="org-string">'- Tilt Stage:\n'</span>);
|
||||
<span class="org-keyword">switch</span> <span class="org-constant">args.Ry_type</span>
|
||||
<span class="org-keyword">case</span> <span class="org-string">'constant'</span>
|
||||
fprintf(<span class="org-string">' - Constant Position\n'</span>);
|
||||
fprintf(<span class="org-string">' - Ry = %.0f [mm]\n'</span>, args.Ry_amplitude<span class="org-type">*</span>1e3);
|
||||
<span class="org-keyword">case</span> <span class="org-string">'triangular'</span>
|
||||
fprintf(<span class="org-string">' - Triangular Path\n'</span>);
|
||||
fprintf(<span class="org-string">' - Amplitude = %.0f [mm]\n'</span>, args.Ry_amplitude<span class="org-type">*</span>1e3);
|
||||
fprintf(<span class="org-string">' - Period = %.0f [s]\n'</span>, args.Ry_period);
|
||||
<span class="org-keyword">case</span> <span class="org-string">'sinusoidal'</span>
|
||||
fprintf(<span class="org-string">' - Sinusoidal Path\n'</span>);
|
||||
fprintf(<span class="org-string">' - Amplitude = %.0f [mm]\n'</span>, args.Ry_amplitude<span class="org-type">*</span>1e3);
|
||||
fprintf(<span class="org-string">' - Period = %.0f [s]\n'</span>, args.Ry_period);
|
||||
<span class="org-keyword">end</span>
|
||||
fprintf('- Tilt Stage:\n');
|
||||
switch args.Ry_type
|
||||
case 'constant'
|
||||
fprintf(' - Constant Position\n');
|
||||
fprintf(' - Ry = %.0f [mm]\n', args.Ry_amplitude*1e3);
|
||||
case 'triangular'
|
||||
fprintf(' - Triangular Path\n');
|
||||
fprintf(' - Amplitude = %.0f [mm]\n', args.Ry_amplitude*1e3);
|
||||
fprintf(' - Period = %.0f [s]\n', args.Ry_period);
|
||||
case 'sinusoidal'
|
||||
fprintf(' - Sinusoidal Path\n');
|
||||
fprintf(' - Amplitude = %.0f [mm]\n', args.Ry_amplitude*1e3);
|
||||
fprintf(' - Period = %.0f [s]\n', args.Ry_period);
|
||||
end
|
||||
|
||||
fprintf(<span class="org-string">'- Spindle:\n'</span>);
|
||||
<span class="org-keyword">switch</span> <span class="org-constant">args.Rz_type</span>
|
||||
<span class="org-keyword">case</span> <span class="org-string">'constant'</span>
|
||||
fprintf(<span class="org-string">' - Constant Position\n'</span>);
|
||||
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);
|
||||
<span class="org-keyword">case</span> { <span class="org-string">'rotating'</span>, <span class="org-string">'rotating-not-filtered'</span> }
|
||||
fprintf(<span class="org-string">' - Rotating\n'</span>);
|
||||
fprintf(<span class="org-string">' - Speed = %.0f [rpm]\n'</span>, 60<span class="org-type">/</span>Rz_period);
|
||||
<span class="org-keyword">end</span>
|
||||
fprintf('- Spindle:\n');
|
||||
switch args.Rz_type
|
||||
case 'constant'
|
||||
fprintf(' - Constant Position\n');
|
||||
fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude);
|
||||
case { 'rotating', 'rotating-not-filtered' }
|
||||
fprintf(' - Rotating\n');
|
||||
fprintf(' - Speed = %.0f [rpm]\n', 60/args.Rz_period);
|
||||
end
|
||||
|
||||
|
||||
fprintf(<span class="org-string">'- Micro Hexapod:\n'</span>);
|
||||
<span class="org-keyword">switch</span> <span class="org-constant">args.Dh_type</span>
|
||||
<span class="org-keyword">case</span> <span class="org-string">'constant'</span>
|
||||
fprintf(<span class="org-string">' - Constant Position\n'</span>);
|
||||
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(<span class="org-string">' - Rh = %.0f, %.0f, %.0f [deg]\n'</span>, args.Dh_pos(4), args.Dh_pos(5), args.Dh_pos(6));
|
||||
<span class="org-keyword">end</span>
|
||||
fprintf('- Micro Hexapod:\n');
|
||||
switch args.Dh_type
|
||||
case 'constant'
|
||||
fprintf(' - Constant Position\n');
|
||||
fprintf(' - Dh = %.0f, %.0f, %.0f [mm]\n', args.Dh_pos(1), args.Dh_pos(2), args.Dh_pos(3));
|
||||
fprintf(' - Rh = %.0f, %.0f, %.0f [deg]\n', args.Dh_pos(4), args.Dh_pos(5), args.Dh_pos(6));
|
||||
end
|
||||
|
||||
fprintf(<span class="org-string">'\n'</span>);
|
||||
fprintf('\n');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -195,14 +195,14 @@ fprintf(<span class="org-string">'\n'</span>);
|
||||
<h3 id="org90b1ac8">Controller</h3>
|
||||
<div class="outline-text-3" id="text-org90b1ac8">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">fprintf(<span class="org-string">'Controller:\n'</span>);
|
||||
fprintf(<span class="org-string">'- %s\n'</span>, controller.name);
|
||||
fprintf(<span class="org-string">'\n'</span>);
|
||||
<pre class="src src-matlab">fprintf('Controller:\n');
|
||||
fprintf('- %s\n', controller.name);
|
||||
fprintf('\n');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -212,55 +212,55 @@ fprintf(<span class="org-string">'\n'</span>);
|
||||
<h3 id="orgdd5b7a5">Micro-Station</h3>
|
||||
<div class="outline-text-3" id="text-orgdd5b7a5">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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">&&</span> ...
|
||||
ty.type <span class="org-type">==</span> 1 <span class="org-type">&&</span> ...
|
||||
ry.type <span class="org-type">==</span> 1 <span class="org-type">&&</span> ...
|
||||
rz.type <span class="org-type">==</span> 1 <span class="org-type">&&</span> ...
|
||||
micro_hexapod.type <span class="org-type">==</span> 1;
|
||||
fprintf(<span class="org-string">'- All stages are rigid\n'</span>);
|
||||
<span class="org-keyword">elseif</span> granite.type <span class="org-type">==</span> 2 <span class="org-type">&&</span> ...
|
||||
ty.type <span class="org-type">==</span> 2 <span class="org-type">&&</span> ...
|
||||
ry.type <span class="org-type">==</span> 2 <span class="org-type">&&</span> ...
|
||||
rz.type <span class="org-type">==</span> 2 <span class="org-type">&&</span> ...
|
||||
micro_hexapod.type <span class="org-type">==</span> 2;
|
||||
fprintf(<span class="org-string">'- All stages are flexible\n'</span>);
|
||||
<span class="org-keyword">else</span>
|
||||
<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
|
||||
fprintf(<span class="org-string">'- Granite is rigid\n'</span>);
|
||||
<span class="org-keyword">else</span>
|
||||
fprintf(<span class="org-string">'- Granite is flexible\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
<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
|
||||
fprintf(<span class="org-string">'- Translation Stage is rigid\n'</span>);
|
||||
<span class="org-keyword">else</span>
|
||||
fprintf(<span class="org-string">'- Translation Stage is flexible\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
<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
|
||||
fprintf(<span class="org-string">'- Tilt Stage is rigid\n'</span>);
|
||||
<span class="org-keyword">else</span>
|
||||
fprintf(<span class="org-string">'- Tilt Stage is flexible\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
<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
|
||||
fprintf(<span class="org-string">'- Spindle is rigid\n'</span>);
|
||||
<span class="org-keyword">else</span>
|
||||
fprintf(<span class="org-string">'- Spindle is flexible\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
<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
|
||||
fprintf(<span class="org-string">'- Micro Hexapod is rigid\n'</span>);
|
||||
<span class="org-keyword">else</span>
|
||||
fprintf(<span class="org-string">'- Micro Hexapod is flexible\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
if granite.type == 1 && ...
|
||||
ty.type == 1 && ...
|
||||
ry.type == 1 && ...
|
||||
rz.type == 1 && ...
|
||||
micro_hexapod.type == 1;
|
||||
fprintf('- All stages are rigid\n');
|
||||
elseif granite.type == 2 && ...
|
||||
ty.type == 2 && ...
|
||||
ry.type == 2 && ...
|
||||
rz.type == 2 && ...
|
||||
micro_hexapod.type == 2;
|
||||
fprintf('- All stages are flexible\n');
|
||||
else
|
||||
if granite.type == 1 || granite.type == 4
|
||||
fprintf('- Granite is rigid\n');
|
||||
else
|
||||
fprintf('- Granite is flexible\n');
|
||||
end
|
||||
if ty.type == 1 || ty.type == 4
|
||||
fprintf('- Translation Stage is rigid\n');
|
||||
else
|
||||
fprintf('- Translation Stage is flexible\n');
|
||||
end
|
||||
if ry.type == 1 || ry.type == 4
|
||||
fprintf('- Tilt Stage is rigid\n');
|
||||
else
|
||||
fprintf('- Tilt Stage is flexible\n');
|
||||
end
|
||||
if rz.type == 1 || rz.type == 4
|
||||
fprintf('- Spindle is rigid\n');
|
||||
else
|
||||
fprintf('- Spindle is flexible\n');
|
||||
end
|
||||
if micro_hexapod.type == 1 || micro_hexapod.type == 4
|
||||
fprintf('- Micro Hexapod is rigid\n');
|
||||
else
|
||||
fprintf('- Micro Hexapod is flexible\n');
|
||||
end
|
||||
|
||||
<span class="org-keyword">end</span>
|
||||
end
|
||||
|
||||
fprintf(<span class="org-string">'\n'</span>);
|
||||
fprintf('\n');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -270,21 +270,21 @@ fprintf(<span class="org-string">'\n'</span>);
|
||||
<h3 id="org1687c05">Metrology</h3>
|
||||
<div class="outline-text-3" id="text-org1687c05">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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;
|
||||
fprintf(<span class="org-string">'- flexible fixation\n'</span>);
|
||||
fprintf(<span class="org-string">'- w = %.0f [Hz]\n'</span>, mirror.freq(1));
|
||||
<span class="org-keyword">else</span>
|
||||
fprintf(<span class="org-string">'- rigidly attached to the nano-hexapod\n'</span>);
|
||||
<span class="org-keyword">end</span>
|
||||
fprintf(<span class="org-string">'- m = %.0f [kg]\n'</span>, mirror.mass);
|
||||
fprintf(<span class="org-string">'\n'</span>);
|
||||
if mirror.type == 2;
|
||||
fprintf('- flexible fixation\n');
|
||||
fprintf('- w = %.0f [Hz]\n', mirror.freq(1));
|
||||
else
|
||||
fprintf('- rigidly attached to the nano-hexapod\n');
|
||||
end
|
||||
fprintf('- m = %.0f [kg]\n', mirror.mass);
|
||||
fprintf('\n');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -294,23 +294,23 @@ fprintf(<span class="org-string">'\n'</span>);
|
||||
<h3 id="orgee5944e">Nano Hexapod</h3>
|
||||
<div class="outline-text-3" id="text-orgee5944e">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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;
|
||||
fprintf(<span class="org-string">'- no included\n'</span>);
|
||||
<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;
|
||||
fprintf(<span class="org-string">'- rigid\n'</span>);
|
||||
<span class="org-keyword">elseif</span> nano_hexapod.type <span class="org-type">==</span> 2;
|
||||
fprintf(<span class="org-string">'- flexible\n'</span>);
|
||||
fprintf(<span class="org-string">'- Ki = %.0g [N/m]\n'</span>, nano_hexapod.Ki(1));
|
||||
<span class="org-keyword">end</span>
|
||||
if nano_hexapod.type == 0;
|
||||
fprintf('- no included\n');
|
||||
elseif nano_hexapod.type == 1 || nano_hexapod.type == 3;
|
||||
fprintf('- rigid\n');
|
||||
elseif nano_hexapod.type == 2;
|
||||
fprintf('- flexible\n');
|
||||
fprintf('- Ki = %.0g [N/m]\n', nano_hexapod.actuators.K(1));
|
||||
end
|
||||
|
||||
fprintf(<span class="org-string">'\n'</span>);
|
||||
fprintf('\n');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -320,29 +320,29 @@ fprintf(<span class="org-string">'\n'</span>);
|
||||
<h3 id="orga499c17">Sample</h3>
|
||||
<div class="outline-text-3" id="text-orga499c17">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<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;
|
||||
fprintf(<span class="org-string">'- no included\n'</span>);
|
||||
<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;
|
||||
fprintf(<span class="org-string">'- rigid\n'</span>);
|
||||
fprintf(<span class="org-string">'- mass = %.0f [kg]\n'</span>, 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));
|
||||
<span class="org-keyword">elseif</span> sample.type <span class="org-type">==</span> 2;
|
||||
fprintf(<span class="org-string">'- flexible\n'</span>);
|
||||
fprintf(<span class="org-string">'- mass = %.0f [kg]\n'</span>, 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));
|
||||
<span class="org-comment">% fprintf('- Kt = %.0g, %.0g, %.0g [N/m]\n', sample.K(1), sample.K(2), sample.K(3));</span>
|
||||
<span class="org-comment">% fprintf('- Kr = %.0g, %.0g, %.0g [Nm/rad]\n', sample.K(4), sample.K(5), sample.K(6));</span>
|
||||
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(<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)));
|
||||
<span class="org-keyword">end</span>
|
||||
fprintf(<span class="org-string">'\n'</span>);
|
||||
if sample.type == 0;
|
||||
fprintf('- no included\n');
|
||||
elseif sample.type == 1 || sample.type == 3;
|
||||
fprintf('- rigid\n');
|
||||
fprintf('- mass = %.0f [kg]\n', sample.mass);
|
||||
fprintf('- moment of inertia = %.2f, %.2f, %.2f [kg m2]\n', sample.inertia(1), sample.inertia(2), sample.inertia(3));
|
||||
elseif sample.type == 2;
|
||||
fprintf('- flexible\n');
|
||||
fprintf('- mass = %.0f [kg]\n', sample.mass);
|
||||
fprintf('- moment of inertia = %.2f, %.2f, %.2f [kg m2]\n', sample.inertia(1), sample.inertia(2), sample.inertia(3));
|
||||
% fprintf('- Kt = %.0g, %.0g, %.0g [N/m]\n', sample.K(1), sample.K(2), sample.K(3));
|
||||
% fprintf('- Kr = %.0g, %.0g, %.0g [Nm/rad]\n', sample.K(4), sample.K(5), sample.K(6));
|
||||
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('- 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)));
|
||||
end
|
||||
fprintf('\n');
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -361,50 +361,50 @@ This Matlab function is accessible <a href="..//src/computeReferencePose.m">here
|
||||
</p>
|
||||
|
||||
<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>)
|
||||
<span class="org-comment">% computeReferencePose - Compute the homogeneous transformation matrix corresponding to the wanted pose of the sample</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Syntax: [WTr] = computeReferencePose(Dy, Ry, Rz, Dh, Dn)</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Inputs:</span>
|
||||
<span class="org-comment">% - Dy - Reference of the Translation Stage [m]</span>
|
||||
<span class="org-comment">% - Ry - Reference of the Tilt Stage [rad]</span>
|
||||
<span class="org-comment">% - Rz - Reference of the Spindle [rad]</span>
|
||||
<span class="org-comment">% - Dh - Reference of the Micro Hexapod (Pitch, Roll, Yaw angles) [m, m, m, rad, rad, rad]</span>
|
||||
<span class="org-comment">% - Dn - Reference of the Nano Hexapod [m, m, m, rad, rad, rad]</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Outputs:</span>
|
||||
<span class="org-comment">% - WTr -</span>
|
||||
<pre class="src src-matlab">function [WTr] = computeReferencePose(Dy, Ry, Rz, Dh, Dn)
|
||||
% computeReferencePose - Compute the homogeneous transformation matrix corresponding to the wanted pose of the sample
|
||||
%
|
||||
% Syntax: [WTr] = computeReferencePose(Dy, Ry, Rz, Dh, Dn)
|
||||
%
|
||||
% Inputs:
|
||||
% - Dy - Reference of the Translation Stage [m]
|
||||
% - Ry - Reference of the Tilt Stage [rad]
|
||||
% - Rz - Reference of the Spindle [rad]
|
||||
% - Dh - Reference of the Micro Hexapod (Pitch, Roll, Yaw angles) [m, m, m, rad, rad, rad]
|
||||
% - Dn - Reference of the Nano Hexapod [m, m, m, rad, rad, rad]
|
||||
%
|
||||
% Outputs:
|
||||
% - WTr -
|
||||
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Translation Stage</span></span>
|
||||
%% Translation Stage
|
||||
Rty = [1 0 0 0;
|
||||
0 1 0 Dy;
|
||||
0 0 1 0;
|
||||
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;
|
||||
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];
|
||||
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Spindle - Rotation along the Z axis</span></span>
|
||||
Rrz = [cos(Rz) <span class="org-type">-</span>sin(Rz) 0 0 ;
|
||||
%% Spindle - Rotation along the Z axis
|
||||
Rrz = [cos(Rz) -sin(Rz) 0 0 ;
|
||||
sin(Rz) cos(Rz) 0 0 ;
|
||||
0 0 1 0 ;
|
||||
0 0 0 1 ];
|
||||
|
||||
|
||||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
|
||||
%% Micro-Hexapod
|
||||
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))];
|
||||
|
||||
Rhy = [ cos(Dh(5)) 0 sin(Dh(5));
|
||||
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;
|
||||
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 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;
|
||||
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))];
|
||||
|
||||
Rny = [ cos(Dn(5)) 0 sin(Dn(5));
|
||||
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;
|
||||
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 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>
|
||||
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;
|
||||
<span class="org-keyword">end</span>
|
||||
%% Total Homogeneous transformation
|
||||
WTr = Rty*Rry*Rrz*Rh*Rn;
|
||||
end
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -455,26 +455,26 @@ This Matlab function is accessible <a href="..//src/computeSampleError.m">here</
|
||||
</p>
|
||||
|
||||
<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>)
|
||||
<span class="org-comment">% computeSampleError -</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Syntax: [MTr] = computeSampleError(WTm, WTr)</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Inputs:</span>
|
||||
<span class="org-comment">% - WTm - Homoegeneous transformation that represent the</span>
|
||||
<span class="org-comment">% wanted pose of the sample with respect to the granite</span>
|
||||
<span class="org-comment">% - WTr - Homoegeneous transformation that represent the</span>
|
||||
<span class="org-comment">% measured pose of the sample with respect to the granite</span>
|
||||
<span class="org-comment">%</span>
|
||||
<span class="org-comment">% Outputs:</span>
|
||||
<span class="org-comment">% - MTr - Homoegeneous transformation that represent the</span>
|
||||
<span class="org-comment">% wanted pose of the sample expressed in a frame</span>
|
||||
<span class="org-comment">% attached to the top platform of the nano-hexapod</span>
|
||||
<pre class="src src-matlab">function [MTr] = computeSampleError(WTm, WTr)
|
||||
% computeSampleError -
|
||||
%
|
||||
% Syntax: [MTr] = computeSampleError(WTm, WTr)
|
||||
%
|
||||
% Inputs:
|
||||
% - WTm - Homoegeneous transformation that represent the
|
||||
% wanted pose of the sample with respect to the granite
|
||||
% - WTr - Homoegeneous transformation that represent the
|
||||
% measured pose of the sample with respect to the granite
|
||||
%
|
||||
% Outputs:
|
||||
% - MTr - Homoegeneous transformation that represent the
|
||||
% wanted pose of the sample expressed in a frame
|
||||
% attached to the top platform of the nano-hexapod
|
||||
|
||||
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;
|
||||
<span class="org-keyword">end</span>
|
||||
MTr = [WTm(1:3,1:3)', -WTm(1:3,1:3)'*WTm(1:3,4) ; 0 0 0 1]*WTr;
|
||||
end
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -482,7 +482,7 @@ MTr = [WTm(1<span class="org-type">:</span>3,1<span class="org-type">:</span>3)<
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 09:35 -->
|
||||
<!-- 2020-05-05 mar. 10:33 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Study of the Metrology Frame</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -86,7 +86,7 @@ initializeNanoHexapod();
|
||||
We first consider a rigid Sample to simplify the analysis.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -99,7 +99,7 @@ We first consider a rigid Sample to simplify the analysis.
|
||||
Let’s first consider a rigid reference mirror and we identify the dynamics of the system.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -112,7 +112,7 @@ Let’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]\).
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -158,7 +158,7 @@ Thus, care should be taken when designing the fixation of the reference mirror o
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 14:10 -->
|
||||
<!-- 2020-05-05 mar. 10:34 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Control of the NASS with optimal stiffness</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -42,7 +42,7 @@
|
||||
<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="#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>
|
||||
</li>
|
||||
<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="#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="#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="#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>
|
||||
</li>
|
||||
<li><a href="#org9bd2bf8">3. Primary Control in the task space</a>
|
||||
<li><a href="#org56b28cd">3. Further More complex simulations</a>
|
||||
<ul>
|
||||
<li><a href="#org07b4a9d">3.1. Plant in the task space</a></li>
|
||||
<li><a href="#org7d888f9">3.2. Control in the task space</a>
|
||||
<li><a href="#org6c1ddb5">3.1. Simulation with Micro-Hexapod Offset</a>
|
||||
<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>
|
||||
</li>
|
||||
<li><a href="#org57e2cfd">3.3. Simulation</a></li>
|
||||
<li><a href="#org8c0882d">3.4. Conclusion</a></li>
|
||||
<li><a href="#org5cb899b">3.2. Simultaneous Translation scans and Spindle’s rotation</a>
|
||||
<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>
|
||||
</li>
|
||||
</ul>
|
||||
@ -98,10 +115,10 @@ initializeAxisc();
|
||||
initializeMirror();
|
||||
|
||||
initializeSimscapeConfiguration();
|
||||
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
|
||||
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
|
||||
initializeDisturbances('enable', false);
|
||||
initializeLoggingConfiguration('log', 'none');
|
||||
|
||||
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>);
|
||||
initializeController('type', 'hac-dvf');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -109,7 +126,7 @@ initializeController(<span class="org-string">'type'</span>, <span class="org-st
|
||||
We set the stiffness of the payload fixation:
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -136,7 +153,7 @@ We identify the system for the following payload masses:
|
||||
The nano-hexapod has the following leg’s stiffness and damping.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -185,7 +202,7 @@ Damping as function of the gain
|
||||
Finally, we use the following controller for the Decentralized Direct Velocity Feedback:
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -308,8 +325,8 @@ Decentralized Direct Velocity Feedback is shown to increase the effect of stages
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org882e1ac" class="outline-3">
|
||||
<h3 id="org882e1ac"><span class="section-number-3">1.6</span> Conclusion</h3>
|
||||
<div id="outline-container-org8c0882d" class="outline-3">
|
||||
<h3 id="org8c0882d"><span class="section-number-3">1.6</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-1-6">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -403,11 +420,11 @@ The loop gain is shown in Figure <a href="#orgbcc0acb">12</a>.
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">h = 2.0;
|
||||
Kl = 2e7 <span class="org-type">*</span> eye(6) <span class="org-type">*</span> ...
|
||||
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<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> ...
|
||||
(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> ...
|
||||
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);
|
||||
Kl = 2e7 * eye(6) * ...
|
||||
1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
|
||||
1/h*(s/(2*pi*200/h) + 1)/(s/(2*pi*200*h) + 1) * ...
|
||||
(s/2/pi/10 + 1)/(s/2/pi/10) * ...
|
||||
1/(1 + s/2/pi/300);
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>);
|
||||
K = Kl<span class="org-type">*</span>nano_hexapod.J<span class="org-type">*</span>diag([1, 1, 1, 1, 1, 0]);
|
||||
<pre class="src src-matlab">load('mat/stages.mat', 'nano_hexapod');
|
||||
K = Kl*nano_hexapod.kinematics.J*diag([1, 1, 1, 1, 1, 0]);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
@ -477,8 +494,8 @@ Then, we load the Power Spectral Density of the perturbations and we look at the
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org84f68cc" class="outline-3">
|
||||
<h3 id="org84f68cc"><span class="section-number-3">2.4</span> Simulations</h3>
|
||||
<div id="outline-container-org8f34c09" class="outline-3">
|
||||
<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">
|
||||
<p>
|
||||
Let’s now simulate a tomography experiment.
|
||||
@ -486,8 +503,8 @@ To do so, we include all disturbances except vibrations of the translation stage
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeDisturbances();
|
||||
initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">false</span>);
|
||||
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
|
||||
initializeSimscapeConfiguration('gravity', false);
|
||||
initializeLoggingConfiguration('log', 'all');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -537,9 +554,28 @@ Finally, the time domain position error signals are shown in Figure <a href="#or
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd61852c" class="outline-3">
|
||||
<h3 id="orgd61852c"><span class="section-number-3">2.6</span> Conclusion</h3>
|
||||
<div id="outline-container-orgf709759" class="outline-3">
|
||||
<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 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’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">
|
||||
<p>
|
||||
|
||||
@ -550,14 +586,128 @@ Finally, the time domain position error signals are shown in Figure <a href="#or
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9bd2bf8" class="outline-2">
|
||||
<h2 id="org9bd2bf8"><span class="section-number-2">3</span> Primary Control in the task space</h2>
|
||||
<div id="outline-container-org56b28cd" class="outline-2">
|
||||
<h2 id="org56b28cd"><span class="section-number-2">3</span> Further More complex simulations</h2>
|
||||
<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’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>
|
||||
<a id="orge9c2f9a"></a>
|
||||
</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>
|
||||
<ul class="org-ul">
|
||||
<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">
|
||||
<p><img src="figs/control_architecture_hac_dvf_pos_X.png" alt="control_architecture_hac_dvf_pos_X.png" />
|
||||
</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 id="outline-container-org07b4a9d" class="outline-3">
|
||||
<h3 id="org07b4a9d"><span class="section-number-3">3.1</span> Plant in the task space</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<h3 id="org07b4a9d"><span class="section-number-3">4.1</span> Plant in the task space</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
Let’s look \(\bm{G}_\mathcal{X}(s)\).
|
||||
</p>
|
||||
@ -581,60 +731,60 @@ Let’s look \(\bm{G}_\mathcal{X}(s)\).
|
||||
</div>
|
||||
|
||||
<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>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<h3 id="org7d888f9"><span class="section-number-3">4.2</span> Control in the task space</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Kx = tf(zeros(6));
|
||||
|
||||
h = 2.5;
|
||||
Kx<span class="org-type">(1,1) </span>= 3e7 <span class="org-type">*</span> ...
|
||||
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> ...
|
||||
(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);
|
||||
Kx(1,1) = 3e7 * ...
|
||||
1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 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;
|
||||
Kx<span class="org-type">(3,3) </span>= 3e7 <span class="org-type">*</span> ...
|
||||
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> ...
|
||||
(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);
|
||||
Kx(3,3) = 3e7 * ...
|
||||
1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
|
||||
(s/2/pi/1 + 1)/(s/2/pi/1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">h = 1.5;
|
||||
Kx<span class="org-type">(4,4) </span>= 5e5 <span class="org-type">*</span> ...
|
||||
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> ...
|
||||
(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);
|
||||
Kx(4,4) = 5e5 * ...
|
||||
1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 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;
|
||||
Kx<span class="org-type">(6,6) </span>= 5e4 <span class="org-type">*</span> ...
|
||||
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> ...
|
||||
(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);
|
||||
Kx(6,6) = 5e4 * ...
|
||||
1/h*(s/(2*pi*30/h) + 1)/(s/(2*pi*30*h) + 1) * ...
|
||||
(s/2/pi/1 + 1)/(s/2/pi/1);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb28634b" class="outline-4">
|
||||
<h4 id="orgb28634b"><span class="section-number-4">3.2.1</span> Stability</h4>
|
||||
<div class="outline-text-4" id="text-3-2-1">
|
||||
<h4 id="orgb28634b"><span class="section-number-4">4.2.1</span> Stability</h4>
|
||||
<div class="outline-text-4" id="text-4-2-1">
|
||||
<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>
|
||||
isstable(feedback(Gm_x{<span class="org-constant">i</span>}<span class="org-type">*</span>Kx, eye(6), <span class="org-type">-</span>1))
|
||||
<span class="org-keyword">end</span>
|
||||
<pre class="src src-matlab">for i = 1:length(Ms)
|
||||
isstable(feedback(Gm_x{i}*Kx, eye(6), -1))
|
||||
end
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org57e2cfd" class="outline-3">
|
||||
<h3 id="org57e2cfd"><span class="section-number-3">3.3</span> Simulation</h3>
|
||||
<div id="outline-container-org9ea6a0a" class="outline-3">
|
||||
<h3 id="org9ea6a0a"><span class="section-number-3">4.3</span> Simulation</h3>
|
||||
</div>
|
||||
<div id="outline-container-org8c0882d" class="outline-3">
|
||||
<h3 id="org8c0882d"><span class="section-number-3">3.4</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-3-4">
|
||||
<div id="outline-container-org21304f7" class="outline-3">
|
||||
<h3 id="org21304f7"><span class="section-number-3">4.4</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-4-4">
|
||||
<div class="important">
|
||||
<p>
|
||||
|
||||
@ -647,7 +797,7 @@ Kx<span class="org-type">(6,6) </span>= 5e4 <span class="org-type">*</span> ...
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 09:35 -->
|
||||
<!-- 2020-05-05 mar. 10:34 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Evaluating the Plant Uncertainty in various experimental conditions</title>
|
||||
<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="#orgb49a967">3. Variation of the Spindle Angle</a>
|
||||
<ul>
|
||||
<li><a href="#org07d9092">3.1. Identification</a></li>
|
||||
<li><a href="#org027e6cb">3.1. Identification</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org9081b0f">4. Variation of the Spindle Rotation Speed</a>
|
||||
<ul>
|
||||
<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>
|
||||
</ul>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
<p>
|
||||
@ -214,8 +214,8 @@ We initialize all the stages with the default parameters.
|
||||
We identify the dynamics for the following sample resonance frequency.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">mass_w = [50, 100, 500]; <span class="org-comment">% [Hz]</span>
|
||||
mass = 10; <span class="org-comment">% [Kg]</span>
|
||||
<pre class="src src-matlab">mass_w = [50, 100, 500]; % [Hz]
|
||||
mass = 10; % [Kg]
|
||||
</pre>
|
||||
</div>
|
||||
<p>
|
||||
@ -300,15 +300,15 @@ Let’s note \(\omega_m\) the frequency of the resonance of the Payload.
|
||||
<a id="org58b9cae"></a>
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-org07d9092" class="outline-3">
|
||||
<h3 id="org07d9092"><span class="section-number-3">3.1</span> Identification</h3>
|
||||
<div id="outline-container-org027e6cb" class="outline-3">
|
||||
<h3 id="org027e6cb"><span class="section-number-3">3.1</span> Identification</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
We identify the dynamics for the following Tilt stage angles.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeSample(<span class="org-string">'mass'</span>, 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>
|
||||
<pre class="src src-matlab">initializeSample('mass', 50);
|
||||
Rz_amplitudes = [0, pi/4, pi/2, pi]; % [rad]
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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);
|
||||
nano_hexapod = initializeNanoHexapod( <span class="org-string">'type'</span>, <span class="org-string">'init'</span>);
|
||||
<pre class="src src-matlab">initializeSample('type', 'init', 'mass', 10);
|
||||
nano_hexapod = initializeNanoHexapod( 'type', 'init');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -379,15 +379,15 @@ Finally, we simulate the system and same the forces/torques applied in each join
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org027e6cb" class="outline-3">
|
||||
<h3 id="org027e6cb"><span class="section-number-3">4.2</span> Identification</h3>
|
||||
<div id="outline-container-orgd69bd8a" class="outline-3">
|
||||
<h3 id="orgd69bd8a"><span class="section-number-3">4.2</span> Identification</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<p>
|
||||
We initialize the stages with forces/torques compensating the gravity forces.
|
||||
We identify the dynamics for the following Spindle rotation periods.
|
||||
</p>
|
||||
<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>
|
||||
</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.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeSample(<span class="org-string">'mass'</span>, 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>
|
||||
<pre class="src src-matlab">initializeSample('mass', 50);
|
||||
Ry_amplitudes = [-3*pi/180 0 3*pi/180]; % [rad]
|
||||
</pre>
|
||||
</div>
|
||||
<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.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -603,7 +603,7 @@ From all the experimental condition studied, the only ones that have significant
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 09:35 -->
|
||||
<!-- 2020-05-05 mar. 10:33 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Determination of the optimal nano-hexapod’s stiffness</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -37,7 +37,7 @@
|
||||
<ul>
|
||||
<li><a href="#org157c07d">1. Spindle Rotation Speed</a>
|
||||
<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="#org7dcfddb">1.3. Change of dynamics</a></li>
|
||||
</ul>
|
||||
@ -52,7 +52,7 @@
|
||||
</li>
|
||||
<li><a href="#org19559b0">3. Payload “Impedance” Effect</a>
|
||||
<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="#orgd7a519b">3.3. Change of dynamics for the primary controller</a>
|
||||
<ul>
|
||||
@ -109,8 +109,8 @@ The rotation speed will have an effect due to the Coriolis effect.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf8f2ffc" class="outline-3">
|
||||
<h3 id="orgf8f2ffc"><span class="section-number-3">1.1</span> Initialization</h3>
|
||||
<div id="outline-container-orgd45a5be" class="outline-3">
|
||||
<h3 id="orgd45a5be"><span class="section-number-3">1.1</span> Initialization</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
We initialize all the stages with the default parameters.
|
||||
@ -131,7 +131,7 @@ initializeMirror();
|
||||
We use a sample mass of 10kg.
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -140,9 +140,9 @@ We don’t include disturbances in this model as it adds complexity to the s
|
||||
We however include gravity.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
|
||||
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
|
||||
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
|
||||
<pre class="src src-matlab">initializeSimscapeConfiguration('gravity', true);
|
||||
initializeDisturbances('enable', false);
|
||||
initializeLoggingConfiguration('log', 'none');
|
||||
initializeController();
|
||||
</pre>
|
||||
</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>:
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -262,7 +262,7 @@ initializeGranite();
|
||||
initializeTy();
|
||||
initializeRy();
|
||||
initializeRz();
|
||||
initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-string">'compliance'</span>);
|
||||
initializeMicroHexapod('type', 'compliance');
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -270,10 +270,10 @@ initializeMicroHexapod(<span class="org-string">'type'</span>, <span class="org-
|
||||
We put nothing on top of the micro-hexapod.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeAxisc(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
initializeMirror(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
initializeNanoHexapod(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
|
||||
<pre class="src src-matlab">initializeAxisc('type', 'none');
|
||||
initializeMirror('type', 'none');
|
||||
initializeNanoHexapod('type', 'none');
|
||||
initializeSample('type', 'none');
|
||||
</pre>
|
||||
</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.
|
||||
</p>
|
||||
<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>
|
||||
</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:
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -386,15 +386,15 @@ When the nano-hexapod is stiff (\(k>10^7\ [N/m]\)), the compliance of the micro-
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd45a5be" class="outline-3">
|
||||
<h3 id="orgd45a5be"><span class="section-number-3">3.1</span> Initialization</h3>
|
||||
<div id="outline-container-org654fcb6" class="outline-3">
|
||||
<h3 id="org654fcb6"><span class="section-number-3">3.1</span> Initialization</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
We initialize all the stages with the default parameters.
|
||||
We don’t include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics. :exports none
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -402,9 +402,9 @@ We don’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.
|
||||
</p>
|
||||
<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();
|
||||
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
|
||||
initializeLoggingConfiguration('log', 'none');
|
||||
initializeReferences();
|
||||
</pre>
|
||||
</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’s stiffnesses <code>Ks</code>:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Ms = [1, 20, 50]; <span class="org-comment">% [Kg]</span>
|
||||
Ks = logspace(3,9,7); <span class="org-comment">% [N/m]</span>
|
||||
<pre class="src src-matlab">Ms = [1, 20, 50]; % [Kg]
|
||||
Ks = logspace(3,9,7); % [N/m]
|
||||
</pre>
|
||||
</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>:
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -629,7 +629,7 @@ And finally, in Figures <a href="#orge05feb5">21</a> and <a href="#org17c5c95">2
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 09:35 -->
|
||||
<!-- 2020-05-05 mar. 10:33 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Effect of Uncertainty on the payload’s dynamics on the isolation platform dynamics</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -37,17 +37,17 @@
|
||||
<ul>
|
||||
<li><a href="#orgcc5f0ec">1. Simple Introductory Example</a>
|
||||
<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="#orgb400ca3">1.3. Initialization of the isolation platform</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>
|
||||
</li>
|
||||
<li><a href="#org1f8e63e">2. Generalization to arbitrary dynamics</a>
|
||||
<ul>
|
||||
<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="#org0ee44da">2.4. First Analytical analysis</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’s mass \(m\)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org3f697cc">2.9. Conclusion</a></li>
|
||||
<li><a href="#org272e76a">2.9. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@ -114,8 +114,8 @@ The goal is to stabilize \(x\) using \(F\) in spite of uncertainty on the payloa
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf75e223" class="outline-3">
|
||||
<h3 id="orgf75e223"><span class="section-number-3">1.1</span> Equations of motion</h3>
|
||||
<div id="outline-container-org5ed1517" class="outline-3">
|
||||
<h3 id="org5ed1517"><span class="section-number-3">1.1</span> Equations of motion</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
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;
|
||||
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;
|
||||
cpi = 0.2<span class="org-type">*</span>sqrt(kpi<span class="org-type">*</span>mpi);
|
||||
kpi = (2*pi*50)^2*mpi;
|
||||
cpi = 0.2*sqrt(kpi*mpi);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -161,9 +161,9 @@ cpi = 0.2<span class="org-type">*</span>sqrt(kpi<span class="org-type">*</span>m
|
||||
Let’s also consider some uncertainty in those parameters:
|
||||
</p>
|
||||
<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]);
|
||||
cp = ureal(<span class="org-string">'c'</span>, cpi, <span class="org-string">'Percentage'</span>, 30);
|
||||
kp = ureal(<span class="org-string">'k'</span>, kpi, <span class="org-string">'Percentage'</span>, 30);
|
||||
<pre class="src src-matlab">mp = ureal('m', mpi, 'Range', [1, 100]);
|
||||
cp = ureal('c', cpi, 'Percentage', 30);
|
||||
kp = ureal('k', kpi, 'Percentage', 30);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -222,8 +222,8 @@ The obtained dynamics from \(F\) to \(x\) for the three isolation platform are s
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd1e600e" class="outline-3">
|
||||
<h3 id="orgd1e600e"><span class="section-number-3">1.5</span> Conclusion</h3>
|
||||
<div id="outline-container-org3f697cc" class="outline-3">
|
||||
<h3 id="org3f697cc"><span class="section-number-3">1.5</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-1-5">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -275,8 +275,8 @@ Now let’s consider the system consisting of a mass-spring-system (the isol
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5ed1517" class="outline-3">
|
||||
<h3 id="org5ed1517"><span class="section-number-3">2.2</span> Equations of motion</h3>
|
||||
<div id="outline-container-org3367211" class="outline-3">
|
||||
<h3 id="org3367211"><span class="section-number-3">2.2</span> Equations of motion</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<p>
|
||||
We have to following equations of motion:
|
||||
@ -343,7 +343,7 @@ And we obtain
|
||||
\end{align*}
|
||||
|
||||
<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>
|
||||
@ -455,7 +455,7 @@ The main resonance of the payload is then \(\omega^\prime = \sqrt{\frac{m^\prime
|
||||
c0 = 3e2;
|
||||
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>
|
||||
</div>
|
||||
|
||||
@ -486,10 +486,10 @@ The parameters are defined below.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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;
|
||||
|
||||
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>
|
||||
</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\).
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -505,7 +505,7 @@ We then generate a complex \(\Delta\).
|
||||
We generate the uncertain plant \(G^\prime(s)\).
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -583,12 +583,12 @@ And we generate three isolation platforms:
|
||||
Soft Isolation Platform:
|
||||
</p>
|
||||
<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;
|
||||
c_soft = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_soft);
|
||||
<pre class="src src-matlab">k_soft = m*(2*pi*5)^2;
|
||||
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);
|
||||
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);
|
||||
wiI_soft = Gp0<span class="org-type">*</span>G0_soft<span class="org-type">*</span>wI;
|
||||
G_soft = 1/(m*s^2 + c_soft*s + k_soft + Gp);
|
||||
G0_soft = 1/(m*s^2 + c_soft*s + k_soft + Gp0);
|
||||
wiI_soft = Gp0*G0_soft*wI;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -596,12 +596,12 @@ wiI_soft = Gp0<span class="org-type">*</span>G0_soft<span class="org-type">*</sp
|
||||
Mid Isolation Platform
|
||||
</p>
|
||||
<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;
|
||||
c_mid = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_mid);
|
||||
<pre class="src src-matlab">k_mid = m*(2*pi*50)^2;
|
||||
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);
|
||||
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);
|
||||
wiI_mid = Gp0<span class="org-type">*</span>G0_mid<span class="org-type">*</span>wI;
|
||||
G_mid = 1/(m*s^2 + c_mid*s + k_mid + Gp);
|
||||
G0_mid = 1/(m*s^2 + c_mid*s + k_mid + Gp0);
|
||||
wiI_mid = Gp0*G0_mid*wI;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -609,12 +609,12 @@ wiI_mid = Gp0<span class="org-type">*</span>G0_mid<span class="org-type">*</span
|
||||
Stiff Isolation Platform
|
||||
</p>
|
||||
<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;
|
||||
c_stiff = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_stiff);
|
||||
<pre class="src src-matlab">k_stiff = m*(2*pi*500)^2;
|
||||
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);
|
||||
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);
|
||||
wiI_stiff = Gp0<span class="org-type">*</span>G0_stiff<span class="org-type">*</span>wI;
|
||||
G_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + Gp);
|
||||
G0_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + Gp0);
|
||||
wiI_stiff = Gp0*G0_stiff*wI;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -732,8 +732,8 @@ Let’s fix \(k = 10^7\ [N/m]\), \(\xi = \frac{c}{2\sqrt{km}} = 0.1\) and se
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org3f697cc" class="outline-3">
|
||||
<h3 id="org3f697cc"><span class="section-number-3">2.9</span> Conclusion</h3>
|
||||
<div id="outline-container-org272e76a" class="outline-3">
|
||||
<h3 id="org272e76a"><span class="section-number-3">2.9</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-2-9">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -757,7 +757,7 @@ In that case, maximizing the stiffness of the payload is a good idea.
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-04-17 ven. 09:35 -->
|
||||
<!-- 2020-05-05 mar. 10:33 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Effect of Uncertainty on the support’s dynamics on the isolation platform dynamics</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -37,17 +37,17 @@
|
||||
<ul>
|
||||
<li><a href="#orgbe6e0b8">1. Simple Introductory Example</a>
|
||||
<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="#orgefb9b71">1.3. Initialization of the isolation platform</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>
|
||||
</li>
|
||||
<li><a href="#orge1d3484">2. Generalization to arbitrary dynamics</a>
|
||||
<ul>
|
||||
<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="#org67810a4">2.4. Equivalent Inverse Multiplicative Uncertainty</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’s mass \(m\)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org999e1c5">2.7. Conclusion</a></li>
|
||||
<li><a href="#orgde3616e">2.7. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@ -112,8 +112,8 @@ The goal is to stabilize \(x\) using \(F\) in spite of uncertainty on the suppor
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf4562a5" class="outline-3">
|
||||
<h3 id="orgf4562a5"><span class="section-number-3">1.1</span> Equations of motion</h3>
|
||||
<div id="outline-container-org3d4902a" class="outline-3">
|
||||
<h3 id="org3d4902a"><span class="section-number-3">1.1</span> Equations of motion</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
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’s also consider some uncertainty in those parameters:
|
||||
</p>
|
||||
<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);
|
||||
cp = ureal(<span class="org-string">'c'</span>, cpi, <span class="org-string">'Percentage'</span>, 30);
|
||||
kp = ureal(<span class="org-string">'k'</span>, kpi, <span class="org-string">'Percentage'</span>, 30);
|
||||
<pre class="src src-matlab">mp = ureal('m', mpi, 'Percentage', 30);
|
||||
cp = ureal('c', cpi, 'Percentage', 30);
|
||||
kp = ureal('k', kpi, 'Percentage', 30);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -217,8 +217,8 @@ The obtained dynamics from \(F\) to \(x\) for the three isolation platform are s
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2a9bf99" class="outline-3">
|
||||
<h3 id="org2a9bf99"><span class="section-number-3">1.5</span> Conclusion</h3>
|
||||
<div id="outline-container-org999e1c5" class="outline-3">
|
||||
<h3 id="org999e1c5"><span class="section-number-3">1.5</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-1-5">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -263,8 +263,8 @@ Now let’s consider the system consisting of a mass-spring-system (the isol
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org3d4902a" class="outline-3">
|
||||
<h3 id="org3d4902a"><span class="section-number-3">2.2</span> Equations of motion</h3>
|
||||
<div id="outline-container-org18c1c3f" class="outline-3">
|
||||
<h3 id="org18c1c3f"><span class="section-number-3">2.2</span> Equations of motion</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<p>
|
||||
We have to following equations of motion:
|
||||
@ -294,7 +294,7 @@ In order to verify that the formula is correct, let’s take the same mass-s
|
||||
<p>
|
||||
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)} \]
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
@ -316,7 +316,7 @@ The main resonance of the support is then \(\omega^\prime = \sqrt{\frac{m^\prime
|
||||
c0 = 5e4;
|
||||
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>
|
||||
</div>
|
||||
|
||||
@ -347,10 +347,10 @@ The parameters are defined below.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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;
|
||||
|
||||
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>
|
||||
</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\).
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -366,7 +366,7 @@ We then generate a complex \(\Delta\).
|
||||
We generate the uncertain plant \(G^\prime(s)\).
|
||||
</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -445,12 +445,12 @@ And we generate three isolation platforms:
|
||||
Soft Isolation Platform:
|
||||
</p>
|
||||
<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;
|
||||
c_soft = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_soft);
|
||||
<pre class="src src-matlab">k_soft = m*(2*pi*5)^2;
|
||||
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);
|
||||
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);
|
||||
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;
|
||||
G_soft = 1/(m*s^2 + c_soft*s + k_soft + m*s^2*(c_soft*s + k_soft)*Gp);
|
||||
G0_soft = 1/(m*s^2 + c_soft*s + k_soft + m*s^2*(c_soft*s + k_soft)*Gp0);
|
||||
wiI_soft = Gp0*m*s^2*(c_soft*s + k_soft)*G0_soft*wI;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -458,12 +458,12 @@ wiI_soft = Gp0<span class="org-type">*</span>m<span class="org-type">*</span>s<s
|
||||
Mid Isolation Platform
|
||||
</p>
|
||||
<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;
|
||||
c_mid = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_mid);
|
||||
<pre class="src src-matlab">k_mid = m*(2*pi*50)^2;
|
||||
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);
|
||||
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);
|
||||
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;
|
||||
G_mid = 1/(m*s^2 + c_mid*s + k_mid + m*s^2*(c_mid*s + k_mid)*Gp);
|
||||
G0_mid = 1/(m*s^2 + c_mid*s + k_mid + m*s^2*(c_mid*s + k_mid)*Gp0);
|
||||
wiI_mid = Gp0*m*s^2*(c_mid*s + k_mid)*G0_mid*wI;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -471,12 +471,12 @@ wiI_mid = Gp0<span class="org-type">*</span>m<span class="org-type">*</span>s<sp
|
||||
Stiff Isolation Platform
|
||||
</p>
|
||||
<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;
|
||||
c_stiff = 0.1<span class="org-type">*</span>sqrt(m<span class="org-type">*</span>k_stiff);
|
||||
<pre class="src src-matlab">k_stiff = m*(2*pi*500)^2;
|
||||
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);
|
||||
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);
|
||||
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;
|
||||
G_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + m*s^2*(c_stiff*s + k_stiff)*Gp);
|
||||
G0_stiff = 1/(m*s^2 + c_stiff*s + k_stiff + m*s^2*(c_stiff*s + k_stiff)*Gp0);
|
||||
wiI_stiff = Gp0*m*s^2*(c_stiff*s + k_stiff)*G0_stiff*wI;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -600,8 +600,8 @@ Let’s fix \(k = 10^7\ [N/m]\), \(\xi = \frac{c}{2\sqrt{km}} = 0.1\) and se
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org999e1c5" class="outline-3">
|
||||
<h3 id="org999e1c5"><span class="section-number-3">2.7</span> Conclusion</h3>
|
||||
<div id="outline-container-orgde3616e" class="outline-3">
|
||||
<h3 id="orgde3616e"><span class="section-number-3">2.7</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-2-7">
|
||||
<div class="important">
|
||||
<p>
|
||||
@ -629,7 +629,7 @@ Thus, if a stiff isolation platform is used, the recommendation is to have the l
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
|
BIN
mat/conf_log.mat
BIN
mat/conf_log.mat
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
mat/stages.mat
BIN
mat/stages.mat
Binary file not shown.
Binary file not shown.
@ -257,7 +257,7 @@ We identify the dynamics of the system using the =linearize= function.
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
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) = {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.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_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.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_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.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_ine(i) = {G_cart};
|
||||
|
@ -375,7 +375,7 @@ The minus sine is put here because there is already a minus sign included due to
|
||||
#+begin_src matlab
|
||||
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'};
|
||||
#+end_src
|
||||
|
||||
@ -495,7 +495,7 @@ The controller consists of:
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Kx = inv(nano_hexapod.J')*Kx;
|
||||
Kx = inv(nano_hexapod.kinematics.J')*Kx;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
|
@ -106,11 +106,11 @@ Identification of the Primary plant without virtual add of mass
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
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'};
|
||||
G_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
G_l(i) = {Gl};
|
||||
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.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'};
|
||||
GmL_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
GmL_l(i) = {Gl};
|
||||
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)};
|
||||
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_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]]
|
||||
|
||||
#+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
|
||||
|
||||
#+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.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'};
|
||||
GmX_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
GmX_l(i) = {Gl};
|
||||
end
|
||||
|
@ -439,10 +439,10 @@ A minus sign is added because the minus sign is already included in the plant id
|
||||
|
||||
#+begin_src matlab
|
||||
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'};
|
||||
|
||||
Gpl = nano_hexapod.J*Gp;
|
||||
Gpl = nano_hexapod.kinematics.J*Gp;
|
||||
Gpl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
|
||||
#+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.
|
||||
#+begin_src matlab
|
||||
Kp = inv(nano_hexapod.J')*Kp;
|
||||
Kp = inv(nano_hexapod.kinematics.J')*Kp;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :tangle no
|
||||
@ -686,11 +686,11 @@ And we simulate the system.
|
||||
#+begin_src matlab :exports none
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
|
||||
F_pz = [nano_hexapod.J'*cascade_hac_lac.u.Data']';
|
||||
F_vc = [nano_hexapod.J'*cascade_hac_lac_lorentz.u.Data']';
|
||||
F_pz = [nano_hexapod.kinematics.J'*cascade_hac_lac.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_vc = [-nano_hexapod.J'*cascade_hac_lac_lorentz.yn.Fnlm.Data']';
|
||||
% F_pz = [-nano_hexapod.kinematics.J'*cascade_hac_lac.yn.Fnlm.Data']';
|
||||
% F_vc = [-nano_hexapod.kinematics.J'*cascade_hac_lac_lorentz.yn.Fnlm.Data']';
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
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'};
|
||||
|
||||
Gpl_m = nano_hexapod.J*Gp_m;
|
||||
Gpl_m = nano_hexapod.kinematics.J*Gp_m;
|
||||
Gpl_m.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
|
||||
#+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.
|
||||
#+begin_src matlab
|
||||
load('mat/hac_lac_cascade_vc_controllers.mat', 'Kp')
|
||||
Kp_x = nano_hexapod.J'*Kp;
|
||||
Kp_x = nano_hexapod.kinematics.J'*Kp;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@ -1670,10 +1670,10 @@ And we simulate the system.
|
||||
|
||||
#+begin_src matlab
|
||||
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'};
|
||||
|
||||
Gl = nano_hexapod.J*G;
|
||||
Gl = nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
|
||||
#+end_src
|
||||
|
||||
@ -2010,7 +2010,7 @@ We can do that in two different ways:
|
||||
The obtained plant is shown in Figure
|
||||
|
||||
#+begin_src matlab
|
||||
Gx = G*inv(nano_hexapod.J');
|
||||
Gx = G*inv(nano_hexapod.kinematics.J');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
@ -2076,7 +2076,7 @@ The obtained plant is shown in Figure
|
||||
|
||||
*** Plant in the Leg's space
|
||||
#+begin_src matlab
|
||||
Gl = nano_hexapod.J*G;
|
||||
Gl = nano_hexapod.kinematics.J*G;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
@ -2287,10 +2287,10 @@ The obtained plant is shown in Figure
|
||||
|
||||
#+begin_src matlab
|
||||
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'};
|
||||
|
||||
Gl = nano_hexapod.J*G;
|
||||
Gl = nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'El1', 'El2', 'El3', 'El4', 'El5', 'El6'};
|
||||
#+end_src
|
||||
|
||||
|
@ -119,7 +119,7 @@
|
||||
fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude);
|
||||
case { 'rotating', 'rotating-not-filtered' }
|
||||
fprintf(' - Rotating\n');
|
||||
fprintf(' - Speed = %.0f [rpm]\n', 60/Rz_period);
|
||||
fprintf(' - Speed = %.0f [rpm]\n', 60/args.Rz_period);
|
||||
end
|
||||
|
||||
|
||||
@ -241,7 +241,7 @@
|
||||
fprintf('- rigid\n');
|
||||
elseif nano_hexapod.type == 2;
|
||||
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
|
||||
|
||||
fprintf('\n');
|
||||
|
@ -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'};
|
||||
|
||||
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'};
|
||||
#+end_src
|
||||
|
||||
@ -94,7 +94,7 @@ And we re identify the plant dynamics.
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
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'};
|
||||
#+end_src
|
||||
|
||||
|
@ -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.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'};
|
||||
G_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
G_l(i) = {Gl};
|
||||
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.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'};
|
||||
Gm_x(i) = {Gx};
|
||||
|
||||
Gl = -nano_hexapod.J*G;
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
Gm_l(i) = {Gl};
|
||||
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.
|
||||
#+begin_src matlab
|
||||
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
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
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_src
|
||||
|
||||
|
@ -1283,16 +1283,20 @@ The =mirror= structure is saved.
|
||||
args.k (1,1) double {mustBeNumeric} = -1
|
||||
args.c (1,1) double {mustBeNumeric} = -1
|
||||
% initializeJointDynamics
|
||||
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'universal'
|
||||
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'spherical'
|
||||
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_3dof'})} = 'spherical'
|
||||
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.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.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.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.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
|
||||
args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1
|
||||
args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e-3
|
||||
@ -1353,10 +1357,14 @@ The =mirror= structure is saved.
|
||||
'Cf_M' , args.Cf_M, ...
|
||||
'Kt_M' , args.Kt_M, ...
|
||||
'Ct_M' , args.Ct_M, ...
|
||||
'Kz_M' , args.Kz_M, ...
|
||||
'Cz_M' , args.Cz_M, ...
|
||||
'Kf_F' , args.Kf_F, ...
|
||||
'Cf_F' , args.Cf_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
|
||||
|
||||
#+begin_src matlab
|
||||
|
@ -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]
|
||||
% - 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)]
|
||||
% - 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]
|
||||
% - 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] - 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:
|
||||
% - 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
|
||||
arguments
|
||||
stewart
|
||||
args.type_F char {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'universal'
|
||||
args.type_M char {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'spherical'
|
||||
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_3dof'})} = 'spherical'
|
||||
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.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.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.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.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_src
|
||||
|
||||
@ -1021,6 +1029,8 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
|
||||
stewart.joints_F.type = 3;
|
||||
case 'spherical_p'
|
||||
stewart.joints_F.type = 4;
|
||||
case 'universal_3dof'
|
||||
stewart.joints_F.type = 5;
|
||||
end
|
||||
|
||||
switch args.type_M
|
||||
@ -1032,6 +1042,8 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
|
||||
stewart.joints_M.type = 3;
|
||||
case 'spherical_p'
|
||||
stewart.joints_M.type = 4;
|
||||
case 'spherical_3dof'
|
||||
stewart.joints_M.type = 6;
|
||||
end
|
||||
#+end_src
|
||||
|
||||
@ -1043,22 +1055,22 @@ Translation Stiffness
|
||||
#+begin_src matlab
|
||||
stewart.joints_M.Kx = 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.Ky = zeros(6,1);
|
||||
stewart.joints_F.Kz = zeros(6,1);
|
||||
stewart.joints_F.Kz = args.Kz_F;
|
||||
#+end_src
|
||||
|
||||
Translation Damping
|
||||
#+begin_src matlab
|
||||
stewart.joints_M.Cx = 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.Cy = zeros(6,1);
|
||||
stewart.joints_F.Cz = zeros(6,1);
|
||||
stewart.joints_F.Cz = args.Cz_F;
|
||||
#+end_src
|
||||
|
||||
** Add Stiffness and Damping in Rotation of each strut
|
||||
|
@ -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_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.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};
|
||||
@ -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'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
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};
|
||||
@ -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_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.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};
|
||||
@ -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'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
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};
|
||||
@ -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_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.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};
|
||||
@ -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'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
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};
|
||||
@ -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_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.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};
|
||||
@ -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'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
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};
|
||||
@ -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_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.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};
|
||||
@ -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'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
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};
|
||||
@ -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_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.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};
|
||||
@ -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'}))};
|
||||
|
||||
|
||||
Jinvt = tf(inv(nano_hexapod.J)');
|
||||
Jinvt = tf(inv(nano_hexapod.kinematics.J)');
|
||||
Jinvt.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
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};
|
||||
|
@ -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_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.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};
|
||||
@ -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_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.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};
|
||||
@ -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_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.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};
|
||||
@ -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_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.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};
|
||||
@ -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_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.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};
|
||||
|
@ -79,7 +79,7 @@ switch args.Rz_type
|
||||
fprintf(' - Rz = %.0f [deg]\n', 180/pi*args.Rz_amplitude);
|
||||
case { 'rotating', 'rotating-not-filtered' }
|
||||
fprintf(' - Rotating\n');
|
||||
fprintf(' - Speed = %.0f [rpm]\n', 60/Rz_period);
|
||||
fprintf(' - Speed = %.0f [rpm]\n', 60/args.Rz_period);
|
||||
end
|
||||
|
||||
|
||||
@ -169,7 +169,7 @@ elseif nano_hexapod.type == 1 || nano_hexapod.type == 3;
|
||||
fprintf('- rigid\n');
|
||||
elseif nano_hexapod.type == 2;
|
||||
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
|
||||
|
||||
fprintf('\n');
|
||||
|
Loading…
Reference in New Issue
Block a user