Update files for new definition of hexapods

This commit is contained in:
2020-05-05 11:38:52 +02:00
parent 2deb41939d
commit f7714a1449
33 changed files with 4627 additions and 2915 deletions
+197 -197
View File
@@ -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&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;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>
+51 -51
View File
@@ -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&rsquo;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>
+28 -28
View File
@@ -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&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\mathcal{X}}\):
@@ -185,11 +185,11 @@ Let&rsquo;s look at the transfer function from \(\bm{\mathcal{F}}\) to \(d\bm{\m
</div>
</div>
<div 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&rsquo;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&rsquo;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
+111 -111
View File
@@ -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&rsquo;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&rsquo;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&rsquo;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>
+217 -217
View File
@@ -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">&amp;&amp;</span> args.Dwy <span class="org-type">&amp;&amp;</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">&amp;&amp;</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 &amp;&amp; args.Dwy &amp;&amp; args.Dwz
fprintf('- Ground motion\n');
end
if args.Fty_x &amp;&amp; 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">&amp;&amp;</span> ...
ty.type <span class="org-type">==</span> 1 <span class="org-type">&amp;&amp;</span> ...
ry.type <span class="org-type">==</span> 1 <span class="org-type">&amp;&amp;</span> ...
rz.type <span class="org-type">==</span> 1 <span class="org-type">&amp;&amp;</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">&amp;&amp;</span> ...
ty.type <span class="org-type">==</span> 2 <span class="org-type">&amp;&amp;</span> ...
ry.type <span class="org-type">==</span> 2 <span class="org-type">&amp;&amp;</span> ...
rz.type <span class="org-type">==</span> 2 <span class="org-type">&amp;&amp;</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 &amp;&amp; ...
ty.type == 1 &amp;&amp; ...
ry.type == 1 &amp;&amp; ...
rz.type == 1 &amp;&amp; ...
micro_hexapod.type == 1;
fprintf('- All stages are rigid\n');
elseif granite.type == 2 &amp;&amp; ...
ty.type == 2 &amp;&amp; ...
ry.type == 2 &amp;&amp; ...
rz.type == 2 &amp;&amp; ...
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>
+5 -5
View File
@@ -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&rsquo;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&rsquo;s first consider a rigid reference mirror and we identify the dynamics
We now initialize a reference mirror with a main resonance frequency at \(200\ [Hz]\).
</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>
+214 -64
View File
@@ -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&rsquo;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&rsquo;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&rsquo;s now simulate a tomography experiment.
@@ -486,8 +503,8 @@ To do so, we include all disturbances except vibrations of the translation stage
</p>
<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&rsquo;s stroke during the simulation</p>
</div>
</div>
</div>
<div id="outline-container-orgb0f5db9" class="outline-3">
<h3 id="orgb0f5db9"><span class="section-number-3">2.7</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-7">
<div class="important">
<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&rsquo;s rotation</h3>
<div class="outline-text-3" id="text-3-2">
</div>
<div id="outline-container-org6710f28" class="outline-4">
<h4 id="org6710f28"><span class="section-number-4">3.2.1</span> Simulation</h4>
<div class="outline-text-4" id="text-3-2-1">
<p>
A simulation is now performed with translation scans and spindle rotation at the same time.
</p>
<p>
The sample has a mass one 1kg, the spindle rotation speed is 60rpm and the translation scans have a period of 4s and a triangular shape.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
initializeSimscapeConfiguration('gravity', false);
initializeLoggingConfiguration('log', 'all');
initializeSample('mass', 1, 'freq', 200);
initializeReferences('Rz_type', 'rotating', 'Rz_period', 1, ...
'Dy_type', 'triangular', 'Dy_amplitude', 5e-3, 'Dy_period', 4);
</pre>
</div>
</div>
</div>
<div id="outline-container-org035df39" class="outline-4">
<h4 id="org035df39"><span class="section-number-4">3.2.2</span> Results</h4>
<div class="outline-text-4" id="text-3-2-2">
<div id="orgbfa1d02" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dy_scans_disp_error.png" alt="opt_stiff_hac_dvf_Dy_scans_disp_error.png" />
</p>
</div>
<div id="org760b96c" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dy_scans_F.png" alt="opt_stiff_hac_dvf_Dy_scans_F.png" />
</p>
</div>
<div id="orgae36e3d" class="figure">
<p><img src="figs/opt_stiff_hac_dvf_Dy_scans_dL.png" alt="opt_stiff_hac_dvf_Dy_scans_dL.png" />
</p>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-org9bd2bf8" class="outline-2">
<h2 id="org9bd2bf8"><span class="section-number-2">4</span> Primary Control in the task space</h2>
<div class="outline-text-2" id="text-4">
<p>
<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&rsquo;s look \(\bm{G}_\mathcal{X}(s)\).
</p>
@@ -581,60 +731,60 @@ Let&rsquo;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>
+1201 -1109
View File
File diff suppressed because it is too large Load Diff
+2143 -693
View File
File diff suppressed because it is too large Load Diff
+19 -19
View File
@@ -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&rsquo;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>
+26 -26
View File
@@ -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&rsquo;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 &ldquo;Impedance&rdquo; 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&rsquo;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&rsquo;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&rsquo;t include disturbances in this model as it adds complexity to the s
We set the controller type to Open-Loop, and we do not need to log any signal.
</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&rsquo;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>
+40 -40
View File
@@ -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&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;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>
+38 -38
View File
@@ -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&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;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
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+4 -4
View File
@@ -257,7 +257,7 @@ We identify the dynamics of the system using the =linearize= function.
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.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};
+2 -2
View File
@@ -375,7 +375,7 @@ The minus sine is put here because there is already a minus sign included due to
#+begin_src matlab
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
+8 -8
View File
@@ -106,11 +106,11 @@ Identification of the Primary plant without virtual add of mass
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.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
+16 -16
View File
@@ -439,10 +439,10 @@ A minus sign is added because the minus sign is already included in the plant id
#+begin_src matlab
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
+2 -2
View File
@@ -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');
+2 -2
View File
@@ -76,7 +76,7 @@ Let's first consider a rigid reference mirror and we identify the dynamics of th
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
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
+6 -6
View File
@@ -275,11 +275,11 @@ The obtained dynamics is shown in Figure [[fig:opt_stiff_primary_plant_damped_L]
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.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
+11 -3
View File
@@ -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
+18 -6
View File
@@ -970,10 +970,14 @@ This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here
% - Kt_M [6x1] - Torsion (Rz) Stiffness for each top joints [(N.m)/rad]
% - 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
+12 -12
View File
@@ -78,7 +78,7 @@ We identify the dynamics for the following sample masses, both with a soft and s
Gm_vc_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gm_vc_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};
+5 -5
View File
@@ -115,7 +115,7 @@ And for the following nano-hexapod actuator stiffness =Ks=:
Gk_wz_iff(i,j) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
Gk_wz_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};
+2 -2
View File
@@ -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');