2971 lines
		
	
	
		
			132 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			2971 lines
		
	
	
		
			132 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <?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-23 lun. 10:05 -->
 | |
| <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 | |
| <meta name="viewport" content="width=device-width, initial-scale=1" />
 | |
| <title>Subsystems used for the Simscape Models</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>
 | |
| <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
 | |
| <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
 | |
| <link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
 | |
| <script type="text/javascript" src="./js/jquery.min.js"></script>
 | |
| <script type="text/javascript" src="./js/bootstrap.min.js"></script>
 | |
| <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.
 | |
| */
 | |
| <!--/*--><![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;
 | |
|  }
 | |
| /*]]>*///-->
 | |
| </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">Subsystems used for the Simscape Models</h1>
 | |
| <div id="table-of-contents">
 | |
| <h2>Table of Contents</h2>
 | |
| <div id="text-table-of-contents">
 | |
| <ul>
 | |
| <li><a href="#org6171274">1. Simscape Configuration</a>
 | |
| <ul>
 | |
| <li><a href="#orge5d7517">Function description</a></li>
 | |
| <li><a href="#orgbbce420">Optional Parameters</a></li>
 | |
| <li><a href="#orge30961f">Structure initialization</a></li>
 | |
| <li><a href="#org849698f">Add Type</a></li>
 | |
| <li><a href="#org8a169f6">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#orgdda6840">2. Logging Configuration</a>
 | |
| <ul>
 | |
| <li><a href="#org2a6031f">Function description</a></li>
 | |
| <li><a href="#org51d3c44">Optional Parameters</a></li>
 | |
| <li><a href="#org4bdba10">Structure initialization</a></li>
 | |
| <li><a href="#orgfc26e17">Add Type</a></li>
 | |
| <li><a href="#org60d91f1">Sampling Time</a></li>
 | |
| <li><a href="#orga400581">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#org1bf1870">3. Ground</a>
 | |
| <ul>
 | |
| <li><a href="#orga0ab61a">Simscape Model</a></li>
 | |
| <li><a href="#orgf54e2a2">Function description</a></li>
 | |
| <li><a href="#org8d26843">Optional Parameters</a></li>
 | |
| <li><a href="#org83711c6">Structure initialization</a></li>
 | |
| <li><a href="#org0fc81f4">Add Type</a></li>
 | |
| <li><a href="#org4c31ca5">Ground Solid properties</a></li>
 | |
| <li><a href="#org542691f">Rotation Point</a></li>
 | |
| <li><a href="#org6af5d4d">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#orga045749">4. Granite</a>
 | |
| <ul>
 | |
| <li><a href="#org27e2d19">Simscape Model</a></li>
 | |
| <li><a href="#orgb6f7f8d">Function description</a></li>
 | |
| <li><a href="#orgc5ea446">Optional Parameters</a></li>
 | |
| <li><a href="#orge98cfc6">Structure initialization</a></li>
 | |
| <li><a href="#org413c06d">Add Granite Type</a></li>
 | |
| <li><a href="#org025e0d2">Material and Geometry</a></li>
 | |
| <li><a href="#orgde9148a">Stiffness and Damping properties</a></li>
 | |
| <li><a href="#orgbb5fa4f">Equilibrium position of the each joint.</a></li>
 | |
| <li><a href="#org132e662">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#org8ef07d2">5. Translation Stage</a>
 | |
| <ul>
 | |
| <li><a href="#orgc44233a">Simscape Model</a></li>
 | |
| <li><a href="#orgc11be3e">Function description</a></li>
 | |
| <li><a href="#org03e5fb0">Optional Parameters</a></li>
 | |
| <li><a href="#orge49bbb5">Structure initialization</a></li>
 | |
| <li><a href="#org715e876">Add Translation Stage Type</a></li>
 | |
| <li><a href="#org93037a1">Material and Geometry</a></li>
 | |
| <li><a href="#org5f385f3">Stiffness and Damping properties</a></li>
 | |
| <li><a href="#org5498636">Equilibrium position of the each joint.</a></li>
 | |
| <li><a href="#org1d504fe">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#org024966d">6. Tilt Stage</a>
 | |
| <ul>
 | |
| <li><a href="#org0279f14">Simscape Model</a></li>
 | |
| <li><a href="#org6ddc02b">Function description</a></li>
 | |
| <li><a href="#org3a04922">Optional Parameters</a></li>
 | |
| <li><a href="#org89600b2">Structure initialization</a></li>
 | |
| <li><a href="#orgea3a7ba">Add Tilt Type</a></li>
 | |
| <li><a href="#orgd2ee8ee">Material and Geometry</a></li>
 | |
| <li><a href="#orgb9bb658">Stiffness and Damping properties</a></li>
 | |
| <li><a href="#orgd7fbf32">Equilibrium position of the each joint.</a></li>
 | |
| <li><a href="#org518e791">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#org64f7285">7. Spindle</a>
 | |
| <ul>
 | |
| <li><a href="#org47fb36b">Simscape Model</a></li>
 | |
| <li><a href="#org66acb6d">Function description</a></li>
 | |
| <li><a href="#org0802bfd">Optional Parameters</a></li>
 | |
| <li><a href="#org0e9655c">Structure initialization</a></li>
 | |
| <li><a href="#orge5b17ec">Add Spindle Type</a></li>
 | |
| <li><a href="#orgdeaf67c">Material and Geometry</a></li>
 | |
| <li><a href="#orgd9cad9a">Stiffness and Damping properties</a></li>
 | |
| <li><a href="#org7d603ad">Equilibrium position of the each joint.</a></li>
 | |
| <li><a href="#orgce19ee2">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#orgaa8ff28">8. Micro Hexapod</a>
 | |
| <ul>
 | |
| <li><a href="#org84a25c2">Simscape Model</a></li>
 | |
| <li><a href="#org08a0608">Function description</a></li>
 | |
| <li><a href="#org05f3272">Optional Parameters</a></li>
 | |
| <li><a href="#org1c1efec">Function content</a></li>
 | |
| <li><a href="#org025db9e">Add Type</a></li>
 | |
| <li><a href="#org7bca339">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#orga55d418">9. Center of gravity compensation</a>
 | |
| <ul>
 | |
| <li><a href="#org3e5ad8a">Simscape Model</a></li>
 | |
| <li><a href="#orge2f6d1f">Function description</a></li>
 | |
| <li><a href="#orgafcfe66">Optional Parameters</a></li>
 | |
| <li><a href="#orgd0d9c97">Structure initialization</a></li>
 | |
| <li><a href="#org76fb5d1">Add Type</a></li>
 | |
| <li><a href="#org06250de">Material and Geometry</a></li>
 | |
| <li><a href="#org174fb7a">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#org7586ab7">10. Mirror</a>
 | |
| <ul>
 | |
| <li><a href="#org666250e">Simscape Model</a></li>
 | |
| <li><a href="#orge17879c">Function description</a></li>
 | |
| <li><a href="#orgd5e1e0c">Optional Parameters</a></li>
 | |
| <li><a href="#orgba28d4b">Structure initialization</a></li>
 | |
| <li><a href="#orgff14824">Add Mirror Type</a></li>
 | |
| <li><a href="#orgd032923">Material and Geometry</a></li>
 | |
| <li><a href="#orgd1583a2">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#org2d846ae">11. Nano Hexapod</a>
 | |
| <ul>
 | |
| <li><a href="#orgfe0a98a">Simscape Model</a></li>
 | |
| <li><a href="#orgaf3a7ae">Function description</a></li>
 | |
| <li><a href="#orged14bc7">Optional Parameters</a></li>
 | |
| <li><a href="#org1c650c8">Function content</a></li>
 | |
| <li><a href="#orgd741b2d">Add Type</a></li>
 | |
| <li><a href="#orge3a4572">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#org3d615a1">12. Sample</a>
 | |
| <ul>
 | |
| <li><a href="#orgc616e98">Simscape Model</a></li>
 | |
| <li><a href="#org15732a0">Function description</a></li>
 | |
| <li><a href="#org5ab13d2">Optional Parameters</a></li>
 | |
| <li><a href="#org24520d9">Structure initialization</a></li>
 | |
| <li><a href="#org2bb1d24">Add Sample Type</a></li>
 | |
| <li><a href="#org35a416f">Material and Geometry</a></li>
 | |
| <li><a href="#org210c84e">Stiffness and Damping properties</a></li>
 | |
| <li><a href="#org2848fdf">Equilibrium position of the each joint.</a></li>
 | |
| <li><a href="#org2989213">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#orge9cbdc9">13. Initialize Controller</a>
 | |
| <ul>
 | |
| <li><a href="#org3327219">Function Declaration and Documentation</a></li>
 | |
| <li><a href="#orgcb9fce7">Optional Parameters</a></li>
 | |
| <li><a href="#org8cf9609">Structure initialization</a></li>
 | |
| <li><a href="#org4207f98">Controller Type</a></li>
 | |
| <li><a href="#org9d366f8">Save the Structure</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#orgae5cb57">14. Generate Reference Signals</a>
 | |
| <ul>
 | |
| <li><a href="#org6c43a9a">Function Declaration and Documentation</a></li>
 | |
| <li><a href="#orgecb47c6">Optional Parameters</a></li>
 | |
| <li><a href="#orge94c0c2">Initialize Parameters</a></li>
 | |
| <li><a href="#orgd3ff237">Translation Stage</a></li>
 | |
| <li><a href="#org46b0509">Tilt Stage</a></li>
 | |
| <li><a href="#orgb98f9a6">Spindle</a></li>
 | |
| <li><a href="#org49a14bb">Micro Hexapod</a></li>
 | |
| <li><a href="#org04d73dc">Axis Compensation</a></li>
 | |
| <li><a href="#org4dc3820">Nano Hexapod</a></li>
 | |
| <li><a href="#org5446c1f">Save</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#org544c9dd">15. Initialize Disturbances</a>
 | |
| <ul>
 | |
| <li><a href="#orga2d8012">Function Declaration and Documentation</a></li>
 | |
| <li><a href="#org382c404">Optional Parameters</a></li>
 | |
| <li><a href="#orgf744aeb">Load Data</a></li>
 | |
| <li><a href="#org6c7d666">Parameters</a></li>
 | |
| <li><a href="#orgb2108c4">Ground Motion</a></li>
 | |
| <li><a href="#orgb70c65e">Translation Stage - X direction</a></li>
 | |
| <li><a href="#org070255a">Translation Stage - Z direction</a></li>
 | |
| <li><a href="#orgfd5f32b">Spindle - Z direction</a></li>
 | |
| <li><a href="#orgba4d479">Direct Forces</a></li>
 | |
| <li><a href="#orgf6d2198">Set initial value to zero</a></li>
 | |
| <li><a href="#orgbc79b0f">Save</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#orgefb8a5e">16. Initialize Position Errors</a>
 | |
| <ul>
 | |
| <li><a href="#orgb650d4c">Function Declaration and Documentation</a></li>
 | |
| <li><a href="#org902a1e1">Optional Parameters</a></li>
 | |
| <li><a href="#org44bc280">Structure initialization</a></li>
 | |
| <li><a href="#orgc890f7d">Type</a></li>
 | |
| <li><a href="#org7d50228">Position Errors</a></li>
 | |
| <li><a href="#orgd21e485">Save</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| <li><a href="#orgc87e890">17. Z-Axis Geophone</a></li>
 | |
| <li><a href="#orgcbddbd1">18. Z-Axis Accelerometer</a></li>
 | |
| </ul>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| The full Simscape Model is represented in Figure <a href="#org742ece0">1</a>.
 | |
| </p>
 | |
| 
 | |
| 
 | |
| <div id="org742ece0" class="figure">
 | |
| <p><img src="figs/images/simscape_picture.png" alt="simscape_picture.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 1: </span>Screenshot of the Multi-Body Model representation</p>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| This model is divided into multiple subsystems that are independent.
 | |
| These subsystems are saved in separate files and imported in the main file using a block balled “subsystem reference”.
 | |
| </p>
 | |
| 
 | |
| <p>
 | |
| Each stage is configured (geometry, mass properties, dynamic properties …) using one function.
 | |
| </p>
 | |
| 
 | |
| <p>
 | |
| These functions are defined below.
 | |
| </p>
 | |
| 
 | |
| <div id="outline-container-org6171274" class="outline-2">
 | |
| <h2 id="org6171274"><span class="section-number-2">1</span> Simscape Configuration</h2>
 | |
| <div class="outline-text-2" id="text-1">
 | |
| <p>
 | |
| <a id="orgb590dcf"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orge5d7517" class="outline-3">
 | |
| <h3 id="orge5d7517">Function description</h3>
 | |
| <div class="outline-text-3" id="text-orge5d7517">
 | |
| <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">initializeSimscapeConfiguration</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgbbce420" class="outline-3">
 | |
| <h3 id="orgbbce420">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-orgbbce420">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.gravity logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orge30961f" class="outline-3">
 | |
| <h3 id="orge30961f">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-orge30961f">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">conf_simscape = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org849698f" class="outline-3">
 | |
| <h3 id="org849698f">Add Type</h3>
 | |
| <div class="outline-text-3" id="text-org849698f">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.gravity
 | |
|   conf_simscape.type = 1;
 | |
| <span class="org-keyword">else</span>
 | |
|   conf_simscape.type = 2;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org8a169f6" class="outline-3">
 | |
| <h3 id="org8a169f6">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org8a169f6">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/conf_simscape.mat'</span>, <span class="org-string">'conf_simscape'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgdda6840" class="outline-2">
 | |
| <h2 id="orgdda6840"><span class="section-number-2">2</span> Logging Configuration</h2>
 | |
| <div class="outline-text-2" id="text-2">
 | |
