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