nass-simscape/identification/index.html
Thomas Dehaeze 73a3735f19 Modal Analysis of the Micro Station
The Center of Mass of each solid has been identified using the
inertia sensor block.
Then, the modal analysis done on the real station is virtual done
on the simscape model.
Then the results are compare in order to tune the Simscape model.
2019-12-13 15:54:10 +01:00

786 lines
34 KiB
HTML

<?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>
<!-- 2019-12-13 ven. 15:53 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Identification</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-2019 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>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
displayAlign: "center",
displayIndent: "0em",
"HTML-CSS": { scale: 100,
linebreaks: { automatic: "false" },
webFont: "TeX"
},
SVG: {scale: 100,
linebreaks: { automatic: "false" },
font: "TeX"},
NativeMML: {scale: 100},
TeX: { equationNumbers: {autoNumber: "AMS"},
MultLineWidth: "85%",
TagSide: "right",
TagIndent: ".8em",
Macros: {
bm: ["{\\boldsymbol #1}",1],
}
}
});
</script>
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"></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">Identification</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgb8d5122">1. Some notes about the Simscape Model</a></li>
<li><a href="#orgc2a789d">2. Compare with measurements at the CoM of each element</a>
<ul>
<li><a href="#orgf4fd5e0">2.1. Prepare the Simulation</a></li>
<li><a href="#org80db7e9">2.2. Estimate the position of the CoM of each solid and compare with the one took for the Measurement Analysis</a></li>
<li><a href="#org93dc35e">2.3. Create a frame at the CoM of each solid body</a></li>
<li><a href="#org7b8b6f1">2.4. Identification of the dynamics of the Simscape Model</a></li>
<li><a href="#org45a93e8">2.5. Compare with measurements</a></li>
</ul>
</li>
<li><a href="#org75fd8be">3. Conclusion</a></li>
</ul>
</div>
</div>
<p>
The goal here is to tune the Simscape model of the station in order to have a good dynamical representation of the real system.
</p>
<p>
In order to do so, we reproduce the Modal Analysis done on the station using the Simscape model.
</p>
<p>
We can then compare the measured Frequency Response Functions with the identified dynamics of the model.
</p>
<p>
Finally, this should help to tune the parameters of the model such that the dynamics is closer to the measured FRF.
</p>
<div id="outline-container-orgb8d5122" class="outline-2">
<h2 id="orgb8d5122"><span class="section-number-2">1</span> Some notes about the Simscape Model</h2>
<div class="outline-text-2" id="text-1">
<p>
The Simscape Model of the micro-station consists of several solid bodies:
</p>
<ul class="org-ul">
<li>Bottom Granite</li>
<li>Top Granite</li>
<li>Translation Stage</li>
<li>Tilt Stage</li>
<li>Spindle</li>
<li>Hexapod</li>
</ul>
<p>
Each solid body has some characteristics: Center of Mass, mass, moment of inertia, etc&#x2026;
These parameters are automatically computed from the geometry and from the density of the materials.
</p>
<p>
Then, the solid bodies are connected with springs and dampers.
Some of the springs and dampers values can be estimated from the joints/stages specifications, however, we here prefer to tune these values based on the measurements.
</p>
</div>
</div>
<div id="outline-container-orgc2a789d" class="outline-2">
<h2 id="orgc2a789d"><span class="section-number-2">2</span> Compare with measurements at the CoM of each element</h2>
<div class="outline-text-2" id="text-2">
<p>
<a href="../../meas/modal-analysis/index.html">here</a>
</p>
</div>
<div id="outline-container-orgf4fd5e0" class="outline-3">
<h3 id="orgf4fd5e0"><span class="section-number-3">2.1</span> Prepare the Simulation</h3>
<div class="outline-text-3" id="text-2-1">
<p>
We load the configuration.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/conf_simscape.mat'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<p>
We set a small <code>StopTime</code>.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">set_param</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">conf_simscape</span>, <span class="org-string">'StopTime'</span>, '<span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">5</span><span class="org-type">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<p>
We initialize all the stages.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeGranite<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeTy<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeRy<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeRz<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeMicroHexapod<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeAxisc<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeMirror<span class="org-rainbow-delimiters-depth-1">()</span>;
initializeNanoHexapod<span class="org-rainbow-delimiters-depth-1">(</span>struct<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
initializeSample<span class="org-rainbow-delimiters-depth-1">(</span>struct<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'mass'</span>, <span class="org-highlight-numbers-number">50</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
</div>
</div>
<div id="outline-container-org80db7e9" class="outline-3">
<h3 id="org80db7e9"><span class="section-number-3">2.2</span> Estimate the position of the CoM of each solid and compare with the one took for the Measurement Analysis</h3>
<div class="outline-text-3" id="text-2-2">
<div class="org-src-container">
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_com.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
</pre>
</div>
<p>
Thanks to the <a href="https://fr.mathworks.com/help/physmod/sm/ref/inertiasensor.html">Inertia Sensor</a> simscape block, it is possible to estimate the position of the Center of Mass of a solid body with respect to a defined frame.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'sim_micro_station_com'</span><span class="org-rainbow-delimiters-depth-1">)</span>
</pre>
</div>
<p>
The results are shown in the table <a href="#orgb162423">1</a>.
</p>
<table id="orgb162423" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Center of Mass of each solid body as defined in Simscape</caption>
<colgroup>
<col class="org-left" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-right">granite bot</th>
<th scope="col" class="org-right">granite top</th>
<th scope="col" class="org-right">ty</th>
<th scope="col" class="org-right">ry</th>
<th scope="col" class="org-right">rz</th>
<th scope="col" class="org-right">hexa</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">X [mm]</td>
<td class="org-right">52.4</td>
<td class="org-right">51.7</td>
<td class="org-right">0.9</td>
<td class="org-right">-0.1</td>
<td class="org-right">0.0</td>
<td class="org-right">-0.0</td>
</tr>
<tr>
<td class="org-left">Y [mm]</td>
<td class="org-right">190.4</td>
<td class="org-right">263.2</td>
<td class="org-right">0.7</td>
<td class="org-right">5.2</td>
<td class="org-right">-0.0</td>
<td class="org-right">0.1</td>
</tr>
<tr>
<td class="org-left">Z [mm]</td>
<td class="org-right">-1200.0</td>
<td class="org-right">-777.1</td>
<td class="org-right">-598.9</td>
<td class="org-right">-627.7</td>
<td class="org-right">-643.2</td>
<td class="org-right">-317.1</td>
</tr>
</tbody>
</table>
<p>
We can compare the obtained center of mass (table <a href="#orgb162423">1</a>) with the one used for the Modal Analysis shown in table <a href="#org7f786a2">2</a>.
</p>
<table id="org7f786a2" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Estimated Center of Mass of each solid body using Solidworks</caption>
<colgroup>
<col class="org-left" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-right">granite bot</th>
<th scope="col" class="org-right">granite top</th>
<th scope="col" class="org-right">ty</th>
<th scope="col" class="org-right">ry</th>
<th scope="col" class="org-right">rz</th>
<th scope="col" class="org-right">hexa</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">X [mm]</td>
<td class="org-right">45</td>
<td class="org-right">52</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
<td class="org-right">0</td>
<td class="org-right">-4</td>
</tr>
<tr>
<td class="org-left">Y [mm]</td>
<td class="org-right">144</td>
<td class="org-right">258</td>
<td class="org-right">14</td>
<td class="org-right">-5</td>
<td class="org-right">0</td>
<td class="org-right">6</td>
</tr>
<tr>
<td class="org-left">Z [mm]</td>
<td class="org-right">-1251</td>
<td class="org-right">-778</td>
<td class="org-right">-600</td>
<td class="org-right">-628</td>
<td class="org-right">-580</td>
<td class="org-right">-319</td>
</tr>
</tbody>
</table>
<p>
The results are quite similar.
The differences can be explained by some differences in the chosen density of the materials or by the fact that not exactly all the same elements have been chosen for each stage.
</p>
<p>
For instance, on simscape, the fixed part of the translation stage counts for the top granite solid body.
However, in SolidWorks, this has probably not be included with the top granite.
</p>
</div>
</div>
<div id="outline-container-org93dc35e" class="outline-3">
<h3 id="org93dc35e"><span class="section-number-3">2.3</span> Create a frame at the CoM of each solid body</h3>
<div class="outline-text-3" id="text-2-3">
<p>
Now we use one <code>inertiasensor</code> block connected on each solid body that measured the center of mass of this solid with respect to the same connected frame.
</p>
<p>
We do that in order to position an accelerometer on the Simscape model at this particular point.
</p>
<div class="org-src-container">
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_com_estimation.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'sim_micro_station_com_estimation'</span><span class="org-rainbow-delimiters-depth-1">)</span>
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-right">granite bot</th>
<th scope="col" class="org-right">granite top</th>
<th scope="col" class="org-right">ty</th>
<th scope="col" class="org-right">ry</th>
<th scope="col" class="org-right">rz</th>
<th scope="col" class="org-right">hexa</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">X [mm]</td>
<td class="org-right">0.0</td>
<td class="org-right">51.7</td>
<td class="org-right">0.9</td>
<td class="org-right">-0.1</td>
<td class="org-right">0.0</td>
<td class="org-right">-0.0</td>
</tr>
<tr>
<td class="org-left">Y [mm]</td>
<td class="org-right">0.0</td>
<td class="org-right">753.2</td>
<td class="org-right">0.7</td>
<td class="org-right">5.2</td>
<td class="org-right">-0.0</td>
<td class="org-right">0.1</td>
</tr>
<tr>
<td class="org-left">Z [mm]</td>
<td class="org-right">-250.0</td>
<td class="org-right">22.9</td>
<td class="org-right">-17.1</td>
<td class="org-right">-146.5</td>
<td class="org-right">-23.2</td>
<td class="org-right">-47.1</td>
</tr>
</tbody>
</table>
<p>
We now same this for further use:
</p>
<div class="org-src-container">
<pre class="src src-matlab">granite_bot_com = granite_bot_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
granite_top_com = granite_top_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
ty_com = ty_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
ry_com = ry_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
rz_com = rz_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
hexa_com = hexa_com.Data<span class="org-rainbow-delimiters-depth-1">(</span>end, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">'</span>;
save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/solids_com.mat'</span>, <span class="org-string">'granite_bot_com'</span>, <span class="org-string">'granite_top_com'</span>, <span class="org-string">'ty_com'</span>, <span class="org-string">'ry_com'</span>, <span class="org-string">'rz_com'</span>, <span class="org-string">'hexa_com'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<p>
Then, we use the obtained results to add a <code>rigidTransform</code> block in order to create a new frame at the center of mass of each solid body.
</p>
</div>
</div>
<div id="outline-container-org7b8b6f1" class="outline-3">
<h3 id="org7b8b6f1"><span class="section-number-3">2.4</span> Identification of the dynamics of the Simscape Model</h3>
<div class="outline-text-3" id="text-2-4">
<p>
We now use a new Simscape Model where 6DoF inertial sensors are located at the Center of Mass of each solid body.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/solids_com.mat'</span>, <span class="org-string">'granite_bot_com'</span>, <span class="org-string">'granite_top_com'</span>, <span class="org-string">'ty_com'</span>, <span class="org-string">'ry_com'</span>, <span class="org-string">'rz_com'</span>, <span class="org-string">'hexa_com'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">open<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'identification/matlab/sim_micro_station_modal_analysis_com.slx'</span><span class="org-rainbow-delimiters-depth-1">)</span>
</pre>
</div>
<p>
We use the <code>linearize</code> function in order to estimate the dynamics from forces applied on the Translation stage at the same position used for the real modal analysis to the inertial sensors.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
options = linearizeOptions;
options.SampleTime = <span class="org-highlight-numbers-number">0</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'sim_micro_station_modal_analysis_com'</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Micro-Hexapod</span></span>
<span class="org-comment">% Input/Output definition</span>
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/F_hammer'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'openinput'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_gtop'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_ty'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_ry'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_rz'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
io<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span> = linio<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>mdl, <span class="org-string">'/acc_hexa'</span><span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-highlight-numbers-number">1</span>,<span class="org-string">'output'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% Run the linearization</span>
G_ms = linearize<span class="org-rainbow-delimiters-depth-1">(</span>mdl, io, <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-comment">% Input/Output names</span>
G_ms.InputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
G_ms.OutputName = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'gtop_x'</span>, <span class="org-string">'gtop_y'</span>, <span class="org-string">'gtop_z'</span>, <span class="org-string">'gtop_rx'</span>, <span class="org-string">'gtop_ry'</span>, <span class="org-string">'gtop_rz'</span>, ...
<span class="org-string">'ty_x'</span>, <span class="org-string">'ty_y'</span>, <span class="org-string">'ty_z'</span>, <span class="org-string">'ty_rx'</span>, <span class="org-string">'ty_ry'</span>, <span class="org-string">'ty_rz'</span>, ...
<span class="org-string">'ry_x'</span>, <span class="org-string">'ry_y'</span>, <span class="org-string">'ry_z'</span>, <span class="org-string">'ry_rx'</span>, <span class="org-string">'ry_ry'</span>, <span class="org-string">'ry_rz'</span>, ...
<span class="org-string">'rz_x'</span>, <span class="org-string">'rz_y'</span>, <span class="org-string">'rz_z'</span>, <span class="org-string">'rz_rx'</span>, <span class="org-string">'rz_ry'</span>, <span class="org-string">'rz_rz'</span>, ...
<span class="org-string">'hexa_x'</span>, <span class="org-string">'hexa_y'</span>, <span class="org-string">'hexa_z'</span>, <span class="org-string">'hexa_rx'</span>, <span class="org-string">'hexa_ry'</span>, <span class="org-string">'hexa_rz'</span><span class="org-rainbow-delimiters-depth-1">}</span>;
</pre>
</div>
<p>
The output of <code>G_ms</code> is the acceleration of each solid body.
In order to obtain a displacement, we divide the obtained transfer function by \(1/s^{2}\);
</p>
<div class="org-src-container">
<pre class="src src-matlab">G_ms = G_ms<span class="org-type">/</span>s<span class="org-type">^</span><span class="org-highlight-numbers-number">2</span>;
</pre>
</div>
</div>
</div>
<div id="outline-container-org45a93e8" class="outline-3">
<h3 id="org45a93e8"><span class="section-number-3">2.5</span> Compare with measurements</h3>
<div class="outline-text-3" id="text-2-5">
<p>
We now load the Frequency Response Functions measurements during the Modal Analysis (accessible <a href="../../meas/modal-analysis/index.html">here</a>).
</p>
<div class="org-src-container">
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'../meas/modal-analysis/mat/frf_coh_matrices.mat'</span>, <span class="org-string">'freqs'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'../meas/modal-analysis/mat/frf_com.mat'</span>, <span class="org-string">'FRFs_CoM'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<p>
We then compare the measurements with the identified transfer functions using the Simscape Model.
</p>
<div id="org6215dd8" class="figure">
<p><img src="figs/identification_comp_bot_stages.png" alt="identification_comp_bot_stages.png" />
</p>
<p><span class="figure-number">Figure 1: </span>caption (<a href="./figs/identification_comp_bot_stages.png">png</a>, <a href="./figs/identification_comp_bot_stages.pdf">pdf</a>)</p>
</div>
<div id="org3a94e0d" class="figure">
<p><img src="figs/identification_comp_mid_stages.png" alt="identification_comp_mid_stages.png" />
</p>
<p><span class="figure-number">Figure 2: </span>caption (<a href="./figs/identification_comp_mid_stages.png">png</a>, <a href="./figs/identification_comp_mid_stages.pdf">pdf</a>)</p>
</div>
<div id="orgaf6f4aa" class="figure">
<p><img src="figs/identification_comp_top_stages.png" alt="identification_comp_top_stages.png" />
</p>
<p><span class="figure-number">Figure 3: </span>caption (<a href="./figs/identification_comp_top_stages.png">png</a>, <a href="./figs/identification_comp_top_stages.pdf">pdf</a>)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org75fd8be" class="outline-2">
<h2 id="org75fd8be"><span class="section-number-2">3</span> Conclusion</h2>
<div class="outline-text-2" id="text-3">
<div class="important">
<p>
For such a complex system, we believe that the Simscape Model represents the dynamics of the system with enough fidelity.
</p>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2019-12-13 ven. 15:53</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>