| <p>
 | |
| <a id="org1f9c6ac"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org2a6031f" class="outline-3">
 | |
| <h3 id="org2a6031f">Function description</h3>
 | |
| <div class="outline-text-3" id="text-org2a6031f">
 | |
| <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">initializeLoggingConfiguration</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org51d3c44" class="outline-3">
 | |
| <h3 id="org51d3c44">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org51d3c44">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.log      char   {mustBeMember(args.log,{<span class="org-string">'none'</span>, <span class="org-string">'all'</span>, <span class="org-string">'forces'</span>})} = <span class="org-string">'none'</span>
 | |
|   args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e<span class="org-type">-</span>3
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org4bdba10" class="outline-3">
 | |
| <h3 id="org4bdba10">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-org4bdba10">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">conf_log = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgfc26e17" class="outline-3">
 | |
| <h3 id="orgfc26e17">Add Type</h3>
 | |
| <div class="outline-text-3" id="text-orgfc26e17">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.log</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     conf_log.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'all'</span>
 | |
|     conf_log.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'forces'</span>
 | |
|     conf_log.type = 2;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org60d91f1" class="outline-3">
 | |
| <h3 id="org60d91f1">Sampling Time</h3>
 | |
| <div class="outline-text-3" id="text-org60d91f1">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">conf_log.Ts = args.Ts;
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orga400581" class="outline-3">
 | |
| <h3 id="orga400581">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-orga400581">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/conf_log.mat'</span>, <span class="org-string">'conf_log'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org1bf1870" class="outline-2">
 | |
| <h2 id="org1bf1870"><span class="section-number-2">3</span> Ground</h2>
 | |
| <div class="outline-text-2" id="text-3">
 | |
| <p>
 | |
| <a id="orgbe1f388"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orga0ab61a" class="outline-3">
 | |
| <h3 id="orga0ab61a">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-orga0ab61a">
 | |
| <p>
 | |
| The model of the Ground is composed of:
 | |
| </p>
 | |
| <ul class="org-ul">
 | |
| <li>A <b>Cartesian</b> joint that is used to simulation the ground motion</li>
 | |
| <li>A solid that represents the ground on which the granite is located</li>
 | |
| </ul>
 | |
| 
 | |
| 
 | |
| <div id="org31eeec1" class="figure">
 | |
| <p><img src="figs/images/simscape_model_ground.png" alt="simscape_model_ground.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 2: </span>Simscape model for the Ground</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="org342019d" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_ground.png" alt="simscape_picture_ground.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 3: </span>Simscape picture for the Ground</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgf54e2a2" class="outline-3">
 | |
| <h3 id="orgf54e2a2">Function description</h3>
 | |
| <div class="outline-text-3" id="text-orgf54e2a2">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[ground]</span> = <span class="org-function-name">initializeGround</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org8d26843" class="outline-3">
 | |
| <h3 id="org8d26843">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org8d26843">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type char {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>})} = <span class="org-string">'rigid'</span>
 | |
|   args.rot_point (3,1) double {mustBeNumeric} = zeros(3,1) <span class="org-comment">% Rotation point for the ground motion [m]</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org83711c6" class="outline-3">
 | |
| <h3 id="org83711c6">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-org83711c6">
 | |
| <p>
 | |
| First, we initialize the <code>granite</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ground = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org0fc81f4" class="outline-3">
 | |
| <h3 id="org0fc81f4">Add Type</h3>
 | |
| <div class="outline-text-3" id="text-org0fc81f4">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     ground.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     ground.type = 1;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org4c31ca5" class="outline-3">
 | |
| <h3 id="org4c31ca5">Ground Solid properties</h3>
 | |
| <div class="outline-text-3" id="text-org4c31ca5">
 | |
| <p>
 | |
| We set the shape and density of the ground solid element.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ground.shape   = [2, 2, 0.5]; <span class="org-comment">% [m]</span>
 | |
| ground.density = 2800;        <span class="org-comment">% [kg/m3]</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org542691f" class="outline-3">
 | |
| <h3 id="org542691f">Rotation Point</h3>
 | |
| <div class="outline-text-3" id="text-org542691f">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ground.rot_point = args.rot_point;
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org6af5d4d" class="outline-3">
 | |
| <h3 id="org6af5d4d">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org6af5d4d">
 | |
| <p>
 | |
| The <code>ground</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'ground'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orga045749" class="outline-2">
 | |
| <h2 id="orga045749"><span class="section-number-2">4</span> Granite</h2>
 | |
| <div class="outline-text-2" id="text-4">
 | |
| <p>
 | |
| <a id="org82dc444"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org27e2d19" class="outline-3">
 | |
| <h3 id="org27e2d19">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-org27e2d19">
 | |
| <p>
 | |
| The Simscape model of the granite is composed of:
 | |
| </p>
 | |
| <ul class="org-ul">
 | |
| <li>A cartesian joint such that the granite can vibrations along x, y and z axis</li>
 | |
| <li>A solid</li>
 | |
| </ul>
 | |
| 
 | |
| <p>
 | |
| The output <code>sample_pos</code> corresponds to the impact point of the X-ray.
 | |
| </p>
 | |
| 
 | |
| 
 | |
| <div id="org3072cb3" class="figure">
 | |
| <p><img src="figs/images/simscape_model_granite.png" alt="simscape_model_granite.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 4: </span>Simscape model for the Granite</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="org089e7b6" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_granite.png" alt="simscape_picture_granite.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 5: </span>Simscape picture for the Granite</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgb6f7f8d" class="outline-3">
 | |
| <h3 id="orgb6f7f8d">Function description</h3>
 | |
| <div class="outline-text-3" id="text-orgb6f7f8d">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[granite]</span> = <span class="org-function-name">initializeGranite</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgc5ea446" class="outline-3">
 | |
| <h3 id="orgc5ea446">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-orgc5ea446">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type          char    {mustBeMember(args.type,{<span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'none'</span>, <span class="org-string">'modal-analysis'</span>, <span class="org-string">'init'</span>})} = <span class="org-string">'flexible'</span>
 | |
|   args.Foffset       logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
 | |
|   args.density (1,1) double {mustBeNumeric, mustBeNonnegative} = 2800 <span class="org-comment">% Density [kg/m3]</span>
 | |
|   args.x0 (1,1) double {mustBeNumeric} = 0 <span class="org-comment">% Rest position of the Joint in the X direction [m]</span>
 | |
|   args.y0 (1,1) double {mustBeNumeric} = 0 <span class="org-comment">% Rest position of the Joint in the Y direction [m]</span>
 | |
|   args.z0 (1,1) double {mustBeNumeric} = 0 <span class="org-comment">% Rest position of the Joint in the Z direction [m]</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="outline-container-orge98cfc6" class="outline-3">
 | |
| <h3 id="orge98cfc6">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-orge98cfc6">
 | |
| <p>
 | |
| First, we initialize the <code>granite</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">granite = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org413c06d" class="outline-3">
 | |
| <h3 id="org413c06d">Add Granite Type</h3>
 | |
| <div class="outline-text-3" id="text-org413c06d">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     granite.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     granite.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
 | |
|     granite.type = 2;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'modal-analysis'</span>
 | |
|     granite.type = 3;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'init'</span>
 | |
|     granite.type = 4;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org025e0d2" class="outline-3">
 | |
| <h3 id="org025e0d2">Material and Geometry</h3>
 | |
| <div class="outline-text-3" id="text-org025e0d2">
 | |
| <p>
 | |
| Properties of the Material and link to the geometry of the granite.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">granite.density = args.density; <span class="org-comment">% [kg/m3]</span>
 | |
| granite.STEP    = <span class="org-string">'./STEPS/granite/granite.STEP'</span>;
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| Z-offset for the initial position of the sample with respect to the granite top surface.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">granite.sample_pos = 0.8; <span class="org-comment">% [m]</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgde9148a" class="outline-3">
 | |
| <h3 id="orgde9148a">Stiffness and Damping properties</h3>
 | |
| <div class="outline-text-3" id="text-orgde9148a">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">granite.K = [4e9; 3e8; 8e8]; <span class="org-comment">% [N/m]</span>
 | |
| granite.C = [4.0e5; 1.1e5; 9.0e5]; <span class="org-comment">% [N/(m/s)]</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgbb5fa4f" class="outline-3">
 | |
| <h3 id="orgbb5fa4f">Equilibrium position of the each joint.</h3>
 | |
| <div class="outline-text-3" id="text-orgbb5fa4f">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Foffset <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'none'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'rigid'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'init'</span>)
 | |
|   load(<span class="org-string">'mat/Foffset.mat'</span>, <span class="org-string">'Fgm'</span>);
 | |
|   granite.Deq = <span class="org-type">-</span>Fgm<span class="org-type">'./</span>granite.K;
 | |
| <span class="org-keyword">else</span>
 | |
|   granite.Deq = zeros(6,1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org132e662" class="outline-3">
 | |
| <h3 id="org132e662">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org132e662">
 | |
| <p>
 | |
| The <code>granite</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'granite'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org8ef07d2" class="outline-2">
 | |
| <h2 id="org8ef07d2"><span class="section-number-2">5</span> Translation Stage</h2>
 | |
| <div class="outline-text-2" id="text-5">
 | |
| <p>
 | |
| <a id="orga6fcdbd"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgc44233a" class="outline-3">
 | |
| <h3 id="orgc44233a">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-orgc44233a">
 | |
| <p>
 | |
| The Simscape model of the Translation stage consist of:
 | |
| </p>
 | |
| <ul class="org-ul">
 | |
| <li>One rigid body for the fixed part of the translation stage</li>
 | |
| <li>One rigid body for the moving part of the translation stage</li>
 | |
| <li>Four 6-DOF Joints that only have some rigidity in the X and Z directions.
 | |
| The rigidity in rotation comes from the fact that we use multiple joints that are located at different points</li>
 | |
| <li>One 6-DOF joint that represent the Actuator.
 | |
| It is used to impose the motion in the Y direction</li>
 | |
| <li>One 6-DOF joint to inject force disturbance in the X and Z directions</li>
 | |
| </ul>
 | |
| 
 | |
| 
 | |
| <div id="orgb5e657d" class="figure">
 | |
| <p><img src="figs/images/simscape_model_ty.png" alt="simscape_model_ty.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 6: </span>Simscape model for the Translation Stage</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="org55b7d60" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_ty.png" alt="simscape_picture_ty.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 7: </span>Simscape picture for the Translation Stage</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgc11be3e" class="outline-3">
 | |
| <h3 id="orgc11be3e">Function description</h3>
 | |
| <div class="outline-text-3" id="text-orgc11be3e">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[ty]</span> = <span class="org-function-name">initializeTy</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org03e5fb0" class="outline-3">
 | |
| <h3 id="org03e5fb0">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org03e5fb0">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type      char   {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'modal-analysis'</span>, <span class="org-string">'init'</span>})} = <span class="org-string">'flexible'</span>
 | |
|   args.Foffset logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orge49bbb5" class="outline-3">
 | |
| <h3 id="orge49bbb5">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-orge49bbb5">
 | |
| <p>
 | |
| First, we initialize the <code>ty</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ty = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org715e876" class="outline-3">
 | |
| <h3 id="org715e876">Add Translation Stage Type</h3>
 | |
| <div class="outline-text-3" id="text-org715e876">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     ty.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     ty.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
 | |
|     ty.type = 2;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'modal-analysis'</span>
 | |
|     ty.type = 3;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'init'</span>
 | |
|     ty.type = 4;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org93037a1" class="outline-3">
 | |
| <h3 id="org93037a1">Material and Geometry</h3>
 | |
| <div class="outline-text-3" id="text-org93037a1">
 | |
| <p>
 | |
| Define the density of the materials as well as the geometry (STEP files).
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-comment">% Ty Granite frame</span>
 | |
| ty.granite_frame.density = 7800; <span class="org-comment">% [kg/m3] => 43kg</span>
 | |
| ty.granite_frame.STEP    = <span class="org-string">'./STEPS/Ty/Ty_Granite_Frame.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Guide Translation Ty</span>
 | |
| ty.guide.density         = 7800; <span class="org-comment">% [kg/m3] => 76kg</span>
 | |
| ty.guide.STEP            = <span class="org-string">'./STEPS/ty/Ty_Guide.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ty - Guide_Translation12</span>
 | |
| ty.guide12.density       = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| ty.guide12.STEP          = <span class="org-string">'./STEPS/Ty/Ty_Guide_12.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ty - Guide_Translation11</span>
 | |
| ty.guide11.density       = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| ty.guide11.STEP          = <span class="org-string">'./STEPS/ty/Ty_Guide_11.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ty - Guide_Translation22</span>
 | |
| ty.guide22.density       = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| ty.guide22.STEP          = <span class="org-string">'./STEPS/ty/Ty_Guide_22.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ty - Guide_Translation21</span>
 | |
| ty.guide21.density       = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| ty.guide21.STEP          = <span class="org-string">'./STEPS/Ty/Ty_Guide_21.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ty - Plateau translation</span>
 | |
| ty.frame.density         = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| ty.frame.STEP            = <span class="org-string">'./STEPS/ty/Ty_Stage.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ty Stator Part</span>
 | |
| ty.stator.density        = 5400; <span class="org-comment">% [kg/m3]</span>
 | |
| ty.stator.STEP           = <span class="org-string">'./STEPS/ty/Ty_Motor_Stator.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ty Rotor Part</span>
 | |
| ty.rotor.density         = 5400; <span class="org-comment">% [kg/m3]</span>
 | |
| ty.rotor.STEP            = <span class="org-string">'./STEPS/ty/Ty_Motor_Rotor.STEP'</span>;
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org5f385f3" class="outline-3">
 | |
| <h3 id="org5f385f3">Stiffness and Damping properties</h3>
 | |
| <div class="outline-text-3" id="text-org5f385f3">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ty.K = [2e8; 1e8; 2e8; 6e7; 9e7; 6e7]; <span class="org-comment">% [N/m, N*m/rad]</span>
 | |
| ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 2e4]; <span class="org-comment">% [N/(m/s), N*m/(rad/s)]</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org5498636" class="outline-3">
 | |
