Update files for new definition of hexapods

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

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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>

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>

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

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>

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>

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>

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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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>

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>

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>

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>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -257,7 +257,7 @@ We identify the dynamics of the system using the =linearize= function.
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.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};

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

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

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

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');

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

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

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

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

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};

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};

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');