Work on Control (HAC-LAC) + Models

This commit is contained in:
Thomas Dehaeze 2020-03-13 17:40:22 +01:00
parent 493268638b
commit fab78b6527
78 changed files with 5395 additions and 2475 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-02-25 mar. 18:20 -->
<!-- 2020-03-13 ven. 17:39 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Active Damping applied on the Simscape Model</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
@ -273,17 +251,17 @@ for the JavaScript code in this tag.
<ul>
<li><a href="#orga668d6d">1.1. Identification of the dynamics for Active Damping</a>
<ul>
<li><a href="#orgd1a656e">1.1.1. Identification</a></li>
<li><a href="#org4d53135">1.1.1. Identification</a></li>
<li><a href="#orge632d78">1.1.2. Obtained Plants for Active Damping</a></li>
</ul>
</li>
<li><a href="#orgacbac97">1.2. Identification of the dynamics for High Authority Control</a>
<ul>
<li><a href="#org9dde5ce">1.2.1. Identification</a></li>
<li><a href="#org71a0d47">1.2.1. Identification</a></li>
<li><a href="#org245ebc9">1.2.2. Obtained Plants</a></li>
</ul>
</li>
<li><a href="#orgc633a52">1.3. Tomography Experiment</a>
<li><a href="#org6dbda79">1.3. Tomography Experiment</a>
<ul>
<li><a href="#orgd2384a9">1.3.1. Simulation</a></li>
<li><a href="#orgd00d359">1.3.2. Results</a></li>
@ -303,55 +281,55 @@ for the JavaScript code in this tag.
</li>
<li><a href="#org89179a2">2.4. Variation of the Tilt Angle</a></li>
<li><a href="#org701d7f3">2.5. Scans of the Translation Stage</a></li>
<li><a href="#org1b61fb2">2.6. Conclusion</a></li>
<li><a href="#org8edc6af">2.6. Conclusion</a></li>
</ul>
</li>
<li><a href="#org28bb8b8">3. Integral Force Feedback</a>
<ul>
<li><a href="#org8147539">3.1. Control Design</a>
<li><a href="#orgd40d19e">3.1. Control Design</a>
<ul>
<li><a href="#org7579fa1">3.1.1. Plant</a></li>
<li><a href="#org1069779">3.1.2. Control Design</a></li>
<li><a href="#org0929a5f">3.1.3. Diagonal Controller</a></li>
<li><a href="#orgae652a4">3.1.1. Plant</a></li>
<li><a href="#org3cc819b">3.1.2. Control Design</a></li>
<li><a href="#orgd4051da">3.1.3. Diagonal Controller</a></li>
</ul>
</li>
<li><a href="#org92b7e4a">3.2. Tomography Experiment</a>
<li><a href="#org394b3ba">3.2. Tomography Experiment</a>
<ul>
<li><a href="#orge827289">3.2.1. Simulation with IFF Controller</a></li>
<li><a href="#org34c04f2">3.2.2. Compare with Undamped system</a></li>
<li><a href="#orgeb184b2">3.2.2. Compare with Undamped system</a></li>
</ul>
</li>
<li><a href="#orge208898">3.3. Conclusion</a></li>
<li><a href="#org6b98a86">3.3. Conclusion</a></li>
</ul>
</li>
<li><a href="#orge2515a1">4. Direct Velocity Feedback</a>
<ul>
<li><a href="#org2454b5d">4.1. Control Design</a>
<li><a href="#orgac2118b">4.1. Control Design</a>
<ul>
<li><a href="#orgd36a459">4.1.1. Plant</a></li>
<li><a href="#orgf771969">4.1.2. Control Design</a></li>
<li><a href="#org1fa78ea">4.1.3. Diagonal Controller</a></li>
<li><a href="#orgb031bdb">4.1.1. Plant</a></li>
<li><a href="#orgd082061">4.1.2. Control Design</a></li>
<li><a href="#orgd3a0a62">4.1.3. Diagonal Controller</a></li>
</ul>
</li>
<li><a href="#orgdc2cc7d">4.2. Tomography Experiment</a>
<li><a href="#orge87de8b">4.2. Tomography Experiment</a>
<ul>
<li><a href="#org315e901">4.2.1. Initialize the Simulation</a></li>
<li><a href="#orgbe122b9">4.2.2. Compare with Undamped system</a></li>
<li><a href="#orge6278a1">4.2.1. Initialize the Simulation</a></li>
<li><a href="#orge7a0ad9">4.2.2. Compare with Undamped system</a></li>
</ul>
</li>
<li><a href="#org2edf5bd">4.3. Conclusion</a></li>
<li><a href="#orgc00cb88">4.3. Conclusion</a></li>
</ul>
</li>
<li><a href="#org5047e99">5. Inertial Control</a>
<ul>
<li><a href="#org5bec512">5.1. Control Design</a>
<li><a href="#org40e3ea7">5.1. Control Design</a>
<ul>
<li><a href="#org16795b0">5.1.1. Plant</a></li>
<li><a href="#org9ce4e10">5.1.2. Control Design</a></li>
<li><a href="#org132c666">5.1.3. Diagonal Controller</a></li>
<li><a href="#orgbceccd1">5.1.1. Plant</a></li>
<li><a href="#orgc8e27a6">5.1.2. Control Design</a></li>
<li><a href="#org165dd29">5.1.3. Diagonal Controller</a></li>
</ul>
</li>
<li><a href="#org408de58">5.2. Conclusion</a></li>
<li><a href="#org5587c6f">5.2. Conclusion</a></li>
</ul>
</li>
<li><a href="#orgd2a9c18">6. Comparison</a>
@ -366,16 +344,16 @@ for the JavaScript code in this tag.
<ul>
<li><a href="#orgcf56890">7.1. prepareLinearizeIdentification</a>
<ul>
<li><a href="#org2b7c7da">Function Description</a></li>
<li><a href="#org6e16103">Optional Parameters</a></li>
<li><a href="#org552f1ca">Initialize the Simulation</a></li>
<li><a href="#orgbcbb56e">Function Description</a></li>
<li><a href="#orgb2bfb6d">Optional Parameters</a></li>
<li><a href="#org491e801">Initialize the Simulation</a></li>
</ul>
</li>
<li><a href="#orgc2b4408">7.2. prepareTomographyExperiment</a>
<ul>
<li><a href="#org6dacc19">Function Description</a></li>
<li><a href="#org65022a7">Optional Parameters</a></li>
<li><a href="#orga0e6a80">Initialize the Simulation</a></li>
<li><a href="#org8c658fc">Function Description</a></li>
<li><a href="#org80c975b">Optional Parameters</a></li>
<li><a href="#org65e26b7">Initialize the Simulation</a></li>
</ul>
</li>
</ul>
@ -447,8 +425,8 @@ After that, a tomography experiment is simulation without any active damping tec
<h3 id="orga668d6d"><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-orgd1a656e" class="outline-4">
<h4 id="orgd1a656e"><span class="section-number-4">1.1.1</span> Identification</h4>
<div id="outline-container-org4d53135" class="outline-4">
<h4 id="org4d53135"><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.
@ -499,7 +477,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">'./active_damping/mat/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(<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>
</div>
</div>
@ -509,7 +487,7 @@ And we save them for further analysis.
<h4 id="orge632d78"><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">'./active_damping/mat/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(<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>
</div>
@ -541,8 +519,8 @@ And we save them for further analysis.
<h3 id="orgacbac97"><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-org9dde5ce" class="outline-4">
<h4 id="org9dde5ce"><span class="section-number-4">1.2.1</span> Identification</h4>
<div id="outline-container-org71a0d47" class="outline-4">
<h4 id="org71a0d47"><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.
@ -579,7 +557,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">'./active_damping/mat/cart_plants.mat'</span>, <span class="org-string">'G_cart'</span>, <span class="org-string">'masses'</span>);
<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>
</div>
</div>
@ -589,7 +567,7 @@ And we save them for further analysis.
<h4 id="org245ebc9"><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">'./active_damping/mat/cart_plants.mat'</span>, <span class="org-string">'G_cart'</span>, <span class="org-string">'masses'</span>);
<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>
</div>
@ -611,8 +589,8 @@ And we save them for further analysis.
</div>
</div>
<div id="outline-container-orgc633a52" class="outline-3">
<h3 id="orgc633a52"><span class="section-number-3">1.3</span> Tomography Experiment</h3>
<div id="outline-container-org6dbda79" class="outline-3">
<h3 id="org6dbda79"><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-orgd2384a9" class="outline-4">
@ -647,7 +625,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">'./active_damping/mat/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(<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>
</div>
</div>
@ -660,7 +638,7 @@ 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">'./active_damping/mat/tomo_exp.mat'</span>, <span class="org-string">'En'</span>);
<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>
@ -1000,8 +978,8 @@ We identify the dynamics at different positions (times) when scanning with the T
</div>
</div>
<div id="outline-container-org1b61fb2" class="outline-3">
<h3 id="org1b61fb2"><span class="section-number-3">2.6</span> Conclusion</h3>
<div id="outline-container-org8edc6af" class="outline-3">
<h3 id="org8edc6af"><span class="section-number-3">2.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-6">
<table id="org664ed44" 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>
@ -1092,19 +1070,19 @@ The control architecture is represented in figure <a href="#org03ecebf">29</a> w
</div>
</div>
<div id="outline-container-org8147539" class="outline-3">
<h3 id="org8147539"><span class="section-number-3">3.1</span> Control Design</h3>
<div id="outline-container-orgd40d19e" class="outline-3">
<h3 id="orgd40d19e"><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-org7579fa1" class="outline-4">
<h4 id="org7579fa1"><span class="section-number-4">3.1.1</span> Plant</h4>
<div id="outline-container-orgae652a4" class="outline-4">
<h4 id="orgae652a4"><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">'./active_damping/mat/undamped_plants.mat'</span>, <span class="org-string">'G_iff'</span>);
load(<span class="org-string">'./active_damping/mat/plants_variable.mat'</span>, <span class="org-string">'masses'</span>, <span class="org-string">'Gm_iff'</span>);
<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>
</div>
@ -1121,8 +1099,8 @@ Let&rsquo;s look at the transfer function from actuator forces in the nano-hexap
</div>
</div>
<div id="outline-container-org1069779" class="outline-4">
<h4 id="org1069779"><span class="section-number-4">3.1.2</span> Control Design</h4>
<div id="outline-container-org3cc819b" class="outline-4">
<h4 id="org3cc819b"><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:
@ -1146,8 +1124,8 @@ The corresponding loop gains are shown in figure <a href="#orge32c0c8">31</a>.
</div>
</div>
<div id="outline-container-org0929a5f" class="outline-4">
<h4 id="org0929a5f"><span class="section-number-4">3.1.3</span> Diagonal Controller</h4>
<div id="outline-container-orgd4051da" class="outline-4">
<h4 id="orgd4051da"><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
@ -1162,15 +1140,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">'./active_damping/mat/K_iff.mat'</span>, <span class="org-string">'K_iff'</span>);
<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>
</div>
</div>
</div>
</div>
<div id="outline-container-org92b7e4a" class="outline-3">
<h3 id="org92b7e4a"><span class="section-number-3">3.2</span> Tomography Experiment</h3>
<div id="outline-container-org394b3ba" class="outline-3">
<h3 id="org394b3ba"><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-orge827289" class="outline-4">
@ -1188,7 +1166,7 @@ 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">'./active_damping/mat/K_iff.mat'</span>, <span class="org-string">'K_iff'</span>);
<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>, <span class="org-string">'K'</span>, K_iff);
</pre>
</div>
@ -1216,14 +1194,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">'./active_damping/mat/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(<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>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org34c04f2" class="outline-4">
<h4 id="org34c04f2"><span class="section-number-4">3.2.2</span> Compare with Undamped system</h4>
<div id="outline-container-orgeb184b2" class="outline-4">
<h4 id="orgeb184b2"><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="orgc83ffab" class="figure">
@ -1249,8 +1227,8 @@ save(<span class="org-string">'./active_damping/mat/tomo_exp.mat'</span>, <span
</div>
</div>
<div id="outline-container-orge208898" class="outline-3">
<h3 id="orge208898"><span class="section-number-3">3.3</span> Conclusion</h3>
<div id="outline-container-org6b98a86" class="outline-3">
<h3 id="org6b98a86"><span class="section-number-3">3.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-3">
<div class="important">
<p>
@ -1285,19 +1263,19 @@ The actuator displacement can be measured with a capacitive sensor for instance.
</p>
</div>
<div id="outline-container-org2454b5d" class="outline-3">
<h3 id="org2454b5d"><span class="section-number-3">4.1</span> Control Design</h3>
<div id="outline-container-orgac2118b" class="outline-3">
<h3 id="orgac2118b"><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-orgd36a459" class="outline-4">
<h4 id="orgd36a459"><span class="section-number-4">4.1.1</span> Plant</h4>
<div id="outline-container-orgb031bdb" class="outline-4">
<h4 id="orgb031bdb"><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">'./active_damping/mat/undamped_plants.mat'</span>, <span class="org-string">'G_dvf'</span>);
load(<span class="org-string">'./active_damping/mat/plants_variable.mat'</span>, <span class="org-string">'masses'</span>, <span class="org-string">'Gm_dvf'</span>);
<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>
</div>
@ -1314,8 +1292,8 @@ Let&rsquo;s look at the transfer function from actuator forces in the nano-hexap
</div>
</div>
<div id="outline-container-orgf771969" class="outline-4">
<h4 id="orgf771969"><span class="section-number-4">4.1.2</span> Control Design</h4>
<div id="outline-container-orgd082061" class="outline-4">
<h4 id="orgd082061"><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.
@ -1339,8 +1317,8 @@ The obtained loop gains are shown in figure <a href="#org713f5d4">36</a>.
</div>
</div>
<div id="outline-container-org1fa78ea" class="outline-4">
<h4 id="org1fa78ea"><span class="section-number-4">4.1.3</span> Diagonal Controller</h4>
<div id="outline-container-orgd3a0a62" class="outline-4">
<h4 id="orgd3a0a62"><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.
@ -1354,19 +1332,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">'./active_damping/mat/K_dvf.mat'</span>, <span class="org-string">'K_dvf'</span>);
<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>
</div>
</div>
</div>
</div>
<div id="outline-container-orgdc2cc7d" class="outline-3">
<h3 id="orgdc2cc7d"><span class="section-number-3">4.2</span> Tomography Experiment</h3>
<div id="outline-container-orge87de8b" class="outline-3">
<h3 id="orge87de8b"><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-org315e901" class="outline-4">
<h4 id="org315e901"><span class="section-number-4">4.2.1</span> Initialize the Simulation</h4>
<div id="outline-container-orge6278a1" class="outline-4">
<h4 id="orge6278a1"><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.
@ -1380,7 +1358,7 @@ 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">'./active_damping/mat/K_dvf.mat'</span>, <span class="org-string">'K_dvf'</span>);
<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>, <span class="org-string">'K'</span>, K_dvf);
</pre>
</div>
@ -1408,14 +1386,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">'./active_damping/mat/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(<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>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbe122b9" class="outline-4">
<h4 id="orgbe122b9"><span class="section-number-4">4.2.2</span> Compare with Undamped system</h4>
<div id="outline-container-orge7a0ad9" class="outline-4">
<h4 id="orge7a0ad9"><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="orge2d1a4a" class="figure">
@ -1441,8 +1419,8 @@ save(<span class="org-string">'./active_damping/mat/tomo_exp.mat'</span>, <span
</div>
</div>
<div id="outline-container-org2edf5bd" class="outline-3">
<h3 id="org2edf5bd"><span class="section-number-3">4.3</span> Conclusion</h3>
<div id="outline-container-orgc00cb88" class="outline-3">
<h3 id="orgc00cb88"><span class="section-number-3">4.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-3">
<div class="important">
<p>
@ -1474,19 +1452,19 @@ In Inertial Control, a feedback is applied between the measured <b>absolute</b>
</p>
</div>
<div id="outline-container-org5bec512" class="outline-3">
<h3 id="org5bec512"><span class="section-number-3">5.1</span> Control Design</h3>
<div id="outline-container-org40e3ea7" class="outline-3">
<h3 id="org40e3ea7"><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-org16795b0" class="outline-4">
<h4 id="org16795b0"><span class="section-number-4">5.1.1</span> Plant</h4>
<div id="outline-container-orgbceccd1" class="outline-4">
<h4 id="orgbceccd1"><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">'./active_damping/mat/undamped_plants.mat'</span>, <span class="org-string">'G_ine'</span>);
load(<span class="org-string">'./active_damping/mat/plants_variable.mat'</span>, <span class="org-string">'masses'</span>, <span class="org-string">'Gm_ine'</span>);
<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>
</div>
@ -1503,8 +1481,8 @@ Let&rsquo;s look at the transfer function from actuator forces in the nano-hexap
</div>
</div>
<div id="outline-container-org9ce4e10" class="outline-4">
<h4 id="org9ce4e10"><span class="section-number-4">5.1.2</span> Control Design</h4>
<div id="outline-container-orgc8e27a6" class="outline-4">
<h4 id="orgc8e27a6"><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="#org76d929a">41</a>.
@ -1524,8 +1502,8 @@ The controller is defined below and the obtained loop gain is shown in figure <a
</div>
</div>
<div id="outline-container-org132c666" class="outline-4">
<h4 id="org132c666"><span class="section-number-4">5.1.3</span> Diagonal Controller</h4>
<div id="outline-container-org165dd29" class="outline-4">
<h4 id="org165dd29"><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.
@ -1539,15 +1517,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">'./active_damping/mat/K_ine.mat'</span>, <span class="org-string">'K_ine'</span>);
<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>
</div>
</div>
</div>
</div>
<div id="outline-container-org408de58" class="outline-3">
<h3 id="org408de58"><span class="section-number-3">5.2</span> Conclusion</h3>
<div id="outline-container-org5587c6f" class="outline-3">
<h3 id="org5587c6f"><span class="section-number-3">5.2</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-2">
<div class="important">
<p>
@ -1570,7 +1548,7 @@ Inertial Control should not be used.
<h3 id="org68994db"><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">'./active_damping/mat/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(<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>
</div>
</div>
@ -1648,7 +1626,7 @@ Inertial Control should not be used.
<h3 id="orgd49b825"><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">'./active_damping/mat/tomo_exp.mat'</span>, <span class="org-string">'En'</span>, <span class="org-string">'En_iff'</span>, <span class="org-string">'En_dvf'</span>);
<pre class="src src-matlab">load(<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>
@ -1723,9 +1701,9 @@ This Matlab function is accessible <a href="src/prepareLinearizeIdentification.m
</p>
</div>
<div id="outline-container-org2b7c7da" class="outline-4">
<h4 id="org2b7c7da">Function Description</h4>
<div class="outline-text-4" id="text-org2b7c7da">
<div id="outline-container-orgbcbb56e" class="outline-4">
<h4 id="orgbcbb56e">Function Description</h4>
<div class="outline-text-4" id="text-orgbcbb56e">
<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>
@ -1733,9 +1711,9 @@ This Matlab function is accessible <a href="src/prepareLinearizeIdentification.m
</div>
</div>
<div id="outline-container-org6e16103" class="outline-4">
<h4 id="org6e16103">Optional Parameters</h4>
<div class="outline-text-4" id="text-org6e16103">
<div id="outline-container-orgb2bfb6d" class="outline-4">
<h4 id="orgb2bfb6d">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgb2bfb6d">
<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>
@ -1746,9 +1724,9 @@ This Matlab function is accessible <a href="src/prepareLinearizeIdentification.m
</div>
</div>
<div id="outline-container-org552f1ca" class="outline-4">
<h4 id="org552f1ca">Initialize the Simulation</h4>
<div class="outline-text-4" id="text-org552f1ca">
<div id="outline-container-org491e801" class="outline-4">
<h4 id="org491e801">Initialize the Simulation</h4>
<div class="outline-text-4" id="text-org491e801">
<p>
We initialize all the stages with the default parameters.
</p>
@ -1821,9 +1799,9 @@ This Matlab function is accessible <a href="src/prepareTomographyExperiment.m">h
</p>
</div>
<div id="outline-container-org6dacc19" class="outline-4">
<h4 id="org6dacc19">Function Description</h4>
<div class="outline-text-4" id="text-org6dacc19">
<div id="outline-container-org8c658fc" class="outline-4">
<h4 id="org8c658fc">Function Description</h4>
<div class="outline-text-4" id="text-org8c658fc">
<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>
@ -1831,9 +1809,9 @@ This Matlab function is accessible <a href="src/prepareTomographyExperiment.m">h
</div>
</div>
<div id="outline-container-org65022a7" class="outline-4">
<h4 id="org65022a7">Optional Parameters</h4>
<div class="outline-text-4" id="text-org65022a7">
<div id="outline-container-org80c975b" class="outline-4">
<h4 id="org80c975b">Optional Parameters</h4>
<div class="outline-text-4" id="text-org80c975b">
<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>
@ -1845,9 +1823,9 @@ This Matlab function is accessible <a href="src/prepareTomographyExperiment.m">h
</div>
</div>
<div id="outline-container-orga0e6a80" class="outline-4">
<h4 id="orga0e6a80">Initialize the Simulation</h4>
<div class="outline-text-4" id="text-orga0e6a80">
<div id="outline-container-org65e26b7" class="outline-4">
<h4 id="org65e26b7">Initialize the Simulation</h4>
<div class="outline-text-4" id="text-org65e26b7">
<p>
We initialize all the stages with the default parameters.
</p>
@ -1915,7 +1893,7 @@ We log the signals.
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-13 ven. 17:39</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-02-25 mar. 18:21 -->
<!-- 2020-03-13 ven. 17:39 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Active Damping with an uni-axial model</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
@ -273,63 +251,63 @@ for the JavaScript code in this tag.
<ul>
<li><a href="#org7409841">1.1. Init</a></li>
<li><a href="#org7514f31">1.2. Identification</a></li>
<li><a href="#orgbc3b2d2">1.3. Sensitivity to disturbances</a></li>
<li><a href="#org380e20f">1.3. Sensitivity to disturbances</a></li>
<li><a href="#orgdda82c0">1.4. Undamped Plant</a></li>
</ul>
</li>
<li><a href="#org5a3389e">2. Integral Force Feedback</a>
<ul>
<li><a href="#org8fee25f">2.1. One degree-of-freedom example</a>
<li><a href="#orgbaae6a1">2.1. One degree-of-freedom example</a>
<ul>
<li><a href="#orge4d9f41">2.1.1. Equations</a></li>
<li><a href="#org3305ce8">2.1.2. Matlab Example</a></li>
<li><a href="#orgc436f05">2.1.1. Equations</a></li>
<li><a href="#org238893b">2.1.2. Matlab Example</a></li>
</ul>
</li>
<li><a href="#orgc2ae0be">2.2. Control Design</a></li>
<li><a href="#org6eda033">2.3. Identification of the damped plant</a></li>
<li><a href="#orgae8bf4a">2.4. Sensitivity to disturbances</a></li>
<li><a href="#orgf8558bc">2.5. Damped Plant</a></li>
<li><a href="#org7146202">2.6. Conclusion</a></li>
<li><a href="#org824be47">2.2. Control Design</a></li>
<li><a href="#orgfdd4556">2.3. Identification of the damped plant</a></li>
<li><a href="#org4802ab9">2.4. Sensitivity to disturbances</a></li>
<li><a href="#org2cbe422">2.5. Damped Plant</a></li>
<li><a href="#orgdade398">2.6. Conclusion</a></li>
</ul>
</li>
<li><a href="#orgc4ca1b5">3. Relative Motion Control</a>
<ul>
<li><a href="#orgff968f4">3.1. One degree-of-freedom example</a>
<li><a href="#org39a3687">3.1. One degree-of-freedom example</a>
<ul>
<li><a href="#orgd5a2de5">3.1.1. Equations</a></li>
<li><a href="#orgfebe737">3.1.2. Matlab Example</a></li>
<li><a href="#org994b142">3.1.1. Equations</a></li>
<li><a href="#org6a1f411">3.1.2. Matlab Example</a></li>
</ul>
</li>
<li><a href="#orgf3a1477">3.2. Control Design</a></li>
<li><a href="#org0c94d61">3.3. Identification of the damped plant</a></li>
<li><a href="#orgae7a685">3.4. Sensitivity to disturbances</a></li>
<li><a href="#orgb0045d5">3.5. Damped Plant</a></li>
<li><a href="#orgeacd46f">3.6. Conclusion</a></li>
<li><a href="#org13a97a7">3.2. Control Design</a></li>
<li><a href="#orge00b37b">3.3. Identification of the damped plant</a></li>
<li><a href="#orgcd3874b">3.4. Sensitivity to disturbances</a></li>
<li><a href="#orgfcc3787">3.5. Damped Plant</a></li>
<li><a href="#org37ceb38">3.6. Conclusion</a></li>
</ul>
</li>
<li><a href="#org3cc03b0">4. Direct Velocity Feedback</a>
<ul>
<li><a href="#orgb2d2757">4.1. One degree-of-freedom example</a>
<li><a href="#org20ee26e">4.1. One degree-of-freedom example</a>
<ul>
<li><a href="#org0d13907">4.1.1. Equations</a></li>
<li><a href="#org5d7b09d">4.1.2. Matlab Example</a></li>
<li><a href="#org0d2ea8d">4.1.1. Equations</a></li>
<li><a href="#orgaddbb82">4.1.2. Matlab Example</a></li>
</ul>
</li>
<li><a href="#org1fe076f">4.2. Control Design</a></li>
<li><a href="#orgee6ab5a">4.3. Identification of the damped plant</a></li>
<li><a href="#org455bb51">4.4. Sensitivity to disturbances</a></li>
<li><a href="#org6d852f5">4.5. Damped Plant</a></li>
<li><a href="#org5d33a43">4.6. Conclusion</a></li>
<li><a href="#orgf1bd80b">4.2. Control Design</a></li>
<li><a href="#org54ebde8">4.3. Identification of the damped plant</a></li>
<li><a href="#org454c0c8">4.4. Sensitivity to disturbances</a></li>
<li><a href="#org5f21dd1">4.5. Damped Plant</a></li>
<li><a href="#org53572a3">4.6. Conclusion</a></li>
</ul>
</li>
<li><a href="#org21441bc">5. Comparison</a>
<ul>
<li><a href="#orgbe907b4">5.1. Load the plants</a></li>
<li><a href="#orgde6308d">5.2. Sensitivity to Disturbance</a></li>
<li><a href="#orgb849304">5.3. Damped Plant</a></li>
<li><a href="#orga1cf9f2">5.3. Damped Plant</a></li>
</ul>
</li>
<li><a href="#org333697a">6. Conclusion</a></li>
<li><a href="#org4d89cbd">6. Conclusion</a></li>
</ul>
</div>
</div>
@ -410,13 +388,13 @@ All the controllers are set to 0.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
@ -437,14 +415,14 @@ We identify the various transfer functions of the system
And we save it for further analysis.
</p>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./active_damping_uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>, <span class="org-string">'-append'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbc3b2d2" class="outline-3">
<h3 id="orgbc3b2d2"><span class="section-number-3">1.3</span> Sensitivity to disturbances</h3>
<div id="outline-container-org380e20f" class="outline-3">
<h3 id="org380e20f"><span class="section-number-3">1.3</span> Sensitivity to disturbances</h3>
<div class="outline-text-3" id="text-1-3">
<p>
The sensitivity to disturbances are shown on figure <a href="#orgcf7fa15">1</a>.
@ -502,15 +480,15 @@ Then, it is applied on the simscape model.
</p>
</div>
<div id="outline-container-org8fee25f" class="outline-3">
<h3 id="org8fee25f"><span class="section-number-3">2.1</span> One degree-of-freedom example</h3>
<div id="outline-container-orgbaae6a1" class="outline-3">
<h3 id="orgbaae6a1"><span class="section-number-3">2.1</span> One degree-of-freedom example</h3>
<div class="outline-text-3" id="text-2-1">
<p>
<a id="org7f37ded"></a>
</p>
</div>
<div id="outline-container-orge4d9f41" class="outline-4">
<h4 id="orge4d9f41"><span class="section-number-4">2.1.1</span> Equations</h4>
<div id="outline-container-orgc436f05" class="outline-4">
<h4 id="orgc436f05"><span class="section-number-4">2.1.1</span> Equations</h4>
<div class="outline-text-4" id="text-2-1-1">
<div id="org1acdc30" class="figure">
@ -576,8 +554,8 @@ This is attainable if we have:
</div>
</div>
<div id="outline-container-org3305ce8" class="outline-4">
<h4 id="org3305ce8"><span class="section-number-4">2.1.2</span> Matlab Example</h4>
<div id="outline-container-org238893b" class="outline-4">
<h4 id="org238893b"><span class="section-number-4">2.1.2</span> Matlab Example</h4>
<div class="outline-text-4" id="text-2-1-2">
<p>
Let define the system parameters.
@ -640,14 +618,14 @@ And the closed loop system is computed below.
</div>
</div>
<div id="outline-container-orgc2ae0be" class="outline-3">
<h3 id="orgc2ae0be"><span class="section-number-3">2.2</span> Control Design</h3>
<div id="outline-container-org824be47" class="outline-3">
<h3 id="org824be47"><span class="section-number-3">2.2</span> Control Design</h3>
<div class="outline-text-3" id="text-2-2">
<p>
Let&rsquo;s load the undamped plant:
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./active_damping_uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>);
</pre>
</div>
@ -683,8 +661,8 @@ The corresponding loop gains are shown in figure <a href="#org36e3a94">7</a>.
</div>
</div>
<div id="outline-container-org6eda033" class="outline-3">
<h3 id="org6eda033"><span class="section-number-3">2.3</span> Identification of the damped plant</h3>
<div id="outline-container-orgfdd4556" class="outline-3">
<h3 id="orgfdd4556"><span class="section-number-3">2.3</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-2-3">
<p>
Let&rsquo;s initialize the system prior to identification.
@ -709,13 +687,13 @@ All the controllers are set to 0.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = <span class="org-type">-</span>K_iff<span class="org-type">*</span>eye(6);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -731,14 +709,14 @@ We identify the system dynamics now that the IFF controller is ON.
And we save the damped plant for further analysis
</p>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./active_damping_uniaxial/mat/plants.mat'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'-append'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_uniaxial_plants.mat'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgae8bf4a" class="outline-3">
<h3 id="orgae8bf4a"><span class="section-number-3">2.4</span> Sensitivity to disturbances</h3>
<div id="outline-container-org4802ab9" class="outline-3">
<h3 id="org4802ab9"><span class="section-number-3">2.4</span> Sensitivity to disturbances</h3>
<div class="outline-text-3" id="text-2-4">
<p>
As shown on figure <a href="#org38217ee">8</a>:
@ -774,8 +752,8 @@ For instance, the plots are not the same when using <code>minreal</code>.
</div>
</div>
<div id="outline-container-orgf8558bc" class="outline-3">
<h3 id="orgf8558bc"><span class="section-number-3">2.5</span> Damped Plant</h3>
<div id="outline-container-org2cbe422" class="outline-3">
<h3 id="org2cbe422"><span class="section-number-3">2.5</span> Damped Plant</h3>
<div class="outline-text-3" id="text-2-5">
<p>
Now, look at the new damped plant to control.
@ -804,8 +782,8 @@ However, it increases coupling at low frequency (figure <a href="#org8017b2f">11
</div>
</div>
<div id="outline-container-org7146202" class="outline-3">
<h3 id="org7146202"><span class="section-number-3">2.6</span> Conclusion</h3>
<div id="outline-container-orgdade398" class="outline-3">
<h3 id="orgdade398"><span class="section-number-3">2.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-6">
<div class="important">
<p>
@ -839,15 +817,15 @@ In the Relative Motion Control (RMC), a derivative feedback is applied between t
</p>
</div>
<div id="outline-container-orgff968f4" class="outline-3">
<h3 id="orgff968f4"><span class="section-number-3">3.1</span> One degree-of-freedom example</h3>
<div id="outline-container-org39a3687" class="outline-3">
<h3 id="org39a3687"><span class="section-number-3">3.1</span> One degree-of-freedom example</h3>
<div class="outline-text-3" id="text-3-1">
<p>
<a id="org6f16e09"></a>
</p>
</div>
<div id="outline-container-orgd5a2de5" class="outline-4">
<h4 id="orgd5a2de5"><span class="section-number-4">3.1.1</span> Equations</h4>
<div id="outline-container-org994b142" class="outline-4">
<h4 id="org994b142"><span class="section-number-4">3.1.1</span> Equations</h4>
<div class="outline-text-4" id="text-3-1-1">
<div id="org64900ec" class="figure">
@ -906,8 +884,8 @@ This corresponds to a gain:
</div>
</div>
<div id="outline-container-orgfebe737" class="outline-4">
<h4 id="orgfebe737"><span class="section-number-4">3.1.2</span> Matlab Example</h4>
<div id="outline-container-org6a1f411" class="outline-4">
<h4 id="org6a1f411"><span class="section-number-4">3.1.2</span> Matlab Example</h4>
<div class="outline-text-4" id="text-3-1-2">
<p>
Let define the system parameters.
@ -970,14 +948,14 @@ And the closed loop system is computed below.
</div>
</div>
<div id="outline-container-orgf3a1477" class="outline-3">
<h3 id="orgf3a1477"><span class="section-number-3">3.2</span> Control Design</h3>
<div id="outline-container-org13a97a7" class="outline-3">
<h3 id="org13a97a7"><span class="section-number-3">3.2</span> Control Design</h3>
<div class="outline-text-3" id="text-3-2">
<p>
Let&rsquo;s load the undamped plant:
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./active_damping_uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>);
</pre>
</div>
@ -1014,8 +992,8 @@ The obtained loop gains are shown in figure <a href="#orga5b8f12">15</a>.
</div>
</div>
<div id="outline-container-org0c94d61" class="outline-3">
<h3 id="org0c94d61"><span class="section-number-3">3.3</span> Identification of the damped plant</h3>
<div id="outline-container-orge00b37b" class="outline-3">
<h3 id="orge00b37b"><span class="section-number-3">3.3</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-3-3">
<p>
Let&rsquo;s initialize the system prior to identification.
@ -1040,13 +1018,13 @@ And initialize the controllers.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = <span class="org-type">-</span>K_rmc<span class="org-type">*</span>eye(6);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -1062,14 +1040,14 @@ We identify the system dynamics now that the RMC controller is ON.
And we save the damped plant for further analysis.
</p>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./active_damping_uniaxial/mat/plants.mat'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'-append'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_uniaxial_plants.mat'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgae7a685" class="outline-3">
<h3 id="orgae7a685"><span class="section-number-3">3.4</span> Sensitivity to disturbances</h3>
<div id="outline-container-orgcd3874b" class="outline-3">
<h3 id="orgcd3874b"><span class="section-number-3">3.4</span> Sensitivity to disturbances</h3>
<div class="outline-text-3" id="text-3-4">
<p>
As shown in figure <a href="#org58aec78">16</a>, RMC control succeed in lowering the sensitivity to disturbances near resonance of the system.
@ -1091,8 +1069,8 @@ As shown in figure <a href="#org58aec78">16</a>, RMC control succeed in lowering
</div>
</div>
<div id="outline-container-orgb0045d5" class="outline-3">
<h3 id="orgb0045d5"><span class="section-number-3">3.5</span> Damped Plant</h3>
<div id="outline-container-orgfcc3787" class="outline-3">
<h3 id="orgfcc3787"><span class="section-number-3">3.5</span> Damped Plant</h3>
<div class="outline-text-3" id="text-3-5">
<div id="org2267bd4" class="figure">
@ -1103,8 +1081,8 @@ As shown in figure <a href="#org58aec78">16</a>, RMC control succeed in lowering
</div>
</div>
<div id="outline-container-orgeacd46f" class="outline-3">
<h3 id="orgeacd46f"><span class="section-number-3">3.6</span> Conclusion</h3>
<div id="outline-container-org37ceb38" class="outline-3">
<h3 id="org37ceb38"><span class="section-number-3">3.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-6">
<div class="important">
<p>
@ -1136,15 +1114,15 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
</p>
</div>
<div id="outline-container-orgb2d2757" class="outline-3">
<h3 id="orgb2d2757"><span class="section-number-3">4.1</span> One degree-of-freedom example</h3>
<div id="outline-container-org20ee26e" class="outline-3">
<h3 id="org20ee26e"><span class="section-number-3">4.1</span> One degree-of-freedom example</h3>
<div class="outline-text-3" id="text-4-1">
<p>
<a id="org3a699cb"></a>
</p>
</div>
<div id="outline-container-org0d13907" class="outline-4">
<h4 id="org0d13907"><span class="section-number-4">4.1.1</span> Equations</h4>
<div id="outline-container-org0d2ea8d" class="outline-4">
<h4 id="org0d2ea8d"><span class="section-number-4">4.1.1</span> Equations</h4>
<div class="outline-text-4" id="text-4-1-1">
<div id="org93ae6e4" class="figure">
@ -1203,8 +1181,8 @@ This corresponds to a gain:
</div>
</div>
<div id="outline-container-org5d7b09d" class="outline-4">
<h4 id="org5d7b09d"><span class="section-number-4">4.1.2</span> Matlab Example</h4>
<div id="outline-container-orgaddbb82" class="outline-4">
<h4 id="orgaddbb82"><span class="section-number-4">4.1.2</span> Matlab Example</h4>
<div class="outline-text-4" id="text-4-1-2">
<p>
Let define the system parameters.
@ -1291,14 +1269,14 @@ The obtained sensitivity to disturbances is shown in figure <a href="#org1c3277a
</div>
</div>
<div id="outline-container-org1fe076f" class="outline-3">
<h3 id="org1fe076f"><span class="section-number-3">4.2</span> Control Design</h3>
<div id="outline-container-orgf1bd80b" class="outline-3">
<h3 id="orgf1bd80b"><span class="section-number-3">4.2</span> Control Design</h3>
<div class="outline-text-3" id="text-4-2">
<p>
Let&rsquo;s load the undamped plant:
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./active_damping_uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>);
</pre>
</div>
@ -1331,8 +1309,8 @@ The controller is defined below and the obtained loop gain is shown in figure <a
</div>
</div>
<div id="outline-container-orgee6ab5a" class="outline-3">
<h3 id="orgee6ab5a"><span class="section-number-3">4.3</span> Identification of the damped plant</h3>
<div id="outline-container-org54ebde8" class="outline-3">
<h3 id="org54ebde8"><span class="section-number-3">4.3</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-4-3">
<p>
Let&rsquo;s initialize the system prior to identification.
@ -1357,13 +1335,13 @@ And initialize the controllers.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = tf(zeros(6));
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = <span class="org-type">-</span>K_dvf<span class="org-type">*</span>eye(6);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -1379,14 +1357,14 @@ We identify the system dynamics now that the RMC controller is ON.
And we save the damped plant for further analysis.
</p>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./active_damping_uniaxial/mat/plants.mat'</span>, <span class="org-string">'G_dvf'</span>, <span class="org-string">'-append'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/active_damping_uniaxial_plants.mat'</span>, <span class="org-string">'G_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org455bb51" class="outline-3">
<h3 id="org455bb51"><span class="section-number-3">4.4</span> Sensitivity to disturbances</h3>
<div id="outline-container-org454c0c8" class="outline-3">
<h3 id="org454c0c8"><span class="section-number-3">4.4</span> Sensitivity to disturbances</h3>
<div class="outline-text-3" id="text-4-4">
<div id="org2558226" class="figure">
@ -1405,8 +1383,8 @@ And we save the damped plant for further analysis.
</div>
</div>
<div id="outline-container-org6d852f5" class="outline-3">
<h3 id="org6d852f5"><span class="section-number-3">4.5</span> Damped Plant</h3>
<div id="outline-container-org5f21dd1" class="outline-3">
<h3 id="org5f21dd1"><span class="section-number-3">4.5</span> Damped Plant</h3>
<div class="outline-text-3" id="text-4-5">
<div id="org2fa3671" class="figure">
@ -1417,8 +1395,8 @@ And we save the damped plant for further analysis.
</div>
</div>
<div id="outline-container-org5d33a43" class="outline-3">
<h3 id="org5d33a43"><span class="section-number-3">4.6</span> Conclusion</h3>
<div id="outline-container-org53572a3" class="outline-3">
<h3 id="org53572a3"><span class="section-number-3">4.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-6">
<div class="important">
<p>
@ -1441,7 +1419,7 @@ Direct Velocity Feedback:
<h3 id="orgbe907b4"><span class="section-number-3">5.1</span> Load the plants</h3>
<div class="outline-text-3" id="text-5-1">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./active_damping_uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'G_dvf'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/active_damping_uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'G_dvf'</span>);
</pre>
</div>
</div>
@ -1489,8 +1467,8 @@ Direct Velocity Feedback:
</div>
</div>
<div id="outline-container-orgb849304" class="outline-3">
<h3 id="orgb849304"><span class="section-number-3">5.3</span> Damped Plant</h3>
<div id="outline-container-orga1cf9f2" class="outline-3">
<h3 id="orga1cf9f2"><span class="section-number-3">5.3</span> Damped Plant</h3>
<div class="outline-text-3" id="text-5-3">
<div id="org043ecf3" class="figure">
@ -1516,8 +1494,8 @@ Direct Velocity Feedback:
</div>
</div>
<div id="outline-container-org333697a" class="outline-2">
<h2 id="org333697a"><span class="section-number-2">6</span> Conclusion</h2>
<div id="outline-container-org4d89cbd" class="outline-2">
<h2 id="org4d89cbd"><span class="section-number-2">6</span> Conclusion</h2>
<div class="outline-text-2" id="text-6">
<p>
<a id="org58549a4"></a>
@ -1527,7 +1505,7 @@ Direct Velocity Feedback:
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:21</p>
<p class="date">Created: 2020-03-13 ven. 17:39</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-02-25 mar. 18:20 -->
<!-- 2020-03-06 ven. 15:09 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Control of the NASS</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
</head>
<body>
@ -258,7 +236,7 @@ for the JavaScript code in this tag.
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-06 ven. 15:09</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-02-25 mar. 18:21 -->
<!-- 2020-03-13 ven. 17:39 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Identification of the disturbances</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
@ -276,6 +254,7 @@ for the JavaScript code in this tag.
<li><a href="#Compute-the-Power-Spectral-Density-of-the-disturbance-force">5. Compute the Power Spectral Density of the disturbance force</a></li>
<li><a href="#Noise-Budget">6. Noise Budget</a></li>
<li><a href="#Save">7. Save</a></li>
<li><a href="#org9a1d0a9">8. Error motion of the Sample without Control</a></li>
</ul>
</div>
</div>
@ -318,7 +297,7 @@ This file is divided in the following sections:
<li>Section <a href="#org71da6bd">6</a>: with the computed PSD, the noise budget of the system is done</li>
</ul>
<div id="outline-container-orgd6383a2" class="outline-2">
<div id="outline-container-Simscape-Model" class="outline-2">
<h2 id="Simscape-Model"><span class="section-number-2">1</span> Simscape Model</h2>
<div class="outline-text-2" id="text-Simscape-Model">
<p>
@ -363,7 +342,7 @@ initializeSample(<span class="org-string">'type'</span>, <span class="org-string
</div>
</div>
<div id="outline-container-orgab57d7a" class="outline-2">
<div id="outline-container-Identification" class="outline-2">
<h2 id="Identification"><span class="section-number-2">2</span> Identification</h2>
<div class="outline-text-2" id="text-Identification">
<p>
@ -416,7 +395,7 @@ G.OutputName = {<span class="org-string">'Vm'</span>};
</div>
</div>
<div id="outline-container-org26913fc" class="outline-2">
<div id="outline-container-Sensitivity-to-Disturbances" class="outline-2">
<h2 id="Sensitivity-to-Disturbances"><span class="section-number-2">3</span> Sensitivity to Disturbances</h2>
<div class="outline-text-2" id="text-Sensitivity-to-Disturbances">
<p>
@ -448,7 +427,7 @@ G.OutputName = {<span class="org-string">'Vm'</span>};
</div>
</div>
<div id="outline-container-org627e5cf" class="outline-2">
<div id="outline-container-Power-Spectral-Density-of-the-effect-of-the-disturbances" class="outline-2">
<h2 id="Power-Spectral-Density-of-the-effect-of-the-disturbances"><span class="section-number-2">4</span> Power Spectral Density of the effect of the disturbances</h2>
<div class="outline-text-2" id="text-Power-Spectral-Density-of-the-effect-of-the-disturbances">
<p>
@ -465,10 +444,10 @@ Also, the Ground Motion is measured.
</p>
<div class="org-src-container">
<pre class="src src-matlab">gm = load(<span class="org-string">'./disturbances/mat/psd_gm.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'psd_gm'</span>, <span class="org-string">'psd_gv'</span>);
rz = load(<span class="org-string">'./disturbances/mat/pxsp_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxsp_r'</span>);
tyz = load(<span class="org-string">'./disturbances/mat/pxz_ty_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxz_ty_r'</span>);
tyx = load(<span class="org-string">'./disturbances/mat/pxe_ty_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxe_ty_r'</span>);
<pre class="src src-matlab">gm = load(<span class="org-string">'./mat/psd_gm.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'psd_gm'</span>);
rz = load(<span class="org-string">'./mat/pxsp_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxsp_r'</span>);
tyz = load(<span class="org-string">'./mat/pxz_ty_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxz_ty_r'</span>);
tyx = load(<span class="org-string">'./mat/pxe_ty_r.mat'</span>, <span class="org-string">'f'</span>, <span class="org-string">'pxe_ty_r'</span>);
</pre>
</div>
@ -512,7 +491,7 @@ The Cumulative Amplitude Spectrum of the relative motion is shown in figure <a h
</div>
</div>
<div id="outline-container-orge27c71b" class="outline-2">
<div id="outline-container-Compute-the-Power-Spectral-Density-of-the-disturbance-force" class="outline-2">
<h2 id="Compute-the-Power-Spectral-Density-of-the-disturbance-force"><span class="section-number-2">5</span> Compute the Power Spectral Density of the disturbance force</h2>
<div class="outline-text-2" id="text-Compute-the-Power-Spectral-Density-of-the-disturbance-force">
<p>
@ -538,7 +517,7 @@ tyz.psd_f = tyz.pxz_ty_r<span class="org-type">./</span>abs(squeeze(freqresp(G(<
</div>
</div>
<div id="outline-container-org844ca42" class="outline-2">
<div id="outline-container-Noise-Budget" class="outline-2">
<h2 id="Noise-Budget"><span class="section-number-2">6</span> Noise Budget</h2>
<div class="outline-text-2" id="text-Noise-Budget">
<p>
@ -567,11 +546,11 @@ We should verify that this is coherent with the measurements.
</div>
</div>
<div id="outline-container-org800eaed" class="outline-2">
<div id="outline-container-Save" class="outline-2">
<h2 id="Save"><span class="section-number-2">7</span> Save</h2>
<div class="outline-text-2" id="text-Save">
<p>
The PSD of the disturbance force are now saved for further analysis (the mat file is accessible <a href="mat/dist_psd.mat">here</a>).
The PSD of the disturbance force are now saved for further analysis.
</p>
<div class="org-src-container">
@ -583,7 +562,114 @@ dist_f.psd_gm = gm.psd_gm; <span class="org-comment">% Power Spectral Density of
dist_f.psd_ty = tyz.psd_f; <span class="org-comment">% Power Spectral Density of the force induced by the Ty stage in the Z direction [N^2/Hz]</span>
dist_f.psd_rz = rz.psd_f; <span class="org-comment">% Power Spectral Density of the force induced by the Rz stage in the Z direction [N^2/Hz]</span>
save(<span class="org-string">'./disturbances/mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
save(<span class="org-string">'./mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org9a1d0a9" class="outline-2">
<h2 id="org9a1d0a9"><span class="section-number-2">8</span> Error motion of the Sample without Control</h2>
<div class="outline-text-2" id="text-8">
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
initializeTy(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
initializeRy(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
initializeRz(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
initializeMicroHexapod(<span class="org-string">'Foffset'</span>, <span class="org-constant">false</span>);
initializeAxisc(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
initializeMirror(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>);
</pre>
</div>
<p>
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">'type'</span>, <span class="org-string">'rigid'</span>);
initializeSample(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'mass'</span>, 50);
</pre>
</div>
<p>
We set the references and disturbances to zero.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences();
initializeDisturbances();
</pre>
</div>
<p>
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>
</div>
<p>
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">false</span>);
</pre>
</div>
<p>
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">'all'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializePosError(<span class="org-string">'error'</span>, <span class="org-constant">false</span>);
</pre>
</div>
<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">'1'</span>);
</pre>
</div>
<p>
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>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
subplot(1, 2, 1);
hold on;
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 1), <span class="org-string">'DisplayName'</span>, <span class="org-string">'X'</span>);
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 2), <span class="org-string">'DisplayName'</span>, <span class="org-string">'Y'</span>);
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 3), <span class="org-string">'DisplayName'</span>, <span class="org-string">'Z'</span>);
hold off;
xlabel(<span class="org-string">'Time [s]'</span>);
ylabel(<span class="org-string">'Position error [m]'</span>);
legend();
subplot(1, 2, 2);
hold on;
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 4));
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 5));
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(<span class="org-type">:</span>, 6));
hold off;
xlabel(<span class="org-string">'Time [s]'</span>);
ylabel(<span class="org-string">'Orientation error [rad]'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Eg = simout.Em.Eg;
save(<span class="org-string">'./mat/motion_error_ol.mat'</span>, <span class="org-string">'Eg'</span>);
</pre>
</div>
</div>
@ -591,7 +677,7 @@ save(<span class="org-string">'./disturbances/mat/dist_psd.mat'</span>, <span cl
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:21</p>
<p class="date">Created: 2020-03-13 ven. 17:39</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-02-25 mar. 18:21 -->
<!-- 2020-03-13 ven. 17:39 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Tomography Experiment</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
</head>
<body>
@ -262,30 +240,30 @@ for the JavaScript code in this tag.
<li><a href="#org03b2a76">1. Simscape Model</a></li>
<li><a href="#org6ed78a0">2. Tomography Experiment with no disturbances</a>
<ul>
<li><a href="#org5778305">2.1. Simulation Setup</a></li>
<li><a href="#org3f73a44">2.2. Analysis</a></li>
<li><a href="#org67ff024">2.3. Conclusion</a></li>
<li><a href="#orgab2c05f">2.1. Simulation Setup</a></li>
<li><a href="#org7d6c417">2.2. Analysis</a></li>
<li><a href="#orgc8896a6">2.3. Conclusion</a></li>
</ul>
</li>
<li><a href="#org16d8e58">3. Tomography Experiment with included perturbations</a>
<ul>
<li><a href="#orgc064b4d">3.1. Simulation Setup</a></li>
<li><a href="#org35d72fe">3.2. Analysis</a></li>
<li><a href="#org1f14bc2">3.3. Conclusion</a></li>
<li><a href="#org89b64b9">3.1. Simulation Setup</a></li>
<li><a href="#orgd3d5cc3">3.2. Analysis</a></li>
<li><a href="#org744b6a3">3.3. Conclusion</a></li>
</ul>
</li>
<li><a href="#org72f01ab">4. Tomography when the micro-hexapod is not centered</a>
<ul>
<li><a href="#org0fe7352">4.1. Simulation Setup</a></li>
<li><a href="#org3fda1a5">4.2. Analysis</a></li>
<li><a href="#org5042570">4.3. Conclusion</a></li>
<li><a href="#org3c7fe25">4.1. Simulation Setup</a></li>
<li><a href="#orgbf003b8">4.2. Analysis</a></li>
<li><a href="#org0577a39">4.3. Conclusion</a></li>
</ul>
</li>
<li><a href="#org8fa1632">5. Raster Scans with the translation stage</a>
<ul>
<li><a href="#org8a2f4a2">5.1. Simulation Setup</a></li>
<li><a href="#org55d191f">5.2. Analysis</a></li>
<li><a href="#orgae2c5b3">5.3. Conclusion</a></li>
<li><a href="#org06c656a">5.1. Simulation Setup</a></li>
<li><a href="#orgc5cbe68">5.2. Analysis</a></li>
<li><a href="#org6c038f1">5.3. Conclusion</a></li>
</ul>
</li>
</ul>
@ -372,8 +350,8 @@ All stage is set to its zero position except the Spindle which is rotating at 60
<a id="org3effbb8"></a>
</p>
</div>
<div id="outline-container-org5778305" class="outline-3">
<h3 id="org5778305"><span class="section-number-3">2.1</span> Simulation Setup</h3>
<div id="outline-container-orgab2c05f" class="outline-3">
<h3 id="orgab2c05f"><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.
@ -403,17 +381,17 @@ And we save the obtained data.
</p>
<div class="org-src-container">
<pre class="src src-matlab">tomo_align_no_dist = struct(<span class="org-string">'t'</span>, t, <span class="org-string">'MTr'</span>, MTr);
save(<span class="org-string">'experiment_tomography/mat/experiment.mat'</span>, <span class="org-string">'tomo_align_no_dist'</span>, <span class="org-string">'-append'</span>);
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>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org3f73a44" class="outline-3">
<h3 id="org3f73a44"><span class="section-number-3">2.2</span> Analysis</h3>
<div id="outline-container-org7d6c417" class="outline-3">
<h3 id="org7d6c417"><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">'experiment_tomography/mat/experiment.mat'</span>, <span class="org-string">'tomo_align_no_dist'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_no_dist'</span>);
t = tomo_align_no_dist.t;
MTr = tomo_align_no_dist.MTr;
</pre>
@ -446,8 +424,8 @@ Erz = atan2(<span class="org-type">-</span>squeeze(MTr(1, 2, <span class="org-ty
</div>
</div>
<div id="outline-container-org67ff024" class="outline-3">
<h3 id="org67ff024"><span class="section-number-3">2.3</span> Conclusion</h3>
<div id="outline-container-orgc8896a6" class="outline-3">
<h3 id="orgc8896a6"><span class="section-number-3">2.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-3">
<div class="important">
<p>
@ -467,8 +445,8 @@ This residual error motion probably comes from a small misalignment somewhere.
<a id="org4e7f626"></a>
</p>
</div>
<div id="outline-container-orgc064b4d" class="outline-3">
<h3 id="orgc064b4d"><span class="section-number-3">3.1</span> Simulation Setup</h3>
<div id="outline-container-org89b64b9" class="outline-3">
<h3 id="org89b64b9"><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.
@ -498,17 +476,17 @@ And we save the obtained data.
</p>
<div class="org-src-container">
<pre class="src src-matlab">tomo_align_dist = struct(<span class="org-string">'t'</span>, t, <span class="org-string">'MTr'</span>, MTr);
save(<span class="org-string">'experiment_tomography/mat/experiment.mat'</span>, <span class="org-string">'tomo_align_dist'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org35d72fe" class="outline-3">
<h3 id="org35d72fe"><span class="section-number-3">3.2</span> Analysis</h3>
<div id="outline-container-orgd3d5cc3" class="outline-3">
<h3 id="orgd3d5cc3"><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">'experiment_tomography/mat/experiment.mat'</span>, <span class="org-string">'tomo_align_dist'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>);
t = tomo_align_dist.t;
MTr = tomo_align_dist.MTr;
</pre>
@ -541,8 +519,8 @@ Erz = atan2(<span class="org-type">-</span>squeeze(MTr(1, 2, <span class="org-ty
</div>
</div>
<div id="outline-container-org1f14bc2" class="outline-3">
<h3 id="org1f14bc2"><span class="section-number-3">3.3</span> Conclusion</h3>
<div id="outline-container-org744b6a3" class="outline-3">
<h3 id="org744b6a3"><span class="section-number-3">3.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-3">
<div class="important">
<p>
@ -561,8 +539,8 @@ Error motion is what expected from the disturbance measurements.
<a id="orgb31e3fb"></a>
</p>
</div>
<div id="outline-container-org0fe7352" class="outline-3">
<h3 id="org0fe7352"><span class="section-number-3">4.1</span> Simulation Setup</h3>
<div id="outline-container-org3c7fe25" class="outline-3">
<h3 id="org3c7fe25"><span class="section-number-3">4.1</span> Simulation Setup</h3>
<div class="outline-text-3" id="text-4-1">
<p>
We first set the wanted translation of the Micro Hexapod.
@ -616,17 +594,17 @@ And we save the obtained data.
</p>
<div class="org-src-container">
<pre class="src src-matlab">tomo_not_align = struct(<span class="org-string">'t'</span>, t, <span class="org-string">'MTr'</span>, MTr);
save(<span class="org-string">'experiment_tomography/mat/experiment.mat'</span>, <span class="org-string">'tomo_not_align'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_not_align'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org3fda1a5" class="outline-3">
<h3 id="org3fda1a5"><span class="section-number-3">4.2</span> Analysis</h3>
<div id="outline-container-orgbf003b8" class="outline-3">
<h3 id="orgbf003b8"><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">'experiment_tomography/mat/experiment.mat'</span>, <span class="org-string">'tomo_not_align'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_not_align'</span>);
t = tomo_not_align.t;
MTr = tomo_not_align.MTr;
</pre>
@ -659,8 +637,8 @@ Erz = atan2(<span class="org-type">-</span>squeeze(MTr(1, 2, <span class="org-ty
</div>
</div>
<div id="outline-container-org5042570" class="outline-3">
<h3 id="org5042570"><span class="section-number-3">4.3</span> Conclusion</h3>
<div id="outline-container-org0577a39" class="outline-3">
<h3 id="org0577a39"><span class="section-number-3">4.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-3">
<div class="important">
<p>
@ -679,8 +657,8 @@ The main motions are translations in the X direction of the mobile platform (cor
<a id="org6aaeb53"></a>
</p>
</div>
<div id="outline-container-org8a2f4a2" class="outline-3">
<h3 id="org8a2f4a2"><span class="section-number-3">5.1</span> Simulation Setup</h3>
<div id="outline-container-org06c656a" class="outline-3">
<h3 id="org06c656a"><span class="section-number-3">5.1</span> Simulation Setup</h3>
<div class="outline-text-3" id="text-5-1">
<p>
We set the reference path.
@ -735,17 +713,17 @@ And we save the obtained data.
</p>
<div class="org-src-container">
<pre class="src src-matlab">ty_scan = struct(<span class="org-string">'t'</span>, t, <span class="org-string">'MTr'</span>, MTr);
save(<span class="org-string">'experiment_tomography/mat/experiment.mat'</span>, <span class="org-string">'ty_scan'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'ty_scan'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org55d191f" class="outline-3">
<h3 id="org55d191f"><span class="section-number-3">5.2</span> Analysis</h3>
<div id="outline-container-orgc5cbe68" class="outline-3">
<h3 id="orgc5cbe68"><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">'experiment_tomography/mat/experiment.mat'</span>, <span class="org-string">'ty_scan'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'ty_scan'</span>);
t = ty_scan.t;
MTr = ty_scan.MTr;
</pre>
@ -778,8 +756,8 @@ Erz = atan2(<span class="org-type">-</span>squeeze(MTr(1, 2, <span class="org-ty
</div>
</div>
<div id="outline-container-orgae2c5b3" class="outline-3">
<h3 id="orgae2c5b3"><span class="section-number-3">5.3</span> Conclusion</h3>
<div id="outline-container-org6c038f1" class="outline-3">
<h3 id="org6c038f1"><span class="section-number-3">5.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-3">
<div class="important">
<p>
@ -794,7 +772,7 @@ In order to reduce the errors, we can make a smoother reference path for the tra
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:21</p>
<p class="date">Created: 2020-03-13 ven. 17:39</p>
</div>
</body>
</html>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

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-02-25 mar. 18:20 -->
<!-- 2020-03-06 ven. 15:09 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Matlab Functions used for the NASS Project</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
</head>
<body>
@ -259,276 +237,15 @@ for the JavaScript code in this tag.
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgea7e3d7">1. computePsdDispl</a></li>
<li><a href="#org5e769e7">2. computeSetpoint</a></li>
<li><a href="#org0239a56">3. converErrorBasis</a></li>
<li><a href="#orgdc168b9">4. computeReferencePose</a></li>
<li><a href="#org493ab7f">5. Compute the Sample Position Error w.r.t. the NASS</a></li>
<li><a href="#orgdc168b9">1. computeReferencePose</a></li>
<li><a href="#org493ab7f">2. Compute the Sample Position Error w.r.t. the NASS</a></li>
</ul>
</div>
</div>
<div id="outline-container-orgea7e3d7" class="outline-2">
<h2 id="orgea7e3d7"><span class="section-number-2">1</span> computePsdDispl</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org2cc2589"></a>
</p>
<p>
This Matlab function is accessible <a href="../src/computePsdDispl.m">here</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[psd_object]</span> = <span class="org-function-name">computePsdDispl</span>(<span class="org-variable-name">sys_data</span>, <span class="org-variable-name">t_init</span>, <span class="org-variable-name">n_av</span>)
i_init = find(sys_data.time <span class="org-type">&gt;</span> t_init, 1);
han_win = hanning(ceil(length(sys_data.Dx(i_init<span class="org-type">:</span>end, <span class="org-type">:</span>))<span class="org-type">/</span>n_av));
Fs = 1<span class="org-type">/</span>sys_data.time(2);
[pdx, f] = pwelch(sys_data.Dx(i_init<span class="org-type">:</span>end, <span class="org-type">:</span>), han_win, [], [], Fs);
[pdy, <span class="org-type">~</span>] = pwelch(sys_data.Dy(i_init<span class="org-type">:</span>end, <span class="org-type">:</span>), han_win, [], [], Fs);
[pdz, <span class="org-type">~</span>] = pwelch(sys_data.Dz(i_init<span class="org-type">:</span>end, <span class="org-type">:</span>), han_win, [], [], Fs);
[prx, <span class="org-type">~</span>] = pwelch(sys_data.Rx(i_init<span class="org-type">:</span>end, <span class="org-type">:</span>), han_win, [], [], Fs);
[pry, <span class="org-type">~</span>] = pwelch(sys_data.Ry(i_init<span class="org-type">:</span>end, <span class="org-type">:</span>), han_win, [], [], Fs);
[prz, <span class="org-type">~</span>] = pwelch(sys_data.Rz(i_init<span class="org-type">:</span>end, <span class="org-type">:</span>), han_win, [], [], Fs);
psd_object = struct(...
<span class="org-string">'f'</span>, f, ...
<span class="org-string">'dx'</span>, pdx, ...
<span class="org-string">'dy'</span>, pdy, ...
<span class="org-string">'dz'</span>, pdz, ...
<span class="org-string">'rx'</span>, prx, ...
<span class="org-string">'ry'</span>, pry, ...
<span class="org-string">'rz'</span>, prz);
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org5e769e7" class="outline-2">
<h2 id="org5e769e7"><span class="section-number-2">2</span> computeSetpoint</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orge6ebb0b"></a>
</p>
<p>
This Matlab function is accessible <a href="../src/computeSetpoint.m">here</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">setpoint</span> = <span class="org-function-name">computeSetpoint</span>(<span class="org-variable-name">ty</span>, <span class="org-variable-name">ry</span>, <span class="org-variable-name">rz</span>)
<span class="org-matlab-cellbreak"><span class="org-comment">%%</span></span>
setpoint = zeros(<span class="org-variable-name">6</span>, 1);
<span class="org-matlab-cellbreak"><span class="org-comment">%% Ty</span></span>
Ty = [1 0 0 0 ;
0 1 0 ty ;
0 0 1 0 ;
0 0 0 1 ];
<span class="org-comment">% Tyinv = [1 0 0 0 ;</span>
<span class="org-comment">% 0 1 0 -ty ;</span>
<span class="org-comment">% 0 0 1 0 ;</span>
<span class="org-comment">% 0 0 0 1 ];</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Ry</span></span>
Ry = [ cos(ry) 0 sin(ry) 0 ;
0 1 0 0 ;
<span class="org-type">-</span>sin(ry) 0 cos(ry) 0 ;
0 0 0 1 ];
<span class="org-comment">% TMry = Ty*Ry*Tyinv;</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Rz</span></span>
Rz = [cos(rz) <span class="org-type">-</span>sin(rz) 0 0 ;
sin(rz) cos(rz) 0 0 ;
0 0 1 0 ;
0 0 0 1 ];
<span class="org-comment">% TMrz = Ty*TMry*Rz*TMry'*Tyinv;</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% All stages</span></span>
<span class="org-comment">% </span><span class="org-comment"><span class="org-constant">TM </span></span><span class="org-comment">= TMrz*TMry*Ty;</span>
TM = Ty<span class="org-type">*</span>Ry<span class="org-type">*</span>Rz;
[thetax, thetay, thetaz] = RM2angle(TM(1<span class="org-type">:</span>3, 1<span class="org-type">:</span>3));
setpoint<span class="org-type">(1:3) </span>= TM(1<span class="org-type">:</span>3, 4);
setpoint<span class="org-type">(4:6) </span>= [thetax, thetay, thetaz];
<span class="org-matlab-cellbreak"><span class="org-comment">%% Custom Functions</span></span>
<span class="org-keyword">function</span> <span class="org-variable-name">[thetax, thetay, thetaz]</span> = <span class="org-function-name">RM2angle</span>(<span class="org-variable-name">R</span>)
<span class="org-keyword">if</span> abs(abs(R(3, 1)) <span class="org-type">-</span> 1) <span class="org-type">&gt;</span> 1e<span class="org-type">-</span>6 <span class="org-comment">% R31 != 1 and R31 != -1</span>
thetay = <span class="org-type">-</span>asin(R(3, 1));
thetax = atan2(R(3, 2)<span class="org-type">/</span>cos(thetay), R(3, 3)<span class="org-type">/</span>cos(thetay));
thetaz = atan2(R(2, 1)<span class="org-type">/</span>cos(thetay), R(1, 1)<span class="org-type">/</span>cos(thetay));
<span class="org-keyword">else</span>
thetaz = 0;
<span class="org-keyword">if</span> abs(R(3, 1)<span class="org-type">+</span>1) <span class="org-type">&lt;</span> 1e<span class="org-type">-</span>6 <span class="org-comment">% R31 = -1</span>
thetay = <span class="org-constant">pi</span><span class="org-type">/</span>2;
thetax = thetaz <span class="org-type">+</span> atan2(R(1, 2), R(1, 3));
<span class="org-keyword">else</span>
thetay = <span class="org-type">-</span><span class="org-constant">pi</span><span class="org-type">/</span>2;
thetax = <span class="org-type">-</span>thetaz <span class="org-type">+</span> atan2(<span class="org-type">-</span>R(1, 2), <span class="org-type">-</span>R(1, 3));
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org0239a56" class="outline-2">
<h2 id="org0239a56"><span class="section-number-2">3</span> converErrorBasis</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org8c2ffe5"></a>
</p>
<p>
This Matlab function is accessible <a href="../src/converErrorBasis.m">here</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">error_nass</span> = <span class="org-function-name">convertErrorBasis</span>(<span class="org-variable-name">pos</span>, <span class="org-variable-name">setpoint</span>, <span class="org-variable-name">ty</span>, <span class="org-variable-name">ry</span>, <span class="org-variable-name">rz</span>)
<span class="org-comment">% convertErrorBasis -</span>
<span class="org-comment">%</span>
<span class="org-comment">% Syntax: convertErrorBasis(p_error, ty, ry, rz)</span>
<span class="org-comment">%</span>
<span class="org-comment">% Inputs:</span>
<span class="org-comment">% - p_error - Position error of the sample w.r.t. the granite [m, rad]</span>
<span class="org-comment">% - ty - Measured translation of the Ty stage [m]</span>
<span class="org-comment">% - ry - Measured rotation of the Ry stage [rad]</span>
<span class="org-comment">% - rz - Measured rotation of the Rz stage [rad]</span>
<span class="org-comment">%</span>
<span class="org-comment">% Outputs:</span>
<span class="org-comment">% - P_nass - Position error of the sample w.r.t. the NASS base [m]</span>
<span class="org-comment">% - R_nass - Rotation error of the sample w.r.t. the NASS base [rad]</span>
<span class="org-comment">%</span>
<span class="org-comment">% Example:</span>
<span class="org-comment">%</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% If line vector =&gt; column vector</span></span>
<span class="org-keyword">if</span> size(pos, 2) <span class="org-type">==</span> 6
pos = pos<span class="org-type">'</span>;
<span class="org-keyword">end</span>
<span class="org-keyword">if</span> size(setpoint, 2) <span class="org-type">==</span> 6
setpoint = setpoint<span class="org-type">'</span>;
<span class="org-keyword">end</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Position of the sample in the frame fixed to the Granite</span></span>
P_granite = [pos(1<span class="org-type">:</span>3); 1]; <span class="org-comment">% Position [m]</span>
R_granite = [setpoint(1<span class="org-type">:</span>3); 1]; <span class="org-comment">% Reference [m]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Transformation matrices of the stages</span></span>
<span class="org-comment">% T-y</span>
TMty = [1 0 0 0 ;
0 1 0 ty ;
0 0 1 0 ;
0 0 0 1 ];
<span class="org-comment">% R-y</span>
TMry = [ cos(ry) 0 sin(ry) 0 ;
0 1 0 0 ;
<span class="org-type">-</span>sin(ry) 0 cos(ry) 0 ;
0 0 0 1 ];
<span class="org-comment">% R-z</span>
TMrz = [cos(rz) <span class="org-type">-</span>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">%% Compute Point coordinates in the new reference fixed to the NASS base</span></span>
<span class="org-comment">% P_nass = TMrz*TMry*TMty*P_granite;</span>
P_nass = TMrz<span class="org-type">\</span>TMry<span class="org-type">\</span>TMty<span class="org-type">\</span>P_granite;
R_nass = TMrz<span class="org-type">\</span>TMry<span class="org-type">\</span>TMty<span class="org-type">\</span>R_granite;
dx = R_nass(1)<span class="org-type">-</span>P_nass(1);
dy = R_nass(2)<span class="org-type">-</span>P_nass(2);
dz = R_nass(3)<span class="org-type">-</span>P_nass(3);
<span class="org-matlab-cellbreak"><span class="org-comment">%% Compute new basis vectors linked to the NASS base</span></span>
<span class="org-comment">% ux_nass = TMrz*TMry*TMty*[1; 0; 0; 0];</span>
<span class="org-comment">% ux_nass = ux_nass(1:3);</span>
<span class="org-comment">% uy_nass = TMrz*TMry*TMty*[0; 1; 0; 0];</span>
<span class="org-comment">% uy_nass = uy_nass(1:3);</span>
<span class="org-comment">% uz_nass = TMrz*TMry*TMty*[0; 0; 1; 0];</span>
<span class="org-comment">% uz_nass = uz_nass(1:3);</span>
ux_nass = TMrz<span class="org-type">\</span>TMry<span class="org-type">\</span>TMty<span class="org-type">\</span>[1; 0; 0; 0];
ux_nass = ux_nass(1<span class="org-type">:</span>3);
uy_nass = TMrz<span class="org-type">\</span>TMry<span class="org-type">\</span>TMty<span class="org-type">\</span>[0; 1; 0; 0];
uy_nass = uy_nass(1<span class="org-type">:</span>3);
uz_nass = TMrz<span class="org-type">\</span>TMry<span class="org-type">\</span>TMty<span class="org-type">\</span>[0; 0; 1; 0];
uz_nass = uz_nass(1<span class="org-type">:</span>3);
<span class="org-matlab-cellbreak"><span class="org-comment">%% Rotations error w.r.t. granite Frame</span></span>
<span class="org-comment">% Rotations error w.r.t. granite Frame</span>
rx_nass = pos(4);
ry_nass = pos(5);
rz_nass = pos(6);
<span class="org-comment">% Rotation matrices of the Sample w.r.t. the Granite</span>
Mrx_error = [1 0 0 ;
0 cos(<span class="org-type">-</span>rx_nass) <span class="org-type">-</span>sin(<span class="org-type">-</span>rx_nass) ;
0 sin(<span class="org-type">-</span>rx_nass) cos(<span class="org-type">-</span>rx_nass)];
Mry_error = [ cos(<span class="org-type">-</span>ry_nass) 0 sin(<span class="org-type">-</span>ry_nass) ;
0 1 0 ;
<span class="org-type">-</span>sin(<span class="org-type">-</span>ry_nass) 0 cos(<span class="org-type">-</span>ry_nass)];
Mrz_error = [cos(<span class="org-type">-</span>rz_nass) <span class="org-type">-</span>sin(<span class="org-type">-</span>rz_nass) 0 ;
sin(<span class="org-type">-</span>rz_nass) cos(<span class="org-type">-</span>rz_nass) 0 ;
0 0 1];
<span class="org-comment">% Rotation matrix of the Sample w.r.t. the Granite</span>
Mr_error = Mrz_error<span class="org-type">*</span>Mry_error<span class="org-type">*</span>Mrx_error;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Use matrix to solve</span></span>
R = Mr_error<span class="org-type">/</span>[ux_nass, uy_nass, uz_nass]; <span class="org-comment">% Rotation matrix from NASS base to Sample</span>
[thetax, thetay, thetaz] = RM2angle(R);
error_nass = [dx; dy; dz; thetax; thetay; thetaz];
<span class="org-matlab-cellbreak"><span class="org-comment">%% Custom Functions</span></span>
<span class="org-keyword">function</span> <span class="org-variable-name">[thetax, thetay, thetaz]</span> = <span class="org-function-name">RM2angle</span>(<span class="org-variable-name">R</span>)
<span class="org-keyword">if</span> abs(abs(R(3, 1)) <span class="org-type">-</span> 1) <span class="org-type">&gt;</span> 1e<span class="org-type">-</span>6 <span class="org-comment">% R31 != 1 and R31 != -1</span>
thetay = <span class="org-type">-</span>asin(R(3, 1));
<span class="org-comment">% thetaybis = pi-thetay;</span>
thetax = atan2(R(3, 2)<span class="org-type">/</span>cos(thetay), R(3, 3)<span class="org-type">/</span>cos(thetay));
<span class="org-comment">% thetaxbis = atan2(R(3, 2)/cos(thetaybis), R(3, 3)/cos(thetaybis));</span>
thetaz = atan2(R(2, 1)<span class="org-type">/</span>cos(thetay), R(1, 1)<span class="org-type">/</span>cos(thetay));
<span class="org-comment">% thetazbis = atan2(R(2, 1)/cos(thetaybis), R(1, 1)/cos(thetaybis));</span>
<span class="org-keyword">else</span>
thetaz = 0;
<span class="org-keyword">if</span> abs(R(3, 1)<span class="org-type">+</span>1) <span class="org-type">&lt;</span> 1e<span class="org-type">-</span>6 <span class="org-comment">% R31 = -1</span>
thetay = <span class="org-constant">pi</span><span class="org-type">/</span>2;
thetax = thetaz <span class="org-type">+</span> atan2(R(1, 2), R(1, 3));
<span class="org-keyword">else</span>
thetay = <span class="org-type">-</span><span class="org-constant">pi</span><span class="org-type">/</span>2;
thetax = <span class="org-type">-</span>thetaz <span class="org-type">+</span> atan2(<span class="org-type">-</span>R(1, 2), <span class="org-type">-</span>R(1, 3));
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdc168b9" class="outline-2">
<h2 id="orgdc168b9"><span class="section-number-2">4</span> computeReferencePose</h2>
<div class="outline-text-2" id="text-4">
<h2 id="orgdc168b9"><span class="section-number-2">1</span> computeReferencePose</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org98cbe6e"></a>
</p>
@ -620,8 +337,8 @@ This Matlab function is accessible <a href="src/computeReferencePose.m">here</a>
</div>
</div>
<div id="outline-container-org493ab7f" class="outline-2">
<h2 id="org493ab7f"><span class="section-number-2">5</span> Compute the Sample Position Error w.r.t. the NASS</h2>
<div class="outline-text-2" id="text-5">
<h2 id="org493ab7f"><span class="section-number-2">2</span> Compute the Sample Position Error w.r.t. the NASS</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="org6dcd4fb"></a>
</p>
@ -658,7 +375,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-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-06 ven. 15:09</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-02-25 mar. 18:20 -->
<!-- 2020-03-13 ven. 17:39 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>HAC-LAC applied on the Simscape Model</title>
@ -202,51 +202,39 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
@ -259,51 +247,44 @@ for the JavaScript code in this tag.
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org68eabc2">1. Undamped System</a>
<li><a href="#org9a782be">1. Initialization</a></li>
<li><a href="#org5f71356">2. Low Authority Control - Direct Velocity Feedback \(\bm{K}_\mathcal{L}\)</a>
<ul>
<li><a href="#org05b902d">1.1. Identification of the plant</a>
<ul>
<li><a href="#orga716982">1.1.1. Initialize the Simulation</a></li>
<li><a href="#org2a3d76d">1.1.2. Identification</a></li>
<li><a href="#org86a6b3a">1.1.3. Display TF</a></li>
<li><a href="#org51e23f6">1.1.4. Obtained Plants for Active Damping</a></li>
<li><a href="#orgd91db57">2.1. Identification</a></li>
<li><a href="#org09c8990">2.2. Plant</a></li>
<li><a href="#orgc21ad83">2.3. Root Locus</a></li>
<li><a href="#orgd18d476">2.4. Controller and Loop Gain</a></li>
</ul>
</li>
<li><a href="#orgaf40de5">1.2. Tomography Experiment</a>
<li><a href="#orgbba86f0">3. High Authority Control - \(\bm{K}_\mathcal{X}\)</a>
<ul>
<li><a href="#org5a1507e">1.2.1. Simulation</a></li>
<li><a href="#org9498b7b">1.2.2. Results</a></li>
</ul>
</li>
<li><a href="#orgdcbab01">1.3. Verification of the transfer function from nano hexapod to metrology</a>
<ul>
<li><a href="#org9edf24c">1.3.1. Initialize the Simulation</a></li>
<li><a href="#org9ff767e">1.3.2. Identification</a></li>
<li><a href="#org5c0b9bf">1.3.3. Display TF</a></li>
<li><a href="#org6288fb1">1.3.4. Obtained Plants for Active Damping</a></li>
</ul>
</li>
<li><a href="#orgdd75cdd">3.1. Identification of the damped plant</a></li>
<li><a href="#orgf70f020">3.2. Controller Design</a></li>
</ul>
</li>
<li><a href="#org5a1507e">4. Simulation</a></li>
<li><a href="#org9498b7b">5. Results</a></li>
</ul>
</div>
</div>
<div id="outline-container-org68eabc2" class="outline-2">
<h2 id="org68eabc2"><span class="section-number-2">1</span> Undamped System</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org632e852"></a>
The position \(\bm{\mathcal{X}}\) of the Sample with respect to the granite is measured.
</p>
<p>
It is then compare to the wanted position of the Sample \(\bm{r}_\mathcal{X}\) in order to obtain the position error \(\bm{\epsilon}_\mathcal{X}\) of the Sample with respect to a frame attached to the Stewart top platform.
</p>
<div class="figure">
<p><img src="figs/hac_lac_control_schematic.png" alt="hac_lac_control_schematic.png" />
</p>
</div>
<div id="outline-container-org05b902d" class="outline-3">
<h3 id="org05b902d"><span class="section-number-3">1.1</span> Identification of the plant</h3>
<div class="outline-text-3" id="text-1-1">
</div>
<div id="outline-container-orga716982" class="outline-4">
<h4 id="orga716982"><span class="section-number-4">1.1.1</span> Initialize the Simulation</h4>
<div class="outline-text-4" id="text-1-1-1">
<div id="outline-container-org9a782be" class="outline-2">
<h2 id="org9a782be"><span class="section-number-2">1</span> Initialization</h2>
<div class="outline-text-2" id="text-1">
<p>
We initialize all the stages with the default parameters.
</p>
@ -324,137 +305,199 @@ 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>, 50);
initializeSample(<span class="org-string">'mass'</span>, 1);
</pre>
</div>
<p>
No disturbances.
We set the references that corresponds to a tomography experiment.
</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">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1);
</pre>
</div>
<p>
We set the references to zero.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences();
<pre class="src src-matlab">initializeDisturbances();
</pre>
</div>
<p>
And all the controllers are set to 0.
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>
</div>
</div>
</div>
<div id="outline-container-org2a3d76d" class="outline-4">
<h4 id="org2a3d76d"><span class="section-number-4">1.1.2</span> Identification</h4>
<div class="outline-text-4" id="text-1-1-2">
<p>
First, we identify the dynamics of the system using the <code>linearize</code> function.
And we put some gravity.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
options = linearizeOptions;
options.SampleTime = 0;
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
</pre>
</div>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
<p>
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>
</div>
</div>
</div>
<div id="outline-container-org5f71356" class="outline-2">
<h2 id="org5f71356"><span class="section-number-2">2</span> Low Authority Control - Direct Velocity Feedback \(\bm{K}_\mathcal{L}\)</h2>
<div class="outline-text-2" id="text-2">
<p>
The first loop closed corresponds to a direct velocity feedback loop.
</p>
<p>
The design of the associated decentralized controller is explained in <a href="active_damping.html">this</a> file.
</p>
</div>
<div id="outline-container-orgd91db57" class="outline-3">
<h3 id="orgd91db57"><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>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
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, <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>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, 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">'Edx'</span>, <span class="org-string">'Edy'</span>, <span class="org-string">'Edz'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
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>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org09c8990" class="outline-3">
<h3 id="org09c8990"><span class="section-number-3">2.2</span> Plant</h3>
</div>
<div id="outline-container-orgc21ad83" class="outline-3">
<h3 id="orgc21ad83"><span class="section-number-3">2.3</span> Root Locus</h3>
</div>
<div id="outline-container-orgd18d476" class="outline-3">
<h3 id="orgd18d476"><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>
</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>
</div>
</div>
</div>
</div>
<div id="outline-container-orgbba86f0" class="outline-2">
<h2 id="orgbba86f0"><span class="section-number-2">3</span> High Authority Control - \(\bm{K}_\mathcal{X}\)</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-orgdd75cdd" class="outline-3">
<h3 id="orgdd75cdd"><span class="section-number-3">3.1</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-matlab">Kx = tf(zeros(6));
</pre>
</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>
</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>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
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>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
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>};
</pre>
</div>
<p>
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>);
G_cart = minreal(G<span class="org-type">*</span>inv(nano_hexapod.J<span class="org-type">'</span>));
G_cart.InputName = {<span class="org-string">'Fnx'</span>, <span class="org-string">'Fny'</span>, <span class="org-string">'Fnz'</span>, <span class="org-string">'Mnx'</span>, <span class="org-string">'Mny'</span>, <span class="org-string">'Mnz'</span>};
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>};
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf70f020" class="outline-3">
<h3 id="orgf70f020"><span class="section-number-3">3.2</span> Controller Design</h3>
<div class="outline-text-3" id="text-3-2">
<p>
The controller consists of:
</p>
<ul class="org-ul">
<li>A pure integrator</li>
<li>A Second integrator up to half the wanted bandwidth</li>
<li>A Lead around the cross-over frequency</li>
<li>A low pass filter with a cut-off equal to two times the wanted bandwidth</li>
</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>
h = 1.5; <span class="org-comment">% Lead parameter</span>
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));
<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))));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">G_legs = minreal(inv(nano_hexapod.J)<span class="org-type">*</span>G);
G_legs.OutputName = {<span class="org-string">'e1'</span>, <span class="org-string">'e2'</span>, <span class="org-string">'e3'</span>, <span class="org-string">'e4'</span>, <span class="org-string">'e5'</span>, <span class="org-string">'e6'</span>};
<pre class="src src-matlab">isstable(feedback(Gx<span class="org-type">*</span>Kx, eye(6), <span class="org-type">-</span>1))
</pre>
</div>
</div>
</div>
<div id="outline-container-org86a6b3a" class="outline-4">
<h4 id="org86a6b3a"><span class="section-number-4">1.1.3</span> Display TF</h4>
<div class="outline-text-4" id="text-1-1-3">
<div id="org37e58f3" class="figure">
<p><img src="figs/plant_G_cart.png" alt="plant_G_cart.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Transfer Function from forces applied by the nano-hexapod to position error (<a href="./figs/plant_G_cart.png">png</a>, <a href="./figs/plant_G_cart.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org51e23f6" class="outline-4">
<h4 id="org51e23f6"><span class="section-number-4">1.1.4</span> Obtained Plants for Active Damping</h4>
<div class="outline-text-4" id="text-1-1-4">
<div id="orga98bcf7" class="figure">
<p><img src="figs/nass_active_damping_iff_plant.png" alt="nass_active_damping_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 2: </span><code>G_iff</code>: IFF Plant (<a href="./figs/nass_active_damping_iff_plant.png">png</a>, <a href="./figs/nass_active_damping_iff_plant.pdf">pdf</a>)</p>
</div>
<div id="orgf5e6d6e" class="figure">
<p><img src="figs/nass_active_damping_ine_plant.png" alt="nass_active_damping_ine_plant.png" />
</p>
<p><span class="figure-number">Figure 3: </span><code>G_dvf</code>: Plant for Direct Velocity Feedback (<a href="./figs/nass_active_damping_dvf_plant.png">png</a>, <a href="./figs/nass_active_damping_dvf_plant.pdf">pdf</a>)</p>
</div>
<div id="orgfe31dcc" class="figure">
<p><img src="figs/nass_active_damping_inertial_plant.png" alt="nass_active_damping_inertial_plant.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Inertial Feedback Plant (<a href="./figs/nass_active_damping_inertial_plant.png">png</a>, <a href="./figs/nass_active_damping_inertial_plant.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgaf40de5" class="outline-3">
<h3 id="orgaf40de5"><span class="section-number-3">1.2</span> Tomography Experiment</h3>
<div class="outline-text-3" id="text-1-2">
</div>
<div id="outline-container-org5a1507e" class="outline-4">
<h4 id="org5a1507e"><span class="section-number-4">1.2.1</span> Simulation</h4>
<div class="outline-text-4" id="text-1-2-1">
<p>
We initialize elements for the tomography experiment.
</p>
<div class="org-src-container">
<pre class="src src-matlab">prepareTomographyExperiment();
<pre class="src src-matlab">Kx = inv(nano_hexapod.J<span class="org-type">'</span>)<span class="org-type">*</span>Kx;
</pre>
</div>
<p>
We change the simulation stop time.
</p>
<div class="org-src-container">
<pre class="src src-matlab">isstable(feedback(G<span class="org-type">*</span>Kx, eye(6), 1))
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org5a1507e" class="outline-2">
<h2 id="org5a1507e"><span class="section-number-2">4</span> Simulation</h2>
<div class="outline-text-2" id="text-4">
<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">'3'</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">'1.5'</span>);
</pre>
</div>
@ -466,186 +509,26 @@ And we simulate the system.
</pre>
</div>
<p>
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">'./active_damping/mat/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(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="org-string">'simout'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org9498b7b" class="outline-4">
<h4 id="org9498b7b"><span class="section-number-4">1.2.2</span> Results</h4>
<div class="outline-text-4" id="text-1-2-2">
<p>
We load the results of tomography experiments.
</p>
<div id="outline-container-org9498b7b" class="outline-2">
<h2 id="org9498b7b"><span class="section-number-2">5</span> Results</h2>
<div class="outline-text-2" id="text-5">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./active_damping/mat/tomo_exp.mat'</span>, <span class="org-string">'En'</span>);
t = linspace(0, 3, length(En(<span class="org-type">:</span>,1)));
<pre class="src src-matlab">load(<span class="org-string">'./mat/tomo_exp_hac_lac.mat'</span>, <span class="org-string">'simout'</span>);
</pre>
</div>
<div id="org5746ec3" class="figure">
<p><img src="figs/nass_act_damp_undamped_sim_tomo_trans.png" alt="nass_act_damp_undamped_sim_tomo_trans.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Position Error during tomography experiment - Translations (<a href="./figs/nass_act_damp_undamped_sim_tomo_trans.png">png</a>, <a href="./figs/nass_act_damp_undamped_sim_tomo_trans.pdf">pdf</a>)</p>
</div>
<div id="orgb29225c" class="figure">
<p><img src="figs/nass_act_damp_undamped_sim_tomo_rot.png" alt="nass_act_damp_undamped_sim_tomo_rot.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Position Error during tomography experiment - Rotations (<a href="./figs/nass_act_damp_undamped_sim_tomo_rot.png">png</a>, <a href="./figs/nass_act_damp_undamped_sim_tomo_rot.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgdcbab01" class="outline-3">
<h3 id="orgdcbab01"><span class="section-number-3">1.3</span> Verification of the transfer function from nano hexapod to metrology</h3>
<div class="outline-text-3" id="text-1-3">
</div>
<div id="outline-container-org9edf24c" class="outline-4">
<h4 id="org9edf24c"><span class="section-number-4">1.3.1</span> Initialize the Simulation</h4>
<div class="outline-text-4" id="text-1-3-1">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
</pre>
</div>
<p>
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>, 50);
</pre>
</div>
<p>
No disturbances.
</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>
</div>
<p>
We set the references to zero.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences();
</pre>
</div>
<p>
And all the controllers are set to 0.
</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>
</div>
</div>
</div>
<div id="outline-container-org9ff767e" class="outline-4">
<h4 id="org9ff767e"><span class="section-number-4">1.3.2</span> Identification</h4>
<div class="outline-text-4" id="text-1-3-2">
<p>
First, 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>
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>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
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>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G = linearize(mdl, io, 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">'Edx'</span>, <span class="org-string">'Edy'</span>, <span class="org-string">'Edz'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
</pre>
</div>
<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>);
G_cart = minreal(G<span class="org-type">*</span>inv(nano_hexapod.J<span class="org-type">'</span>));
G_cart.InputName = {<span class="org-string">'Fnx'</span>, <span class="org-string">'Fny'</span>, <span class="org-string">'Fnz'</span>, <span class="org-string">'Mnx'</span>, <span class="org-string">'Mny'</span>, <span class="org-string">'Mnz'</span>};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">G_legs = minreal(inv(nano_hexapod.J)<span class="org-type">*</span>G);
G_legs.OutputName = {<span class="org-string">'e1'</span>, <span class="org-string">'e2'</span>, <span class="org-string">'e3'</span>, <span class="org-string">'e4'</span>, <span class="org-string">'e5'</span>, <span class="org-string">'e6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org5c0b9bf" class="outline-4">
<h4 id="org5c0b9bf"><span class="section-number-4">1.3.3</span> Display TF</h4>
<div class="outline-text-4" id="text-1-3-3">
<div id="org85c36b6" class="figure">
<p><img src="figs/plant_G_cart.png" alt="plant_G_cart.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Transfer Function from forces applied by the nano-hexapod to position error (<a href="./figs/plant_G_cart.png">png</a>, <a href="./figs/plant_G_cart.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org6288fb1" class="outline-4">
<h4 id="org6288fb1"><span class="section-number-4">1.3.4</span> Obtained Plants for Active Damping</h4>
<div class="outline-text-4" id="text-1-3-4">
<div id="org29fb6b2" class="figure">
<p><img src="figs/nass_active_damping_iff_plant.png" alt="nass_active_damping_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 8: </span><code>G_iff</code>: IFF Plant (<a href="./figs/nass_active_damping_iff_plant.png">png</a>, <a href="./figs/nass_active_damping_iff_plant.pdf">pdf</a>)</p>
</div>
<div id="org9412773" class="figure">
<p><img src="figs/nass_active_damping_ine_plant.png" alt="nass_active_damping_ine_plant.png" />
</p>
<p><span class="figure-number">Figure 9: </span><code>G_dvf</code>: Plant for Direct Velocity Feedback (<a href="./figs/nass_active_damping_dvf_plant.png">png</a>, <a href="./figs/nass_active_damping_dvf_plant.pdf">pdf</a>)</p>
</div>
<div id="orgea280f2" class="figure">
<p><img src="figs/nass_active_damping_inertial_plant.png" alt="nass_active_damping_inertial_plant.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Inertial Feedback Plant (<a href="./figs/nass_active_damping_inertial_plant.png">png</a>, <a href="./figs/nass_active_damping_inertial_plant.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-13 ven. 17:39</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-02-25 mar. 18:20 -->
<!-- 2020-03-13 ven. 17:39 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Identification</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
@ -330,11 +308,7 @@ Some of the springs and dampers values can be estimated from the joints/stages s
<div id="outline-container-org66149fc" class="outline-2">
<h2 id="org66149fc"><span class="section-number-2">2</span> Compare with measurements at the CoM of each element</h2>
<div class="outline-text-2" id="text-2">
<p>
<a href="../../meas/modal-analysis/index.html">here</a>
</p>
</div>
<div id="outline-container-orgcfb741d" class="outline-3">
<h3 id="orgcfb741d"><span class="section-number-3">2.1</span> Prepare the Simulation</h3>
<div class="outline-text-3" id="text-2-1">
@ -636,7 +610,7 @@ ry_com = ry_com.Data(end, <span class="org-type">:</span>)<span class="org-type"
rz_com = rz_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>;
hexa_com = hexa_com.Data(end, <span class="org-type">:</span>)<span class="org-type">'</span>;
save(<span class="org-string">'mat/solids_com.mat'</span>, <span class="org-string">'granite_bot_com'</span>, <span class="org-string">'granite_top_com'</span>, <span class="org-string">'ty_com'</span>, <span class="org-string">'ry_com'</span>, <span class="org-string">'rz_com'</span>, <span class="org-string">'hexa_com'</span>);
save(<span class="org-string">'./mat/solids_com.mat'</span>, <span class="org-string">'granite_bot_com'</span>, <span class="org-string">'granite_top_com'</span>, <span class="org-string">'ty_com'</span>, <span class="org-string">'ry_com'</span>, <span class="org-string">'rz_com'</span>, <span class="org-string">'hexa_com'</span>);
</pre>
</div>
@ -690,7 +664,6 @@ io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station/Micro Hexapod/Mo
G_ms = linearize(mdl, io, 0);
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
G_ms.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>};
G_ms.OutputName = {<span class="org-string">'gtop_x'</span>, <span class="org-string">'gtop_y'</span>, <span class="org-string">'gtop_z'</span>, <span class="org-string">'gtop_rx'</span>, <span class="org-string">'gtop_ry'</span>, <span class="org-string">'gtop_rz'</span>, ...
<span class="org-string">'ty_x'</span>, <span class="org-string">'ty_y'</span>, <span class="org-string">'ty_z'</span>, <span class="org-string">'ty_rx'</span>, <span class="org-string">'ty_ry'</span>, <span class="org-string">'ty_rz'</span>, ...
@ -769,7 +742,7 @@ For such a complex system, we believe that the Simscape Model represents the dyn
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-13 ven. 17:39</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-02-25 mar. 18:18 -->
<!-- 2020-03-06 ven. 15:09 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simscape Model of the Nano-Active-Stabilization-System</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
</head>
<body>
@ -411,7 +389,7 @@ These functions are all defined <a href="./functions.html">here</a>.
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:18</p>
<p class="date">Created: 2020-03-06 ven. 15:09</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-02-25 mar. 18:20 -->
<!-- 2020-03-06 ven. 15:09 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Kinematics of the station</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
@ -594,7 +572,7 @@ And we verify that we indeed succeed to go to the wanted position.
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-06 ven. 15:09</p>
</div>
</body>
</html>

View File

@ -0,0 +1,368 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"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-03-13 ven. 17:39 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Motion and Force Requirements for the Nano-Hexapod</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="index.html"> UP </a>
|
<a accesskey="H" href="index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Motion and Force Requirements for the Nano-Hexapod</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org70e526c">1. Soft Hexapod</a>
<ul>
<li><a href="#org3326d69">1.1. Example</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org70e526c" class="outline-2">
<h2 id="org70e526c"><span class="section-number-2">1</span> Soft Hexapod</h2>
<div class="outline-text-2" id="text-1">
<p>
As the nano-hexapod is in series with the other stages, it must apply all the force required to move the sample.
</p>
<p>
If the nano-hexapod is soft (voice coil), its actuator must apply all the force such that the sample has the wanted motion.
</p>
<p>
In some sense, it does not use the fact that the other stage are participating to the displacement of the sample.
</p>
<p>
Let&rsquo;s take two examples:
</p>
<ul class="org-ul">
<li>Sinus Ty translation at 1Hz with an amplitude of 5mm</li>
<li>Long stroke hexapod has an offset of 10mm in X and the spindle is rotating
Thus the wanted motion is a circle with a radius of 10mm
If the sample if light (30Kg) =&gt; 60rpm
If the sample if heavy (100Kg) =&gt; 1rpm</li>
</ul>
<p>
From the motion, we compute the required acceleration by derive the displacement two times.
Then from the Newton&rsquo;s second law: \(m \vec{a} = \sum \vec{F}\) we can compute the required force.
</p>
</div>
<div id="outline-container-org3326d69" class="outline-3">
<h3 id="org3326d69"><span class="section-number-3">1.1</span> Example</h3>
<div class="outline-text-3" id="text-1-1">
<p>
The wanted motion is:
</p>
\begin{align*}
x &= d \cos(\omega t) \\
y &= d \sin(\omega t)
\end{align*}
<p>
The corresponding acceleration is thus:
</p>
\begin{align*}
\ddot{x} &= - d \omega^2 \cos(\omega t) \\
\ddot{y} &= - d \omega^2 \sin(\omega t)
\end{align*}
<p>
From the Newton&rsquo;s second law:
</p>
\begin{align*}
m \ddot{x} &= F_x \\
m \ddot{y} &= F_y
\end{align*}
<p>
Thus the applied forces should be:
</p>
\begin{align*}
F_x &= - m d \omega^2 \cos(\omega t) \\
F_y &= - m d \omega^2 \sin(\omega t)
\end{align*}
<p>
And the norm of the force is:
\[ |F| = \sqrt{F_x^2 + F_y^2} = m d \omega^2 \ [N] \]
</p>
<p>
For a Light sample:
</p>
<div class="org-src-container">
<pre class="src src-matlab">m = 30;
d = 10e<span class="org-type">-</span>3;
w = 2<span class="org-type">*</span><span class="org-constant">pi</span>;
F = m<span class="org-type">*</span>d<span class="org-type">*</span>w<span class="org-type">^</span>2;
<span class="org-constant">ans</span> = F
</pre>
</div>
<pre class="example">
11.844
</pre>
<p>
For the Heavy sample:
</p>
<div class="org-src-container">
<pre class="src src-matlab">m = 80;
d = 10e<span class="org-type">-</span>3;
w = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>60;
F = m<span class="org-type">*</span>d<span class="org-type">*</span>w<span class="org-type">^</span>2
<span class="org-constant">ans</span> = F
</pre>
</div>
<pre class="example">
0.008773
</pre>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-13 ven. 17:39</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-02-25 mar. 18:20 -->
<!-- 2020-03-06 ven. 15:09 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Computation of the Positioning Error with respect to the nano-hexapod</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
@ -272,17 +250,17 @@ for the JavaScript code in this tag.
<li><a href="#orgf8376ef">1. How do we measure the position of the sample with respect to the granite</a></li>
<li><a href="#orgb3d760a">2. Verify that the function to compute the reference pose is correct</a>
<ul>
<li><a href="#org5c3ae81">2.1. Prepare the Simulation</a></li>
<li><a href="#org4efa9f2">2.1. Prepare the Simulation</a></li>
<li><a href="#orgd2fa379">2.2. Verify that the pose of the sample is the same as the computed one</a></li>
<li><a href="#org00066db">2.3. Conclusion</a></li>
<li><a href="#orga90edfe">2.3. Conclusion</a></li>
</ul>
</li>
<li><a href="#orgf6fa84d">3. Verify that the function to convert the position error in the frame fixed to the nano-hexapod is working</a>
<ul>
<li><a href="#org4efa9f2">3.1. Prepare the Simulation</a></li>
<li><a href="#orgcbcbd60">3.1. Prepare the Simulation</a></li>
<li><a href="#org4e6a2dc">3.2. Compute the wanted pose of the sample in the NASS Base from the metrology and the reference</a></li>
<li><a href="#orga048dbb">3.3. Verify that be imposing the error motion on the nano-hexapod, we indeed have zero error at the end</a></li>
<li><a href="#orga90edfe">3.4. Conclusion</a></li>
<li><a href="#orgc1b5b33">3.4. Conclusion</a></li>
</ul>
</li>
</ul>
@ -370,8 +348,8 @@ We can then determine extract other orientation conventions such that Euler angl
The goal here is to perfectly move the station and verify that there is no mismatch between the metrology measurement and the computation of the reference pose.
</p>
</div>
<div id="outline-container-org5c3ae81" class="outline-3">
<h3 id="org5c3ae81"><span class="section-number-3">2.1</span> Prepare the Simulation</h3>
<div id="outline-container-org4efa9f2" class="outline-3">
<h3 id="org4efa9f2"><span class="section-number-3">2.1</span> Prepare the Simulation</h3>
<div class="outline-text-3" id="text-2-1">
<p>
We set a small <code>StopTime</code>.
@ -541,8 +519,8 @@ ans =
</div>
</div>
<div id="outline-container-org00066db" class="outline-3">
<h3 id="org00066db"><span class="section-number-3">2.3</span> Conclusion</h3>
<div id="outline-container-orga90edfe" class="outline-3">
<h3 id="orga90edfe"><span class="section-number-3">2.3</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-3">
<div class="important">
<p>
@ -570,8 +548,8 @@ This will induce a global positioning error of the sample with respect to the de
We want to verify that we are able to measure this positioning error and convert it in the frame attached to the Nano-hexapod.
</p>
</div>
<div id="outline-container-org4efa9f2" class="outline-3">
<h3 id="org4efa9f2"><span class="section-number-3">3.1</span> Prepare the Simulation</h3>
<div id="outline-container-orgcbcbd60" class="outline-3">
<h3 id="orgcbcbd60"><span class="section-number-3">3.1</span> Prepare the Simulation</h3>
<div class="outline-text-3" id="text-3-1">
<p>
We set a small <code>StopTime</code>.
@ -895,8 +873,8 @@ Verify that the pose error is small.
</div>
</div>
<div id="outline-container-orga90edfe" class="outline-3">
<h3 id="orga90edfe"><span class="section-number-3">3.4</span> Conclusion</h3>
<div id="outline-container-orgc1b5b33" class="outline-3">
<h3 id="orgc1b5b33"><span class="section-number-3">3.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-4">
<div class="important">
<p>
@ -910,7 +888,7 @@ Indeed, we are able to convert the position error in the frame of the NASS and t
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-06 ven. 15:09</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-02-25 mar. 18:20 -->
<!-- 2020-03-06 ven. 15:09 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simscape Model</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
</head>
<body>
@ -775,7 +753,7 @@ Internal force, acting reciprocally between base and following origins is implem
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-06 ven. 15:09</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-02-25 mar. 18:21 -->
<!-- 2020-03-06 ven. 15:10 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simulink Project for the NASS</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
</head>
<body>
@ -322,7 +300,7 @@ The project also permits to automatically add defined folder to the path when th
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:21</p>
<p class="date">Created: 2020-03-06 ven. 15:10</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-02-25 mar. 18:20 -->
<!-- 2020-03-13 ven. 17:39 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simscape Uniaxial Model</title>
@ -202,50 +202,28 @@
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2020 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>
MathJax = {
@ -272,69 +250,69 @@ for the JavaScript code in this tag.
<li><a href="#org227ba84">1. Simscape Model</a></li>
<li><a href="#org6bfb35d">2. Undamped System</a>
<ul>
<li><a href="#org5265d72">2.1. Init</a></li>
<li><a href="#org3b15675">2.2. Identification</a></li>
<li><a href="#org3492011">2.3. Sensitivity to Disturbances</a></li>
<li><a href="#orgd860077">2.4. Noise Budget</a></li>
<li><a href="#org006e24f">2.1. Init</a></li>
<li><a href="#org4fbbce9">2.2. Identification</a></li>
<li><a href="#org49ca9ab">2.3. Sensitivity to Disturbances</a></li>
<li><a href="#org346ebf3">2.4. Noise Budget</a></li>
<li><a href="#orgdb3535a">2.5. Plant</a></li>
</ul>
</li>
<li><a href="#org66a1e03">3. Integral Force Feedback</a>
<li><a href="#org33c3829">3. Integral Force Feedback</a>
<ul>
<li><a href="#org5d899b2">3.1. Control Design</a></li>
<li><a href="#orge386fb1">3.2. Identification</a></li>
<li><a href="#orgbd405f9">3.3. Sensitivity to Disturbance</a></li>
<li><a href="#orgbe8aa64">3.4. Damped Plant</a></li>
<li><a href="#orgfa342b9">3.5. Conclusion</a></li>
<li><a href="#org326d925">3.1. Control Design</a></li>
<li><a href="#org86f3473">3.2. Identification</a></li>
<li><a href="#org68c471e">3.3. Sensitivity to Disturbance</a></li>
<li><a href="#org5edf015">3.4. Damped Plant</a></li>
<li><a href="#orgfc93a1c">3.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#org07ff58f">4. Relative Motion Control</a>
<ul>
<li><a href="#org971bdb9">4.1. Control Design</a></li>
<li><a href="#orgfce3b27">4.2. Identification</a></li>
<li><a href="#org2123e6c">4.3. Sensitivity to Disturbance</a></li>
<li><a href="#org7e3e638">4.4. Damped Plant</a></li>
<li><a href="#org0ec985e">4.5. Conclusion</a></li>
<li><a href="#org5704583">4.1. Control Design</a></li>
<li><a href="#orga436aa7">4.2. Identification</a></li>
<li><a href="#org133268a">4.3. Sensitivity to Disturbance</a></li>
<li><a href="#org2f974d4">4.4. Damped Plant</a></li>
<li><a href="#orgfdbd543">4.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#orgc9b3622">5. Direct Velocity Feedback</a>
<ul>
<li><a href="#orgd5df5f2">5.1. Control Design</a></li>
<li><a href="#orgca551cb">5.2. Identification</a></li>
<li><a href="#orga45e582">5.3. Sensitivity to Disturbance</a></li>
<li><a href="#orgdbf551f">5.4. Damped Plant</a></li>
<li><a href="#orge883751">5.5. Conclusion</a></li>
<li><a href="#org2050b01">5.1. Control Design</a></li>
<li><a href="#orgc946d88">5.2. Identification</a></li>
<li><a href="#orgde4b14e">5.3. Sensitivity to Disturbance</a></li>
<li><a href="#org640c7d9">5.4. Damped Plant</a></li>
<li><a href="#org94e9d5f">5.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#org5ac7dda">6. With Cedrat Piezo-electric Actuators</a>
<ul>
<li><a href="#orgddd7da8">6.1. Identification</a></li>
<li><a href="#orgb6ef594">6.2. Control Design</a></li>
<li><a href="#org5314588">6.3. Identification</a></li>
<li><a href="#orgd226771">6.4. Sensitivity to Disturbance</a></li>
<li><a href="#org294b781">6.5. Damped Plant</a></li>
<li><a href="#orga768e31">6.6. Conclusion</a></li>
<li><a href="#org1bfaed7">6.1. Identification</a></li>
<li><a href="#orgf32651c">6.2. Control Design</a></li>
<li><a href="#orgc7383cd">6.3. Identification</a></li>
<li><a href="#org34de1fd">6.4. Sensitivity to Disturbance</a></li>
<li><a href="#org609c873">6.5. Damped Plant</a></li>
<li><a href="#org3c4f6ff">6.6. Conclusion</a></li>
</ul>
</li>
<li><a href="#org77a79e6">7. Comparison of Active Damping Techniques</a>
<ul>
<li><a href="#orgb0afe4f">7.1. Load the plants</a></li>
<li><a href="#org948b91d">7.2. Sensitivity to Disturbance</a></li>
<li><a href="#org234479d">7.3. Noise Budget</a></li>
<li><a href="#orgf591690">7.4. Damped Plant</a></li>
<li><a href="#orgf332379">7.5. Conclusion</a></li>
<li><a href="#orge08556d">7.2. Sensitivity to Disturbance</a></li>
<li><a href="#orgfff33b9">7.3. Noise Budget</a></li>
<li><a href="#orgc582849">7.4. Damped Plant</a></li>
<li><a href="#orgde3c3e7">7.5. Conclusion</a></li>
</ul>
</li>
<li><a href="#org15965e0">8. Voice Coil</a>
<ul>
<li><a href="#orgefc326e">8.1. Init</a></li>
<li><a href="#orgae49d6e">8.2. Identification</a></li>
<li><a href="#org72047d5">8.3. Sensitivity to Disturbances</a></li>
<li><a href="#orgbcac95d">8.4. Noise Budget</a></li>
<li><a href="#org95b95ac">8.5. Integral Force Feedback</a></li>
<li><a href="#orge0ae68a">8.1. Init</a></li>
<li><a href="#orgd0cdd7a">8.2. Identification</a></li>
<li><a href="#orgea2fb03">8.3. Sensitivity to Disturbances</a></li>
<li><a href="#org88de5a5">8.4. Noise Budget</a></li>
<li><a href="#org241513b">8.5. Integral Force Feedback</a></li>
<li><a href="#org2a655f7">8.6. Identification of the Damped Plant</a></li>
<li><a href="#orgc8d2daf">8.7. Noise Budget</a></li>
<li><a href="#orgb885664">8.8. Conclusion</a></li>
<li><a href="#orgb7cef4c">8.7. Noise Budget</a></li>
<li><a href="#orga9d9dce">8.8. Conclusion</a></li>
</ul>
</li>
</ul>
@ -432,8 +410,8 @@ Schematics of the active damping techniques are displayed in figure <a href="#or
Let&rsquo;s start by study the undamped system.
</p>
</div>
<div id="outline-container-org5265d72" class="outline-3">
<h3 id="org5265d72"><span class="section-number-3">2.1</span> Init</h3>
<div id="outline-container-org006e24f" class="outline-3">
<h3 id="org006e24f"><span class="section-number-3">2.1</span> Init</h3>
<div class="outline-text-3" id="text-2-1">
<p>
We initialize all the stages with the default parameters.
@ -445,8 +423,8 @@ All the controllers are set to 0 (Open Loop).
</p>
</div>
</div>
<div id="outline-container-org3b15675" class="outline-3">
<h3 id="org3b15675"><span class="section-number-3">2.2</span> Identification</h3>
<div id="outline-container-org4fbbce9" class="outline-3">
<h3 id="org4fbbce9"><span class="section-number-3">2.2</span> Identification</h3>
<div class="outline-text-3" id="text-2-2">
<p>
We identify the dynamics of the system.
@ -503,14 +481,14 @@ G.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-comm
Finally, we save the identified system dynamics for further analysis.
</p>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org3492011" class="outline-3">
<h3 id="org3492011"><span class="section-number-3">2.3</span> Sensitivity to Disturbances</h3>
<div id="outline-container-org49ca9ab" class="outline-3">
<h3 id="org49ca9ab"><span class="section-number-3">2.3</span> Sensitivity to Disturbances</h3>
<div class="outline-text-3" id="text-2-3">
<p>
We show several plots representing the sensitivity to disturbances:
@ -537,14 +515,14 @@ We show several plots representing the sensitivity to disturbances:
</div>
</div>
<div id="outline-container-orgd860077" class="outline-3">
<h3 id="orgd860077"><span class="section-number-3">2.4</span> Noise Budget</h3>
<div id="outline-container-org346ebf3" class="outline-3">
<h3 id="org346ebf3"><span class="section-number-3">2.4</span> Noise Budget</h3>
<div class="outline-text-3" id="text-2-4">
<p>
We first load the measured PSD of the disturbance.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./disturbances/mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/disturbances_dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
</pre>
</div>
@ -597,8 +575,8 @@ It corresponds to the plant to control.
</div>
</div>
<div id="outline-container-org66a1e03" class="outline-2">
<h2 id="org66a1e03"><span class="section-number-2">3</span> Integral Force Feedback</h2>
<div id="outline-container-org33c3829" class="outline-2">
<h2 id="org33c3829"><span class="section-number-2">3</span> Integral Force Feedback</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org37f1b7d"></a>
@ -610,11 +588,11 @@ It corresponds to the plant to control.
<p><span class="figure-number">Figure 8: </span>Uniaxial IFF Control Schematic</p>
</div>
</div>
<div id="outline-container-org5d899b2" class="outline-3">
<h3 id="org5d899b2"><span class="section-number-3">3.1</span> Control Design</h3>
<div id="outline-container-org326d925" class="outline-3">
<h3 id="org326d925"><span class="section-number-3">3.1</span> Control Design</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>);
</pre>
</div>
@ -646,8 +624,8 @@ The controller for each pair of actuator/sensor is:
</div>
</div>
<div id="outline-container-orge386fb1" class="outline-3">
<h3 id="orge386fb1"><span class="section-number-3">3.2</span> Identification</h3>
<div id="outline-container-org86f3473" class="outline-3">
<h3 id="org86f3473"><span class="section-number-3">3.2</span> Identification</h3>
<div class="outline-text-3" id="text-3-2">
<p>
Let&rsquo;s initialize the system prior to identification.
@ -671,13 +649,13 @@ All the controllers are set to 0.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = <span class="org-type">-</span>K_iff;
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -724,14 +702,14 @@ G_iff.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'-append'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbd405f9" class="outline-3">
<h3 id="orgbd405f9"><span class="section-number-3">3.3</span> Sensitivity to Disturbance</h3>
<div id="outline-container-org68c471e" class="outline-3">
<h3 id="org68c471e"><span class="section-number-3">3.3</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-3-3">
<div id="orge528565" class="figure">
@ -749,8 +727,8 @@ G_iff.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
</div>
<div id="outline-container-orgbe8aa64" class="outline-3">
<h3 id="orgbe8aa64"><span class="section-number-3">3.4</span> Damped Plant</h3>
<div id="outline-container-org5edf015" class="outline-3">
<h3 id="org5edf015"><span class="section-number-3">3.4</span> Damped Plant</h3>
<div class="outline-text-3" id="text-3-4">
<div id="org57280cb" class="figure">
@ -761,8 +739,8 @@ G_iff.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
</div>
<div id="outline-container-orgfa342b9" class="outline-3">
<h3 id="orgfa342b9"><span class="section-number-3">3.5</span> Conclusion</h3>
<div id="outline-container-orgfc93a1c" class="outline-3">
<h3 id="orgfc93a1c"><span class="section-number-3">3.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-5">
<div class="important">
<p>
@ -791,11 +769,11 @@ In the Relative Motion Control (RMC), a derivative feedback is applied between t
<p><span class="figure-number">Figure 14: </span>Uniaxial RMC Control Schematic</p>
</div>
</div>
<div id="outline-container-org971bdb9" class="outline-3">
<h3 id="org971bdb9"><span class="section-number-3">4.1</span> Control Design</h3>
<div id="outline-container-org5704583" class="outline-3">
<h3 id="org5704583"><span class="section-number-3">4.1</span> Control Design</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>);
</pre>
</div>
@ -828,8 +806,8 @@ A Low pass Filter is added to make the controller transfer function proper.
</div>
</div>
<div id="outline-container-orgfce3b27" class="outline-3">
<h3 id="orgfce3b27"><span class="section-number-3">4.2</span> Identification</h3>
<div id="outline-container-orga436aa7" class="outline-3">
<h3 id="orga436aa7"><span class="section-number-3">4.2</span> Identification</h3>
<div class="outline-text-3" id="text-4-2">
<p>
Let&rsquo;s initialize the system prior to identification.
@ -853,13 +831,13 @@ And initialize the controllers.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = <span class="org-type">-</span>K_rmc;
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -906,15 +884,15 @@ G_rmc.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'-append'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org2123e6c" class="outline-3">
<h3 id="org2123e6c"><span class="section-number-3">4.3</span> Sensitivity to Disturbance</h3>
<div id="outline-container-org133268a" class="outline-3">
<h3 id="org133268a"><span class="section-number-3">4.3</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-4-3">
<div id="org9e0dde4" class="figure">
@ -932,8 +910,8 @@ G_rmc.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
</div>
<div id="outline-container-org7e3e638" class="outline-3">
<h3 id="org7e3e638"><span class="section-number-3">4.4</span> Damped Plant</h3>
<div id="outline-container-org2f974d4" class="outline-3">
<h3 id="org2f974d4"><span class="section-number-3">4.4</span> Damped Plant</h3>
<div class="outline-text-3" id="text-4-4">
<div id="org18786e8" class="figure">
@ -944,8 +922,8 @@ G_rmc.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
</div>
<div id="outline-container-org0ec985e" class="outline-3">
<h3 id="org0ec985e"><span class="section-number-3">4.5</span> Conclusion</h3>
<div id="outline-container-orgfdbd543" class="outline-3">
<h3 id="orgfdbd543"><span class="section-number-3">4.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-5">
<div class="important">
<p>
@ -974,11 +952,11 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
<p><span class="figure-number">Figure 20: </span>Uniaxial DVF Control Schematic</p>
</div>
</div>
<div id="outline-container-orgd5df5f2" class="outline-3">
<h3 id="orgd5df5f2"><span class="section-number-3">5.1</span> Control Design</h3>
<div id="outline-container-org2050b01" class="outline-3">
<h3 id="org2050b01"><span class="section-number-3">5.1</span> Control Design</h3>
<div class="outline-text-3" id="text-5-1">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>);
</pre>
</div>
@ -1003,8 +981,8 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
</div>
</div>
<div id="outline-container-orgca551cb" class="outline-3">
<h3 id="orgca551cb"><span class="section-number-3">5.2</span> Identification</h3>
<div id="outline-container-orgc946d88" class="outline-3">
<h3 id="orgc946d88"><span class="section-number-3">5.2</span> Identification</h3>
<div class="outline-text-3" id="text-5-2">
<p>
Let&rsquo;s initialize the system prior to identification.
@ -1028,13 +1006,13 @@ And initialize the controllers.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = <span class="org-type">-</span>K_dvf;
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -1081,14 +1059,14 @@ G_dvf.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G_dvf'</span>, <span class="org-string">'-append'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orga45e582" class="outline-3">
<h3 id="orga45e582"><span class="section-number-3">5.3</span> Sensitivity to Disturbance</h3>
<div id="outline-container-orgde4b14e" class="outline-3">
<h3 id="orgde4b14e"><span class="section-number-3">5.3</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-5-3">
<div id="orgf9d4052" class="figure">
@ -1106,8 +1084,8 @@ G_dvf.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
</div>
<div id="outline-container-orgdbf551f" class="outline-3">
<h3 id="orgdbf551f"><span class="section-number-3">5.4</span> Damped Plant</h3>
<div id="outline-container-org640c7d9" class="outline-3">
<h3 id="org640c7d9"><span class="section-number-3">5.4</span> Damped Plant</h3>
<div class="outline-text-3" id="text-5-4">
<div id="orgbc9c953" class="figure">
@ -1118,8 +1096,8 @@ G_dvf.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-
</div>
</div>
<div id="outline-container-orge883751" class="outline-3">
<h3 id="orge883751"><span class="section-number-3">5.5</span> Conclusion</h3>
<div id="outline-container-org94e9d5f" class="outline-3">
<h3 id="org94e9d5f"><span class="section-number-3">5.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-5-5">
<div class="important">
<p>
@ -1147,8 +1125,8 @@ The model used for the Cedrat actuator is shown in figure <a href="#org83591fa">
<p><span class="figure-number">Figure 26: </span>Schematic of the model used for the Cedrat Actuator</p>
</div>
</div>
<div id="outline-container-orgddd7da8" class="outline-3">
<h3 id="orgddd7da8"><span class="section-number-3">6.1</span> Identification</h3>
<div id="outline-container-org1bfaed7" class="outline-3">
<h3 id="org1bfaed7"><span class="section-number-3">6.1</span> Identification</h3>
<div class="outline-text-3" id="text-6-1">
<p>
Let&rsquo;s initialize the system prior to identification.
@ -1173,13 +1151,13 @@ And initialize the controllers.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -1236,8 +1214,8 @@ G.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-comm
</div>
</div>
<div id="outline-container-orgb6ef594" class="outline-3">
<h3 id="orgb6ef594"><span class="section-number-3">6.2</span> Control Design</h3>
<div id="outline-container-orgf32651c" class="outline-3">
<h3 id="orgf32651c"><span class="section-number-3">6.2</span> Control Design</h3>
<div class="outline-text-3" id="text-6-2">
<p>
Let&rsquo;s look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor.
@ -1267,8 +1245,8 @@ The controller for each pair of actuator/sensor is:
</div>
</div>
<div id="outline-container-org5314588" class="outline-3">
<h3 id="org5314588"><span class="section-number-3">6.3</span> Identification</h3>
<div id="outline-container-orgc7383cd" class="outline-3">
<h3 id="orgc7383cd"><span class="section-number-3">6.3</span> Identification</h3>
<div class="outline-text-3" id="text-6-3">
<p>
Let&rsquo;s initialize the system prior to identification.
@ -1293,13 +1271,13 @@ All the controllers are set to 0.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = <span class="org-type">-</span>K_cedrat;
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -1346,14 +1324,14 @@ G_cedrat.OutputName = {<span class="org-string">'D'</span>, ...<span class="o
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% save('./uniaxial/mat/plants.mat', 'G_cedrat', '-append');</span>
<pre class="src src-matlab"><span class="org-comment">% save('./mat/uniaxial_plants.mat', 'G_cedrat', '-append');</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd226771" class="outline-3">
<h3 id="orgd226771"><span class="section-number-3">6.4</span> Sensitivity to Disturbance</h3>
<div id="outline-container-org34de1fd" class="outline-3">
<h3 id="org34de1fd"><span class="section-number-3">6.4</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-6-4">
<div id="org90f5c2b" class="figure">
@ -1371,8 +1349,8 @@ G_cedrat.OutputName = {<span class="org-string">'D'</span>, ...<span class="o
</div>
</div>
<div id="outline-container-org294b781" class="outline-3">
<h3 id="org294b781"><span class="section-number-3">6.5</span> Damped Plant</h3>
<div id="outline-container-org609c873" class="outline-3">
<h3 id="org609c873"><span class="section-number-3">6.5</span> Damped Plant</h3>
<div class="outline-text-3" id="text-6-5">
<div id="org0c4e61a" class="figure">
@ -1383,8 +1361,8 @@ G_cedrat.OutputName = {<span class="org-string">'D'</span>, ...<span class="o
</div>
</div>
<div id="outline-container-orga768e31" class="outline-3">
<h3 id="orga768e31"><span class="section-number-3">6.6</span> Conclusion</h3>
<div id="outline-container-org3c4f6ff" class="outline-3">
<h3 id="org3c4f6ff"><span class="section-number-3">6.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-6-6">
<div class="important">
<p>
@ -1407,14 +1385,14 @@ This gives similar results than with a classical force sensor.
<h3 id="orgb0afe4f"><span class="section-number-3">7.1</span> Load the plants</h3>
<div class="outline-text-3" id="text-7-1">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'G_dvf'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>, <span class="org-string">'G_iff'</span>, <span class="org-string">'G_rmc'</span>, <span class="org-string">'G_dvf'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org948b91d" class="outline-3">
<h3 id="org948b91d"><span class="section-number-3">7.2</span> Sensitivity to Disturbance</h3>
<div id="outline-container-orge08556d" class="outline-3">
<h3 id="orge08556d"><span class="section-number-3">7.2</span> Sensitivity to Disturbance</h3>
<div class="outline-text-3" id="text-7-2">
<div id="org8c59440" class="figure">
@ -1447,14 +1425,14 @@ This gives similar results than with a classical force sensor.
</div>
</div>
<div id="outline-container-org234479d" class="outline-3">
<h3 id="org234479d"><span class="section-number-3">7.3</span> Noise Budget</h3>
<div id="outline-container-orgfff33b9" class="outline-3">
<h3 id="orgfff33b9"><span class="section-number-3">7.3</span> Noise Budget</h3>
<div class="outline-text-3" id="text-7-3">
<p>
We first load the measured PSD of the disturbance.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./disturbances/mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/disturbances_dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
</pre>
</div>
@ -1515,8 +1493,8 @@ It is important to note that the effect of direct forces applied to the sample a
</div>
</div>
<div id="outline-container-orgf591690" class="outline-3">
<h3 id="orgf591690"><span class="section-number-3">7.4</span> Damped Plant</h3>
<div id="outline-container-orgc582849" class="outline-3">
<h3 id="orgc582849"><span class="section-number-3">7.4</span> Damped Plant</h3>
<div class="outline-text-3" id="text-7-4">
<div id="orga0c1298" class="figure">
@ -1527,8 +1505,8 @@ It is important to note that the effect of direct forces applied to the sample a
</div>
</div>
<div id="outline-container-orgf332379" class="outline-3">
<h3 id="orgf332379"><span class="section-number-3">7.5</span> Conclusion</h3>
<div id="outline-container-orgde3c3e7" class="outline-3">
<h3 id="orgde3c3e7"><span class="section-number-3">7.5</span> Conclusion</h3>
<div class="outline-text-3" id="text-7-5">
<table id="org46e95c2" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Comparison of proposed active damping techniques</caption>
@ -1604,8 +1582,8 @@ It is important to note that the effect of direct forces applied to the sample a
<a id="orgf9e9d51"></a>
</p>
</div>
<div id="outline-container-orgefc326e" class="outline-3">
<h3 id="orgefc326e"><span class="section-number-3">8.1</span> Init</h3>
<div id="outline-container-orge0ae68a" class="outline-3">
<h3 id="orge0ae68a"><span class="section-number-3">8.1</span> Init</h3>
<div class="outline-text-3" id="text-8-1">
<p>
We initialize all the stages with the default parameters.
@ -1617,8 +1595,8 @@ All the controllers are set to 0 (Open Loop).
</p>
</div>
</div>
<div id="outline-container-orgae49d6e" class="outline-3">
<h3 id="orgae49d6e"><span class="section-number-3">8.2</span> Identification</h3>
<div id="outline-container-orgd0cdd7a" class="outline-3">
<h3 id="orgd0cdd7a"><span class="section-number-3">8.2</span> Identification</h3>
<div class="outline-text-3" id="text-8-2">
<p>
We identify the dynamics of the system.
@ -1675,20 +1653,20 @@ G_vc.OutputName = {<span class="org-string">'D'</span>, ...<span class="org-c
Finally, we save the identified system dynamics for further analysis.
</p>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G_vc'</span>, <span class="org-string">'-append'</span>);
<pre class="src src-matlab">save(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G_vc'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org72047d5" class="outline-3">
<h3 id="org72047d5"><span class="section-number-3">8.3</span> Sensitivity to Disturbances</h3>
<div id="outline-container-orgea2fb03" class="outline-3">
<h3 id="orgea2fb03"><span class="section-number-3">8.3</span> Sensitivity to Disturbances</h3>
<div class="outline-text-3" id="text-8-3">
<p>
We load the dynamics when using a piezo-electric nano hexapod to compare the results.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./uniaxial/mat/plants.mat'</span>, <span class="org-string">'G'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/uniaxial_plants.mat'</span>, <span class="org-string">'G'</span>);
</pre>
</div>
@ -1716,14 +1694,14 @@ We show several plots representing the sensitivity to disturbances:
</div>
</div>
<div id="outline-container-orgbcac95d" class="outline-3">
<h3 id="orgbcac95d"><span class="section-number-3">8.4</span> Noise Budget</h3>
<div id="outline-container-org88de5a5" class="outline-3">
<h3 id="org88de5a5"><span class="section-number-3">8.4</span> Noise Budget</h3>
<div class="outline-text-3" id="text-8-4">
<p>
We first load the measured PSD of the disturbance.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./disturbances/mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
<pre class="src src-matlab">load(<span class="org-string">'./mat/disturbances_dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
</pre>
</div>
@ -1766,8 +1744,8 @@ Thus, it may be desirable to use voice coil actuators.
</div>
</div>
</div>
<div id="outline-container-org95b95ac" class="outline-3">
<h3 id="org95b95ac"><span class="section-number-3">8.5</span> Integral Force Feedback</h3>
<div id="outline-container-org241513b" class="outline-3">
<h3 id="org241513b"><span class="section-number-3">8.5</span> Integral Force Feedback</h3>
<div class="outline-text-3" id="text-8-5">
<div class="org-src-container">
<pre class="src src-matlab">K_iff = <span class="org-type">-</span>20<span class="org-type">/</span>s;
@ -1808,13 +1786,13 @@ All the controllers are set to 0.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K'</span>, <span class="org-string">'-append'</span>);
K_iff = <span class="org-type">-</span>K_iff;
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_iff'</span>, <span class="org-string">'-append'</span>);
K_rmc = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_rmc'</span>, <span class="org-string">'-append'</span>);
K_dvf = tf(0);
save(<span class="org-string">'./mat/controllers.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
save(<span class="org-string">'./mat/controllers_uniaxial.mat'</span>, <span class="org-string">'K_dvf'</span>, <span class="org-string">'-append'</span>);
</pre>
</div>
@ -1862,8 +1840,8 @@ G_vc_iff.OutputName = {<span class="org-string">'D'</span>, ...<span class="o
</div>
</div>
<div id="outline-container-orgc8d2daf" class="outline-3">
<h3 id="orgc8d2daf"><span class="section-number-3">8.7</span> Noise Budget</h3>
<div id="outline-container-orgb7cef4c" class="outline-3">
<h3 id="orgb7cef4c"><span class="section-number-3">8.7</span> Noise Budget</h3>
<div class="outline-text-3" id="text-8-7">
<p>
We compute the obtain PSD of the displacement \(D\) when using IFF.
@ -1877,8 +1855,8 @@ We compute the obtain PSD of the displacement \(D\) when using IFF.
</div>
</div>
<div id="outline-container-orgb885664" class="outline-3">
<h3 id="orgb885664"><span class="section-number-3">8.8</span> Conclusion</h3>
<div id="outline-container-orga9d9dce" class="outline-3">
<h3 id="orga9d9dce"><span class="section-number-3">8.8</span> Conclusion</h3>
<div class="outline-text-3" id="text-8-8">
<div class="important">
<p>
@ -1896,7 +1874,7 @@ Similarly, it would require much lower bandwidth to attain the same level of dis
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-02-25 mar. 18:20</p>
<p class="date">Created: 2020-03-13 ven. 17:39</p>
</div>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
mat/motion_error_ol.mat Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
mat/tomo_exp_hac_lac.mat Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
@ -139,12 +139,12 @@ We then create transfer functions corresponding to the active damping plants.
And we save them for further analysis.
#+begin_src matlab
save('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
save('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
#+end_src
*** Obtained Plants for Active Damping
#+begin_src matlab
load('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
load('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
#+end_src
#+begin_src matlab :exports none
@ -306,12 +306,12 @@ We identify the dynamics of the system using the =linearize= function.
And we save them for further analysis.
#+begin_src matlab
save('./active_damping/mat/cart_plants.mat', 'G_cart', 'masses');
save('./mat/active_damping_cart_plants.mat', 'G_cart', 'masses');
#+end_src
*** Obtained Plants
#+begin_src matlab
load('./active_damping/mat/cart_plants.mat', 'G_cart', 'masses');
load('./mat/active_damping_cart_plants.mat', 'G_cart', 'masses');
#+end_src
#+begin_src matlab :exports none
@ -431,13 +431,13 @@ And we simulate the system.
Finally, we save the simulation results for further analysis
#+begin_src matlab
save('./active_damping/mat/tomo_exp.mat', 'En', 'Eg', '-append');
save('./mat/active_damping_tomo_exp.mat', 'En', 'Eg', '-append');
#+end_src
*** Results
We load the results of tomography experiments.
#+begin_src matlab
load('./active_damping/mat/tomo_exp.mat', 'En');
load('./mat/active_damping_tomo_exp.mat', 'En');
Fs = 1e3; % Sampling Frequency of the Data
t = (1/Fs)*[0:length(En(:,1))-1];
#+end_src
@ -599,12 +599,12 @@ We identify the dynamics for the following sample mass.
#+end_src
#+begin_src matlab :exports none
save('./active_damping/mat/plants_variable.mat', 'masses', 'Gm_iff', 'Gm_dvf', 'Gm_ine', '-append');
save('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_iff', 'Gm_dvf', 'Gm_ine', '-append');
#+end_src
*** Plots :ignore:
#+begin_src matlab :exports none
load('./active_damping/mat/plants_variable.mat', 'masses', 'Gm_iff', 'Gm_dvf', 'Gm_ine');
load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_iff', 'Gm_dvf', 'Gm_ine');
#+end_src
#+begin_src matlab :exports none
@ -779,12 +779,12 @@ We identify the dynamics for the following Spindle angles.
#+end_src
#+begin_src matlab :exports none
save('./active_damping/mat/plants_variable.mat', 'Rz_amplitudes', 'Ga_iff', 'Ga_dvf', 'Ga_ine', '-append');
save('./mat/active_damping_plants_variable.mat', 'Rz_amplitudes', 'Ga_iff', 'Ga_dvf', 'Ga_ine', '-append');
#+end_src
*** Plots :ignore:
#+begin_src matlab :exports none
load('./active_damping/mat/plants_variable.mat', 'Rz_amplitudes', 'Ga_iff', 'Ga_dvf', 'Ga_ine');
load('./mat/active_damping_plants_variable.mat', 'Rz_amplitudes', 'Ga_iff', 'Ga_dvf', 'Ga_ine');
#+end_src
#+begin_src matlab :exports none
@ -967,13 +967,13 @@ The identification of the dynamics is done at the same Spindle angle position.
#+end_src
#+begin_src matlab :exports none
save('./active_damping/mat/plants_variable.mat', 'Rz_periods', 'Gw_iff', 'Gw_dvf', 'Gw_ine', '-append');
save('./mat/active_damping_plants_variable.mat', 'Rz_periods', 'Gw_iff', 'Gw_dvf', 'Gw_ine', '-append');
#+end_src
*** Dynamics of the Active Damping plants
#+begin_src matlab :exports none
load('./active_damping/mat/plants_variable.mat', 'Rz_periods', 'Gw_iff', 'Gw_dvf', 'Gw_ine');
load('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
load('./mat/active_damping_plants_variable.mat', 'Rz_periods', 'Gw_iff', 'Gw_dvf', 'Gw_ine');
load('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
#+end_src
#+begin_src matlab :exports none
@ -1141,8 +1141,8 @@ The identification of the dynamics is done at the same Spindle angle position.
*** Variation of the poles and zeros with the Spindle rotation frequency
#+begin_src matlab :exports none
load('./active_damping/mat/plants_variable.mat', 'Rz_periods', 'Gw_iff', 'Gw_dvf', 'Gw_ine');
load('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
load('./mat/active_damping_plants_variable.mat', 'Rz_periods', 'Gw_iff', 'Gw_dvf', 'Gw_ine');
load('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
#+end_src
@ -1290,13 +1290,13 @@ We identify the dynamics for the following Tilt stage angles.
#+end_src
#+begin_src matlab :exports none
save('./active_damping/mat/plants_variable.mat', 'Ry_amplitudes', 'Gy_iff', 'Gy_dvf', 'Gy_ine', '-append');
save('./mat/active_damping_plants_variable.mat', 'Ry_amplitudes', 'Gy_iff', 'Gy_dvf', 'Gy_ine', '-append');
#+end_src
*** Plots :ignore:
#+begin_src matlab :exports none
load('./active_damping/mat/plants_variable.mat', 'Ry_amplitudes', 'Gy_iff', 'Gy_dvf', 'Gy_ine');
load('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
load('./mat/active_damping_plants_variable.mat', 'Ry_amplitudes', 'Gy_iff', 'Gy_dvf', 'Gy_ine');
load('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
#+end_src
#+begin_src matlab :exports none
@ -1502,13 +1502,13 @@ We identify the dynamics at different positions (times) when scanning with the T
#+begin_src matlab :exports none
Gty_tlin = t_lin;
save('./active_damping/mat/plants_variable.mat', 'Gty_tlin', 'Dy', 'Gty_iff', 'Gty_dvf', 'Gty_ine', '-append');
save('./mat/active_damping_plants_variable.mat', 'Gty_tlin', 'Dy', 'Gty_iff', 'Gty_dvf', 'Gty_ine', '-append');
#+end_src
*** Plots :ignore:
#+begin_src matlab :exports none
load('./active_damping/mat/plants_variable.mat', 'Gty_tlin', 'Dy', 'Gty_iff', 'Gty_dvf', 'Gty_ine');
load('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
load('./mat/active_damping_plants_variable.mat', 'Gty_tlin', 'Dy', 'Gty_iff', 'Gty_dvf', 'Gty_ine');
load('./mat/active_damping_undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
#+end_src
#+begin_src matlab :exports none
@ -1717,8 +1717,8 @@ The control architecture is represented in figure [[fig:iff_1dof]] where one of
*** Plant
Let's load the previously identified undamped plant:
#+begin_src matlab
load('./active_damping/mat/undamped_plants.mat', 'G_iff');
load('./active_damping/mat/plants_variable.mat', 'masses', 'Gm_iff');
load('./mat/active_damping_undamped_plants.mat', 'G_iff');
load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_iff');
#+end_src
Let's look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor (figure [[fig:iff_plant]]).
@ -1819,7 +1819,7 @@ feedback architecture.
We save the controller for further analysis.
#+begin_src matlab
save('./active_damping/mat/K_iff.mat', 'K_iff');
save('./mat/active_damping_K_iff.mat', 'K_iff');
#+end_src
** Identification of the damped plant :noexport:
@ -1831,7 +1831,7 @@ We initialize all the stages with the default parameters.
We set the IFF controller.
#+begin_src matlab
load('./active_damping/mat/K_iff.mat', 'K_iff');
load('./mat/active_damping_K_iff.mat', 'K_iff');
initializeController('type', 'iff', 'K', K_iff);
#+end_src
@ -1852,7 +1852,7 @@ We identify the dynamics of the system using the =linearize= function.
We identify the dynamics for the following sample mass.
#+begin_src matlab
load('./active_damping/mat/cart_plants.mat', 'masses');
load('./mat/active_damping_cart_plants.mat', 'masses');
#+end_src
#+begin_src matlab :exports none
@ -1877,13 +1877,13 @@ We identify the dynamics for the following sample mass.
And we save them for further analysis.
#+begin_src matlab
save('./active_damping/mat/cart_plants.mat', 'G_cart_iff', '-append');
save('./mat/active_damping_cart_plants.mat', 'G_cart_iff', '-append');
#+end_src
*** Damped Plant
Now, look at the new damped plant to control.
#+begin_src matlab
load('./active_damping/mat/cart_plants.mat', 'masses', 'G_cart', 'G_cart_iff');
load('./mat/active_damping_cart_plants.mat', 'masses', 'G_cart', 'G_cart_iff');
#+end_src
It damps the plant (resonance of the nano hexapod as well as other resonances) as shown in figure [[fig:plant_iff_damped]].
@ -2022,7 +2022,7 @@ We initialize elements for the tomography experiment.
We set the IFF controller.
#+begin_src matlab
load('./active_damping/mat/K_iff.mat', 'K_iff');
load('./mat/active_damping_K_iff.mat', 'K_iff');
initializeController('type', 'iff', 'K', K_iff);
#+end_src
@ -2041,12 +2041,12 @@ Finally, we save the simulation results for further analysis
#+begin_src matlab
En_iff = En;
Eg_iff = Eg;
save('./active_damping/mat/tomo_exp.mat', 'En_iff', 'Eg_iff', '-append');
save('./mat/active_damping_tomo_exp.mat', 'En_iff', 'Eg_iff', '-append');
#+end_src
*** Compare with Undamped system
#+begin_src matlab :exports none
load('./active_damping/mat/tomo_exp.mat', 'En', 'En_iff');
load('./mat/active_damping_tomo_exp.mat', 'En', 'En_iff');
Fs = 1e3; % Sampling Frequency of the Data
t = (1/Fs)*[0:length(En(:,1))-1];
#+end_src
@ -2198,8 +2198,8 @@ The actuator displacement can be measured with a capacitive sensor for instance.
*** Plant
Let's load the undamped plant:
#+begin_src matlab
load('./active_damping/mat/undamped_plants.mat', 'G_dvf');
load('./active_damping/mat/plants_variable.mat', 'masses', 'Gm_dvf');
load('./mat/active_damping_undamped_plants.mat', 'G_dvf');
load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_dvf');
#+end_src
Let's look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor (figure [[fig:dvf_plant]]).
@ -2299,7 +2299,7 @@ We create the diagonal controller and we add a minus sign as we have a positive
We save the controller for further analysis.
#+begin_src matlab
save('./active_damping/mat/K_dvf.mat', 'K_dvf');
save('./mat/active_damping_K_dvf.mat', 'K_dvf');
#+end_src
** Identification of the damped plant :noexport:
@ -2311,7 +2311,7 @@ We initialize all the stages with the default parameters.
We set the DVF controller.
#+begin_src matlab
load('./active_damping/mat/K_dvf.mat', 'K_dvf');
load('./mat/active_damping_K_dvf.mat', 'K_dvf');
initializeController('type', 'dvf', 'K', K_dvf);
#+end_src
@ -2332,7 +2332,7 @@ We identify the dynamics of the system using the =linearize= function.
We identify the dynamics for the following sample mass.
#+begin_src matlab
load('./active_damping/mat/cart_plants.mat', 'masses');
load('./mat/active_damping_cart_plants.mat', 'masses');
#+end_src
#+begin_src matlab :exports none
@ -2357,13 +2357,13 @@ We identify the dynamics for the following sample mass.
And we save them for further analysis.
#+begin_src matlab
save('./active_damping/mat/cart_plants.mat', 'G_cart_dvf', '-append');
save('./mat/active_damping_cart_plants.mat', 'G_cart_dvf', '-append');
#+end_src
*** Damped Plant
Now, look at the new damped plant to control.
#+begin_src matlab
load('./active_damping/mat/cart_plants.mat', 'masses', 'G_cart', 'G_cart_dvf');
load('./mat/active_damping_cart_plants.mat', 'masses', 'G_cart', 'G_cart_dvf');
#+end_src
It damps the plant (resonance of the nano hexapod as well as other resonances) as shown in figure [[fig:plant_dvf_damped]].
@ -2502,7 +2502,7 @@ We initialize elements for the tomography experiment.
We set the DVF controller.
#+begin_src matlab
load('./active_damping/mat/K_dvf.mat', 'K_dvf');
load('./mat/active_damping_K_dvf.mat', 'K_dvf');
initializeController('type', 'dvf', 'K', K_dvf);
#+end_src
@ -2521,12 +2521,12 @@ Finally, we save the simulation results for further analysis
#+begin_src matlab
En_dvf = En;
Eg_dvf = Eg;
save('./active_damping/mat/tomo_exp.mat', 'En_dvf', 'Eg_dvf', '-append');
save('./mat/active_damping_tomo_exp.mat', 'En_dvf', 'Eg_dvf', '-append');
#+end_src
*** Compare with Undamped system
#+begin_src matlab :exports none
load('./active_damping/mat/tomo_exp.mat', 'En', 'En_dvf');
load('./mat/active_damping_tomo_exp.mat', 'En', 'En_dvf');
Fs = 1e3; % Sampling Frequency of the Data
t = (1/Fs)*[0:length(En(:,1))-1];
#+end_src
@ -2675,8 +2675,8 @@ In Inertial Control, a feedback is applied between the measured *absolute* motio
*** Plant
Let's load the undamped plant:
#+begin_src matlab
load('./active_damping/mat/undamped_plants.mat', 'G_ine');
load('./active_damping/mat/plants_variable.mat', 'masses', 'Gm_ine');
load('./mat/active_damping_undamped_plants.mat', 'G_ine');
load('./mat/active_damping_plants_variable.mat', 'masses', 'Gm_ine');
#+end_src
Let's look at the transfer function from actuator forces in the nano-hexapod to the measured velocity of the nano-hexapod platform in the direction of the corresponding actuator for all 6 pairs of actuator/sensor (figure [[fig:ine_plant]]).
@ -2774,7 +2774,7 @@ We create the diagonal controller and we add a minus sign as we have a positive
We save the controller for further analysis.
#+begin_src matlab
save('./active_damping/mat/K_ine.mat', 'K_ine');
save('./mat/active_damping_K_ine.mat', 'K_ine');
#+end_src
** Identification of the damped plant :noexport:
@ -2786,7 +2786,7 @@ We initialize all the stages with the default parameters.
We set the Inertial controller.
#+begin_src matlab
load('./active_damping/mat/K_ine.mat', 'K_ine');
load('./mat/active_damping_K_ine.mat', 'K_ine');
initializeController('type', 'ine', 'K', K_ine);
#+end_src
@ -2807,7 +2807,7 @@ We identify the dynamics of the system using the =linearize= function.
We identify the dynamics for the following sample mass.
#+begin_src matlab
load('./active_damping/mat/cart_plants.mat', 'masses');
load('./mat/active_damping_cart_plants.mat', 'masses');
#+end_src
#+begin_src matlab :exports none
@ -2832,13 +2832,13 @@ We identify the dynamics for the following sample mass.
And we save them for further analysis.
#+begin_src matlab
save('./active_damping/mat/cart_plants.mat', 'G_cart_dvf', '-append');
save('./mat/active_damping_cart_plants.mat', 'G_cart_dvf', '-append');
#+end_src
*** Damped Plant
Now, look at the new damped plant to control.
#+begin_src matlab
load('./active_damping/mat/cart_plants.mat', 'masses', 'G_cart', 'G_cart_ine');
load('./mat/active_damping_cart_plants.mat', 'masses', 'G_cart', 'G_cart_ine');
#+end_src
It damps the plant (resonance of the nano hexapod as well as other resonances) as shown in figure [[fig:plant_ine_damped]].
@ -2990,7 +2990,7 @@ Inertial Control should not be used.
** Load the plants
#+begin_src matlab
load('./active_damping/mat/plants.mat', 'G', 'G_iff', 'G_ine', 'G_dvf');
load('./mat/active_damping_plants.mat', 'G', 'G_iff', 'G_ine', 'G_dvf');
#+end_src
** TODO Sensitivity to Disturbance
@ -3239,7 +3239,7 @@ Inertial Control should not be used.
** Tomography Experiment - Frequency Domain analysis
#+begin_src matlab
load('./active_damping/mat/tomo_exp.mat', 'En', 'En_iff', 'En_dvf');
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];
#+end_src

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
@ -121,13 +121,13 @@ The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
All the controllers are set to 0.
#+begin_src matlab
K = tf(zeros(6));
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = tf(zeros(6));
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(zeros(6));
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(zeros(6));
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
** Identification
@ -138,7 +138,7 @@ We identify the various transfer functions of the system
And we save it for further analysis.
#+begin_src matlab
save('./active_damping_uniaxial/mat/plants.mat', 'G', '-append');
save('./mat/active_damping_uniaxial_plants.mat', 'G', '-append');
#+end_src
** Sensitivity to disturbances
@ -468,7 +468,7 @@ And the closed loop system is computed below.
** Control Design
Let's load the undamped plant:
#+begin_src matlab
load('./active_damping_uniaxial/mat/plants.mat', 'G');
load('./mat/active_damping_uniaxial_plants.mat', 'G');
#+end_src
Let's look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor (figure [[fig:iff_plant]]).
@ -573,13 +573,13 @@ Let's initialize the system prior to identification.
All the controllers are set to 0.
#+begin_src matlab
K = tf(zeros(6));
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = -K_iff*eye(6);
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(zeros(6));
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(zeros(6));
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
We identify the system dynamics now that the IFF controller is ON.
@ -589,7 +589,7 @@ We identify the system dynamics now that the IFF controller is ON.
And we save the damped plant for further analysis
#+begin_src matlab
save('./active_damping_uniaxial/mat/plants.mat', 'G_iff', '-append');
save('./mat/active_damping_uniaxial_plants.mat', 'G_iff', '-append');
#+end_src
** Sensitivity to disturbances
@ -1007,7 +1007,7 @@ And the closed loop system is computed below.
** Control Design
Let's load the undamped plant:
#+begin_src matlab
load('./active_damping_uniaxial/mat/plants.mat', 'G');
load('./mat/active_damping_uniaxial_plants.mat', 'G');
#+end_src
Let's look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor (figure [[fig:rmc_plant]]).
@ -1113,13 +1113,13 @@ Let's initialize the system prior to identification.
And initialize the controllers.
#+begin_src matlab
K = tf(zeros(6));
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = tf(zeros(6));
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = -K_rmc*eye(6);
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(zeros(6));
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
We identify the system dynamics now that the RMC controller is ON.
@ -1129,7 +1129,7 @@ We identify the system dynamics now that the RMC controller is ON.
And we save the damped plant for further analysis.
#+begin_src matlab
save('./active_damping_uniaxial/mat/plants.mat', 'G_rmc', '-append');
save('./mat/active_damping_uniaxial_plants.mat', 'G_rmc', '-append');
#+end_src
** Sensitivity to disturbances
@ -1520,7 +1520,7 @@ The obtained sensitivity to disturbances is shown in figure [[fig:dvf_1dof_sensi
** Control Design
Let's load the undamped plant:
#+begin_src matlab
load('./active_damping_uniaxial/mat/plants.mat', 'G');
load('./mat/active_damping_uniaxial_plants.mat', 'G');
#+end_src
Let's look at the transfer function from actuator forces in the nano-hexapod to the measured velocity of the nano-hexapod platform in the direction of the corresponding actuator for all 6 pairs of actuator/sensor (figure [[fig:dvf_plant]]).
@ -1624,13 +1624,13 @@ Let's initialize the system prior to identification.
And initialize the controllers.
#+begin_src matlab
K = tf(zeros(6));
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = tf(zeros(6));
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(zeros(6));
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = -K_dvf*eye(6);
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
We identify the system dynamics now that the RMC controller is ON.
@ -1640,7 +1640,7 @@ We identify the system dynamics now that the RMC controller is ON.
And we save the damped plant for further analysis.
#+begin_src matlab
save('./active_damping_uniaxial/mat/plants.mat', 'G_dvf', '-append');
save('./mat/active_damping_uniaxial_plants.mat', 'G_dvf', '-append');
#+end_src
** Sensitivity to disturbances
@ -1812,7 +1812,7 @@ Direct Velocity Feedback:
** Load the plants
#+begin_src matlab
load('./active_damping_uniaxial/mat/plants.mat', 'G', 'G_iff', 'G_rmc', 'G_dvf');
load('./mat/active_damping_uniaxial_plants.mat', 'G', 'G_iff', 'G_rmc', 'G_dvf');
#+end_src
** Sensitivity to Disturbance

1459
org/control_requirements.org Normal file

File diff suppressed because it is too large Load Diff

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
@ -356,10 +356,10 @@ The PSD of the relative velocity between the hexapod and the marble in $[(m/s)^2
Also, the Ground Motion is measured.
#+begin_src matlab
gm = load('./disturbances/mat/psd_gm.mat', 'f', 'psd_gm', 'psd_gv');
rz = load('./disturbances/mat/pxsp_r.mat', 'f', 'pxsp_r');
tyz = load('./disturbances/mat/pxz_ty_r.mat', 'f', 'pxz_ty_r');
tyx = load('./disturbances/mat/pxe_ty_r.mat', 'f', 'pxe_ty_r');
gm = load('./mat/psd_gm.mat', 'f', 'psd_gm');
rz = load('./mat/pxsp_r.mat', 'f', 'pxsp_r');
tyz = load('./mat/pxz_ty_r.mat', 'f', 'pxz_ty_r');
tyx = load('./mat/pxe_ty_r.mat', 'f', 'pxe_ty_r');
#+end_src
#+begin_src matlab :exports none
@ -553,7 +553,7 @@ We should verify that this is coherent with the measurements.
:PROPERTIES:
:CUSTOM_ID: Save
:END:
The PSD of the disturbance force are now saved for further analysis (the mat file is accessible [[file:mat/dist_psd.mat][here]]).
The PSD of the disturbance force are now saved for further analysis.
#+begin_src matlab
dist_f = struct();
@ -564,5 +564,85 @@ The PSD of the disturbance force are now saved for further analysis (the mat fil
dist_f.psd_ty = tyz.psd_f; % Power Spectral Density of the force induced by the Ty stage in the Z direction [N^2/Hz]
dist_f.psd_rz = rz.psd_f; % Power Spectral Density of the force induced by the Rz stage in the Z direction [N^2/Hz]
save('./disturbances/mat/dist_psd.mat', 'dist_f');
save('./mat/dist_psd.mat', 'dist_f');
#+end_src
* Error motion of the Sample without Control
#+begin_src matlab
initializeGround();
initializeGranite('Foffset', false);
initializeTy('Foffset', false);
initializeRy('Foffset', false);
initializeRz('Foffset', false);
initializeMicroHexapod('Foffset', false);
initializeAxisc('type', 'rigid');
initializeMirror('type', 'rigid');
#+end_src
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
#+begin_src matlab
initializeNanoHexapod('type', 'rigid');
initializeSample('type', 'rigid', 'mass', 50);
#+end_src
We set the references and disturbances to zero.
#+begin_src matlab
initializeReferences();
initializeDisturbances();
#+end_src
We set the controller type to Open-Loop.
#+begin_src matlab
initializeController('type', 'open-loop');
#+end_src
And we put some gravity.
#+begin_src matlab
initializeSimscapeConfiguration('gravity', false);
#+end_src
We do not need to log any signal.
#+begin_src matlab
initializeLoggingConfiguration('log', 'all');
#+end_src
#+begin_src matlab
initializePosError('error', false);
#+end_src
#+begin_src matlab
load('mat/conf_simulink.mat');
set_param(conf_simulink, 'StopTime', '1');
#+end_src
We simulate the model.
#+begin_src matlab
sim('nass_model');
#+end_src
#+begin_src matlab
figure;
subplot(1, 2, 1);
hold on;
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 1), 'DisplayName', 'X');
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 2), 'DisplayName', 'Y');
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 3), 'DisplayName', 'Z');
hold off;
xlabel('Time [s]');
ylabel('Position error [m]');
legend();
subplot(1, 2, 2);
hold on;
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 4));
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 5));
plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 6));
hold off;
xlabel('Time [s]');
ylabel('Orientation error [rad]');
#+end_src
#+begin_src matlab
Eg = simout.Em.Eg;
save('./mat/motion_error_ol.mat', 'Eg');
#+end_src

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
@ -127,12 +127,12 @@ We simulate the model.
And we save the obtained data.
#+begin_src matlab
tomo_align_no_dist = struct('t', t, 'MTr', MTr);
save('experiment_tomography/mat/experiment.mat', 'tomo_align_no_dist', '-append');
save('./mat/experiment_tomography.mat', 'tomo_align_no_dist', '-append');
#+end_src
** Analysis
#+begin_src matlab
load('experiment_tomography/mat/experiment.mat', 'tomo_align_no_dist');
load('./mat/experiment_tomography.mat', 'tomo_align_no_dist');
t = tomo_align_no_dist.t;
MTr = tomo_align_no_dist.MTr;
#+end_src
@ -206,7 +206,6 @@ And we save the obtained data.
[[file:figs/exp_tomo_without_dist_rot.png]]
** Conclusion
#+begin_important
When everything is aligned, the resulting error motion is very small (nm range) and is quite negligible with respect to the error when disturbances are included.
This residual error motion probably comes from a small misalignment somewhere.
@ -237,12 +236,12 @@ We simulate the model.
And we save the obtained data.
#+begin_src matlab
tomo_align_dist = struct('t', t, 'MTr', MTr);
save('experiment_tomography/mat/experiment.mat', 'tomo_align_dist', '-append');
save('./mat/experiment_tomography.mat', 'tomo_align_dist', '-append');
#+end_src
** Analysis
#+begin_src matlab
load('experiment_tomography/mat/experiment.mat', 'tomo_align_dist');
load('./mat/experiment_tomography.mat', 'tomo_align_dist');
t = tomo_align_dist.t;
MTr = tomo_align_dist.MTr;
#+end_src
@ -361,12 +360,12 @@ We simulate the model.
And we save the obtained data.
#+begin_src matlab
tomo_not_align = struct('t', t, 'MTr', MTr);
save('experiment_tomography/mat/experiment.mat', 'tomo_not_align', '-append');
save('./mat/experiment_tomography.mat', 'tomo_not_align', '-append');
#+end_src
** Analysis
#+begin_src matlab
load('experiment_tomography/mat/experiment.mat', 'tomo_not_align');
load('./mat/experiment_tomography.mat', 'tomo_not_align');
t = tomo_not_align.t;
MTr = tomo_not_align.MTr;
#+end_src
@ -489,12 +488,12 @@ We simulate the model.
And we save the obtained data.
#+begin_src matlab
ty_scan = struct('t', t, 'MTr', MTr);
save('experiment_tomography/mat/experiment.mat', 'ty_scan', '-append');
save('./mat/experiment_tomography.mat', 'ty_scan', '-append');
#+end_src
** Analysis
#+begin_src matlab
load('experiment_tomography/mat/experiment.mat', 'ty_scan');
load('./mat/experiment_tomography.mat', 'ty_scan');
t = ty_scan.t;
MTr = ty_scan.MTr;
#+end_src

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100

View File

@ -30,18 +30,471 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
#+PROPERTY: header-args:latex+ :results raw replace :buffer no
#+PROPERTY: header-args:latex+ :results file raw replace
#+PROPERTY: header-args:latex+ :buffer no
#+PROPERTY: header-args:latex+ :eval no-export
#+PROPERTY: header-args:latex+ :exports both
#+PROPERTY: header-args:latex+ :exports results
#+PROPERTY: header-args:latex+ :mkdirp yes
#+PROPERTY: header-args:latex+ :output-dir figs
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
:END:
* Undamped System
* Introduction :ignore:
The position $\bm{\mathcal{X}}$ of the Sample with respect to the granite is measured.
It is then compare to the wanted position of the Sample $\bm{r}_\mathcal{X}$ in order to obtain the position error $\bm{\epsilon}_\mathcal{X}$ of the Sample with respect to a frame attached to the Stewart top platform.
#+begin_src latex :file hac_lac_control_schematic.pdf
\begin{tikzpicture}
\node[block={3.0cm}{3.0cm}] (G) {$G$};
% Input and outputs coordinates
\coordinate[] (outputX) at ($(G.south east)!0.25!(G.north east)$);
\coordinate[] (outputL) at ($(G.south east)!0.75!(G.north east)$);
\draw[->] (outputX) -- ++(1.8, 0) node[above left]{$\bm{\mathcal{X}}$};
\draw[->] (outputL) -- ++(1.8, 0) node[above left]{$\bm{\mathcal{L}}$};
% Blocs
\node[addb, left= of G] (addF) {};
\node[block, left=1.2 of addF] (Kx) {$\bm{K}_\mathcal{X}$};
\node[block={2cm}{2cm}, align=center, left=1.2 of Kx] (subx) {Computes\\Position\\Error};
\node[block, above= of addF] (Kl) {$\bm{K}_\mathcal{L}$};
\node[addb={+}{}{}{-}{}, above= of Kl] (subl) {};
\node[block, align=center, left=0.8 of subl] (invK) {Inverse\\Kinematics};
% Connections and labels
\draw[<-] (subx.west)node[above left]{$\bm{r}_{\mathcal{X}}$} -- ++(-0.8, 0);
\draw[->] ($(subx.east) + (0.2, 0)$)node[branch]{} |- (invK.west);
\draw[->] (invK.east) -- (subl.west) node[above left]{$\bm{r}_\mathcal{L}$};
\draw[->] (subl.south) -- (Kl.north) node[above right]{$\bm{\epsilon}_\mathcal{L}$};
\draw[->] (Kl.south) -- (addF.north);
\draw[->] (subx.east) -- (Kx.west) node[above left]{$\bm{\epsilon}_\mathcal{X}$};
\draw[->] (Kx.east) node[above right]{$\bm{\tau}_\mathcal{X}$} -- (addF.west);
\draw[->] (addF.east) -- (G.west) node[above left]{$\bm{\tau}$};
\draw[->] ($(outputL.east) + (0.4, 0)$)node[branch](L){} |- (subl.east);
\draw[->] ($(outputX.east) + (1.2, 0)$)node[branch]{} -- ++(0, -1.6) -| (subx.south);
\begin{scope}[on background layer]
\node[fit={(G.south-|Kl.west) (L|-subl.north)}, fill=black!20!white, draw, dashed, inner sep=8pt] (Ktot) {};
\end{scope}
\end{tikzpicture}
#+end_src
#+RESULTS:
[[file:figs/hac_lac_control_schematic.png]]
* Initialization
We initialize all the stages with the default parameters.
#+begin_src matlab
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
#+end_src
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
#+begin_src matlab
initializeNanoHexapod('actuator', 'piezo');
initializeSample('mass', 1);
#+end_src
We set the references that corresponds to a tomography experiment.
#+begin_src matlab
initializeReferences('Rz_type', 'rotating', 'Rz_period', 1);
#+end_src
#+begin_src matlab
initializeDisturbances();
#+end_src
Open Loop.
#+begin_src matlab
initializeController('type', 'open-loop');
#+end_src
And we put some gravity.
#+begin_src matlab
initializeSimscapeConfiguration('gravity', true);
#+end_src
We log the signals.
#+begin_src matlab
initializeLoggingConfiguration('log', 'all');
#+end_src
* Low Authority Control - Direct Velocity Feedback $\bm{K}_\mathcal{L}$
** Introduction :ignore:
The first loop closed corresponds to a direct velocity feedback loop.
The design of the associated decentralized controller is explained in [[file:active_damping.org][this]] file.
** Identification
#+begin_src matlab
%% Name of the Simulink File
mdl = 'nass_model';
%% Input/Output definition
clear io; io_i = 1;
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
%% Run the linearization
G_dvf = linearize(mdl, io, 0);
G_dvf.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G_dvf.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'};
#+end_src
** Plant
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(G_dvf(i,i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
hold on;
for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(G_dvf(i,i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x');
#+end_src
** Root Locus
#+begin_src matlab :exports none
gains = logspace(0, 5, 500);
figure;
hold on;
plot(real(pole(G_dvf)), imag(pole(G_dvf)), 'x');
set(gca,'ColorOrderIndex',1);
plot(real(tzero(G_dvf)), imag(tzero(G_dvf)), 'o');
for i = 1:length(gains)
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(G_dvf, (gains(i)*s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
% ylim([0, 1.1*max(imag(pole(G_dvf)))]);
% xlim([-1.1*max(imag(pole(G_dvf))),0]);
xlabel('Real Part')
ylabel('Imaginary Part')
axis square
#+end_src
** Controller and Loop Gain
#+begin_src matlab
K_dvf = s*15000/(1 + s/2/pi/10000);
#+end_src
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(K_dvf*G_dvf(i,i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
hold on;
for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(K_dvf*G_dvf(i,i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x');
#+end_src
#+begin_src matlab
K_dvf = -K_dvf*eye(6);
#+end_src
* High Authority Control - $\bm{K}_\mathcal{X}$
** Identification of the damped plant
#+begin_src matlab
Kx = tf(zeros(6));
#+end_src
#+begin_src matlab
initializeController('type', 'hac-dvf');
#+end_src
#+begin_src matlab
%% Name of the Simulink File
mdl = 'nass_model';
%% Input/Output definition
clear io; io_i = 1;
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
%% Run the linearization
G = linearize(mdl, io, 0);
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
#+end_src
The minus sine is put here because there is already a minus sign included due to the computation of the position error.
#+begin_src matlab
load('mat/stages.mat', 'nano_hexapod');
Gx = -G*inv(nano_hexapod.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
#+end_src
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
labels = {'$D_x/\mathcal{F}_x$', '$D_y/\mathcal{F}_y$', '$D_z/\mathcal{F}_z$', '$R_x/\mathcal{M}_x$', '$R_y/\mathcal{M}_y$', '$R_z/\mathcal{M}_z$'};
figure;
ax1 = subplot(2, 2, 1);
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(Gx(i, i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Diagonal elements of the Plant');
ax2 = subplot(2, 2, 3);
hold on;
for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(Gx(i, i), freqs, 'Hz'))), 'DisplayName', labels{i});
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
legend();
ax3 = subplot(2, 2, 2);
hold on;
for i = 1:5
for j = i+1:6
plot(freqs, abs(squeeze(freqresp(Gx(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
set(gca,'ColorOrderIndex',1);
plot(freqs, abs(squeeze(freqresp(Gx(1, 1), freqs, 'Hz'))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Off-Diagonal elements of the Plant');
ax4 = subplot(2, 2, 4);
hold on;
for i = 1:5
for j = i+1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(Gx(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
set(gca,'ColorOrderIndex',1);
plot(freqs, 180/pi*angle(squeeze(freqresp(Gx(1, 1), freqs, 'Hz'))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2,ax3,ax4],'x');
#+end_src
** Controller Design
The controller consists of:
- A pure integrator
- A Second integrator up to half the wanted bandwidth
- A Lead around the cross-over frequency
- A low pass filter with a cut-off equal to two times the wanted bandwidth
#+begin_src matlab
wc = 2*pi*15; % Bandwidth Bandwidth [rad/s]
h = 1.5; % Lead parameter
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));
% Normalization of the gain of have a loop gain of 1 at frequency wc
Kx = Kx.*diag(1./diag(abs(freqresp(Gx*Kx, wc))));
#+end_src
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
labels = {'$D_x/\mathcal{F}_x$', '$D_y/\mathcal{F}_y$', '$D_z/\mathcal{F}_z$', '$R_x/\mathcal{M}_x$', '$R_y/\mathcal{M}_y$', '$R_z/\mathcal{M}_z$'};
figure;
ax1 = subplot(2, 2, 1);
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(Gx(i, i)*Kx(i,i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Diagonal elements of the Plant');
ax2 = subplot(2, 2, 3);
hold on;
for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(Gx(i, i)*Kx(i,i), freqs, 'Hz'))), 'DisplayName', labels{i});
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
legend();
ax3 = subplot(2, 2, 2);
hold on;
for i = 1:5
for j = i+1:6
plot(freqs, abs(squeeze(freqresp(Gx(i, j)*Kx(i,j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
set(gca,'ColorOrderIndex',1);
plot(freqs, abs(squeeze(freqresp(Gx(1, 1), freqs, 'Hz'))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Off-Diagonal elements of the Plant');
ax4 = subplot(2, 2, 4);
hold on;
for i = 1:5
for j = i+1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(Gx(i, j), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
end
end
set(gca,'ColorOrderIndex',1);
plot(freqs, 180/pi*angle(squeeze(freqresp(Gx(1, 1), freqs, 'Hz'))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2,ax3,ax4],'x');
#+end_src
#+begin_src matlab
isstable(feedback(Gx*Kx, eye(6), -1))
#+end_src
#+begin_src matlab
Kx = inv(nano_hexapod.J')*Kx;
#+end_src
#+begin_src matlab
isstable(feedback(G*Kx, eye(6), 1))
#+end_src
* Simulation
#+begin_src matlab
load('mat/conf_simulink.mat');
set_param(conf_simulink, 'StopTime', '1.5');
#+end_src
And we simulate the system.
#+begin_src matlab
sim('nass_model');
#+end_src
#+begin_src matlab
save('./mat/tomo_exp_hac_lac.mat', 'simout');
#+end_src
* Results
#+begin_src matlab
load('./mat/tomo_exp_hac_lac.mat', 'simout');
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(simout.Em.En.Data(:,1), simout.Em.En.Data(:,2), 'DisplayName', '$\epsilon_{x,y}$ - OL')
xlabel('X Motion [m]'); ylabel('Y Motion [m]');
legend();
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot3(simout.Em.En.Data(:,1), simout.Em.En.Data(:,2), simout.Em.En.Data(:,3))
xlabel('X Motion [m]'); ylabel('Y Motion [m]');
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot3(simout.Em.En.Data(:,4), simout.Em.En.Data(:,5), simout.Em.En.Data(:,3))
xlabel('X Motion [m]'); ylabel('Y Motion [m]');
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(simout.Em.En.Time, simout.Em.En.Data(:,1), 'DisplayName', '$\epsilon_{x}$')
plot(simout.Em.En.Time, simout.Em.En.Data(:,2), 'DisplayName', '$\epsilon_{y}$')
plot(simout.Em.En.Time, simout.Em.En.Data(:,3), 'DisplayName', '$\epsilon_{z}$')
hold off;
legend();
xlabel('Time [s]'); ylabel('Position Error [m]');
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(simout.Em.En.Time, simout.Em.En.Data(:,4), 'DisplayName', '$\epsilon_{R_x}$')
plot(simout.Em.En.Time, simout.Em.En.Data(:,5), 'DisplayName', '$\epsilon_{R_y}$')
plot(simout.Em.En.Time, simout.Em.En.Data(:,6), 'DisplayName', '$\epsilon_{R_z}$')
hold off;
legend();
xlabel('Time [s]'); ylabel('Orientation Error [rad]');
#+end_src
* Undamped System :noexport:
<<sec:undamped_system>>
** Introduction :ignore:
@ -85,7 +538,7 @@ The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
No disturbances.
#+begin_src matlab
initializeDisturbances('enable', false);
initializeDisturbances();
#+end_src
We set the references to zero.
@ -329,13 +782,13 @@ And we simulate the system.
Finally, we save the simulation results for further analysis
#+begin_src matlab
save('./active_damping/mat/tomo_exp.mat', 'En', 'Eg', '-append');
save('./mat/active_damping_tomo_exp.mat', 'En', 'Eg', '-append');
#+end_src
*** Results
We load the results of tomography experiments.
#+begin_src matlab
load('./active_damping/mat/tomo_exp.mat', 'En');
load('./mat/active_damping_tomo_exp.mat', 'En');
t = linspace(0, 3, length(En(:,1)));
#+end_src
@ -447,11 +900,6 @@ First, we identify the dynamics of the system using the =linearize= function.
G_legs.OutputName = {'e1', 'e2', 'e3', 'e4', 'e5', 'e6'};
#+end_src
# And we save them for further analysis.
# #+begin_src matlab
# save('./hac_lac/mat/undamped_plant.mat', 'G');
# #+end_src
*** Display TF
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
@ -50,195 +50,6 @@ We can then compare the measured Frequency Response Functions with the identifie
Finally, this should help to tune the parameters of the model such that the dynamics is closer to the measured FRF.
* Identification of the Micro-Station :noexport:
** Introduction :ignore:
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
simulinkproject('../');
#+end_src
** Simscape Model
The simulink file for the identification is =sim_micro_station_id.slx=.
#+begin_src matlab
open('identification/matlab/sim_micro_station_id.slx')
#+end_src
We load the configuration and we set a small =StopTime=.
#+begin_src matlab
load('mat/conf_simulink.mat');
set_param(conf_simulink, 'StopTime', '0.5');
#+end_src
We initialize all the stages.
#+begin_src matlab
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod('actuator', 'piezo');
initializeSample('mass', 50);
#+end_src
** Compute the transfer functions
We first define some parameters for the identification.
#+begin_src matlab
%% Options for Linearized
options = linearizeOptions;
options.SampleTime = 0;
%% Name of the Simulink File
mdl = 'sim_micro_station_id';
#+end_src
#+begin_src matlab
%% Micro-Hexapod
% Input/Output definition
io(1) = linio([mdl, '/Micro-Station/Fm_ext'],1,'openinput');
io(2) = linio([mdl, '/Micro-Station/Fg_ext'],1,'openinput');
io(3) = linio([mdl, '/Micro-Station/Dm_inertial'],1,'output');
io(4) = linio([mdl, '/Micro-Station/Ty_inertial'],1,'output');
io(5) = linio([mdl, '/Micro-Station/Ry_inertial'],1,'output');
io(6) = linio([mdl, '/Micro-Station/Dg_inertial'],1,'output');
#+end_src
#+begin_src matlab
% Run the linearization
G_ms = linearize(mdl, io, 0);
% Input/Output names
G_ms.InputName = {'Fmx', 'Fmy', 'Fmz',...
'Fgx', 'Fgy', 'Fgz'};
G_ms.OutputName = {'Dmx', 'Dmy', 'Dmz', ...
'Tyx', 'Tyy', 'Tyz', ...
'Ryx', 'Ryy', 'Ryz', ...
'Dgx', 'Dgy', 'Dgz'};
#+end_src
#+begin_src matlab
%% Save the obtained transfer functions
save('./mat/id_micro_station.mat', 'G_ms');
#+end_src
** Plots the transfer functions
** Compare with the measurements
* Modal Analysis of the Micro-Station :noexport:
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
simulinkproject('../');
#+end_src
** Simscape Model
The simulink file for the analysis is =sim_micro_station_modal_analysis.slx=.
#+begin_src matlab
open('identification/matlab/sim_micro_station_modal_analysis.slx')
#+end_src
We load the configuration and we set a small =StopTime=.
#+begin_src matlab
load('mat/conf_simulink.mat');
set_param(conf_simulink, 'StopTime', '0.5');
#+end_src
We initialize all the stages.
#+begin_src matlab
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod('actuator', 'piezo');
initializeSample('mass', 50);
#+end_src
** Identification
#+begin_src matlab
%% Options for Linearized
options = linearizeOptions;
options.SampleTime = 0;
%% Name of the Simulink File
mdl = 'sim_micro_station_modal_analysis';
#+end_src
#+begin_src matlab
%% Micro-Hexapod
% Input/Output definition
io(1) = linio([mdl, '/Micro-Station/F_hammer'],1,'openinput');
io(2) = linio([mdl, '/Micro-Station/acc9'],1,'output');
io(3) = linio([mdl, '/Micro-Station/acc10'],1,'output');
io(4) = linio([mdl, '/Micro-Station/acc11'],1,'output');
io(5) = linio([mdl, '/Micro-Station/acc12'],1,'output');
#+end_src
#+begin_src matlab
% Run the linearization
G_ms = linearize(mdl, io, 0);
% Input/Output names
G_ms.InputName = {'Fx', 'Fy', 'Fz'};
G_ms.OutputName = {'x9', 'y9', 'z9', ...
'x10', 'y10', 'z10', ...
'x11', 'y11', 'z11', ...
'x12', 'y12', 'z12'};
#+end_src
** Plot Results
#+begin_src matlab
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_ms('x9', 'Fx'), freqs, 'Hz'))));
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]');
hold off;
#+end_src
** Compare with measurements
#+begin_src matlab
load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs');
#+end_src
#+begin_src matlab
dirs = {'x', 'y', 'z'};
n_acc = 9;
n_dir = 1; % x, y, z
n_exc = 1; % x, y, z
figure;
hold on;
plot(freqs, abs(squeeze(FRFs(3*(n_acc-1) + n_dir, n_exc, :)))./((2*pi*freqs).^2)');
plot(freqs, abs(squeeze(freqresp(G_ms([dirs{n_dir}, num2str(n_acc)], ['F', dirs{n_dir}]), freqs, 'Hz'))));
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]');
hold off;
#+end_src
* Some notes about the Simscape Model
The Simscape Model of the micro-station consists of several solid bodies:
- Bottom Granite
@ -255,9 +66,6 @@ Then, the solid bodies are connected with springs and dampers.
Some of the springs and dampers values can be estimated from the joints/stages specifications, however, we here prefer to tune these values based on the measurements.
* Compare with measurements at the CoM of each element
** Introduction :ignore:
[[file:../../meas/modal-analysis/index.org][here]]
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
@ -393,7 +201,7 @@ We now same this for further use:
rz_com = rz_com.Data(end, :)';
hexa_com = hexa_com.Data(end, :)';
save('mat/solids_com.mat', 'granite_bot_com', 'granite_top_com', 'ty_com', 'ry_com', 'rz_com', 'hexa_com');
save('./mat/solids_com.mat', 'granite_bot_com', 'granite_top_com', 'ty_com', 'ry_com', 'rz_com', 'hexa_com');
#+end_src
Then, we use the obtained results to add a =rigidTransform= block in order to create a new frame at the center of mass of each solid body.
@ -433,7 +241,6 @@ We use the =linearize= function in order to estimate the dynamics from forces ap
G_ms = linearize(mdl, io, 0);
%% Input/Output definition
clear io; io_i = 1;
G_ms.InputName = {'Fx', 'Fy', 'Fz'};
G_ms.OutputName = {'gtop_x', 'gtop_y', 'gtop_z', 'gtop_rx', 'gtop_ry', 'gtop_rz', ...
'ty_x', 'ty_y', 'ty_z', 'ty_rx', 'ty_ry', 'ty_rz', ...

View File

@ -27,7 +27,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100

View File

@ -0,0 +1,81 @@
#+TITLE: Motion and Force Requirements for the Nano-Hexapod
* Soft Hexapod
As the nano-hexapod is in series with the other stages, it must apply all the force required to move the sample.
If the nano-hexapod is soft (voice coil), its actuator must apply all the force such that the sample has the wanted motion.
In some sense, it does not use the fact that the other stage are participating to the displacement of the sample.
Let's take two examples:
- Sinus Ty translation at 1Hz with an amplitude of 5mm
- Long stroke hexapod has an offset of 10mm in X and the spindle is rotating
Thus the wanted motion is a circle with a radius of 10mm
If the sample if light (30Kg) => 60rpm
If the sample if heavy (100Kg) => 1rpm
From the motion, we compute the required acceleration by derive the displacement two times.
Then from the Newton's second law: $m \vec{a} = \sum \vec{F}$ we can compute the required force.
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
** Example
The wanted motion is:
\begin{align*}
x &= d \cos(\omega t) \\
y &= d \sin(\omega t)
\end{align*}
The corresponding acceleration is thus:
\begin{align*}
\ddot{x} &= - d \omega^2 \cos(\omega t) \\
\ddot{y} &= - d \omega^2 \sin(\omega t)
\end{align*}
From the Newton's second law:
\begin{align*}
m \ddot{x} &= F_x \\
m \ddot{y} &= F_y
\end{align*}
Thus the applied forces should be:
\begin{align*}
F_x &= - m d \omega^2 \cos(\omega t) \\
F_y &= - m d \omega^2 \sin(\omega t)
\end{align*}
And the norm of the force is:
\[ |F| = \sqrt{F_x^2 + F_y^2} = m d \omega^2 \ [N] \]
For a Light sample:
#+begin_src matlab :results value replace
m = 30;
d = 10e-3;
w = 2*pi;
F = m*d*w^2;
ans = F
#+end_src
#+RESULTS:
: 11.844
For the Heavy sample:
#+begin_src matlab :results value replace
m = 80;
d = 10e-3;
w = 2*pi/60;
F = m*d*w^2
ans = F
#+end_src
#+RESULTS:
: 0.008773

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
@ -213,7 +213,8 @@ The model of the Ground is composed of:
:END:
#+begin_src matlab
arguments
args.type char {mustBeMember(args.type,{'none', 'rigid'})} = 'rigid'
args.type char {mustBeMember(args.type,{'none', 'rigid'})} = 'rigid'
args.rot_point (3,1) double {mustBeNumeric} = zeros(3,1) % Rotation point for the ground motion [m]
end
#+end_src
@ -249,6 +250,15 @@ We set the shape and density of the ground solid element.
ground.density = 2800; % [kg/m3]
#+end_src
** Rotation Point
:PROPERTIES:
:UNNUMBERED: t
:END:
#+begin_src matlab
ground.rot_point = args.rot_point;
#+end_src
** Save the Structure
:PROPERTIES:
:UNNUMBERED: t
@ -1448,8 +1458,8 @@ The =sample= structure is saved.
:END:
#+begin_src matlab
arguments
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf'})} = 'open-loop'
args.K (6,6) = ss(zeros(6, 6))
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf'})} = 'open-loop'
args.K (6,6) = ss(zeros(6, 6))
end
#+end_src
@ -1474,6 +1484,8 @@ First, we initialize the =controller= structure.
controller.type = 2;
case 'iff'
controller.type = 3;
case 'hac-dvf'
controller.type = 4;
end
#+end_src
@ -1778,7 +1790,7 @@ The =controller= structure is saved.
:END:
#+begin_src matlab
%% Save
save('mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'Rm', 'Dn', 'Dnl', 'Ts');
save('./mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'Rm', 'Dn', 'Dnl', 'Ts');
end
#+end_src
@ -1834,7 +1846,7 @@ The =controller= structure is saved.
:UNNUMBERED: t
:END:
#+begin_src matlab
load('./disturbances/mat/dist_psd.mat', 'dist_f');
load('./mat/dist_psd.mat', 'dist_f');
#+end_src
We remove the first frequency point that usually is very large.
@ -2001,7 +2013,7 @@ We define some parameters that will be used in the algorithm.
:UNNUMBERED: t
:END:
#+begin_src matlab
save('mat/nass_disturbances.mat', 'Dwx', 'Dwy', 'Dwz', 'Fty_x', 'Fty_z', 'Frz_z', 'Fd', 'Ts', 't');
save('./mat/nass_disturbances.mat', 'Dwx', 'Dwy', 'Dwz', 'Fty_x', 'Fty_z', 'Frz_z', 'Fd', 'Ts', 't');
#+end_src
* Initialize Position Errors
@ -2076,7 +2088,7 @@ First, we initialize the =pos_error= structure.
:UNNUMBERED: t
:END:
#+begin_src matlab
save('mat/pos_error.mat', 'pos_error');
save('./mat/pos_error.mat', 'pos_error');
#+end_src
* Z-Axis Geophone

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100

View File

@ -30,7 +30,7 @@
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}")
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
@ -666,13 +666,13 @@ The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
All the controllers are set to 0 (Open Loop).
#+begin_src matlab :exports none
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = tf(0);
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(0);
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(0);
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
** Identification
@ -720,7 +720,7 @@ Finally, we use the =linearize= Matlab function to extract a state space model f
Finally, we save the identified system dynamics for further analysis.
#+begin_src matlab
save('./uniaxial/mat/plants.mat', 'G');
save('./mat/uniaxial_plants.mat', 'G');
#+end_src
** Sensitivity to Disturbances
@ -793,7 +793,7 @@ We show several plots representing the sensitivity to disturbances:
** Noise Budget
We first load the measured PSD of the disturbance.
#+begin_src matlab
load('./disturbances/mat/dist_psd.mat', 'dist_f');
load('./mat/disturbances_dist_psd.mat', 'dist_f');
#+end_src
The effect of these disturbances on the distance $D$ is computed below.
@ -1080,7 +1080,7 @@ It corresponds to the plant to control.
** Control Design
#+begin_src matlab
load('./uniaxial/mat/plants.mat', 'G');
load('./mat/uniaxial_plants.mat', 'G');
#+end_src
Let's look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor.
@ -1166,13 +1166,13 @@ Let's initialize the system prior to identification.
All the controllers are set to 0.
#+begin_src matlab
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = -K_iff;
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(0);
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(0);
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
#+begin_src matlab
@ -1215,7 +1215,7 @@ All the controllers are set to 0.
#+end_src
#+begin_src matlab
save('./uniaxial/mat/plants.mat', 'G_iff', '-append');
save('./mat/uniaxial_plants.mat', 'G_iff', '-append');
#+end_src
** Sensitivity to Disturbance
@ -1506,7 +1506,7 @@ In the Relative Motion Control (RMC), a derivative feedback is applied between t
** Control Design
#+begin_src matlab
load('./uniaxial/mat/plants.mat', 'G');
load('./mat/uniaxial_plants.mat', 'G');
#+end_src
Let's look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor.
@ -1593,13 +1593,13 @@ Let's initialize the system prior to identification.
And initialize the controllers.
#+begin_src matlab
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = tf(0);
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = -K_rmc;
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(0);
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
#+begin_src matlab
@ -1642,7 +1642,7 @@ And initialize the controllers.
#+end_src
#+begin_src matlab
save('./uniaxial/mat/plants.mat', 'G_rmc', '-append');
save('./mat/uniaxial_plants.mat', 'G_rmc', '-append');
#+end_src
@ -1941,7 +1941,7 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
** Control Design
#+begin_src matlab
load('./uniaxial/mat/plants.mat', 'G');
load('./mat/uniaxial_plants.mat', 'G');
#+end_src
#+begin_src matlab :exports none
@ -2024,13 +2024,13 @@ Let's initialize the system prior to identification.
And initialize the controllers.
#+begin_src matlab
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = tf(0);
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(0);
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = -K_dvf;
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
#+begin_src matlab
@ -2073,7 +2073,7 @@ And initialize the controllers.
#+end_src
#+begin_src matlab
save('./uniaxial/mat/plants.mat', 'G_dvf', '-append');
save('./mat/uniaxial_plants.mat', 'G_dvf', '-append');
#+end_src
** Sensitivity to Disturbance
@ -2258,13 +2258,13 @@ Let's initialize the system prior to identification.
And initialize the controllers.
#+begin_src matlab
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = tf(0);
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(0);
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(0);
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
We identify the dynamics of the system.
@ -2394,13 +2394,13 @@ Let's initialize the system prior to identification.
All the controllers are set to 0.
#+begin_src matlab
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = -K_cedrat;
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(0);
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(0);
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
#+begin_src matlab
@ -2443,7 +2443,7 @@ All the controllers are set to 0.
#+end_src
#+begin_src matlab
% save('./uniaxial/mat/plants.mat', 'G_cedrat', '-append');
% save('./mat/uniaxial_plants.mat', 'G_cedrat', '-append');
#+end_src
** Sensitivity to Disturbance
@ -2578,7 +2578,7 @@ All the controllers are set to 0.
** Load the plants
#+begin_src matlab
load('./uniaxial/mat/plants.mat', 'G', 'G_iff', 'G_rmc', 'G_dvf');
load('./mat/uniaxial_plants.mat', 'G', 'G_iff', 'G_rmc', 'G_dvf');
#+end_src
** Sensitivity to Disturbance
@ -2689,7 +2689,7 @@ All the controllers are set to 0.
** Noise Budget
We first load the measured PSD of the disturbance.
#+begin_src matlab
load('./disturbances/mat/dist_psd.mat', 'dist_f');
load('./mat/disturbances_dist_psd.mat', 'dist_f');
#+end_src
The effect of these disturbances on the distance $D$ is computed for all active damping techniques.
@ -2854,13 +2854,13 @@ The nano-hexapod is an hexapod with voice coils and the sample has a mass of 50k
All the controllers are set to 0 (Open Loop).
#+begin_src matlab :exports none
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = tf(0);
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(0);
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(0);
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
** Identification
@ -2908,13 +2908,13 @@ Finally, we use the =linearize= Matlab function to extract a state space model f
Finally, we save the identified system dynamics for further analysis.
#+begin_src matlab
save('./uniaxial/mat/plants.mat', 'G_vc', '-append');
save('./mat/uniaxial_plants.mat', 'G_vc', '-append');
#+end_src
** Sensitivity to Disturbances
We load the dynamics when using a piezo-electric nano hexapod to compare the results.
#+begin_src matlab
load('./uniaxial/mat/plants.mat', 'G');
load('./mat/uniaxial_plants.mat', 'G');
#+end_src
We show several plots representing the sensitivity to disturbances:
@ -2990,7 +2990,7 @@ We show several plots representing the sensitivity to disturbances:
** Noise Budget
We first load the measured PSD of the disturbance.
#+begin_src matlab
load('./disturbances/mat/dist_psd.mat', 'dist_f');
load('./mat/disturbances_dist_psd.mat', 'dist_f');
#+end_src
The effect of these disturbances on the distance $D$ is computed below.
@ -3125,13 +3125,13 @@ Let's initialize the system prior to identification.
All the controllers are set to 0.
#+begin_src matlab
K = tf(0);
save('./mat/controllers.mat', 'K', '-append');
save('./mat/controllers_uniaxial.mat', 'K', '-append');
K_iff = -K_iff;
save('./mat/controllers.mat', 'K_iff', '-append');
save('./mat/controllers_uniaxial.mat', 'K_iff', '-append');
K_rmc = tf(0);
save('./mat/controllers.mat', 'K_rmc', '-append');
save('./mat/controllers_uniaxial.mat', 'K_rmc', '-append');
K_dvf = tf(0);
save('./mat/controllers.mat', 'K_dvf', '-append');
save('./mat/controllers_uniaxial.mat', 'K_dvf', '-append');
#+end_src
#+begin_src matlab

View File

@ -2,26 +2,5 @@
#+AUTHOR: Dehaeze Thomas
#+EMAIL: dehaeze.thomas@gmail.com
#+OPTIONS: num:nil toc:nil todo:nil
#+EXPORT_EXCLUDE_TAGS: exclude noexport
The goal of this project is to study the Nano-Active-Stabilization-System concept using Matlab/Simscape.
* Org Publish Configuration :noexport:
#+begin_src emacs-lisp :results none
(setq org-publish-project-alist
'(("nass-simscape"
:base-directory "~/Cloud/thesis/matlab/nass-simscape/org/"
:base-extension "org"
:publishing-directory "~/Cloud/thesis/matlab/nass-simscape/docs/"
:author "Dehaeze Thomas"
:email "dehaeze.thomas@gmail.com/"
:recursive nil
:publishing-function org-html-publish-to-html
:auto-preamble t
:auto-sitemap nil
:html-link-up "index.html"
:html-link-home "index.html"
:with-todo-keywords nil
:html-wrap-src-lines nil
:table-of-contents nil)))
#+end_src

View File

@ -1,8 +1,8 @@
function [] = initializeController(args)
arguments
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf'})} = 'open-loop'
args.K (6,6) = ss(zeros(6, 6))
args.type char {mustBeMember(args.type,{'open-loop', 'iff', 'dvf', 'hac-dvf'})} = 'open-loop'
args.K (6,6) = ss(zeros(6, 6))
end
controller = struct();
@ -14,6 +14,8 @@ switch args.type
controller.type = 2;
case 'iff'
controller.type = 3;
case 'hac-dvf'
controller.type = 4;
end
controller.K = args.K;

View File

@ -23,7 +23,7 @@ arguments
args.Frz_z logical {mustBeNumericOrLogical} = true
end
load('./disturbances/mat/dist_psd.mat', 'dist_f');
load('./mat/dist_psd.mat', 'dist_f');
dist_f.f = dist_f.f(2:end);
dist_f.psd_gm = dist_f.psd_gm(2:end);

View File

@ -1,7 +1,8 @@
function [ground] = initializeGround(args)
arguments
args.type char {mustBeMember(args.type,{'none', 'rigid'})} = 'rigid'
args.type char {mustBeMember(args.type,{'none', 'rigid'})} = 'rigid'
args.rot_point (3,1) double {mustBeNumeric} = zeros(3,1) % Rotation point for the ground motion [m]
end
ground = struct();
@ -16,4 +17,6 @@ end
ground.shape = [2, 2, 0.5]; % [m]
ground.density = 2800; % [kg/m3]
ground.rot_point = args.rot_point;
save('./mat/stages.mat', 'ground', '-append');