| <h3 id="org5498636">Equilibrium position of the each joint.</h3>
 | |
| <div class="outline-text-3" id="text-org5498636">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Foffset <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'none'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'rigid'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'init'</span>)
 | |
|   load(<span class="org-string">'mat/Foffset.mat'</span>, <span class="org-string">'Ftym'</span>);
 | |
|   ty.Deq = <span class="org-type">-</span>Ftym<span class="org-type">'./</span>ty.K;
 | |
| <span class="org-keyword">else</span>
 | |
|   ty.Deq = zeros(6,1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org1d504fe" class="outline-3">
 | |
| <h3 id="org1d504fe">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org1d504fe">
 | |
| <p>
 | |
| The <code>ty</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'ty'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org024966d" class="outline-2">
 | |
| <h2 id="org024966d"><span class="section-number-2">6</span> Tilt Stage</h2>
 | |
| <div class="outline-text-2" id="text-6">
 | |
| <p>
 | |
| <a id="orga630083"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org0279f14" class="outline-3">
 | |
| <h3 id="org0279f14">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-org0279f14">
 | |
| <p>
 | |
| The Simscape model of the Tilt stage is composed of:
 | |
| </p>
 | |
| <ul class="org-ul">
 | |
| <li>Two solid bodies for the two part of the stage</li>
 | |
| <li><b>Four</b> 6-DOF joints to model the flexibility of the stage.
 | |
| These joints are virtually located along the rotation axis and are connecting the two solid bodies.
 | |
| These joints have some translation stiffness in the u-v-w directions aligned with the joint.
 | |
| The stiffness in rotation between the two solids is due to the fact that the 4 joints are connecting the two solids are different locations</li>
 | |
| <li>A Bushing Joint used for the Actuator.
 | |
| The Ry motion is imposed by the input.</li>
 | |
| </ul>
 | |
| 
 | |
| 
 | |
| <div id="orgee25bbf" class="figure">
 | |
| <p><img src="figs/images/simscape_model_ry.png" alt="simscape_model_ry.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 8: </span>Simscape model for the Tilt Stage</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="orgcb39e81" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_ry.png" alt="simscape_picture_ry.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 9: </span>Simscape picture for the Tilt Stage</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org6ddc02b" class="outline-3">
 | |
| <h3 id="org6ddc02b">Function description</h3>
 | |
| <div class="outline-text-3" id="text-org6ddc02b">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[ry]</span> = <span class="org-function-name">initializeRy</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org3a04922" class="outline-3">
 | |
| <h3 id="org3a04922">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org3a04922">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type          char    {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'modal-analysis'</span>, <span class="org-string">'init'</span>})} = <span class="org-string">'flexible'</span>
 | |
|   args.Foffset       logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
 | |
|   args.Ry_init (1,1) double  {mustBeNumeric} = 0
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org89600b2" class="outline-3">
 | |
| <h3 id="org89600b2">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-org89600b2">
 | |
| <p>
 | |
| First, we initialize the <code>ry</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ry = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="outline-container-orgea3a7ba" class="outline-3">
 | |
| <h3 id="orgea3a7ba">Add Tilt Type</h3>
 | |
| <div class="outline-text-3" id="text-orgea3a7ba">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     ry.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     ry.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
 | |
|     ry.type = 2;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'modal-analysis'</span>
 | |
|     ry.type = 3;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'init'</span>
 | |
|     ry.type = 4;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd2ee8ee" class="outline-3">
 | |
| <h3 id="orgd2ee8ee">Material and Geometry</h3>
 | |
| <div class="outline-text-3" id="text-orgd2ee8ee">
 | |
| <p>
 | |
| Properties of the Material and link to the geometry of the Tilt stage.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-comment">% Ry - Guide for the tilt stage</span>
 | |
| ry.guide.density = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| ry.guide.STEP    = <span class="org-string">'./STEPS/ry/Tilt_Guide.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ry - Rotor of the motor</span>
 | |
| ry.rotor.density = 2400; <span class="org-comment">% [kg/m3]</span>
 | |
| ry.rotor.STEP    = <span class="org-string">'./STEPS/ry/Tilt_Motor_Axis.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ry - Motor</span>
 | |
| ry.motor.density = 3200; <span class="org-comment">% [kg/m3]</span>
 | |
| ry.motor.STEP    = <span class="org-string">'./STEPS/ry/Tilt_Motor.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Ry - Plateau Tilt</span>
 | |
| ry.stage.density = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| ry.stage.STEP    = <span class="org-string">'./STEPS/ry/Tilt_Stage.STEP'</span>;
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| Z-Offset so that the center of rotation matches the sample center;
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ry.z_offset = 0.58178; <span class="org-comment">% [m]</span>
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ry.Ry_init = args.Ry_init; <span class="org-comment">% [rad]</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgb9bb658" class="outline-3">
 | |
| <h3 id="orgb9bb658">Stiffness and Damping properties</h3>
 | |
| <div class="outline-text-3" id="text-orgb9bb658">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">ry.K = [3.8e8; 4e8; 3.8e8; 1.2e8; 6e4; 1.2e8];
 | |
| ry.C = [1e5;   1e5; 1e5;   3e4;   1e3; 3e4];
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd7fbf32" class="outline-3">
 | |
| <h3 id="orgd7fbf32">Equilibrium position of the each joint.</h3>
 | |
| <div class="outline-text-3" id="text-orgd7fbf32">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Foffset <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'none'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'rigid'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'init'</span>)
 | |
|   load(<span class="org-string">'mat/Foffset.mat'</span>, <span class="org-string">'Fym'</span>);
 | |
|   ry.Deq = <span class="org-type">-</span>Fym<span class="org-type">'./</span>ry.K;
 | |
| <span class="org-keyword">else</span>
 | |
|   ry.Deq = zeros(6,1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org518e791" class="outline-3">
 | |
| <h3 id="org518e791">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org518e791">
 | |
| <p>
 | |
| The <code>ry</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'ry'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org64f7285" class="outline-2">
 | |
| <h2 id="org64f7285"><span class="section-number-2">7</span> Spindle</h2>
 | |
| <div class="outline-text-2" id="text-7">
 | |
| <p>
 | |
| <a id="org85f7685"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org47fb36b" class="outline-3">
 | |
| <h3 id="org47fb36b">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-org47fb36b">
 | |
| <p>
 | |
| The Simscape model of the Spindle is composed of:
 | |
| </p>
 | |
| <ul class="org-ul">
 | |
| <li>Two rigid bodies: the stator and the rotor</li>
 | |
| <li>A Bushing Joint that is used both as the actuator (the Rz motion is imposed by the input) and as the force perturbation in the Z direction.</li>
 | |
| <li>The Bushing joint has some flexibility in the X-Y-Z directions as well as in Rx and Ry rotations</li>
 | |
| </ul>
 | |
| 
 | |
| 
 | |
| <div id="orgf8cd2b8" class="figure">
 | |
| <p><img src="figs/images/simscape_model_rz.png" alt="simscape_model_rz.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 10: </span>Simscape model for the Spindle</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="org8f17d51" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_rz.png" alt="simscape_picture_rz.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 11: </span>Simscape picture for the Spindle</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org66acb6d" class="outline-3">
 | |
| <h3 id="org66acb6d">Function description</h3>
 | |
| <div class="outline-text-3" id="text-org66acb6d">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[rz]</span> = <span class="org-function-name">initializeRz</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org0802bfd" class="outline-3">
 | |
| <h3 id="org0802bfd">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org0802bfd">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type    char    {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'modal-analysis'</span>, <span class="org-string">'init'</span>})} = <span class="org-string">'flexible'</span>
 | |
|   args.Foffset logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org0e9655c" class="outline-3">
 | |
| <h3 id="org0e9655c">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-org0e9655c">
 | |
| <p>
 | |
| First, we initialize the <code>rz</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">rz = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orge5b17ec" class="outline-3">
 | |
| <h3 id="orge5b17ec">Add Spindle Type</h3>
 | |
| <div class="outline-text-3" id="text-orge5b17ec">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     rz.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     rz.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
 | |
|     rz.type = 2;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'modal-analysis'</span>
 | |
|     rz.type = 3;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'init'</span>
 | |
|     rz.type = 4;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgdeaf67c" class="outline-3">
 | |
| <h3 id="orgdeaf67c">Material and Geometry</h3>
 | |
| <div class="outline-text-3" id="text-orgdeaf67c">
 | |
| <p>
 | |
| Properties of the Material and link to the geometry of the spindle.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-comment">% Spindle - Slip Ring</span>
 | |
| rz.slipring.density = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| rz.slipring.STEP    = <span class="org-string">'./STEPS/rz/Spindle_Slip_Ring.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Spindle - Rotor</span>
 | |
| rz.rotor.density    = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| rz.rotor.STEP       = <span class="org-string">'./STEPS/rz/Spindle_Rotor.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Spindle - Stator</span>
 | |
| rz.stator.density   = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| rz.stator.STEP      = <span class="org-string">'./STEPS/rz/Spindle_Stator.STEP'</span>;
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd9cad9a" class="outline-3">
 | |
| <h3 id="orgd9cad9a">Stiffness and Damping properties</h3>
 | |
| <div class="outline-text-3" id="text-orgd9cad9a">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">rz.K = [7e8; 7e8; 2e9; 1e7; 1e7; 1e7];
 | |
| rz.C = [4e4; 4e4; 7e4; 1e4; 1e4; 1e4];
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org7d603ad" class="outline-3">
 | |
| <h3 id="org7d603ad">Equilibrium position of the each joint.</h3>
 | |
| <div class="outline-text-3" id="text-org7d603ad">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Foffset <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'none'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'rigid'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'init'</span>)
 | |
|   load(<span class="org-string">'mat/Foffset.mat'</span>, <span class="org-string">'Fzm'</span>);
 | |
|   rz.Deq = <span class="org-type">-</span>Fzm<span class="org-type">'./</span>rz.K;
 | |
| <span class="org-keyword">else</span>
 | |
