Work on Control (HAC-LAC) + Models
@ -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’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’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’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’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’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’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>
|
||||
|
@ -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’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’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’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’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’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’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>
|
||||
|
@ -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>
|
||||
|
1251
docs/control_requirements.html
Normal 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>
|
||||
|
@ -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>
|
||||
|
BIN
docs/figs/comp_iff_dvf_simplified.pdf
Normal file
BIN
docs/figs/comp_iff_dvf_simplified.png
Normal file
After Width: | Height: | Size: 215 KiB |
BIN
docs/figs/hac_lac_control_schematic.pdf
Normal file
BIN
docs/figs/hac_lac_control_schematic.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
docs/figs/nano_station_control_2dof_x.pdf
Normal file
BIN
docs/figs/nano_station_control_2dof_x.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
docs/figs/nano_station_control_Fm.pdf
Normal file
BIN
docs/figs/nano_station_control_Fm.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
docs/figs/nano_station_control_d.pdf
Normal file
BIN
docs/figs/nano_station_control_d.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
docs/figs/nano_station_control_x.pdf
Normal file
BIN
docs/figs/nano_station_control_x.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
docs/figs/nano_station_ground_motion.pdf
Normal file
BIN
docs/figs/nano_station_ground_motion.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
docs/figs/nano_station_inputs_outputs.pdf
Normal file
BIN
docs/figs/nano_station_inputs_outputs.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
docs/figs/nano_station_inputs_outputs_ground_motion.pdf
Normal file
BIN
docs/figs/nano_station_inputs_outputs_ground_motion.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
docs/figs/nass_simple_model.pdf
Normal file
BIN
docs/figs/nass_simple_model.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
docs/figs/simple_comp_vc_pz.pdf
Normal file
BIN
docs/figs/simple_comp_vc_pz.png
Normal file
After Width: | Height: | Size: 190 KiB |
BIN
docs/figs/simple_hac_lac_results.pdf
Normal file
BIN
docs/figs/simple_hac_lac_results.png
Normal file
After Width: | Height: | Size: 197 KiB |
BIN
docs/figs/simple_hac_lac_results_soft.pdf
Normal file
BIN
docs/figs/simple_hac_lac_results_soft.png
Normal file
After Width: | Height: | Size: 186 KiB |
BIN
docs/figs/simple_loop_gain_pz.pdf
Normal file
BIN
docs/figs/simple_loop_gain_pz.png
Normal file
After Width: | Height: | Size: 99 KiB |
@ -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">></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">></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"><</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 => 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">></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"><</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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
368
docs/motion_force_requirements.html
Normal 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’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) => 60rpm
|
||||
If the sample if heavy (100Kg) => 1rpm</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</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’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>
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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’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’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’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’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’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’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’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>
|
||||
|
BIN
mat/conf_log.mat
BIN
mat/controllers_uniaxial.mat
Normal file
BIN
mat/inputs.mat
BIN
mat/motion_error_ol.mat
Normal file
BIN
mat/stages.mat
BIN
mat/tomo_exp_hac_lac.mat
Normal 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
|
||||
|
@ -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
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
472
org/hac_lac.org
@ -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);
|
||||
|
@ -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', ...
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
81
org/motion_force_requirements.org
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
21
readme.org
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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');
|
||||
|