|   rz.Deq = zeros(6,1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgce19ee2" class="outline-3">
 | |
| <h3 id="orgce19ee2">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-orgce19ee2">
 | |
| <p>
 | |
| The <code>rz</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'rz'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgaa8ff28" class="outline-2">
 | |
| <h2 id="orgaa8ff28"><span class="section-number-2">8</span> Micro Hexapod</h2>
 | |
| <div class="outline-text-2" id="text-8">
 | |
| <p>
 | |
| <a id="org01254ae"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org84a25c2" class="outline-3">
 | |
| <h3 id="org84a25c2">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-org84a25c2">
 | |
| 
 | |
| <div id="org13345ec" class="figure">
 | |
| <p><img src="figs/images/simscape_model_micro_hexapod.png" alt="simscape_model_micro_hexapod.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 12: </span>Simscape model for the Micro-Hexapod</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="orga63e01a" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_micro_hexapod.png" alt="simscape_picture_micro_hexapod.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 13: </span>Simscape picture for the Micro-Hexapod</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org08a0608" class="outline-3">
 | |
| <h3 id="org08a0608">Function description</h3>
 | |
| <div class="outline-text-3" id="text-org08a0608">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[micro_hexapod]</span> = <span class="org-function-name">initializeMicroHexapod</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org05f3272" class="outline-3">
 | |
| <h3 id="org05f3272">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org05f3272">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|     args.type      char   {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'modal-analysis'</span>, <span class="org-string">'init'</span>})} = <span class="org-string">'flexible'</span>
 | |
|     <span class="org-comment">% initializeFramesPositions</span>
 | |
|     args.H    (1,1) double {mustBeNumeric, mustBePositive} = 350e<span class="org-type">-</span>3
 | |
|     args.MO_B (1,1) double {mustBeNumeric} = 270e<span class="org-type">-</span>3
 | |
|     <span class="org-comment">% generateGeneralConfiguration</span>
 | |
|     args.FH  (1,1) double {mustBeNumeric, mustBePositive} = 50e<span class="org-type">-</span>3
 | |
|     args.FR  (1,1) double {mustBeNumeric, mustBePositive} = 175.5e<span class="org-type">-</span>3
 | |
|     args.FTh (6,1) double {mustBeNumeric} = [<span class="org-type">-</span>10, 10, 120<span class="org-type">-</span>10, 120<span class="org-type">+</span>10, 240<span class="org-type">-</span>10, 240<span class="org-type">+</span>10]<span class="org-type">*</span>(<span class="org-constant">pi</span><span class="org-type">/</span>180)
 | |
|     args.MH  (1,1) double {mustBeNumeric, mustBePositive} = 45e<span class="org-type">-</span>3
 | |
|     args.MR  (1,1) double {mustBeNumeric, mustBePositive} = 118e<span class="org-type">-</span>3
 | |
|     args.MTh (6,1) double {mustBeNumeric} = [<span class="org-type">-</span>60<span class="org-type">+</span>10, 60<span class="org-type">-</span>10, 60<span class="org-type">+</span>10, 180<span class="org-type">-</span>10, 180<span class="org-type">+</span>10, <span class="org-type">-</span>60<span class="org-type">-</span>10]<span class="org-type">*</span>(<span class="org-constant">pi</span><span class="org-type">/</span>180)
 | |
|     <span class="org-comment">% initializeStrutDynamics</span>
 | |
|     args.Ki (6,1) double {mustBeNumeric, mustBeNonnegative} = 2e7<span class="org-type">*</span>ones(6,1)
 | |
|     args.Ci (6,1) double {mustBeNumeric, mustBeNonnegative} = 1.4e3<span class="org-type">*</span>ones(6,1)
 | |
|     <span class="org-comment">% initializeCylindricalPlatforms</span>
 | |
|     args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 10
 | |
|     args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 26e<span class="org-type">-</span>3
 | |
|     args.Fpr (1,1) double {mustBeNumeric, mustBePositive} = 207.5e<span class="org-type">-</span>3
 | |
|     args.Mpm (1,1) double {mustBeNumeric, mustBePositive} = 10
 | |
|     args.Mph (1,1) double {mustBeNumeric, mustBePositive} = 26e<span class="org-type">-</span>3
 | |
|     args.Mpr (1,1) double {mustBeNumeric, mustBePositive} = 150e<span class="org-type">-</span>3
 | |
|     <span class="org-comment">% initializeCylindricalStruts</span>
 | |
|     args.Fsm (1,1) double {mustBeNumeric, mustBePositive} = 1
 | |
|     args.Fsh (1,1) double {mustBeNumeric, mustBePositive} = 100e<span class="org-type">-</span>3
 | |
|     args.Fsr (1,1) double {mustBeNumeric, mustBePositive} = 25e<span class="org-type">-</span>3
 | |
|     args.Msm (1,1) double {mustBeNumeric, mustBePositive} = 1
 | |
|     args.Msh (1,1) double {mustBeNumeric, mustBePositive} = 100e<span class="org-type">-</span>3
 | |
|     args.Msr (1,1) double {mustBeNumeric, mustBePositive} = 25e<span class="org-type">-</span>3
 | |
|     <span class="org-comment">% inverseKinematics</span>
 | |
|     args.AP  (3,1) double {mustBeNumeric} = zeros(3,1)
 | |
|     args.ARB (3,3) double {mustBeNumeric} = eye(3)
 | |
|     <span class="org-comment">% Force that stiffness of each joint should apply at t=0</span>
 | |
|     args.Foffset      logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org1c1efec" class="outline-3">
 | |
| <h3 id="org1c1efec">Function content</h3>
 | |
| <div class="outline-text-3" id="text-org1c1efec">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">micro_hexapod = initializeFramesPositions(<span class="org-string">'H'</span>, args.H, <span class="org-string">'MO_B'</span>, args.MO_B);
 | |
| micro_hexapod = generateGeneralConfiguration(micro_hexapod, <span class="org-string">'FH'</span>, args.FH, <span class="org-string">'FR'</span>, args.FR, <span class="org-string">'FTh'</span>, args.FTh, <span class="org-string">'MH'</span>, args.MH, <span class="org-string">'MR'</span>, args.MR, <span class="org-string">'MTh'</span>, args.MTh);
 | |
| micro_hexapod = computeJointsPose(micro_hexapod);
 | |
| micro_hexapod = initializeStrutDynamics(micro_hexapod, <span class="org-string">'Ki'</span>, args.Ki, <span class="org-string">'Ci'</span>, args.Ci);
 | |
| micro_hexapod = initializeCylindricalPlatforms(micro_hexapod, <span class="org-string">'Fpm'</span>, args.Fpm, <span class="org-string">'Fph'</span>, args.Fph, <span class="org-string">'Fpr'</span>, args.Fpr, <span class="org-string">'Mpm'</span>, args.Mpm, <span class="org-string">'Mph'</span>, args.Mph, <span class="org-string">'Mpr'</span>, args.Mpr);
 | |
| micro_hexapod = initializeCylindricalStruts(micro_hexapod, <span class="org-string">'Fsm'</span>, args.Fsm, <span class="org-string">'Fsh'</span>, args.Fsh, <span class="org-string">'Fsr'</span>, args.Fsr, <span class="org-string">'Msm'</span>, args.Msm, <span class="org-string">'Msh'</span>, args.Msh, <span class="org-string">'Msr'</span>, args.Msr);
 | |
| micro_hexapod = computeJacobian(micro_hexapod);
 | |
| [Li, dLi] = inverseKinematics(micro_hexapod, <span class="org-string">'AP'</span>, args.AP, <span class="org-string">'ARB'</span>, args.ARB);
 | |
| micro_hexapod.Li = Li;
 | |
| micro_hexapod.dLi = dLi;
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| Equilibrium position of the each joint.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Foffset <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'none'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'rigid'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'init'</span>)
 | |
|   load(<span class="org-string">'mat/Foffset.mat'</span>, <span class="org-string">'Fhm'</span>);
 | |
|   micro_hexapod.dLeq = <span class="org-type">-</span>Fhm<span class="org-type">'./</span>args.Ki;
 | |
| <span class="org-keyword">else</span>
 | |
|   micro_hexapod.dLeq = zeros(6,1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org025db9e" class="outline-3">
 | |
| <h3 id="org025db9e">Add Type</h3>
 | |
| <div class="outline-text-3" id="text-org025db9e">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     micro_hexapod.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     micro_hexapod.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
 | |
|     micro_hexapod.type = 2;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'modal-analysis'</span>
 | |
|     micro_hexapod.type = 3;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'init'</span>
 | |
|     micro_hexapod.type = 4;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org7bca339" class="outline-3">
 | |
| <h3 id="org7bca339">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org7bca339">
 | |
| <p>
 | |
| The <code>micro_hexapod</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'micro_hexapod'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orga55d418" class="outline-2">
 | |
| <h2 id="orga55d418"><span class="section-number-2">9</span> Center of gravity compensation</h2>
 | |
| <div class="outline-text-2" id="text-9">
 | |
| <p>
 | |
| <a id="org9989724"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org3e5ad8a" class="outline-3">
 | |
| <h3 id="org3e5ad8a">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-org3e5ad8a">
 | |
| <p>
 | |
| The Simscape model of the Center of gravity compensator is composed of:
 | |
| </p>
 | |
| <ul class="org-ul">
 | |
| <li>One main solid that is connected to two other solids (the masses to position of center of mass) through two revolute joints</li>
 | |
| <li>The angle of both revolute joints is set by the input</li>
 | |
| </ul>
 | |
| 
 | |
| 
 | |
| <div id="orge09d585" class="figure">
 | |
| <p><img src="figs/images/simscape_model_axisc.png" alt="simscape_model_axisc.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 14: </span>Simscape model for the Center of Mass compensation system</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="orga3d0932" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_axisc.png" alt="simscape_picture_axisc.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 15: </span>Simscape picture for the Center of Mass compensation system</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orge2f6d1f" class="outline-3">
 | |
| <h3 id="orge2f6d1f">Function description</h3>
 | |
| <div class="outline-text-3" id="text-orge2f6d1f">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[axisc]</span> = <span class="org-function-name">initializeAxisc</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgafcfe66" class="outline-3">
 | |
| <h3 id="orgafcfe66">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-orgafcfe66">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type char {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>})} = <span class="org-string">'flexible'</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd0d9c97" class="outline-3">
 | |
| <h3 id="orgd0d9c97">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-orgd0d9c97">
 | |
| <p>
 | |
| First, we initialize the <code>axisc</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">axisc = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org76fb5d1" class="outline-3">
 | |
| <h3 id="org76fb5d1">Add Type</h3>
 | |
| <div class="outline-text-3" id="text-org76fb5d1">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     axisc.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     axisc.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
 | |
|     axisc.type = 2;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org06250de" class="outline-3">
 | |
| <h3 id="org06250de">Material and Geometry</h3>
 | |
| <div class="outline-text-3" id="text-org06250de">
 | |
| <p>
 | |
| Properties of the Material and link to the geometry files.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-comment">% Structure</span>
 | |
| axisc.structure.density = 3400; <span class="org-comment">% [kg/m3]</span>
 | |
| axisc.structure.STEP    = <span class="org-string">'./STEPS/axisc/axisc_structure.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Wheel</span>
 | |
| axisc.wheel.density     = 2700; <span class="org-comment">% [kg/m3]</span>
 | |
| axisc.wheel.STEP        = <span class="org-string">'./STEPS/axisc/axisc_wheel.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Mass</span>
 | |
| axisc.mass.density      = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| axisc.mass.STEP         = <span class="org-string">'./STEPS/axisc/axisc_mass.STEP'</span>;
 | |
| 
 | |
| <span class="org-comment">% Gear</span>
 | |
| axisc.gear.density      = 7800; <span class="org-comment">% [kg/m3]</span>
 | |
| axisc.gear.STEP         = <span class="org-string">'./STEPS/axisc/axisc_gear.STEP'</span>;
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org174fb7a" class="outline-3">
 | |
| <h3 id="org174fb7a">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org174fb7a">
 | |
| <p>
 | |
| The <code>axisc</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'axisc'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org7586ab7" class="outline-2">
 | |
| <h2 id="org7586ab7"><span class="section-number-2">10</span> Mirror</h2>
 | |
| <div class="outline-text-2" id="text-10">
 | |
| <p>
 | |
| <a id="org3d670bf"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org666250e" class="outline-3">
 | |
| <h3 id="org666250e">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-org666250e">
 | |
| <p>
 | |
| The Simscape Model of the mirror is just a solid body.
 | |
| The output <code>mirror_center</code> corresponds to the center of the Sphere and is the point of measurement for the metrology
 | |
| </p>
 | |
| 
 | |
| 
 | |
| <div id="org281f48a" class="figure">
 | |
| <p><img src="figs/images/simscape_model_mirror.png" alt="simscape_model_mirror.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 16: </span>Simscape model for the Mirror</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="orgf4fa701" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_mirror.png" alt="simscape_picture_mirror.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 17: </span>Simscape picture for the Mirror</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orge17879c" class="outline-3">
 | |
| <h3 id="orge17879c">Function description</h3>
 | |
| <div class="outline-text-3" id="text-orge17879c">
 | |
| <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">initializeMirror</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd5e1e0c" class="outline-3">
 | |
| <h3 id="orgd5e1e0c">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-orgd5e1e0c">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type        char   {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>})} = <span class="org-string">'rigid'</span>
 | |
|   args.shape       char   {mustBeMember(args.shape,{<span class="org-string">'spherical'</span>, <span class="org-string">'conical'</span>})} = <span class="org-string">'spherical'</span>
 | |
|   args.angle (1,1) double {mustBeNumeric, mustBePositive} = 45 <span class="org-comment">% [deg]</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgba28d4b" class="outline-3">
 | |
| <h3 id="orgba28d4b">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-orgba28d4b">
 | |
| <p>
 | |
| First, we initialize the <code>mirror</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">mirror = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgff14824" class="outline-3">
 | |
| <h3 id="orgff14824">Add Mirror Type</h3>
 | |
| <div class="outline-text-3" id="text-orgff14824">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     mirror.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     mirror.type = 1;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd032923" class="outline-3">
 | |
| <h3 id="orgd032923">Material and Geometry</h3>
 | |
| <div class="outline-text-3" id="text-orgd032923">
 | |
| <p>
 | |
| We define the geometrical values.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">mirror.h = 0.05; <span class="org-comment">% Height of the mirror [m]</span>
 | |
| 
 | |
| mirror.thickness = 0.025; <span class="org-comment">% Thickness of the plate supporting the sample [m]</span>
 | |
| 
 | |
| mirror.hole_rad = 0.120; <span class="org-comment">% radius of the hole in the mirror [m]</span>
 | |
| 
 | |
| mirror.support_rad = 0.1; <span class="org-comment">% radius of the support plate [m]</span>
 | |
| 
 | |
| <span class="org-comment">% point of interest offset in z (above the top surfave) [m]</span>
 | |
| <span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     mirror.jacobian = 0.20;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     mirror.jacobian = 0.20 <span class="org-type">-</span> mirror.h;
 | |
| <span class="org-keyword">end</span>
 | |
| 
 | |
| mirror.rad = 0.180; <span class="org-comment">% radius of the mirror (at the bottom surface) [m]</span>
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">mirror.density = 2400; <span class="org-comment">% Density of the material [kg/m3]</span>
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">mirror.cone_length = mirror.rad<span class="org-type">*</span>tand(args.angle)<span class="org-type">+</span>mirror.h<span class="org-type">+</span>mirror.jacobian; <span class="org-comment">% Distance from Apex point of the cone to jacobian point</span>
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| Now we define the Shape of the mirror.
 | |
| We first start with the internal part.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">mirror.shape = [...
 | |
|     0 mirror.h<span class="org-type">-</span>mirror.thickness
 | |
|     mirror.hole_rad mirror.h<span class="org-type">-</span>mirror.thickness; ...
 | |
|     mirror.hole_rad 0; ...
 | |
|     mirror.rad 0 ...
 | |
| ];
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| Then, we define the reflective used part of the mirror.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> strcmp(args.shape, <span class="org-string">'spherical'</span>)
 | |
|     mirror.sphere_radius = sqrt((mirror.jacobian<span class="org-type">+</span>mirror.h)<span class="org-type">^</span>2<span class="org-type">+</span>mirror.rad<span class="org-type">^</span>2); <span class="org-comment">% Radius of the sphere [mm]</span>
 | |
| 
 | |
|     <span class="org-keyword">for</span> <span class="org-variable-name">z</span> = <span class="org-constant">linspace(0, mirror.h, 101)</span>
 | |
|         mirror.shape = [mirror.shape; sqrt(mirror.sphere_radius<span class="org-type">^</span>2<span class="org-type">-</span>(z<span class="org-type">-</span>mirror.jacobian<span class="org-type">-</span>mirror.h)<span class="org-type">^</span>2) z];
 | |
|     <span class="org-keyword">end</span>
 | |
| <span class="org-keyword">elseif</span> strcmp(args.shape, <span class="org-string">'conical'</span>)
 | |
|     mirror.shape = [mirror.shape; mirror.rad<span class="org-type">+</span>mirror.h<span class="org-type">/</span>tand(args.angle) mirror.h];
 | |
| <span class="org-keyword">else</span>
 | |
|     error(<span class="org-string">'Shape should be either conical or spherical'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| Finally, we close the shape.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">mirror.shape = [mirror.shape; 0 mirror.h];
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd1583a2" class="outline-3">
 | |
| <h3 id="orgd1583a2">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-orgd1583a2">
 | |
| <p>
 | |
| The <code>mirror</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'mirror'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org2d846ae" class="outline-2">
 | |
| <h2 id="org2d846ae"><span class="section-number-2">11</span> Nano Hexapod</h2>
 | |
| <div class="outline-text-2" id="text-11">
 | |
| <p>
 | |
| <a id="org9a9721e"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgfe0a98a" class="outline-3">
 | |
| <h3 id="orgfe0a98a">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-orgfe0a98a">
 | |
| 
 | |
| <div id="orga6643fc" class="figure">
 | |
| <p><img src="figs/images/simscape_model_nano_hexapod.png" alt="simscape_model_nano_hexapod.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 18: </span>Simscape model for the Nano Hexapod</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="org4d9fd08" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_nano_hexapod.png" alt="simscape_picture_nano_hexapod.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 19: </span>Simscape picture for the Nano Hexapod</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgaf3a7ae" class="outline-3">
 | |
| <h3 id="orgaf3a7ae">Function description</h3>
 | |
| <div class="outline-text-3" id="text-orgaf3a7ae">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[nano_hexapod]</span> = <span class="org-function-name">initializeNanoHexapod</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orged14bc7" class="outline-3">
 | |
| <h3 id="orged14bc7">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-orged14bc7">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|     args.type      char   {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>})} = <span class="org-string">'flexible'</span>
 | |
|     <span class="org-comment">% initializeFramesPositions</span>
 | |
|     args.H    (1,1) double {mustBeNumeric, mustBePositive} = 90e<span class="org-type">-</span>3
 | |
|     args.MO_B (1,1) double {mustBeNumeric} = 175e<span class="org-type">-</span>3
 | |
|     <span class="org-comment">% generateGeneralConfiguration</span>
 | |
|     args.FH  (1,1) double {mustBeNumeric, mustBePositive} = 15e<span class="org-type">-</span>3
 | |
|     args.FR  (1,1) double {mustBeNumeric, mustBePositive} = 100e<span class="org-type">-</span>3
 | |
|     args.FTh (6,1) double {mustBeNumeric} = [<span class="org-type">-</span>10, 10, 120<span class="org-type">-</span>10, 120<span class="org-type">+</span>10, 240<span class="org-type">-</span>10, 240<span class="org-type">+</span>10]<span class="org-type">*</span>(<span class="org-constant">pi</span><span class="org-type">/</span>180)
 | |
|     args.MH  (1,1) double {mustBeNumeric, mustBePositive} = 15e<span class="org-type">-</span>3
 | |
|     args.MR  (1,1) double {mustBeNumeric, mustBePositive} = 90e<span class="org-type">-</span>3
 | |
|     args.MTh (6,1) double {mustBeNumeric} = [<span class="org-type">-</span>60<span class="org-type">+</span>10, 60<span class="org-type">-</span>10, 60<span class="org-type">+</span>10, 180<span class="org-type">-</span>10, 180<span class="org-type">+</span>10, <span class="org-type">-</span>60<span class="org-type">-</span>10]<span class="org-type">*</span>(<span class="org-constant">pi</span><span class="org-type">/</span>180)
 | |
|     <span class="org-comment">% initializeStrutDynamics</span>
 | |
|     args.actuator  char   {mustBeMember(args.actuator,{<span class="org-string">'piezo'</span>, <span class="org-string">'lorentz'</span>})} = <span class="org-string">'piezo'</span>
 | |
|     <span class="org-comment">% initializeCylindricalPlatforms</span>
 | |
|     args.Fpm (1,1) double {mustBeNumeric, mustBePositive} = 1
 | |
|     args.Fph (1,1) double {mustBeNumeric, mustBePositive} = 10e<span class="org-type">-</span>3
 | |
|     args.Fpr (1,1) double {mustBeNumeric, mustBePositive} = 150e<span class="org-type">-</span>3
 | |
|     args.Mpm (1,1) double {mustBeNumeric, mustBePositive} = 1
 | |
|     args.Mph (1,1) double {mustBeNumeric, mustBePositive} = 10e<span class="org-type">-</span>3
 | |
|     args.Mpr (1,1) double {mustBeNumeric, mustBePositive} = 100e<span class="org-type">-</span>3
 | |
|     <span class="org-comment">% initializeCylindricalStruts</span>
 | |
|     args.Fsm (1,1) double {mustBeNumeric, mustBePositive} = 0.1
 | |
|     args.Fsh (1,1) double {mustBeNumeric, mustBePositive} = 50e<span class="org-type">-</span>3
 | |
|     args.Fsr (1,1) double {mustBeNumeric, mustBePositive} = 5e<span class="org-type">-</span>3
 | |
|     args.Msm (1,1) double {mustBeNumeric, mustBePositive} = 0.1
 | |
|     args.Msh (1,1) double {mustBeNumeric, mustBePositive} = 50e<span class="org-type">-</span>3
 | |
|     args.Msr (1,1) double {mustBeNumeric, mustBePositive} = 5e<span class="org-type">-</span>3
 | |
|     <span class="org-comment">% inverseKinematics</span>
 | |
|     args.AP  (3,1) double {mustBeNumeric} = zeros(3,1)
 | |
|     args.ARB (3,3) double {mustBeNumeric} = eye(3)
 | |
|     <span class="org-comment">% Equilibrium position of each leg</span>
 | |
|     args.dLeq (6,1) double {mustBeNumeric} = zeros(6,1)
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org1c650c8" class="outline-3">
 | |
| <h3 id="org1c650c8">Function content</h3>
 | |
| <div class="outline-text-3" id="text-org1c650c8">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">nano_hexapod = initializeFramesPositions(<span class="org-string">'H'</span>, args.H, <span class="org-string">'MO_B'</span>, args.MO_B);
 | |
| nano_hexapod = generateGeneralConfiguration(nano_hexapod, <span class="org-string">'FH'</span>, args.FH, <span class="org-string">'FR'</span>, args.FR, <span class="org-string">'FTh'</span>, args.FTh, <span class="org-string">'MH'</span>, args.MH, <span class="org-string">'MR'</span>, args.MR, <span class="org-string">'MTh'</span>, args.MTh);
 | |
| nano_hexapod = computeJointsPose(nano_hexapod);
 | |
| <span class="org-keyword">if</span> strcmp(args.actuator, <span class="org-string">'piezo'</span>)
 | |
|     nano_hexapod = initializeStrutDynamics(nano_hexapod, <span class="org-string">'Ki'</span>, 1e7<span class="org-type">*</span>ones(6,1), <span class="org-string">'Ci'</span>, 1e2<span class="org-type">*</span>ones(6,1));
 | |
| <span class="org-keyword">elseif</span> strcmp(args.actuator, <span class="org-string">'lorentz'</span>)
 | |
|     nano_hexapod = initializeStrutDynamics(nano_hexapod, <span class="org-string">'Ki'</span>, 1e4<span class="org-type">*</span>ones(6,1), <span class="org-string">'Ci'</span>, 1e2<span class="org-type">*</span>ones(6,1));
 | |
| <span class="org-keyword">else</span>
 | |
|     error(<span class="org-string">'args.actuator should be piezo or lorentz'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| nano_hexapod = initializeCylindricalPlatforms(nano_hexapod, <span class="org-string">'Fpm'</span>, args.Fpm, <span class="org-string">'Fph'</span>, args.Fph, <span class="org-string">'Fpr'</span>, args.Fpr, <span class="org-string">'Mpm'</span>, args.Mpm, <span class="org-string">'Mph'</span>, args.Mph, <span class="org-string">'Mpr'</span>, args.Mpr);
 | |
| nano_hexapod = initializeCylindricalStruts(nano_hexapod, <span class="org-string">'Fsm'</span>, args.Fsm, <span class="org-string">'Fsh'</span>, args.Fsh, <span class="org-string">'Fsr'</span>, args.Fsr, <span class="org-string">'Msm'</span>, args.Msm, <span class="org-string">'Msh'</span>, args.Msh, <span class="org-string">'Msr'</span>, args.Msr);
 | |
| nano_hexapod = computeJacobian(nano_hexapod);
 | |
| [Li, dLi] = inverseKinematics(nano_hexapod, <span class="org-string">'AP'</span>, args.AP, <span class="org-string">'ARB'</span>, args.ARB);
 | |
| nano_hexapod.Li = Li;
 | |
| nano_hexapod.dLi = dLi;
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">nano_hexapod.dLeq = args.dLeq;
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd741b2d" class="outline-3">
 | |
| <h3 id="orgd741b2d">Add Type</h3>
 | |
| <div class="outline-text-3" id="text-orgd741b2d">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     nano_hexapod.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     nano_hexapod.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
 | |
|     nano_hexapod.type = 2;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orge3a4572" class="outline-3">
 | |
| <h3 id="orge3a4572">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-orge3a4572">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org3d615a1" class="outline-2">
 | |
| <h2 id="org3d615a1"><span class="section-number-2">12</span> Sample</h2>
 | |
| <div class="outline-text-2" id="text-12">
 | |
| <p>
 | |
| <a id="org9f0d804"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgc616e98" class="outline-3">
 | |
| <h3 id="orgc616e98">Simscape Model</h3>
 | |
| <div class="outline-text-3" id="text-orgc616e98">
 | |
| <p>
 | |
| The Simscape model of the sample environment is composed of:
 | |
| </p>
 | |
| <ul class="org-ul">
 | |
| <li>A rigid transform that can be used to translate the sample (position offset)</li>
 | |
| <li>A cartesian joint to add some flexibility to the sample environment mount</li>
 | |
| <li>A solid that represent the sample</li>
 | |
| <li>An input is added to apply some external forces and torques at the center of the sample environment.
 | |
| This could be the case for cable forces for instance.</li>
 | |
| </ul>
 | |
| 
 | |
| 
 | |
| <div id="org4bf20ba" class="figure">
 | |
| <p><img src="figs/images/simscape_model_sample.png" alt="simscape_model_sample.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 20: </span>Simscape model for the Sample</p>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="orgfaf9137" class="figure">
 | |
| <p><img src="figs/images/simscape_picture_sample.png" alt="simscape_picture_sample.png" />
 | |
| </p>
 | |
| <p><span class="figure-number">Figure 21: </span>Simscape picture for the Sample</p>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org15732a0" class="outline-3">
 | |
| <h3 id="org15732a0">Function description</h3>
 | |
| <div class="outline-text-3" id="text-org15732a0">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[sample]</span> = <span class="org-function-name">initializeSample</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org5ab13d2" class="outline-3">
 | |
| <h3 id="org5ab13d2">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org5ab13d2">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type         char    {mustBeMember(args.type,{<span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'none'</span>, <span class="org-string">'init'</span>})} = <span class="org-string">'flexible'</span>
 | |
|   args.radius (1,1) double  {mustBeNumeric, mustBePositive} = 0.1 <span class="org-comment">% [m]</span>
 | |
|   args.height (1,1) double  {mustBeNumeric, mustBePositive} = 0.3 <span class="org-comment">% [m]</span>
 | |
|   args.mass   (1,1) double  {mustBeNumeric, mustBePositive} = 50 <span class="org-comment">% [kg]</span>
 | |
|   args.freq   (1,1) double  {mustBeNumeric, mustBePositive} = 100 <span class="org-comment">% [Hz]</span>
 | |
|   args.offset (1,1) double  {mustBeNumeric} = 0 <span class="org-comment">% [m]</span>
 | |
|   args.Foffset      logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org24520d9" class="outline-3">
 | |
| <h3 id="org24520d9">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-org24520d9">
 | |
| <p>
 | |
| First, we initialize the <code>sample</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">sample = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org2bb1d24" class="outline-3">
 | |
| <h3 id="org2bb1d24">Add Sample Type</h3>
 | |
| <div class="outline-text-3" id="text-org2bb1d24">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'none'</span>
 | |
|     sample.type = 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rigid'</span>
 | |
|     sample.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
 | |
|     sample.type = 2;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'init'</span>
 | |
|     sample.type = 3;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org35a416f" class="outline-3">
 | |
| <h3 id="org35a416f">Material and Geometry</h3>
 | |
| <div class="outline-text-3" id="text-org35a416f">
 | |
| <p>
 | |
| We define the geometrical parameters of the sample as well as its mass and position.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">sample.radius = args.radius; <span class="org-comment">% [m]</span>
 | |
| sample.height = args.height; <span class="org-comment">% [m]</span>
 | |
| sample.mass   = args.mass; <span class="org-comment">% [kg]</span>
 | |
| sample.offset = args.offset; <span class="org-comment">% [m]</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org210c84e" class="outline-3">
 | |
| <h3 id="org210c84e">Stiffness and Damping properties</h3>
 | |
| <div class="outline-text-3" id="text-org210c84e">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">sample.K = ones(3,1) <span class="org-type">*</span> sample.mass <span class="org-type">*</span> (2<span class="org-type">*</span><span class="org-constant">pi</span> <span class="org-type">*</span> args.freq)<span class="org-type">^</span>2; <span class="org-comment">% [N/m]</span>
 | |
| sample.C = 0.1 <span class="org-type">*</span> sqrt(sample.K<span class="org-type">*</span>sample.mass); <span class="org-comment">% [N/(m/s)]</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org2848fdf" class="outline-3">
 | |
| <h3 id="org2848fdf">Equilibrium position of the each joint.</h3>
 | |
| <div class="outline-text-3" id="text-org2848fdf">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Foffset <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'none'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'rigid'</span>) <span class="org-type">&&</span> <span class="org-type">~</span>strcmp(args.type, <span class="org-string">'init'</span>)
 | |
|   load(<span class="org-string">'mat/Foffset.mat'</span>, <span class="org-string">'Fsm'</span>);
 | |
|   sample.Deq = <span class="org-type">-</span>Fsm<span class="org-type">'./</span>sample.K;
 | |
| <span class="org-keyword">else</span>
 | |
|   sample.Deq = zeros(3,1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org2989213" class="outline-3">
 | |
| <h3 id="org2989213">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org2989213">
 | |
| <p>
 | |
| The <code>sample</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'sample'</span>, <span class="org-string">'-append'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orge9cbdc9" class="outline-2">
 | |
| <h2 id="orge9cbdc9"><span class="section-number-2">13</span> Initialize Controller</h2>
 | |
| <div class="outline-text-2" id="text-13">
 | |
| <p>
 | |
| <a id="orgd0062b9"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org3327219" class="outline-3">
 | |
| <h3 id="org3327219">Function Declaration and Documentation</h3>
 | |
| <div class="outline-text-3" id="text-org3327219">
 | |
| <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">initializeController</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgcb9fce7" class="outline-3">
 | |
| <h3 id="orgcb9fce7">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-orgcb9fce7">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|   args.type char {mustBeMember(args.type,{<span class="org-string">'open-loop'</span>, <span class="org-string">'iff'</span>, <span class="org-string">'dvf'</span>, <span class="org-string">'hac-dvf'</span>, <span class="org-string">'ref-track-L'</span>, <span class="org-string">'ref-track-iff-L'</span>, <span class="org-string">'cascade-hac-lac'</span>})} = <span class="org-string">'open-loop'</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org8cf9609" class="outline-3">
 | |
| <h3 id="org8cf9609">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-org8cf9609">
 | |
| <p>
 | |
| First, we initialize the <code>controller</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">controller = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org4207f98" class="outline-3">
 | |
| <h3 id="org4207f98">Controller Type</h3>
 | |
| <div class="outline-text-3" id="text-org4207f98">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'open-loop'</span>
 | |
|     controller.type = 1;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'dvf'</span>
 | |
|     controller.type = 2;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'iff'</span>
 | |
|     controller.type = 3;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'hac-dvf'</span>
 | |
|     controller.type = 4;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'ref-track-L'</span>
 | |
|     controller.type = 5;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'ref-track-iff-L'</span>
 | |
|     controller.type = 6;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'cascade-hac-lac'</span>
 | |
|     controller.type = 7;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org9d366f8" class="outline-3">
 | |
| <h3 id="org9d366f8">Save the Structure</h3>
 | |
| <div class="outline-text-3" id="text-org9d366f8">
 | |
| <p>
 | |
| The <code>controller</code> structure is saved.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/controller.mat'</span>, <span class="org-string">'controller'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgae5cb57" class="outline-2">
 | |
| <h2 id="orgae5cb57"><span class="section-number-2">14</span> Generate Reference Signals</h2>
 | |
| <div class="outline-text-2" id="text-14">
 | |
| <p>
 | |
| <a id="org5ace526"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org6c43a9a" class="outline-3">
 | |
| <h3 id="org6c43a9a">Function Declaration and Documentation</h3>
 | |
| <div class="outline-text-3" id="text-org6c43a9a">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[ref]</span> = <span class="org-function-name">initializeReferences</span>(<span class="org-variable-name">args</span>)
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgecb47c6" class="outline-3">
 | |
| <h3 id="orgecb47c6">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-orgecb47c6">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|     <span class="org-comment">% Sampling Frequency [s]</span>
 | |
|     args.Ts           (1,1) double {mustBeNumeric, mustBePositive} = 1e<span class="org-type">-</span>3
 | |
|     <span class="org-comment">% Maximum simulation time [s]</span>
 | |
|     args.Tmax         (1,1) double {mustBeNumeric, mustBePositive} = 100
 | |
|     <span class="org-comment">% Either "constant" / "triangular" / "sinusoidal"</span>
 | |
|     args.Dy_type      char {mustBeMember(args.Dy_type,{<span class="org-string">'constant'</span>, <span class="org-string">'triangular'</span>, <span class="org-string">'sinusoidal'</span>})} = <span class="org-string">'constant'</span>
 | |
|     <span class="org-comment">% Amplitude of the displacement [m]</span>
 | |
|     args.Dy_amplitude (1,1) double {mustBeNumeric} = 0
 | |
|     <span class="org-comment">% Period of the displacement [s]</span>
 | |
|     args.Dy_period    (1,1) double {mustBeNumeric, mustBePositive} = 1
 | |
|     <span class="org-comment">% Either "constant" / "triangular" / "sinusoidal"</span>
 | |
|     args.Ry_type      char {mustBeMember(args.Ry_type,{<span class="org-string">'constant'</span>, <span class="org-string">'triangular'</span>, <span class="org-string">'sinusoidal'</span>})} = <span class="org-string">'constant'</span>
 | |
|     <span class="org-comment">% Amplitude [rad]</span>
 | |
|     args.Ry_amplitude (1,1) double {mustBeNumeric} = 0
 | |
|     <span class="org-comment">% Period of the displacement [s]</span>
 | |
|     args.Ry_period    (1,1) double {mustBeNumeric, mustBePositive} = 1
 | |
|     <span class="org-comment">% Either "constant" / "rotating"</span>
 | |
|     args.Rz_type      char {mustBeMember(args.Rz_type,{<span class="org-string">'constant'</span>, <span class="org-string">'rotating'</span>})} = <span class="org-string">'constant'</span>
 | |
|     <span class="org-comment">% Initial angle [rad]</span>
 | |
|     args.Rz_amplitude (1,1) double {mustBeNumeric} = 0
 | |
|     <span class="org-comment">% Period of the rotating [s]</span>
 | |
|     args.Rz_period    (1,1) double {mustBeNumeric, mustBePositive} = 1
 | |
|     <span class="org-comment">% For now, only constant is implemented</span>
 | |
|     args.Dh_type      char {mustBeMember(args.Dh_type,{<span class="org-string">'constant'</span>})} = <span class="org-string">'constant'</span>
 | |
|     <span class="org-comment">% Initial position [m,m,m,rad,rad,rad] of the top platform (Pitch-Roll-Yaw Euler angles)</span>
 | |
|     args.Dh_pos       (6,1) double {mustBeNumeric} = zeros(6, 1), ...
 | |
|     <span class="org-comment">% For now, only constant is implemented</span>
 | |
|     args.Rm_type      char {mustBeMember(args.Rm_type,{<span class="org-string">'constant'</span>})} = <span class="org-string">'constant'</span>
 | |
|     <span class="org-comment">% Initial position of the two masses</span>
 | |
|     args.Rm_pos       (2,1) double {mustBeNumeric} = [0; <span class="org-constant">pi</span>]
 | |
|     <span class="org-comment">% For now, only constant is implemented</span>
 | |
|     args.Dn_type      char {mustBeMember(args.Dn_type,{<span class="org-string">'constant'</span>})} = <span class="org-string">'constant'</span>
 | |
|     <span class="org-comment">% Initial position [m,m,m,rad,rad,rad] of the top platform</span>
 | |
|     args.Dn_pos       (6,1) double {mustBeNumeric} = zeros(6,1)
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="outline-container-orge94c0c2" class="outline-3">
 | |
| <h3 id="orge94c0c2">Initialize Parameters</h3>
 | |
| <div class="outline-text-3" id="text-orge94c0c2">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Set Sampling Time</span></span>
 | |
| Ts = args.Ts;
 | |
| Tmax = args.Tmax;
 | |
| 
 | |
| <span class="org-matlab-cellbreak"><span class="org-comment">%% Low Pass Filter to filter out the references</span></span>
 | |
| s = zpk(<span class="org-string">'s'</span>);
 | |
| w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>10;
 | |
| xi = 1;
 | |
| H_lpf = 1<span class="org-type">/</span>(1 <span class="org-type">+</span> 2<span class="org-type">*</span>xi<span class="org-type">/</span>w0<span class="org-type">*</span>s <span class="org-type">+</span> s<span class="org-type">^</span>2<span class="org-type">/</span>w0<span class="org-type">^</span>2);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd3ff237" class="outline-3">
 | |
| <h3 id="orgd3ff237">Translation Stage</h3>
 | |
| <div class="outline-text-3" id="text-orgd3ff237">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Translation stage - Dy</span></span>
 | |
| t = 0<span class="org-type">:</span>Ts<span class="org-type">:</span>Tmax; <span class="org-comment">% Time Vector [s]</span>
 | |
| Dy   = zeros(length(t), 1);
 | |
| Dyd  = zeros(length(t), 1);
 | |
| Dydd = zeros(length(t), 1);
 | |
| <span class="org-keyword">switch</span> <span class="org-constant">args.Dy_type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'constant'</span>
 | |
|     Dy<span class="org-type">(:)   </span>= args.Dy_amplitude;
 | |
|     Dyd<span class="org-type">(:)  </span>= 0;
 | |
|     Dydd<span class="org-type">(:) </span>= 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'triangular'</span>
 | |
|     <span class="org-comment">% This is done to unsure that we start with no displacement</span>
 | |
|     Dy_raw = args.Dy_amplitude<span class="org-type">*</span>sawtooth(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>t<span class="org-type">/</span>args.Dy_period,1<span class="org-type">/</span>2);
 | |
|     i0 = find(t<span class="org-type">>=</span>args.Dy_period<span class="org-type">/</span>4,1);
 | |
|     Dy(1<span class="org-type">:</span>end<span class="org-type">-</span>i0<span class="org-type">+</span>1) = Dy_raw(i0<span class="org-type">:</span>end);
 | |
|     Dy(end<span class="org-type">-</span>i0<span class="org-type">+</span>2<span class="org-type">:</span>end) = Dy_raw(end); <span class="org-comment">% we fix the last value</span>
 | |
| 
 | |
|     <span class="org-comment">% The signal is filtered out</span>
 | |
|     Dy   = lsim(H_lpf,     Dy, t);
 | |
|     Dyd  = lsim(H_lpf<span class="org-type">*</span>s,   Dy, t);
 | |
|     Dydd = lsim(H_lpf<span class="org-type">*</span>s<span class="org-type">^</span>2, Dy, t);
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'sinusoidal'</span>
 | |
|     Dy<span class="org-type">(:) </span>= args.Dy_amplitude<span class="org-type">*</span>sin(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Dy_period<span class="org-type">*</span>t);
 | |
|     Dyd   = args.Dy_amplitude<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Dy_period<span class="org-type">*</span>cos(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Dy_period<span class="org-type">*</span>t);
 | |
|     Dydd  = <span class="org-type">-</span>args.Dy_amplitude<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Dy_period)<span class="org-type">^</span>2<span class="org-type">*</span>sin(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Dy_period<span class="org-type">*</span>t);
 | |
|   <span class="org-keyword">otherwise</span>
 | |
|     warning(<span class="org-string">'Dy_type is not set correctly'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| 
 | |
| Dy = struct(<span class="org-string">'time'</span>, t, <span class="org-string">'signals'</span>, struct(<span class="org-string">'values'</span>, Dy), <span class="org-string">'deriv'</span>, Dyd, <span class="org-string">'dderiv'</span>, Dydd);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org46b0509" class="outline-3">
 | |
| <h3 id="org46b0509">Tilt Stage</h3>
 | |
| <div class="outline-text-3" id="text-org46b0509">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Tilt Stage - Ry</span></span>
 | |
| t = 0<span class="org-type">:</span>Ts<span class="org-type">:</span>Tmax; <span class="org-comment">% Time Vector [s]</span>
 | |
| Ry   = zeros(length(t), 1);
 | |
| Ryd  = zeros(length(t), 1);
 | |
| Rydd = zeros(length(t), 1);
 | |
| 
 | |
| <span class="org-keyword">switch</span> <span class="org-constant">args.Ry_type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'constant'</span>
 | |
|     Ry<span class="org-type">(:) </span>= args.Ry_amplitude;
 | |
|     Ryd<span class="org-type">(:)   </span>= 0;
 | |
|     Rydd<span class="org-type">(:)  </span>= 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'triangular'</span>
 | |
|     Ry_raw = args.Ry_amplitude<span class="org-type">*</span>sawtooth(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>t<span class="org-type">/</span>args.Ry_period,1<span class="org-type">/</span>2);
 | |
|     i0 = find(t<span class="org-type">>=</span>args.Ry_period<span class="org-type">/</span>4,1);
 | |
|     Ry(1<span class="org-type">:</span>end<span class="org-type">-</span>i0<span class="org-type">+</span>1) = Ry_raw(i0<span class="org-type">:</span>end);
 | |
|     Ry(end<span class="org-type">-</span>i0<span class="org-type">+</span>2<span class="org-type">:</span>end) = Ry_raw(end); <span class="org-comment">% we fix the last value</span>
 | |
| 
 | |
|     <span class="org-comment">% The signal is filtered out</span>
 | |
|     Ry   = lsim(H_lpf,     Ry, t);
 | |
|     Ryd  = lsim(H_lpf<span class="org-type">*</span>s,   Ry, t);
 | |
|     Rydd = lsim(H_lpf<span class="org-type">*</span>s<span class="org-type">^</span>2, Ry, t);
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'sinusoidal'</span>
 | |
|     Ry<span class="org-type">(:) </span>= args.Ry_amplitude<span class="org-type">*</span>sin(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Ry_period<span class="org-type">*</span>t);
 | |
| 
 | |
|     Ryd  = args.Ry_amplitude<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Ry_period<span class="org-type">*</span>cos(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Ry_period<span class="org-type">*</span>t);
 | |
|     Rydd = <span class="org-type">-</span>args.Ry_amplitude<span class="org-type">*</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Ry_period)<span class="org-type">^</span>2<span class="org-type">*</span>sin(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Ry_period<span class="org-type">*</span>t);
 | |
|   <span class="org-keyword">otherwise</span>
 | |
|     warning(<span class="org-string">'Ry_type is not set correctly'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| 
 | |
| Ry = struct(<span class="org-string">'time'</span>, t, <span class="org-string">'signals'</span>, struct(<span class="org-string">'values'</span>, Ry), <span class="org-string">'deriv'</span>, Ryd, <span class="org-string">'dderiv'</span>, Rydd);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgb98f9a6" class="outline-3">
 | |
| <h3 id="orgb98f9a6">Spindle</h3>
 | |
| <div class="outline-text-3" id="text-orgb98f9a6">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Spindle - Rz</span></span>
 | |
| t = 0<span class="org-type">:</span>Ts<span class="org-type">:</span>Tmax; <span class="org-comment">% Time Vector [s]</span>
 | |
| Rz   = zeros(length(t), 1);
 | |
| Rzd  = zeros(length(t), 1);
 | |
| Rzdd = zeros(length(t), 1);
 | |
| 
 | |
| <span class="org-keyword">switch</span> <span class="org-constant">args.Rz_type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'constant'</span>
 | |
|     Rz<span class="org-type">(:)   </span>= args.Rz_amplitude;
 | |
|     Rzd<span class="org-type">(:)  </span>= 0;
 | |
|     Rzdd<span class="org-type">(:) </span>= 0;
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'rotating'</span>
 | |
|     Rz<span class="org-type">(:) </span>= 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.Rz_period<span class="org-type">*</span>t;
 | |
| 
 | |
|     <span class="org-comment">% The signal is filtered out</span>
 | |
|     Rz   = lsim(H_lpf,     Rz, t);
 | |
|     Rzd  = lsim(H_lpf<span class="org-type">*</span>s,   Rz, t);
 | |
|     Rzdd = lsim(H_lpf<span class="org-type">*</span>s<span class="org-type">^</span>2, Rz, t);
 | |
| 
 | |
|     <span class="org-comment">% We add the angle offset</span>
 | |
|     Rz = Rz <span class="org-type">+</span> args.Rz_amplitude;
 | |
|   <span class="org-keyword">otherwise</span>
 | |
|     warning(<span class="org-string">'Rz_type is not set correctly'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| 
 | |
| Rz = struct(<span class="org-string">'time'</span>, t, <span class="org-string">'signals'</span>, struct(<span class="org-string">'values'</span>, Rz), <span class="org-string">'deriv'</span>, Rzd, <span class="org-string">'dderiv'</span>, Rzdd);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org49a14bb" class="outline-3">
 | |
| <h3 id="org49a14bb">Micro Hexapod</h3>
 | |
| <div class="outline-text-3" id="text-org49a14bb">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
 | |
| t = [0, Ts];
 | |
| Dh = zeros(length(t), 6);
 | |
| Dhl = zeros(length(t), 6);
 | |
| 
 | |
| <span class="org-keyword">switch</span> <span class="org-constant">args.Dh_type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'constant'</span>
 | |
|     Dh = [args.Dh_pos, args.Dh_pos];
 | |
| 
 | |
|     load(<span class="org-string">'mat/stages.mat'</span>, <span class="org-string">'micro_hexapod'</span>);
 | |
| 
 | |
|     AP = [args.Dh_pos(1) ; args.Dh_pos(2) ; args.Dh_pos(3)];
 | |
| 
 | |
|     tx = args.Dh_pos(4);
 | |
|     ty = args.Dh_pos(5);
 | |
|     tz = args.Dh_pos(6);
 | |
| 
 | |
|     ARB = [cos(tz) <span class="org-type">-</span>sin(tz) 0;
 | |
|            sin(tz)  cos(tz) 0;
 | |
|            0        0       1]<span class="org-type">*</span>...
 | |
|           [ cos(ty) 0 sin(ty);
 | |
|             0       1 0;
 | |
|            <span class="org-type">-</span>sin(ty) 0 cos(ty)]<span class="org-type">*</span>...
 | |
|           [1 0        0;
 | |
|            0 cos(tx) <span class="org-type">-</span>sin(tx);
 | |
|            0 sin(tx)  cos(tx)];
 | |
| 
 | |
|     [<span class="org-type">~</span>, Dhl] = inverseKinematics(micro_hexapod, <span class="org-string">'AP'</span>, AP, <span class="org-string">'ARB'</span>, ARB);
 | |
|     Dhl = [Dhl, Dhl];
 | |
|   <span class="org-keyword">otherwise</span>
 | |
|     warning(<span class="org-string">'Dh_type is not set correctly'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| 
 | |
| Dh = struct(<span class="org-string">'time'</span>, t, <span class="org-string">'signals'</span>, struct(<span class="org-string">'values'</span>, Dh));
 | |
| Dhl = struct(<span class="org-string">'time'</span>, t, <span class="org-string">'signals'</span>, struct(<span class="org-string">'values'</span>, Dhl));
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org04d73dc" class="outline-3">
 | |
| <h3 id="org04d73dc">Axis Compensation</h3>
 | |
| <div class="outline-text-3" id="text-org04d73dc">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Axis Compensation - Rm</span></span>
 | |
| t = [0, Ts];
 | |
| 
 | |
| Rm = [args.Rm_pos, args.Rm_pos];
 | |
| Rm = struct(<span class="org-string">'time'</span>, t, <span class="org-string">'signals'</span>, struct(<span class="org-string">'values'</span>, Rm));
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org4dc3820" class="outline-3">
 | |
| <h3 id="org4dc3820">Nano Hexapod</h3>
 | |
| <div class="outline-text-3" id="text-org4dc3820">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Nano-Hexapod</span></span>
 | |
| t = [0, Ts];
 | |
| Dn = zeros(length(t), 6);
 | |
| 
 | |
| <span class="org-keyword">switch</span> <span class="org-constant">args.Dn_type</span>
 | |
|   <span class="org-keyword">case</span> <span class="org-string">'constant'</span>
 | |
|     Dn = [args.Dn_pos, args.Dn_pos];
 | |
| 
 | |
|     load(<span class="org-string">'mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>);
 | |
| 
 | |
|     AP = [args.Dn_pos(1) ; args.Dn_pos(2) ; args.Dn_pos(3)];
 | |
| 
 | |
|     tx = args.Dn_pos(4);
 | |
|     ty = args.Dn_pos(5);
 | |
|     tz = args.Dn_pos(6);
 | |
| 
 | |
|     ARB = [cos(tz) <span class="org-type">-</span>sin(tz) 0;
 | |
|            sin(tz)  cos(tz) 0;
 | |
|            0        0       1]<span class="org-type">*</span>...
 | |
|           [ cos(ty) 0 sin(ty);
 | |
|             0       1 0;
 | |
|            <span class="org-type">-</span>sin(ty) 0 cos(ty)]<span class="org-type">*</span>...
 | |
|           [1 0        0;
 | |
|            0 cos(tx) <span class="org-type">-</span>sin(tx);
 | |
|            0 sin(tx)  cos(tx)];
 | |
| 
 | |
|     [<span class="org-type">~</span>, Dnl] = inverseKinematics(nano_hexapod, <span class="org-string">'AP'</span>, AP, <span class="org-string">'ARB'</span>, ARB);
 | |
|     Dnl = [Dnl, Dnl];
 | |
|   <span class="org-keyword">otherwise</span>
 | |
|     warning(<span class="org-string">'Dn_type is not set correctly'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| 
 | |
| Dn = struct(<span class="org-string">'time'</span>, t, <span class="org-string">'signals'</span>, struct(<span class="org-string">'values'</span>, Dn));
 | |
| Dnl = struct(<span class="org-string">'time'</span>, t, <span class="org-string">'signals'</span>, struct(<span class="org-string">'values'</span>, Dnl));
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org5446c1f" class="outline-3">
 | |
| <h3 id="org5446c1f">Save</h3>
 | |
| <div class="outline-text-3" id="text-org5446c1f">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">    <span class="org-matlab-cellbreak"><span class="org-comment">%% Save</span></span>
 | |
|     save(<span class="org-string">'./mat/nass_references.mat'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>, <span class="org-string">'Dh'</span>, <span class="org-string">'Dhl'</span>, <span class="org-string">'Rm'</span>, <span class="org-string">'Dn'</span>, <span class="org-string">'Dnl'</span>, <span class="org-string">'Ts'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org544c9dd" class="outline-2">
 | |
| <h2 id="org544c9dd"><span class="section-number-2">15</span> Initialize Disturbances</h2>
 | |
| <div class="outline-text-2" id="text-15">
 | |
| <p>
 | |
| <a id="org199c5f8"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orga2d8012" class="outline-3">
 | |
| <h3 id="orga2d8012">Function Declaration and Documentation</h3>
 | |
| <div class="outline-text-3" id="text-orga2d8012">
 | |
| <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">initializeDisturbances</span>(<span class="org-variable-name">args</span>)
 | |
| <span class="org-comment">% initializeDisturbances - Initialize the disturbances</span>
 | |
| <span class="org-comment">%</span>
 | |
| <span class="org-comment">% Syntax: [] = initializeDisturbances(args)</span>
 | |
| <span class="org-comment">%</span>
 | |
| <span class="org-comment">% Inputs:</span>
 | |
| <span class="org-comment">%    - args -</span>
 | |
| 
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org382c404" class="outline-3">
 | |
| <h3 id="org382c404">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org382c404">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|     <span class="org-comment">% Global parameter to enable or disable the disturbances</span>
 | |
|     args.enable logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
 | |
|     <span class="org-comment">% Ground Motion - X direction</span>
 | |
|     args.Dwx logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
 | |
|     <span class="org-comment">% Ground Motion - Y direction</span>
 | |
|     args.Dwy logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
 | |
|     <span class="org-comment">% Ground Motion - Z direction</span>
 | |
|     args.Dwz logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
 | |
|     <span class="org-comment">% Translation Stage - X direction</span>
 | |
|     args.Fty_x logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
 | |
|     <span class="org-comment">% Translation Stage - Z direction</span>
 | |
|     args.Fty_z logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
 | |
|     <span class="org-comment">% Spindle - Z direction</span>
 | |
|     args.Frz_z logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <div id="outline-container-orgf744aeb" class="outline-3">
 | |
| <h3 id="orgf744aeb">Load Data</h3>
 | |
| <div class="outline-text-3" id="text-orgf744aeb">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">load(<span class="org-string">'./mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <p>
 | |
| We remove the first frequency point that usually is very large.
 | |
| </p>
 | |
| </div>
 | |
| </div>
 | |
| <div id="outline-container-org6c7d666" class="outline-3">
 | |
| <h3 id="org6c7d666">Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org6c7d666">
 | |
| <p>
 | |
| We define some parameters that will be used in the algorithm.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">Fs = 2<span class="org-type">*</span>dist_f.f(end);      <span class="org-comment">% Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]</span>
 | |
| N  = 2<span class="org-type">*</span>length(dist_f.f);   <span class="org-comment">% Number of Samples match the one of the wanted PSD</span>
 | |
| T0 = N<span class="org-type">/</span>Fs;                 <span class="org-comment">% Signal Duration [s]</span>
 | |
| df = 1<span class="org-type">/</span>T0;                 <span class="org-comment">% Frequency resolution of the DFT [Hz]</span>
 | |
|                            <span class="org-comment">% Also equal to (dist_f.f(2)-dist_f.f(1))</span>
 | |
| t = linspace(0, T0, N<span class="org-type">+</span>1)<span class="org-type">'</span>; <span class="org-comment">% Time Vector [s]</span>
 | |
| Ts = 1<span class="org-type">/</span>Fs;                 <span class="org-comment">% Sampling Time [s]</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgb2108c4" class="outline-3">
 | |
| <h3 id="orgb2108c4">Ground Motion</h3>
 | |
| <div class="outline-text-3" id="text-orgb2108c4">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">phi = dist_f.psd_gm;
 | |
| C = zeros(N<span class="org-type">/</span>2,1);
 | |
| <span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:N/2</span>
 | |
|   C(<span class="org-constant">i</span>) = sqrt(phi(<span class="org-constant">i</span>)<span class="org-type">*</span>df);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Dwx <span class="org-type">&&</span> args.enable
 | |
|   rng<span class="org-type">(111);</span>
 | |
|   theta = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>rand(N<span class="org-type">/</span>2,1); <span class="org-comment">% Generate random phase [rad]</span>
 | |
|   Cx = [0 ; C<span class="org-type">.*</span>complex(cos(theta),sin(theta))];
 | |
|   Cx = [Cx; flipud(conj(Cx(2<span class="org-type">:</span>end)))];;
 | |
|   Dwx = N<span class="org-type">/</span>sqrt(2)<span class="org-type">*</span>ifft(Cx); <span class="org-comment">% Ground Motion - x direction [m]</span>
 | |
| <span class="org-keyword">else</span>
 | |
|   Dwx = zeros(length(t), 1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Dwy <span class="org-type">&&</span> args.enable
 | |
|   rng<span class="org-type">(112);</span>
 | |
|   theta = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>rand(N<span class="org-type">/</span>2,1); <span class="org-comment">% Generate random phase [rad]</span>
 | |
|   Cx = [0 ; C<span class="org-type">.*</span>complex(cos(theta),sin(theta))];
 | |
|   Cx = [Cx; flipud(conj(Cx(2<span class="org-type">:</span>end)))];;
 | |
|   Dwy = N<span class="org-type">/</span>sqrt(2)<span class="org-type">*</span>ifft(Cx); <span class="org-comment">% Ground Motion - y direction [m]</span>
 | |
| <span class="org-keyword">else</span>
 | |
|   Dwy = zeros(length(t), 1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Dwy <span class="org-type">&&</span> args.enable
 | |
|   rng<span class="org-type">(113);</span>
 | |
|   theta = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>rand(N<span class="org-type">/</span>2,1); <span class="org-comment">% Generate random phase [rad]</span>
 | |
|   Cx = [0 ; C<span class="org-type">.*</span>complex(cos(theta),sin(theta))];
 | |
|   Cx = [Cx; flipud(conj(Cx(2<span class="org-type">:</span>end)))];;
 | |
|   Dwz = N<span class="org-type">/</span>sqrt(2)<span class="org-type">*</span>ifft(Cx); <span class="org-comment">% Ground Motion - z direction [m]</span>
 | |
| <span class="org-keyword">else</span>
 | |
|   Dwz = zeros(length(t), 1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgb70c65e" class="outline-3">
 | |
| <h3 id="orgb70c65e">Translation Stage - X direction</h3>
 | |
| <div class="outline-text-3" id="text-orgb70c65e">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Fty_x <span class="org-type">&&</span> args.enable
 | |
|   phi = dist_f.psd_ty; <span class="org-comment">% TODO - we take here the vertical direction which is wrong but approximate</span>
 | |
|   C = zeros(N<span class="org-type">/</span>2,1);
 | |
|   <span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:N/2</span>
 | |
|     C(<span class="org-constant">i</span>) = sqrt(phi(<span class="org-constant">i</span>)<span class="org-type">*</span>df);
 | |
|   <span class="org-keyword">end</span>
 | |
|   rng<span class="org-type">(121);</span>
 | |
|   theta = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>rand(N<span class="org-type">/</span>2,1); <span class="org-comment">% Generate random phase [rad]</span>
 | |
|   Cx = [0 ; C<span class="org-type">.*</span>complex(cos(theta),sin(theta))];
 | |
|   Cx = [Cx; flipud(conj(Cx(2<span class="org-type">:</span>end)))];;
 | |
|   u = N<span class="org-type">/</span>sqrt(2)<span class="org-type">*</span>ifft(Cx); <span class="org-comment">% Disturbance Force Ty x [N]</span>
 | |
|   Fty_x = u;
 | |
| <span class="org-keyword">else</span>
 | |
|   Fty_x = zeros(length(t), 1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org070255a" class="outline-3">
 | |
| <h3 id="org070255a">Translation Stage - Z direction</h3>
 | |
| <div class="outline-text-3" id="text-org070255a">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Fty_z <span class="org-type">&&</span> args.enable
 | |
|   phi = dist_f.psd_ty;
 | |
|   C = zeros(N<span class="org-type">/</span>2,1);
 | |
|   <span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:N/2</span>
 | |
|     C(<span class="org-constant">i</span>) = sqrt(phi(<span class="org-constant">i</span>)<span class="org-type">*</span>df);
 | |
|   <span class="org-keyword">end</span>
 | |
|   rng<span class="org-type">(122);</span>
 | |
|   theta = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>rand(N<span class="org-type">/</span>2,1); <span class="org-comment">% Generate random phase [rad]</span>
 | |
|   Cx = [0 ; C<span class="org-type">.*</span>complex(cos(theta),sin(theta))];
 | |
|   Cx = [Cx; flipud(conj(Cx(2<span class="org-type">:</span>end)))];;
 | |
|   u = N<span class="org-type">/</span>sqrt(2)<span class="org-type">*</span>ifft(Cx); <span class="org-comment">% Disturbance Force Ty z [N]</span>
 | |
|   Fty_z = u;
 | |
| <span class="org-keyword">else</span>
 | |
|   Fty_z = zeros(length(t), 1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgfd5f32b" class="outline-3">
 | |
| <h3 id="orgfd5f32b">Spindle - Z direction</h3>
 | |
| <div class="outline-text-3" id="text-orgfd5f32b">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.Frz_z <span class="org-type">&&</span> args.enable
 | |
|   phi = dist_f.psd_rz;
 | |
|   C = zeros(N<span class="org-type">/</span>2,1);
 | |
|   <span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:N/2</span>
 | |
|     C(<span class="org-constant">i</span>) = sqrt(phi(<span class="org-constant">i</span>)<span class="org-type">*</span>df);
 | |
|   <span class="org-keyword">end</span>
 | |
|   rng<span class="org-type">(131);</span>
 | |
|   theta = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>rand(N<span class="org-type">/</span>2,1); <span class="org-comment">% Generate random phase [rad]</span>
 | |
|   Cx = [0 ; C<span class="org-type">.*</span>complex(cos(theta),sin(theta))];
 | |
|   Cx = [Cx; flipud(conj(Cx(2<span class="org-type">:</span>end)))];;
 | |
|   u = N<span class="org-type">/</span>sqrt(2)<span class="org-type">*</span>ifft(Cx); <span class="org-comment">% Disturbance Force Rz z [N]</span>
 | |
|   Frz_z = u;
 | |
| <span class="org-keyword">else</span>
 | |
|   Frz_z = zeros(length(t), 1);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgba4d479" class="outline-3">
 | |
| <h3 id="orgba4d479">Direct Forces</h3>
 | |
| <div class="outline-text-3" id="text-orgba4d479">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">u = zeros(length(t), 6);
 | |
| Fd = u;
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgf6d2198" class="outline-3">
 | |
| <h3 id="orgf6d2198">Set initial value to zero</h3>
 | |
| <div class="outline-text-3" id="text-orgf6d2198">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">Dwx    = Dwx   <span class="org-type">-</span> Dwx(1);
 | |
| Dwy    = Dwy   <span class="org-type">-</span> Dwy(1);
 | |
| Dwz    = Dwz   <span class="org-type">-</span> Dwz(1);
 | |
| Fty_x  = Fty_x <span class="org-type">-</span> Fty_x(1);
 | |
| Fty_z  = Fty_z <span class="org-type">-</span> Fty_z(1);
 | |
| Frz_z  = Frz_z <span class="org-type">-</span> Frz_z(1);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgbc79b0f" class="outline-3">
 | |
| <h3 id="orgbc79b0f">Save</h3>
 | |
| <div class="outline-text-3" id="text-orgbc79b0f">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/nass_disturbances.mat'</span>, <span class="org-string">'Dwx'</span>, <span class="org-string">'Dwy'</span>, <span class="org-string">'Dwz'</span>, <span class="org-string">'Fty_x'</span>, <span class="org-string">'Fty_z'</span>, <span class="org-string">'Frz_z'</span>, <span class="org-string">'Fd'</span>, <span class="org-string">'Ts'</span>, <span class="org-string">'t'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgefb8a5e" class="outline-2">
 | |
| <h2 id="orgefb8a5e"><span class="section-number-2">16</span> Initialize Position Errors</h2>
 | |
| <div class="outline-text-2" id="text-16">
 | |
| <p>
 | |
| <a id="orga39c5fc"></a>
 | |
| </p>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgb650d4c" class="outline-3">
 | |
| <h3 id="orgb650d4c">Function Declaration and Documentation</h3>
 | |
| <div class="outline-text-3" id="text-orgb650d4c">
 | |
| <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">initializePosError</span>(<span class="org-variable-name">args</span>)
 | |
| <span class="org-comment">% initializePosError - Initialize the position errors</span>
 | |
| <span class="org-comment">%</span>
 | |
| <span class="org-comment">% Syntax: [] = initializePosError(args)</span>
 | |
| <span class="org-comment">%</span>
 | |
| <span class="org-comment">% Inputs:</span>
 | |
| <span class="org-comment">%    - args -</span>
 | |
| 
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org902a1e1" class="outline-3">
 | |
| <h3 id="org902a1e1">Optional Parameters</h3>
 | |
| <div class="outline-text-3" id="text-org902a1e1">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">arguments
 | |
|     args.error    logical {mustBeNumericOrLogical} = <span class="org-constant">false</span>
 | |
|     args.Dy (1,1) double  {mustBeNumeric} = 0 <span class="org-comment">% [m]</span>
 | |
|     args.Ry (1,1) double  {mustBeNumeric} = 0 <span class="org-comment">% [m]</span>
 | |
|     args.Rz (1,1) double  {mustBeNumeric} = 0 <span class="org-comment">% [m]</span>
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org44bc280" class="outline-3">
 | |
| <h3 id="org44bc280">Structure initialization</h3>
 | |
| <div class="outline-text-3" id="text-org44bc280">
 | |
| <p>
 | |
| First, we initialize the <code>pos_error</code> structure.
 | |
| </p>
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">pos_error = struct();
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgc890f7d" class="outline-3">
 | |
| <h3 id="orgc890f7d">Type</h3>
 | |
| <div class="outline-text-3" id="text-orgc890f7d">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">if</span> args.error
 | |
|   pos_error.type = 1;
 | |
| <span class="org-keyword">else</span>
 | |
|   pos_error.type = 0;
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-org7d50228" class="outline-3">
 | |
| <h3 id="org7d50228">Position Errors</h3>
 | |
| <div class="outline-text-3" id="text-org7d50228">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">pos_error.Dy = args.Dy;
 | |
| pos_error.Ry = args.Ry;
 | |
| pos_error.Rz = args.Rz;
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgd21e485" class="outline-3">
 | |
| <h3 id="orgd21e485">Save</h3>
 | |
| <div class="outline-text-3" id="text-orgd21e485">
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab">save(<span class="org-string">'./mat/pos_error.mat'</span>, <span class="org-string">'pos_error'</span>);
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgc87e890" class="outline-2">
 | |
| <h2 id="orgc87e890"><span class="section-number-2">17</span> Z-Axis Geophone</h2>
 | |
| <div class="outline-text-2" id="text-17">
 | |
| <p>
 | |
| <a id="orgda06de2"></a>
 | |
| </p>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[geophone]</span> = <span class="org-function-name">initializeZAxisGeophone</span>(<span class="org-variable-name">args</span>)
 | |
|     arguments
 | |
|         args.mass (1,1) double {mustBeNumeric, mustBePositive} = 1e<span class="org-type">-</span>3 <span class="org-comment">% [kg]</span>
 | |
|         args.freq (1,1) double {mustBeNumeric, mustBePositive} = 1    <span class="org-comment">% [Hz]</span>
 | |
|     <span class="org-keyword">end</span>
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%%</span></span>
 | |
|     geophone.m = args.mass;
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%% The Stiffness is set to have the damping resonance frequency</span></span>
 | |
|     geophone.k = geophone.m <span class="org-type">*</span> (2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>args.freq)<span class="org-type">^</span>2;
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%% We set the damping value to have critical damping</span></span>
 | |
|     geophone.c = 2<span class="org-type">*</span>sqrt(geophone.m <span class="org-type">*</span> geophone.k);
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%% Save</span></span>
 | |
|     save(<span class="org-string">'./mat/geophone_z_axis.mat'</span>, <span class="org-string">'geophone'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <div id="outline-container-orgcbddbd1" class="outline-2">
 | |
| <h2 id="orgcbddbd1"><span class="section-number-2">18</span> Z-Axis Accelerometer</h2>
 | |
| <div class="outline-text-2" id="text-18">
 | |
| <p>
 | |
| <a id="org071e205"></a>
 | |
| </p>
 | |
| 
 | |
| <div class="org-src-container">
 | |
| <pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[accelerometer]</span> = <span class="org-function-name">initializeZAxisAccelerometer</span>(<span class="org-variable-name">args</span>)
 | |
|     arguments
 | |
|         args.mass (1,1) double {mustBeNumeric, mustBePositive} = 1e<span class="org-type">-</span>3 <span class="org-comment">% [kg]</span>
 | |
|         args.freq (1,1) double {mustBeNumeric, mustBePositive} = 5e3  <span class="org-comment">% [Hz]</span>
 | |
|     <span class="org-keyword">end</span>
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%%</span></span>
 | |
|     accelerometer.m = args.mass;
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%% The Stiffness is set to have the damping resonance frequency</span></span>
 | |
|     accelerometer.k = accelerometer.m <span class="org-type">*</span> (2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>args.freq)<span class="org-type">^</span>2;
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%% We set the damping value to have critical damping</span></span>
 | |
|     accelerometer.c = 2<span class="org-type">*</span>sqrt(accelerometer.m <span class="org-type">*</span> accelerometer.k);
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%% Gain correction of the accelerometer to have a unity gain until the resonance</span></span>
 | |
|     accelerometer.gain = <span class="org-type">-</span>accelerometer.k<span class="org-type">/</span>accelerometer.m;
 | |
| 
 | |
|     <span class="org-matlab-cellbreak"><span class="org-comment">%% Save</span></span>
 | |
|     save(<span class="org-string">'./mat/accelerometer_z_axis.mat'</span>, <span class="org-string">'accelerometer'</span>);
 | |
| <span class="org-keyword">end</span>
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| <div id="postamble" class="status">
 | |
| <p class="author">Author: Dehaeze Thomas</p>
 | |
| <p class="date">Created: 2020-03-23 lun. 10:05</p>
 | |
| </div>
 | |
| </body>
 | |
| </html>
 |