Update stiffness of Ty stage. Add init of Cedrat actuator

This commit is contained in:
Thomas Dehaeze 2019-11-22 10:39:08 +01:00
parent 080996e579
commit 0ed2768295
4 changed files with 355 additions and 247 deletions

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2019-10-15 mar. 09:28 --> <!-- 2019-10-16 mer. 13:20 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simscape Model</title> <title>Simscape Model</title>
@ -258,68 +258,68 @@ for the JavaScript code in this tag.
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org96e2c6b">1. Simulink Project - Startup and Shutdown scripts</a></li> <li><a href="#org3e1cf29">1. Simulink Project - Startup and Shutdown scripts</a></li>
<li><a href="#orgf16072c">2. Simscape Multibody - Presentation</a> <li><a href="#org1c09342">2. Simscape Multibody - Presentation</a>
<ul> <ul>
<li><a href="#orgbc7aec6">2.1. Solid bodies</a></li> <li><a href="#org8456f59">2.1. Solid bodies</a></li>
<li><a href="#org299ad31">2.2. Frames</a></li> <li><a href="#orge3189c0">2.2. Frames</a></li>
<li><a href="#org63bf417">2.3. Joints</a></li> <li><a href="#orgde21d23">2.3. Joints</a></li>
<li><a href="#org0aea933">2.4. Measurements</a></li> <li><a href="#org00591e4">2.4. Measurements</a></li>
<li><a href="#orgdb1ed37">2.5. Excitation</a></li> <li><a href="#org3527feb">2.5. Excitation</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgc5e1ba2">3. Simulink files and signal names</a> <li><a href="#orgcf96a70">3. Simulink files and signal names</a>
<ul> <ul>
<li><a href="#org4e2c64d">3.1. List of Simscape files</a></li> <li><a href="#orgc3c8276">3.1. List of Simscape files</a></li>
<li><a href="#org7e6d6ee">3.2. List of Inputs</a> <li><a href="#orgd725cbe">3.2. List of Inputs</a>
<ul> <ul>
<li><a href="#org6645203">3.2.1. Perturbations</a></li> <li><a href="#orgc8c59ec">3.2.1. Perturbations</a></li>
<li><a href="#org7be9ba3">3.2.2. Measurement Noise</a></li> <li><a href="#org083bb4b">3.2.2. Measurement Noise</a></li>
<li><a href="#org41b1dfa">3.2.3. Control Inputs</a></li> <li><a href="#org3cd7a2c">3.2.3. Control Inputs</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orge471f78">3.3. List of Outputs</a></li> <li><a href="#orgfd2e554">3.3. List of Outputs</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org5525cc6">4. Simulink Library</a> <li><a href="#org49831aa">4. Simulink Library</a>
<ul> <ul>
<li><a href="#orgf34437e">4.1. <code>inputs</code></a></li> <li><a href="#org3f18fb2">4.1. <code>inputs</code></a></li>
<li><a href="#org45cb930">4.2. <code>nass_library</code></a></li> <li><a href="#orgaefc1f3">4.2. <code>nass_library</code></a></li>
<li><a href="#orgc05468b">4.3. <code>pos_error_wrt_nass_base</code></a></li> <li><a href="#org68263b0">4.3. <code>pos_error_wrt_nass_base</code></a></li>
<li><a href="#org933ef5e">4.4. <code>QuaternionToAngles</code></a></li> <li><a href="#org6d2bf6b">4.4. <code>QuaternionToAngles</code></a></li>
<li><a href="#org2bc9fbc">4.5. <code>RotationMatrixToAngle</code></a></li> <li><a href="#org2497f48">4.5. <code>RotationMatrixToAngle</code></a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgb9ce7fd">5. Scripts</a> <li><a href="#org806f9e5">5. Scripts</a>
<ul> <ul>
<li><a href="#orgf33c223">5.1. Simulation Initialization</a></li> <li><a href="#orge58f7eb">5.1. Simulation Initialization</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org4fdacaa">6. Functions</a> <li><a href="#orgb738acb">6. Functions</a>
<ul> <ul>
<li><a href="#org43915cc">6.1. computePsdDispl</a></li> <li><a href="#orga74019d">6.1. computePsdDispl</a></li>
<li><a href="#orgd7ee25b">6.2. computeSetpoint</a></li> <li><a href="#orgf72e736">6.2. computeSetpoint</a></li>
<li><a href="#orgbb5f7a9">6.3. converErrorBasis</a></li> <li><a href="#org9651b74">6.3. converErrorBasis</a></li>
<li><a href="#org4a8080d">6.4. generateDiagPidControl</a></li> <li><a href="#org7afdcb3">6.4. generateDiagPidControl</a></li>
<li><a href="#org0bca141">6.5. identifyPlant</a></li> <li><a href="#orgdb550d2">6.5. identifyPlant</a></li>
<li><a href="#orgb5a1268">6.6. runSimulation</a></li> <li><a href="#orgd7e834e">6.6. runSimulation</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org3d69ec6">7. Initialize Elements</a> <li><a href="#org18d0a30">7. Initialize Elements</a>
<ul> <ul>
<li><a href="#orgc4959ef">7.1. Simulation Configuration</a></li> <li><a href="#org9fe06e1">7.1. Simulation Configuration</a></li>
<li><a href="#org2fb7886">7.2. Experiment</a></li> <li><a href="#org66f3562">7.2. Experiment</a></li>
<li><a href="#org710acf3">7.3. Inputs</a></li> <li><a href="#org79e1d7e">7.3. Inputs</a></li>
<li><a href="#orge26db3d">7.4. Ground</a></li> <li><a href="#orgb40ac8d">7.4. Ground</a></li>
<li><a href="#org725a842">7.5. Granite</a></li> <li><a href="#org8b53c51">7.5. Granite</a></li>
<li><a href="#org505fe65">7.6. Translation Stage</a></li> <li><a href="#org45b15c7">7.6. Translation Stage</a></li>
<li><a href="#org4a37dc0">7.7. Tilt Stage</a></li> <li><a href="#orgb4f2e7d">7.7. Tilt Stage</a></li>
<li><a href="#org9f4e484">7.8. Spindle</a></li> <li><a href="#orgc9fe898">7.8. Spindle</a></li>
<li><a href="#org0a3467b">7.9. Micro Hexapod</a></li> <li><a href="#org438103e">7.9. Micro Hexapod</a></li>
<li><a href="#org0b6b398">7.10. Center of gravity compensation</a></li> <li><a href="#org85b3f9f">7.10. Center of gravity compensation</a></li>
<li><a href="#org450d92d">7.11. Mirror</a></li> <li><a href="#org68746c9">7.11. Mirror</a></li>
<li><a href="#orgda72767">7.12. Nano Hexapod</a></li> <li><a href="#org8e736b6">7.12. Nano Hexapod</a></li>
<li><a href="#org9a8f272">7.13. Sample</a></li> <li><a href="#org58409aa">7.13. Sample</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -330,20 +330,20 @@ for the JavaScript code in this tag.
This file is used to explain how this Simscape Model works. This file is used to explain how this Simscape Model works.
</p> </p>
<ul class="org-ul"> <ul class="org-ul">
<li>In section <a href="#org78dc1a8">1</a>, the simulink project with the associated scripts are presented</li> <li>In section <a href="#orgb54e2e3">1</a>, the simulink project with the associated scripts are presented</li>
<li>In section <a href="#org891dc1a">2</a>, an introduction to Simscape Multibody is done</li> <li>In section <a href="#org9feec6d">2</a>, an introduction to Simscape Multibody is done</li>
<li>In section <a href="#org53599f2">3</a>, each simscape files are presented with the associated signal names and joint architectures</li> <li>In section <a href="#orga2ea1e0">3</a>, each simscape files are presented with the associated signal names and joint architectures</li>
<li>In section <a href="#orgeba961a">4</a>, the list of the Simulink library elements are described</li> <li>In section <a href="#org1168978">4</a>, the list of the Simulink library elements are described</li>
<li>In section <a href="#orgf2d92b0">5</a>, the scripts used for the simulations (initialization for instance) are described</li> <li>In section <a href="#org7e3aead">5</a>, the scripts used for the simulations (initialization for instance) are described</li>
<li>In section <a href="#orgace5606">6</a>, a list of Matlab function that will be used are defined here</li> <li>In section <a href="#orga71cb40">6</a>, a list of Matlab function that will be used are defined here</li>
<li>In section <a href="#orgbf8675b">7</a>, all the functions that are used to initialize the Simscape Multibody elements are defined here. This includes the mass of all solids for instance.</li> <li>In section <a href="#org09bacdf">7</a>, all the functions that are used to initialize the Simscape Multibody elements are defined here. This includes the mass of all solids for instance.</li>
</ul> </ul>
<div id="outline-container-org96e2c6b" class="outline-2"> <div id="outline-container-org3e1cf29" class="outline-2">
<h2 id="org96e2c6b"><span class="section-number-2">1</span> Simulink Project - Startup and Shutdown scripts</h2> <h2 id="org3e1cf29"><span class="section-number-2">1</span> Simulink Project - Startup and Shutdown scripts</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
<p> <p>
<a id="org78dc1a8"></a> <a id="orgb54e2e3"></a>
</p> </p>
<p> <p>
@ -409,11 +409,11 @@ The project also permits to automatically add defined folder to the path when th
</div> </div>
</div> </div>
<div id="outline-container-orgf16072c" class="outline-2"> <div id="outline-container-org1c09342" class="outline-2">
<h2 id="orgf16072c"><span class="section-number-2">2</span> Simscape Multibody - Presentation</h2> <h2 id="org1c09342"><span class="section-number-2">2</span> Simscape Multibody - Presentation</h2>
<div class="outline-text-2" id="text-2"> <div class="outline-text-2" id="text-2">
<p> <p>
<a id="org891dc1a"></a> <a id="org9feec6d"></a>
</p> </p>
<p> <p>
@ -425,8 +425,8 @@ A <a href="https://.mathworks.com/products/simscape.html">simscape</a> model per
</p> </p>
</div> </div>
<div id="outline-container-orgbc7aec6" class="outline-3"> <div id="outline-container-org8456f59" class="outline-3">
<h3 id="orgbc7aec6"><span class="section-number-3">2.1</span> Solid bodies</h3> <h3 id="org8456f59"><span class="section-number-3">2.1</span> Solid bodies</h3>
<div class="outline-text-3" id="text-2-1"> <div class="outline-text-3" id="text-2-1">
<p> <p>
Each solid body is represented by a <a href="https://mathworks.com/help/physmod/sm/ref/solid.html">solid block</a>. Each solid body is represented by a <a href="https://mathworks.com/help/physmod/sm/ref/solid.html">solid block</a>.
@ -435,8 +435,8 @@ The geometry of the solid body can be imported using a <code>step</code> file. T
</div> </div>
</div> </div>
<div id="outline-container-org299ad31" class="outline-3"> <div id="outline-container-orge3189c0" class="outline-3">
<h3 id="org299ad31"><span class="section-number-3">2.2</span> Frames</h3> <h3 id="orge3189c0"><span class="section-number-3">2.2</span> Frames</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<p> <p>
Frames are very important in simscape multibody, they defined where the forces are applied, where the joints are located and where the measurements are made. Frames are very important in simscape multibody, they defined where the forces are applied, where the joints are located and where the measurements are made.
@ -448,8 +448,8 @@ They can be defined from the solid body geometry, or using the <a href="https://
</div> </div>
</div> </div>
<div id="outline-container-org63bf417" class="outline-3"> <div id="outline-container-orgde21d23" class="outline-3">
<h3 id="org63bf417"><span class="section-number-3">2.3</span> Joints</h3> <h3 id="orgde21d23"><span class="section-number-3">2.3</span> Joints</h3>
<div class="outline-text-3" id="text-2-3"> <div class="outline-text-3" id="text-2-3">
<p> <p>
Solid Bodies are connected with joints (between frames of the two solid bodies). Solid Bodies are connected with joints (between frames of the two solid bodies).
@ -459,7 +459,7 @@ Solid Bodies are connected with joints (between frames of the two solid bodies).
There are various types of joints that are all described <a href="https://mathworks.com/help/physmod/sm/ug/joints.html">here</a>. There are various types of joints that are all described <a href="https://mathworks.com/help/physmod/sm/ug/joints.html">here</a>.
</p> </p>
<table id="org14cfdb5" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="org5b66d84" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Degrees of freedom associated with each joint</caption> <caption class="t-above"><span class="table-number">Table 1:</span> Degrees of freedom associated with each joint</caption>
<colgroup> <colgroup>
@ -592,7 +592,7 @@ Joint blocks are assortments of joint primitives:
<li><b>Constant Velocity</b>: Allows rotation at constant velocity between intersection through arbitrarily aligned shafts: <code>CV</code></li> <li><b>Constant Velocity</b>: Allows rotation at constant velocity between intersection through arbitrarily aligned shafts: <code>CV</code></li>
</ul> </ul>
<table id="orgf29c243" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="org143073b" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Joint primitives for each joint type</caption> <caption class="t-above"><span class="table-number">Table 2:</span> Joint primitives for each joint type</caption>
<colgroup> <colgroup>
@ -884,8 +884,8 @@ Composite Force/Torque sensing:
</div> </div>
</div> </div>
<div id="outline-container-org0aea933" class="outline-3"> <div id="outline-container-org00591e4" class="outline-3">
<h3 id="org0aea933"><span class="section-number-3">2.4</span> Measurements</h3> <h3 id="org00591e4"><span class="section-number-3">2.4</span> Measurements</h3>
<div class="outline-text-3" id="text-2-4"> <div class="outline-text-3" id="text-2-4">
<p> <p>
A transform sensor block measures the spatial relationship between two frames: the base <code>B</code> and the follower <code>F</code>. A transform sensor block measures the spatial relationship between two frames: the base <code>B</code> and the follower <code>F</code>.
@ -909,8 +909,8 @@ If we want to simulate an <b>inertial sensor</b>, we just have to choose <code>B
</div> </div>
</div> </div>
<div id="outline-container-orgdb1ed37" class="outline-3"> <div id="outline-container-org3527feb" class="outline-3">
<h3 id="orgdb1ed37"><span class="section-number-3">2.5</span> Excitation</h3> <h3 id="org3527feb"><span class="section-number-3">2.5</span> Excitation</h3>
<div class="outline-text-3" id="text-2-5"> <div class="outline-text-3" id="text-2-5">
<p> <p>
We can apply <b>external forces</b> to the model by using an <a href="https://mathworks.com/help/physmod/sm/ref/externalforceandtorque.html">external force and torque block</a>. We can apply <b>external forces</b> to the model by using an <a href="https://mathworks.com/help/physmod/sm/ref/externalforceandtorque.html">external force and torque block</a>.
@ -923,11 +923,11 @@ Internal force, acting reciprocally between base and following origins is implem
</div> </div>
</div> </div>
<div id="outline-container-orgc5e1ba2" class="outline-2"> <div id="outline-container-orgcf96a70" class="outline-2">
<h2 id="orgc5e1ba2"><span class="section-number-2">3</span> Simulink files and signal names</h2> <h2 id="orgcf96a70"><span class="section-number-2">3</span> Simulink files and signal names</h2>
<div class="outline-text-2" id="text-3"> <div class="outline-text-2" id="text-3">
<p> <p>
<a id="org53599f2"></a> <a id="orga2ea1e0"></a>
</p> </p>
<p> <p>
@ -935,8 +935,8 @@ In order to "normalize" things, the names of all the signal are listed here.
</p> </p>
</div> </div>
<div id="outline-container-org4e2c64d" class="outline-3"> <div id="outline-container-orgc3c8276" class="outline-3">
<h3 id="org4e2c64d"><span class="section-number-3">3.1</span> List of Simscape files</h3> <h3 id="orgc3c8276"><span class="section-number-3">3.1</span> List of Simscape files</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<p> <p>
Few different Simulink files are used: Few different Simulink files are used:
@ -948,7 +948,7 @@ Few different Simulink files are used:
<li>control</li> <li>control</li>
</ul> </ul>
<table id="org5b96410" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="org3977fc9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 3:</span> List of simscape files</caption> <caption class="t-above"><span class="table-number">Table 3:</span> List of simscape files</caption>
<colgroup> <colgroup>
@ -1015,14 +1015,14 @@ Few different Simulink files are used:
</div> </div>
</div> </div>
<div id="outline-container-org7e6d6ee" class="outline-3"> <div id="outline-container-orgd725cbe" class="outline-3">
<h3 id="org7e6d6ee"><span class="section-number-3">3.2</span> List of Inputs</h3> <h3 id="orgd725cbe"><span class="section-number-3">3.2</span> List of Inputs</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-3-2">
</div> </div>
<div id="outline-container-org6645203" class="outline-4"> <div id="outline-container-orgc8c59ec" class="outline-4">
<h4 id="org6645203"><span class="section-number-4">3.2.1</span> Perturbations</h4> <h4 id="orgc8c59ec"><span class="section-number-4">3.2.1</span> Perturbations</h4>
<div class="outline-text-4" id="text-3-2-1"> <div class="outline-text-4" id="text-3-2-1">
<table id="orgbcc8aa0" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="org092c8c7" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 4:</span> List of Disturbances</caption> <caption class="t-above"><span class="table-number">Table 4:</span> List of Disturbances</caption>
<colgroup> <colgroup>
@ -1068,10 +1068,10 @@ Few different Simulink files are used:
</div> </div>
</div> </div>
<div id="outline-container-org7be9ba3" class="outline-4"> <div id="outline-container-org083bb4b" class="outline-4">
<h4 id="org7be9ba3"><span class="section-number-4">3.2.2</span> Measurement Noise</h4> <h4 id="org083bb4b"><span class="section-number-4">3.2.2</span> Measurement Noise</h4>
<div class="outline-text-4" id="text-3-2-2"> <div class="outline-text-4" id="text-3-2-2">
<table id="orgb357346" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="orge3c6a2e" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 5:</span> List of Measurement Noise</caption> <caption class="t-above"><span class="table-number">Table 5:</span> List of Measurement Noise</caption>
<colgroup> <colgroup>
@ -1103,10 +1103,10 @@ Few different Simulink files are used:
</div> </div>
</div> </div>
<div id="outline-container-org41b1dfa" class="outline-4"> <div id="outline-container-org3cd7a2c" class="outline-4">
<h4 id="org41b1dfa"><span class="section-number-4">3.2.3</span> Control Inputs</h4> <h4 id="org3cd7a2c"><span class="section-number-4">3.2.3</span> Control Inputs</h4>
<div class="outline-text-4" id="text-3-2-3"> <div class="outline-text-4" id="text-3-2-3">
<table id="org36d6c18" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="org4f6d3a1" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 6:</span> List of Control Inputs</caption> <caption class="t-above"><span class="table-number">Table 6:</span> List of Control Inputs</caption>
<colgroup> <colgroup>
@ -1228,10 +1228,10 @@ Few different Simulink files are used:
</div> </div>
</div> </div>
<div id="outline-container-orge471f78" class="outline-3"> <div id="outline-container-orgfd2e554" class="outline-3">
<h3 id="orge471f78"><span class="section-number-3">3.3</span> List of Outputs</h3> <h3 id="orgfd2e554"><span class="section-number-3">3.3</span> List of Outputs</h3>
<div class="outline-text-3" id="text-3-3"> <div class="outline-text-3" id="text-3-3">
<table id="orgc6d9970" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="org183b892" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 7:</span> List of Outputs</caption> <caption class="t-above"><span class="table-number">Table 7:</span> List of Outputs</caption>
<colgroup> <colgroup>
@ -1347,11 +1347,11 @@ Few different Simulink files are used:
</div> </div>
</div> </div>
<div id="outline-container-org5525cc6" class="outline-2"> <div id="outline-container-org49831aa" class="outline-2">
<h2 id="org5525cc6"><span class="section-number-2">4</span> Simulink Library</h2> <h2 id="org49831aa"><span class="section-number-2">4</span> Simulink Library</h2>
<div class="outline-text-2" id="text-4"> <div class="outline-text-2" id="text-4">
<p> <p>
<a id="orgeba961a"></a> <a id="org1168978"></a>
</p> </p>
<p> <p>
@ -1359,8 +1359,8 @@ A simulink library is developed in order to share elements between the different
</p> </p>
</div> </div>
<div id="outline-container-orgf34437e" class="outline-3"> <div id="outline-container-org3f18fb2" class="outline-3">
<h3 id="orgf34437e"><span class="section-number-3">4.1</span> <code>inputs</code></h3> <h3 id="org3f18fb2"><span class="section-number-3">4.1</span> <code>inputs</code></h3>
<div class="outline-text-3" id="text-4-1"> <div class="outline-text-3" id="text-4-1">
<p> <p>
<a href="../nass_library/inputs.slx">inputs.slx</a> <a href="../nass_library/inputs.slx">inputs.slx</a>
@ -1368,8 +1368,8 @@ A simulink library is developed in order to share elements between the different
</div> </div>
</div> </div>
<div id="outline-container-org45cb930" class="outline-3"> <div id="outline-container-orgaefc1f3" class="outline-3">
<h3 id="org45cb930"><span class="section-number-3">4.2</span> <code>nass_library</code></h3> <h3 id="orgaefc1f3"><span class="section-number-3">4.2</span> <code>nass_library</code></h3>
<div class="outline-text-3" id="text-4-2"> <div class="outline-text-3" id="text-4-2">
<p> <p>
<a href="../nass_library/nass_library.slx">nass<sub>library.slx</sub></a> <a href="../nass_library/nass_library.slx">nass<sub>library.slx</sub></a>
@ -1377,8 +1377,8 @@ A simulink library is developed in order to share elements between the different
</div> </div>
</div> </div>
<div id="outline-container-orgc05468b" class="outline-3"> <div id="outline-container-org68263b0" class="outline-3">
<h3 id="orgc05468b"><span class="section-number-3">4.3</span> <code>pos_error_wrt_nass_base</code></h3> <h3 id="org68263b0"><span class="section-number-3">4.3</span> <code>pos_error_wrt_nass_base</code></h3>
<div class="outline-text-3" id="text-4-3"> <div class="outline-text-3" id="text-4-3">
<p> <p>
<a href="../nass_library/pos_error_wrt_nass_base.slx">pos<sub>error</sub><sub>wrt</sub><sub>nass</sub><sub>base.slx</sub></a> <a href="../nass_library/pos_error_wrt_nass_base.slx">pos<sub>error</sub><sub>wrt</sub><sub>nass</sub><sub>base.slx</sub></a>
@ -1386,8 +1386,8 @@ A simulink library is developed in order to share elements between the different
</div> </div>
</div> </div>
<div id="outline-container-org933ef5e" class="outline-3"> <div id="outline-container-org6d2bf6b" class="outline-3">
<h3 id="org933ef5e"><span class="section-number-3">4.4</span> <code>QuaternionToAngles</code></h3> <h3 id="org6d2bf6b"><span class="section-number-3">4.4</span> <code>QuaternionToAngles</code></h3>
<div class="outline-text-3" id="text-4-4"> <div class="outline-text-3" id="text-4-4">
<p> <p>
<a href="../nass_library/QuaternionToAngles.slx">QuaternionToAngles.slx</a> <a href="../nass_library/QuaternionToAngles.slx">QuaternionToAngles.slx</a>
@ -1395,8 +1395,8 @@ A simulink library is developed in order to share elements between the different
</div> </div>
</div> </div>
<div id="outline-container-org2bc9fbc" class="outline-3"> <div id="outline-container-org2497f48" class="outline-3">
<h3 id="org2bc9fbc"><span class="section-number-3">4.5</span> <code>RotationMatrixToAngle</code></h3> <h3 id="org2497f48"><span class="section-number-3">4.5</span> <code>RotationMatrixToAngle</code></h3>
<div class="outline-text-3" id="text-4-5"> <div class="outline-text-3" id="text-4-5">
<p> <p>
<a href="../nass_library/RotationMatrixToAngle.slx">RotationMatrixToAngle.slx</a> <a href="../nass_library/RotationMatrixToAngle.slx">RotationMatrixToAngle.slx</a>
@ -1405,19 +1405,19 @@ A simulink library is developed in order to share elements between the different
</div> </div>
</div> </div>
<div id="outline-container-orgb9ce7fd" class="outline-2"> <div id="outline-container-org806f9e5" class="outline-2">
<h2 id="orgb9ce7fd"><span class="section-number-2">5</span> Scripts</h2> <h2 id="org806f9e5"><span class="section-number-2">5</span> Scripts</h2>
<div class="outline-text-2" id="text-5"> <div class="outline-text-2" id="text-5">
<p> <p>
<a id="orgf2d92b0"></a> <a id="org7e3aead"></a>
</p> </p>
</div> </div>
<div id="outline-container-orgf33c223" class="outline-3"> <div id="outline-container-orge58f7eb" class="outline-3">
<h3 id="orgf33c223"><span class="section-number-3">5.1</span> Simulation Initialization</h3> <h3 id="orge58f7eb"><span class="section-number-3">5.1</span> Simulation Initialization</h3>
<div class="outline-text-3" id="text-5-1"> <div class="outline-text-3" id="text-5-1">
<p> <p>
<a id="orgda5e763"></a> <a id="org1f1a9a4"></a>
</p> </p>
<p> <p>
@ -1441,19 +1441,19 @@ load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string
</div> </div>
</div> </div>
<div id="outline-container-org4fdacaa" class="outline-2"> <div id="outline-container-orgb738acb" class="outline-2">
<h2 id="org4fdacaa"><span class="section-number-2">6</span> Functions</h2> <h2 id="orgb738acb"><span class="section-number-2">6</span> Functions</h2>
<div class="outline-text-2" id="text-6"> <div class="outline-text-2" id="text-6">
<p> <p>
<a id="orgace5606"></a> <a id="orga71cb40"></a>
</p> </p>
</div> </div>
<div id="outline-container-org43915cc" class="outline-3"> <div id="outline-container-orga74019d" class="outline-3">
<h3 id="org43915cc"><span class="section-number-3">6.1</span> computePsdDispl</h3> <h3 id="orga74019d"><span class="section-number-3">6.1</span> computePsdDispl</h3>
<div class="outline-text-3" id="text-6-1"> <div class="outline-text-3" id="text-6-1">
<p> <p>
<a id="org09a017b"></a> <a id="orgad80ead"></a>
</p> </p>
<p> <p>
@ -1489,11 +1489,11 @@ This Matlab function is accessible <a href="../src/computePsdDispl.m">here</a>.
</div> </div>
</div> </div>
<div id="outline-container-orgd7ee25b" class="outline-3"> <div id="outline-container-orgf72e736" class="outline-3">
<h3 id="orgd7ee25b"><span class="section-number-3">6.2</span> computeSetpoint</h3> <h3 id="orgf72e736"><span class="section-number-3">6.2</span> computeSetpoint</h3>
<div class="outline-text-3" id="text-6-2"> <div class="outline-text-3" id="text-6-2">
<p> <p>
<a id="org7e68bf4"></a> <a id="org3313372"></a>
</p> </p>
<p> <p>
@ -1565,11 +1565,11 @@ setpoint<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-hi
</div> </div>
</div> </div>
<div id="outline-container-orgbb5f7a9" class="outline-3"> <div id="outline-container-org9651b74" class="outline-3">
<h3 id="orgbb5f7a9"><span class="section-number-3">6.3</span> converErrorBasis</h3> <h3 id="org9651b74"><span class="section-number-3">6.3</span> converErrorBasis</h3>
<div class="outline-text-3" id="text-6-3"> <div class="outline-text-3" id="text-6-3">
<p> <p>
<a id="orgdf35d55"></a> <a id="org4bd5417"></a>
</p> </p>
<p> <p>
@ -1707,11 +1707,11 @@ error_nass = <span class="org-rainbow-delimiters-depth-1">[</span>dx; dy; dz; th
</div> </div>
</div> </div>
<div id="outline-container-org4a8080d" class="outline-3"> <div id="outline-container-org7afdcb3" class="outline-3">
<h3 id="org4a8080d"><span class="section-number-3">6.4</span> generateDiagPidControl</h3> <h3 id="org7afdcb3"><span class="section-number-3">6.4</span> generateDiagPidControl</h3>
<div class="outline-text-3" id="text-6-4"> <div class="outline-text-3" id="text-6-4">
<p> <p>
<a id="org90bc335"></a> <a id="org1c2dcc7"></a>
</p> </p>
<p> <p>
@ -1741,11 +1741,11 @@ This Matlab function is accessible <a href="../src/generateDiagPidControl.m">her
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org0bca141" class="outline-3"> <div id="outline-container-orgdb550d2" class="outline-3">
<h3 id="org0bca141"><span class="section-number-3">6.5</span> identifyPlant</h3> <h3 id="orgdb550d2"><span class="section-number-3">6.5</span> identifyPlant</h3>
<div class="outline-text-3" id="text-6-5"> <div class="outline-text-3" id="text-6-5">
<p> <p>
<a id="org91dcabe"></a> <a id="orgbbb9128"></a>
</p> </p>
<p> <p>
@ -1810,11 +1810,11 @@ This Matlab function is accessible <a href="../src/identifyPlant.m">here</a>.
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgb5a1268" class="outline-3"> <div id="outline-container-orgd7e834e" class="outline-3">
<h3 id="orgb5a1268"><span class="section-number-3">6.6</span> runSimulation</h3> <h3 id="orgd7e834e"><span class="section-number-3">6.6</span> runSimulation</h3>
<div class="outline-text-3" id="text-6-6"> <div class="outline-text-3" id="text-6-6">
<p> <p>
<a id="orgb5fec90"></a> <a id="org7192c97"></a>
</p> </p>
<p> <p>
@ -1883,18 +1883,18 @@ This Matlab function is accessible <a href="../src/runSimulation.m">here</a>.
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org3d69ec6" class="outline-2"> <div id="outline-container-org18d0a30" class="outline-2">
<h2 id="org3d69ec6"><span class="section-number-2">7</span> Initialize Elements</h2> <h2 id="org18d0a30"><span class="section-number-2">7</span> Initialize Elements</h2>
<div class="outline-text-2" id="text-7"> <div class="outline-text-2" id="text-7">
<p> <p>
<a id="orgbf8675b"></a> <a id="org09bacdf"></a>
</p> </p>
</div> </div>
<div id="outline-container-orgc4959ef" class="outline-3"> <div id="outline-container-org9fe06e1" class="outline-3">
<h3 id="orgc4959ef"><span class="section-number-3">7.1</span> Simulation Configuration</h3> <h3 id="org9fe06e1"><span class="section-number-3">7.1</span> Simulation Configuration</h3>
<div class="outline-text-3" id="text-7-1"> <div class="outline-text-3" id="text-7-1">
<p> <p>
<a id="org30822db"></a> <a id="org6935b27"></a>
</p> </p>
<p> <p>
@ -1940,11 +1940,11 @@ This Matlab function is accessible <a href="../src/initializeSimConf.m">here</a>
</div> </div>
</div> </div>
<div id="outline-container-org2fb7886" class="outline-3"> <div id="outline-container-org66f3562" class="outline-3">
<h3 id="org2fb7886"><span class="section-number-3">7.2</span> Experiment</h3> <h3 id="org66f3562"><span class="section-number-3">7.2</span> Experiment</h3>
<div class="outline-text-3" id="text-7-2"> <div class="outline-text-3" id="text-7-2">
<p> <p>
<a id="org54e03da"></a> <a id="orgee246b1"></a>
</p> </p>
<p> <p>
@ -1984,11 +1984,11 @@ This Matlab function is accessible <a href="../src/initializeExperiment.m">here<
</div> </div>
</div> </div>
<div id="outline-container-org710acf3" class="outline-3"> <div id="outline-container-org79e1d7e" class="outline-3">
<h3 id="org710acf3"><span class="section-number-3">7.3</span> Inputs</h3> <h3 id="org79e1d7e"><span class="section-number-3">7.3</span> Inputs</h3>
<div class="outline-text-3" id="text-7-3"> <div class="outline-text-3" id="text-7-3">
<p> <p>
<a id="org5f2ac6c"></a> <a id="org9efc0e3"></a>
</p> </p>
<p> <p>
@ -2176,11 +2176,11 @@ This Matlab function is accessible <a href="../src/initializeInputs.m">here</a>.
</div> </div>
</div> </div>
<div id="outline-container-orge26db3d" class="outline-3"> <div id="outline-container-orgb40ac8d" class="outline-3">
<h3 id="orge26db3d"><span class="section-number-3">7.4</span> Ground</h3> <h3 id="orgb40ac8d"><span class="section-number-3">7.4</span> Ground</h3>
<div class="outline-text-3" id="text-7-4"> <div class="outline-text-3" id="text-7-4">
<p> <p>
<a id="orgfdfeb76"></a> <a id="orgfef662a"></a>
</p> </p>
<p> <p>
@ -2204,11 +2204,11 @@ This Matlab function is accessible <a href="../src/initializeGround.m">here</a>.
</div> </div>
</div> </div>
<div id="outline-container-org725a842" class="outline-3"> <div id="outline-container-org8b53c51" class="outline-3">
<h3 id="org725a842"><span class="section-number-3">7.5</span> Granite</h3> <h3 id="org8b53c51"><span class="section-number-3">7.5</span> Granite</h3>
<div class="outline-text-3" id="text-7-5"> <div class="outline-text-3" id="text-7-5">
<p> <p>
<a id="orgeb2adf5"></a> <a id="org46c0691"></a>
</p> </p>
<p> <p>
@ -2216,26 +2216,37 @@ This Matlab function is accessible <a href="../src/initializeGranite.m">here</a>
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name"><span class="org-rainbow-delimiters-depth-1">[</span></span><span class="org-variable-name">granite</span><span class="org-variable-name"><span class="org-rainbow-delimiters-depth-1">]</span></span> = <span class="org-function-name">initializeGranite</span><span class="org-rainbow-delimiters-depth-1">()</span> <label class="org-src-name"><span class="listing-number">Listing 1: </span>test</label><pre class="src src-matlab" id="orgbe16c00"><span class="org-keyword">function</span> <span class="org-variable-name"><span class="org-rainbow-delimiters-depth-1">[</span></span><span class="org-variable-name">granite</span><span class="org-variable-name"><span class="org-rainbow-delimiters-depth-1">]</span></span> = <span class="org-function-name">initializeGranite</span><span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%%</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%%</span></span>
granite = struct<span class="org-rainbow-delimiters-depth-1">()</span>; granite = struct<span class="org-rainbow-delimiters-depth-1">()</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Static Properties</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Static Properties</span></span>
granite.density = <span class="org-highlight-numbers-number">2800</span>; <span class="org-comment">% [kg/m3]</span> granite.density = <span class="org-highlight-numbers-number">2800</span>; <span class="org-comment">% [kg/m3]</span>
granite.volume = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">72</span>; <span class="org-comment">% [m3] TODO - should</span> granite.volume = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">749</span>; <span class="org-comment">% [m3] TODO - should</span>
granite.mass = granite.density<span class="org-type">*</span>granite.volume; <span class="org-comment">% [kg]</span> granite.mass = granite.density<span class="org-type">*</span>granite.volume; <span class="org-comment">% [kg]</span>
granite.color = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">1</span> <span class="org-highlight-numbers-number">1</span> <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">]</span>; granite.color = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">1</span> <span class="org-highlight-numbers-number">1</span> <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">]</span>;
granite.STEP = <span class="org-string">'./STEPS/granite/granite.STEP'</span>; granite.STEP = <span class="org-string">'./STEPS/granite/granite.STEP'</span>;
granite.mass_top = <span class="org-highlight-numbers-number">4000</span>; <span class="org-comment">% [kg] TODO</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Dynamical Properties</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Dynamical Properties</span></span>
granite.k.x = <span class="org-highlight-numbers-number">1e8</span>; <span class="org-comment">% [N/m]</span> granite.k.x = <span class="org-highlight-numbers-number">4e9</span>; <span class="org-comment">% [N/m]</span>
granite.c.x = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% [N/(m/s)]</span> granite.c.x = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>granite.mass_top<span class="org-type">*</span>granite.k.x<span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [N/(m/s)]</span>
granite.k.y = <span class="org-highlight-numbers-number">1e8</span>; <span class="org-comment">% [N/m]</span> granite.k.y = <span class="org-highlight-numbers-number">3e8</span>; <span class="org-comment">% [N/m]</span>
granite.c.y = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% [N/(m/s)]</span> granite.c.y = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>granite.mass_top<span class="org-type">*</span>granite.k.y<span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [N/(m/s)]</span>
granite.k.z = <span class="org-highlight-numbers-number">1e8</span>; <span class="org-comment">% [N/m]</span> granite.k.z = <span class="org-highlight-numbers-number">8e8</span>; <span class="org-comment">% [N/m]</span>
granite.c.z = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% [N/(m/s)]</span> granite.c.z = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">5</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>granite.mass_top<span class="org-type">*</span>granite.k.z<span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [N/(m/s)]</span>
granite.k.rx = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% [N*m/deg]</span>
granite.c.rx = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>granite.mass_top<span class="org-type">*</span>granite.k.rx<span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [N*m/(deg/s)]</span>
granite.k.ry = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% [N*m/deg]</span>
granite.c.ry = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>granite.mass_top<span class="org-type">*</span>granite.k.ry<span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [N*m/(deg/s)]</span>
granite.k.rz = <span class="org-highlight-numbers-number">1e6</span>; <span class="org-comment">% [N*m/deg]</span>
granite.c.rz = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>granite.mass_top<span class="org-type">*</span>granite.k.rz<span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [N*m/(deg/s)]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Positioning parameters</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Positioning parameters</span></span>
granite.sample_pos = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">8</span>; <span class="org-comment">% Z-offset for the initial position of the sample [m]</span> granite.sample_pos = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">8</span>; <span class="org-comment">% Z-offset for the initial position of the sample [m]</span>
@ -2248,11 +2259,11 @@ This Matlab function is accessible <a href="../src/initializeGranite.m">here</a>
</div> </div>
</div> </div>
<div id="outline-container-org505fe65" class="outline-3"> <div id="outline-container-org45b15c7" class="outline-3">
<h3 id="org505fe65"><span class="section-number-3">7.6</span> Translation Stage</h3> <h3 id="org45b15c7"><span class="section-number-3">7.6</span> Translation Stage</h3>
<div class="outline-text-3" id="text-7-6"> <div class="outline-text-3" id="text-7-6">
<p> <p>
<a id="org5779bcf"></a> <a id="org788a893"></a>
</p> </p>
<p> <p>
@ -2312,18 +2323,18 @@ This Matlab function is accessible <a href="../src/initializeTy.m">here</a>.
ty.rotor.color = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">792</span> <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">820</span> <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">933</span><span class="org-rainbow-delimiters-depth-1">]</span>; ty.rotor.color = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">792</span> <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">820</span> <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">933</span><span class="org-rainbow-delimiters-depth-1">]</span>;
ty.rotor.STEP = <span class="org-string">'./STEPS/ty/Ty_Motor_Rotor.STEP'</span>; ty.rotor.STEP = <span class="org-string">'./STEPS/ty/Ty_Motor_Rotor.STEP'</span>;
ty.m = <span class="org-highlight-numbers-number">250</span>; <span class="org-comment">% TODO [kg]</span> ty.m = <span class="org-highlight-numbers-number">1000</span>; <span class="org-comment">% TODO [kg]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Y-Translation - Dynamicals Properties</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Y-Translation - Dynamicals Properties</span></span>
<span class="org-keyword">if</span> opts.rigid <span class="org-keyword">if</span> opts.rigid
ty.k.ax = <span class="org-highlight-numbers-number">1e10</span>; % Axial Stiffness <span class="org-keyword">for</span> each of the <span class="org-highlight-numbers-number">4</span> guidance (y) [N<span class="org-type">/</span>m] ty.k.ax = <span class="org-highlight-numbers-number">1e10</span>; % Axial Stiffness <span class="org-keyword">for</span> each of the <span class="org-highlight-numbers-number">4</span> guidance (y) [N<span class="org-type">/</span>m]
<span class="org-keyword">else</span> <span class="org-keyword">else</span>
ty.k.ax = <span class="org-highlight-numbers-number">1e7</span><span class="org-type">/</span><span class="org-highlight-numbers-number">4</span>; % Axial Stiffness <span class="org-keyword">for</span> each of the <span class="org-highlight-numbers-number">4</span> guidance (y) [N<span class="org-type">/</span>m] ty.k.ax = <span class="org-highlight-numbers-number">5e7</span>; % Axial Stiffness <span class="org-keyword">for</span> each of the <span class="org-highlight-numbers-number">4</span> guidance (y) [N<span class="org-type">/</span>m]
<span class="org-keyword">end</span> <span class="org-keyword">end</span>
ty.k.rad = <span class="org-highlight-numbers-number">9e9</span><span class="org-type">/</span><span class="org-highlight-numbers-number">4</span>; % Radial Stiffness <span class="org-keyword">for</span> each of the <span class="org-highlight-numbers-number">4</span> guidance (x<span class="org-type">-</span>z) [N<span class="org-type">/</span>m] ty.k.rad = <span class="org-highlight-numbers-number">5e7</span>; % Radial Stiffness <span class="org-keyword">for</span> each of the <span class="org-highlight-numbers-number">4</span> guidance (x<span class="org-type">-</span>z) [N<span class="org-type">/</span>m]
ty.c.ax = <span class="org-highlight-numbers-number">100</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">/</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ty.k.ax<span class="org-type">/</span>ty.m<span class="org-rainbow-delimiters-depth-1">)</span>; ty.c.ax = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ty.k.ax<span class="org-type">*</span>ty.m<span class="org-rainbow-delimiters-depth-1">)</span>;
ty.c.rad = <span class="org-highlight-numbers-number">100</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">/</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ty.k.rad<span class="org-type">/</span>ty.m<span class="org-rainbow-delimiters-depth-1">)</span>; ty.c.rad = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ty.k.rad<span class="org-type">*</span>ty.m<span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Save</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Save</span></span>
save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'ty'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>; save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'ty'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
@ -2333,11 +2344,11 @@ This Matlab function is accessible <a href="../src/initializeTy.m">here</a>.
</div> </div>
</div> </div>
<div id="outline-container-org4a37dc0" class="outline-3"> <div id="outline-container-orgb4f2e7d" class="outline-3">
<h3 id="org4a37dc0"><span class="section-number-3">7.7</span> Tilt Stage</h3> <h3 id="orgb4f2e7d"><span class="section-number-3">7.7</span> Tilt Stage</h3>
<div class="outline-text-3" id="text-7-7"> <div class="outline-text-3" id="text-7-7">
<p> <p>
<a id="org1870995"></a> <a id="org63a3f60"></a>
</p> </p>
<p> <p>
@ -2377,7 +2388,7 @@ This Matlab function is accessible <a href="../src/initializeRy.m">here</a>.
ry.stage.color = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">792</span> <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">820</span> <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">933</span><span class="org-rainbow-delimiters-depth-1">]</span>; ry.stage.color = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">792</span> <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">820</span> <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">933</span><span class="org-rainbow-delimiters-depth-1">]</span>;
ry.stage.STEP = <span class="org-string">'./STEPS/ry/Tilt_Stage.STEP'</span>; ry.stage.STEP = <span class="org-string">'./STEPS/ry/Tilt_Stage.STEP'</span>;
ry.m = <span class="org-highlight-numbers-number">200</span>; <span class="org-comment">% TODO [kg]</span> ry.m = <span class="org-highlight-numbers-number">800</span>; <span class="org-comment">% TODO [kg]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Tilt Stage - Dynamical Properties</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Tilt Stage - Dynamical Properties</span></span>
<span class="org-keyword">if</span> opts.rigid <span class="org-keyword">if</span> opts.rigid
@ -2386,14 +2397,14 @@ This Matlab function is accessible <a href="../src/initializeRy.m">here</a>.
ry.k.tilt = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% Rotation stiffness around y [N*m/deg]</span> ry.k.tilt = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% Rotation stiffness around y [N*m/deg]</span>
<span class="org-keyword">end</span> <span class="org-keyword">end</span>
ry.k.h = <span class="org-highlight-numbers-number">357e6</span><span class="org-type">/</span><span class="org-highlight-numbers-number">4</span>; <span class="org-comment">% Stiffness in the direction of the guidance [N/m]</span> ry.k.h = <span class="org-highlight-numbers-number">1e8</span>; <span class="org-comment">% Stiffness in the direction of the guidance [N/m]</span>
ry.k.rad = <span class="org-highlight-numbers-number">555e6</span><span class="org-type">/</span><span class="org-highlight-numbers-number">4</span>; <span class="org-comment">% Stiffness in the top direction [N/m]</span> ry.k.rad = <span class="org-highlight-numbers-number">1e8</span>; <span class="org-comment">% Stiffness in the top direction [N/m]</span>
ry.k.rrad = <span class="org-highlight-numbers-number">238e6</span><span class="org-type">/</span><span class="org-highlight-numbers-number">4</span>; <span class="org-comment">% Stiffness in the side direction [N/m]</span> ry.k.rrad = <span class="org-highlight-numbers-number">1e8</span>; <span class="org-comment">% Stiffness in the side direction [N/m]</span>
ry.c.h = <span class="org-highlight-numbers-number">10</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">/</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ry.k.h<span class="org-type">/</span>ry.m<span class="org-rainbow-delimiters-depth-1">)</span>; ry.c.h = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ry.k.h<span class="org-type">*</span>ry.m<span class="org-rainbow-delimiters-depth-1">)</span>;
ry.c.rad = <span class="org-highlight-numbers-number">10</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">/</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ry.k.rad<span class="org-type">/</span>ry.m<span class="org-rainbow-delimiters-depth-1">)</span>; ry.c.rad = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ry.k.rad<span class="org-type">*</span>ry.m<span class="org-rainbow-delimiters-depth-1">)</span>;
ry.c.rrad = <span class="org-highlight-numbers-number">10</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">/</span><span class="org-highlight-numbers-number">5</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ry.k.rrad<span class="org-type">/</span>ry.m<span class="org-rainbow-delimiters-depth-1">)</span>; ry.c.rrad = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ry.k.rrad<span class="org-type">*</span>ry.m<span class="org-rainbow-delimiters-depth-1">)</span>;
ry.c.tilt = <span class="org-highlight-numbers-number">10</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">/</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ry.k.tilt<span class="org-type">/</span>ry.m<span class="org-rainbow-delimiters-depth-1">)</span>; ry.c.tilt = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>ry.k.tilt<span class="org-type">*</span>ry.m<span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Positioning parameters</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Positioning parameters</span></span>
ry.z_offset = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">58178</span>; <span class="org-comment">% Z-Offset so that the center of rotation matches the sample center [m]</span> ry.z_offset = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">58178</span>; <span class="org-comment">% Z-Offset so that the center of rotation matches the sample center [m]</span>
@ -2406,11 +2417,11 @@ This Matlab function is accessible <a href="../src/initializeRy.m">here</a>.
</div> </div>
</div> </div>
<div id="outline-container-org9f4e484" class="outline-3"> <div id="outline-container-orgc9fe898" class="outline-3">
<h3 id="org9f4e484"><span class="section-number-3">7.8</span> Spindle</h3> <h3 id="orgc9fe898"><span class="section-number-3">7.8</span> Spindle</h3>
<div class="outline-text-3" id="text-7-8"> <div class="outline-text-3" id="text-7-8">
<p> <p>
<a id="orgd54e318"></a> <a id="orgc6fc1b9"></a>
</p> </p>
<p> <p>
@ -2453,19 +2464,19 @@ This Matlab function is accessible <a href="../src/initializeRz.m">here</a>.
<span class="org-comment">% Estimated stiffnesses</span> <span class="org-comment">% Estimated stiffnesses</span>
rz.k.ax = <span class="org-highlight-numbers-number">2e9</span>; <span class="org-comment">% Axial Stiffness [N/m]</span> rz.k.ax = <span class="org-highlight-numbers-number">2e9</span>; <span class="org-comment">% Axial Stiffness [N/m]</span>
rz.k.rad = <span class="org-highlight-numbers-number">7e8</span>; <span class="org-comment">% Radial Stiffness [N/m]</span> rz.k.rad = <span class="org-highlight-numbers-number">7e8</span>; <span class="org-comment">% Radial Stiffness [N/m]</span>
rz.k.rot = <span class="org-highlight-numbers-number">100e6</span><span class="org-type">*</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span><span class="org-highlight-numbers-number">360</span>; <span class="org-comment">% Rotational Stiffness [N*m/deg]</span> rz.k.tilt = <span class="org-highlight-numbers-number">1e8</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span><span class="org-highlight-numbers-number">360</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% Rotational Stiffness [N*m/deg]</span>
<span class="org-keyword">if</span> opts.rigid <span class="org-keyword">if</span> opts.rigid
rz.k.tilt = <span class="org-highlight-numbers-number">1e10</span>; <span class="org-comment">% Vertical Rotational Stiffness [N*m/deg]</span> rz.k.rot = <span class="org-highlight-numbers-number">1e10</span>; <span class="org-comment">% Rotational Stiffness [N*m/deg]</span>
<span class="org-keyword">else</span> <span class="org-keyword">else</span>
rz.k.tilt = <span class="org-highlight-numbers-number">1e2</span>; <span class="org-comment">% TODO what value should I put? [N*m/deg]</span> rz.k.rot = <span class="org-highlight-numbers-number">1e6</span>; <span class="org-comment">% TODO what value should I put? [N*m/deg]</span>
<span class="org-keyword">end</span> <span class="org-keyword">end</span>
<span class="org-comment">% TODO</span> <span class="org-comment">% Damping</span>
rz.c.ax = <span class="org-highlight-numbers-number">2</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>rz.k.ax<span class="org-type">/</span>rz.m<span class="org-rainbow-delimiters-depth-1">)</span>; rz.c.ax = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>rz.k.ax<span class="org-type">*</span>rz.m<span class="org-rainbow-delimiters-depth-1">)</span>;
rz.c.rad = <span class="org-highlight-numbers-number">2</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>rz.k.rad<span class="org-type">/</span>rz.m<span class="org-rainbow-delimiters-depth-1">)</span>; rz.c.rad = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>rz.k.rad<span class="org-type">*</span>rz.m<span class="org-rainbow-delimiters-depth-1">)</span>;
rz.c.tilt = <span class="org-highlight-numbers-number">100</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>rz.k.tilt<span class="org-type">/</span>rz.m<span class="org-rainbow-delimiters-depth-1">)</span>; rz.c.tilt = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>rz.k.tilt<span class="org-type">*</span>rz.m<span class="org-rainbow-delimiters-depth-1">)</span>;
rz.c.rot = <span class="org-highlight-numbers-number">100</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>rz.k.rot<span class="org-type">/</span>rz.m<span class="org-rainbow-delimiters-depth-1">)</span>; rz.c.rot = <span class="org-highlight-numbers-number">0</span>.<span class="org-highlight-numbers-number">1</span><span class="org-type">*</span>sqrt<span class="org-rainbow-delimiters-depth-1">(</span>rz.k.rot<span class="org-type">*</span>rz.m<span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Save</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Save</span></span>
save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'rz'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>; save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/stages.mat'</span>, <span class="org-string">'rz'</span>, <span class="org-string">'-append'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
@ -2475,11 +2486,11 @@ This Matlab function is accessible <a href="../src/initializeRz.m">here</a>.
</div> </div>
</div> </div>
<div id="outline-container-org0a3467b" class="outline-3"> <div id="outline-container-org438103e" class="outline-3">
<h3 id="org0a3467b"><span class="section-number-3">7.9</span> Micro Hexapod</h3> <h3 id="org438103e"><span class="section-number-3">7.9</span> Micro Hexapod</h3>
<div class="outline-text-3" id="text-7-9"> <div class="outline-text-3" id="text-7-9">
<p> <p>
<a id="org4f5ef62"></a> <a id="orgc8a45d3"></a>
</p> </p>
<p> <p>
@ -2501,7 +2512,6 @@ This Matlab function is accessible <a href="../src/initializeMicroHexapod.m">her
<span class="org-matlab-cellbreak"><span class="org-comment">%% Stewart Object</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Stewart Object</span></span>
micro_hexapod = struct<span class="org-rainbow-delimiters-depth-1">()</span>; micro_hexapod = struct<span class="org-rainbow-delimiters-depth-1">()</span>;
micro_hexapod.h = <span class="org-highlight-numbers-number">350</span>; <span class="org-comment">% Total height of the platform [mm]</span> micro_hexapod.h = <span class="org-highlight-numbers-number">350</span>; <span class="org-comment">% Total height of the platform [mm]</span>
% micro_hexapod.jacobian = <span class="org-highlight-numbers-number">269</span>.<span class="org-highlight-numbers-number">26</span>; % Distance from the top platform to the Jacobian point [mm]
micro_hexapod.jacobian = <span class="org-highlight-numbers-number">270</span>; <span class="org-comment">% Distance from the top platform to the Jacobian point [mm]</span> micro_hexapod.jacobian = <span class="org-highlight-numbers-number">270</span>; <span class="org-comment">% Distance from the top platform to the Jacobian point [mm]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Bottom Plate - Mechanical Design</span></span> <span class="org-matlab-cellbreak"><span class="org-comment">%% Bottom Plate - Mechanical Design</span></span>
@ -2685,11 +2695,11 @@ This Matlab function is accessible <a href="../src/initializeMicroHexapod.m">her
</div> </div>
</div> </div>
<div id="outline-container-org0b6b398" class="outline-3"> <div id="outline-container-org85b3f9f" class="outline-3">
<h3 id="org0b6b398"><span class="section-number-3">7.10</span> Center of gravity compensation</h3> <h3 id="org85b3f9f"><span class="section-number-3">7.10</span> Center of gravity compensation</h3>
<div class="outline-text-3" id="text-7-10"> <div class="outline-text-3" id="text-7-10">
<p> <p>
<a id="orged7dcb1"></a> <a id="org72a3d1e"></a>
</p> </p>
<p> <p>
@ -2732,11 +2742,12 @@ This Matlab function is accessible <a href="../src/initializeAxisc.m">here</a>.
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org450d92d" class="outline-3">
<h3 id="org450d92d"><span class="section-number-3">7.11</span> Mirror</h3> <div id="outline-container-org68746c9" class="outline-3">
<h3 id="org68746c9"><span class="section-number-3">7.11</span> Mirror</h3>
<div class="outline-text-3" id="text-7-11"> <div class="outline-text-3" id="text-7-11">
<p> <p>
<a id="org515a282"></a> <a id="orgf7ccf75"></a>
</p> </p>
<p> <p>
@ -2802,11 +2813,11 @@ This Matlab function is accessible <a href="../src/initializeMirror.m">here</a>.
</div> </div>
</div> </div>
<div id="outline-container-orgda72767" class="outline-3"> <div id="outline-container-org8e736b6" class="outline-3">
<h3 id="orgda72767"><span class="section-number-3">7.12</span> Nano Hexapod</h3> <h3 id="org8e736b6"><span class="section-number-3">7.12</span> Nano Hexapod</h3>
<div class="outline-text-3" id="text-7-12"> <div class="outline-text-3" id="text-7-12">
<p> <p>
<a id="orgd2f0174"></a> <a id="org5178991"></a>
</p> </p>
<p> <p>
@ -3019,11 +3030,11 @@ This Matlab function is accessible <a href="../src/initializeNanoHexapod.m">here
</div> </div>
</div> </div>
<div id="outline-container-org9a8f272" class="outline-3"> <div id="outline-container-org58409aa" class="outline-3">
<h3 id="org9a8f272"><span class="section-number-3">7.13</span> Sample</h3> <h3 id="org58409aa"><span class="section-number-3">7.13</span> Sample</h3>
<div class="outline-text-3" id="text-7-13"> <div class="outline-text-3" id="text-7-13">
<p> <p>
<a id="org61fb9e4"></a> <a id="orgc1256ab"></a>
</p> </p>
<p> <p>
@ -3068,7 +3079,7 @@ This Matlab function is accessible <a href="../src/initializeSample.m">here</a>.
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2019-10-15 mar. 09:28</p> <p class="date">Created: 2019-10-16 mer. 13:20</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> <p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div> </div>
</body> </body>

View File

@ -659,37 +659,64 @@ This Matlab function is accessible [[file:../src/identifyPlant.m][here]].
io(2) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion io(2) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion
io(3) = linio([mdl, '/Fs'], 1, 'input'); % External forces on the sample io(3) = linio([mdl, '/Fs'], 1, 'input'); % External forces on the sample
io(4) = linio([mdl, '/Fnl'], 1, 'input'); % Forces applied on the NASS's legs io(4) = linio([mdl, '/Fnl'], 1, 'input'); % Forces applied on the NASS's legs
io(5) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample io(5) = linio([mdl, '/Fd'], 1, 'input'); % Disturbance Forces
io(6) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs io(6) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample
io(7) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs io(7) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
io(8) = linio([mdl, '/Es'], 1, 'output'); % Position Error w.r.t. NASS base io(8) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
io(9) = linio([mdl, '/Es'], 1, 'output'); % Position Error w.r.t. NASS base
io(10) = linio([mdl, '/Vlm'], 1, 'output'); % Measured absolute velocity of the legs
%% Run the linearization %% Run the linearization
G = linearize(mdl, io, 0); G = linearize(mdl, io, options);
G.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz', ... G.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz', ...
'Dgx', 'Dgy', 'Dgz', ... 'Dgx', 'Dgy', 'Dgz', ...
'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz', ... 'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz', ...
'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', ...
'Frzz', 'Ftyx', 'Ftyz'};
G.OutputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz', ... G.OutputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz', ...
'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6', ... 'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6', ...
'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', ... 'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', ...
'Edx', 'Rdy', 'Edz', 'Erx', 'Ery', 'Erz'}; 'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz', ...
'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
%% Create the sub transfer functions %% Create the sub transfer functions
minreal_tol = sqrt(eps);
% From forces applied in the cartesian frame to displacement of the sample in the cartesian frame % From forces applied in the cartesian frame to displacement of the sample in the cartesian frame
sys.G_cart = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'})); sys.G_cart = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}), minreal_tol, false);
% From ground motion to Sample displacement % From ground motion to Sample displacement
sys.G_gm = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Dgx', 'Dgy', 'Dgz'})); sys.G_gm = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Dgx', 'Dgy', 'Dgz'}), minreal_tol, false);
% From direct forces applied on the sample to displacement of the sample % From direct forces applied on the sample to displacement of the sample
sys.G_fs = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz'})); sys.G_fs = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz'}), minreal_tol, false);
% From forces applied on NASS's legs to force sensor in each leg % From forces applied on NASS's legs to force sensor in each leg
sys.G_iff = minreal(G({'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_iff = minreal(G({'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}), minreal_tol, false);
% From forces applied on NASS's legs to displacement of each leg % From forces applied on NASS's legs to displacement of each leg
sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}), minreal_tol, false);
% From forces applied on NASS's legs to displacement of each leg % From forces/torques applied by the NASS to position error
sys.G_plant = minreal(G({'Edx', 'Rdy', 'Edz', 'Erx', 'Ery', 'Erz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'})); sys.G_plant = minreal(G({'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}), minreal_tol, false);
% From forces/torques applied by the NASS to velocity of the actuator
sys.G_geoph = minreal(G({'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}), minreal_tol, false);
% From various disturbance forces to position error
sys.G_dist = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Frzz', 'Ftyx', 'Ftyz'}), minreal_tol, false);
%% We remove low frequency and high frequency dynamics that are usually unstable
% using =freqsep= is risky as it may change the shape of the transfer functions
% f_min = 0.1; % [Hz]
% f_max = 1e4; % [Hz]
% [~, sys.G_cart] = freqsep(freqsep(sys.G_cart, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_gm] = freqsep(freqsep(sys.G_gm, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_fs] = freqsep(freqsep(sys.G_fs, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_iff] = freqsep(freqsep(sys.G_iff, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_dleg] = freqsep(freqsep(sys.G_dleg, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_plant] = freqsep(freqsep(sys.G_plant, 2*pi*f_max), 2*pi*f_min);
%% We finally verify that the system is stable
if ~isstable(sys.G_cart) || ~isstable(sys.G_gm) || ~isstable(sys.G_fs) || ~isstable(sys.G_iff) || ~isstable(sys.G_dleg) || ~isstable(sys.G_plant)
warning('One of the identified system is unstable');
end
end end
#+end_src #+end_src
** runSimulation ** runSimulation
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle ../src/runSimulation.m :header-args:matlab+: :tangle ../src/runSimulation.m
@ -1194,7 +1221,7 @@ This Matlab function is accessible [[file:../src/initializeTy.m][here]].
ty.k.ax = 1e12; % Axial Stiffness for each of the 4 guidance (y) [N/m] ty.k.ax = 1e12; % Axial Stiffness for each of the 4 guidance (y) [N/m]
ty.k.rad = 1e12; % Radial Stiffness for each of the 4 guidance (x-z) [N/m] ty.k.rad = 1e12; % Radial Stiffness for each of the 4 guidance (x-z) [N/m]
else else
ty.k.ax = 5e7; % Axial Stiffness for each of the 4 guidance (y) [N/m] ty.k.ax = 5e8; % Axial Stiffness for each of the 4 guidance (y) [N/m]
ty.k.rad = 5e7; % Radial Stiffness for each of the 4 guidance (x-z) [N/m] ty.k.rad = 5e7; % Radial Stiffness for each of the 4 guidance (x-z) [N/m]
end end
@ -1750,7 +1777,7 @@ This Matlab function is accessible [[file:../src/initializeNanoHexapod.m][here]]
SP.color.bottom = [0.7 0.7 0.7]; % [rgb] SP.color.bottom = [0.7 0.7 0.7]; % [rgb]
SP.color.top = [0.7 0.7 0.7]; % [rgb] SP.color.top = [0.7 0.7 0.7]; % [rgb]
SP.k.ax = 0; % [N*m/deg] SP.k.ax = 0; % [N*m/deg]
SP.ksi.ax = 3; SP.ksi.ax = 0;
SP.thickness.bottom = SP.height.bottom-Leg.sphere.bottom; % [mm] SP.thickness.bottom = SP.height.bottom-Leg.sphere.bottom; % [mm]
SP.thickness.top = SP.height.top-Leg.sphere.top; % [mm] SP.thickness.top = SP.height.top-Leg.sphere.top; % [mm]
@ -1780,7 +1807,11 @@ This Matlab function is accessible [[file:../src/initializeNanoHexapod.m][here]]
function [element] = updateDamping(element) function [element] = updateDamping(element)
field = fieldnames(element.k); field = fieldnames(element.k);
for i = 1:length(field) for i = 1:length(field)
if element.ksi.(field{i}) > 0
element.c.(field{i}) = 1/element.ksi.(field{i})*sqrt(element.k.(field{i})/element.m); element.c.(field{i}) = 1/element.ksi.(field{i})*sqrt(element.k.(field{i})/element.m);
else
element.c.(field{i}) = 0;
end
end end
end end
@ -1876,6 +1907,46 @@ This Matlab function is accessible [[file:../src/initializeNanoHexapod.m][here]]
end end
#+end_src #+end_src
** Cedrat Actuator
:PROPERTIES:
:header-args:matlab+: :tangle ../src/initializeCedratPiezo.m
:header-args:matlab+: :comments org :mkdirp yes
:header-args:matlab+: :eval no :results none
:END:
<<sec:initializeCedratPiezo>>
This Matlab function is accessible [[file:../src/initializeCedratPiezo.m][here]].
#+begin_src matlab
function [cedrat] = initializeCedratPiezo(opts_param)
%% Default values for opts
opts = struct();
%% Populate opts with input parameters
if exist('opts_param','var')
for opt = fieldnames(opts_param)'
opts.(opt{1}) = opts_param.(opt{1});
end
end
%% Stewart Object
cedrat = struct();
cedrat.k = 10e7; % Linear Stiffness of each "blade" [N/m]
cedrat.ka = 10e7; % Linear Stiffness of the stack [N/m]
cedrat.c = 0.1*sqrt(1*cedrat.k); % [N/(m/s)]
cedrat.ca = 0.1*sqrt(1*cedrat.ka); % [N/(m/s)]
cedrat.L = 80; % Total Width of the Actuator[mm]
cedrat.H = 45; % Total Height of the Actuator [mm]
cedrat.L2 = sqrt((cedrat.L/2)^2 + (cedrat.H/2)^2); % Length of the elipsoidal sections [mm]
cedrat.alpha = 180/pi*atan2(cedrat.L/2, cedrat.H/2); % [deg]
%% Save
save('./mat/stages.mat', 'cedrat', '-append');
end
#+end_src
** Sample ** Sample
:PROPERTIES: :PROPERTIES:
:header-args:matlab+: :tangle ../src/initializeSample.m :header-args:matlab+: :tangle ../src/initializeSample.m
@ -1905,13 +1976,13 @@ This Matlab function is accessible [[file:../src/initializeSample.m][here]].
%% %%
sample.k.x = 1e8; sample.k.x = 1e8;
sample.c.x = sqrt(sample.k.x*sample.mass)/10; sample.c.x = 0.1*sqrt(sample.k.x*sample.mass);
sample.k.y = 1e8; sample.k.y = 1e8;
sample.c.y = sqrt(sample.k.y*sample.mass)/10; sample.c.y = 0.1*sqrt(sample.k.y*sample.mass);
sample.k.z = 1e8; sample.k.z = 1e8;
sample.c.z = sqrt(sample.k.y*sample.mass)/10; sample.c.z = 0.1*sqrt(sample.k.z*sample.mass);
%% Save %% Save
save('./mat/stages.mat', 'sample', '-append'); save('./mat/stages.mat', 'sample', '-append');

View File

@ -1,12 +1,12 @@
% identifyPlant % identifyPlant
% :PROPERTIES: % :PROPERTIES:
% :header-args:matlab+: :tangle src/identifyPlant.m % :header-args:matlab+: :tangle ../src/identifyPlant.m
% :header-args:matlab+: :comments org :mkdirp yes % :header-args:matlab+: :comments org :mkdirp yes
% :header-args:matlab+: :eval no :results none % :header-args:matlab+: :eval no :results none
% :END: % :END:
% <<sec:identifyPlant>> % <<sec:identifyPlant>>
% This Matlab function is accessible [[file:src/identifyPlant.m][here]]. % This Matlab function is accessible [[file:../src/identifyPlant.m][here]].
function [sys] = identifyPlant(opts_param) function [sys] = identifyPlant(opts_param)
@ -32,33 +32,59 @@ function [sys] = identifyPlant(opts_param)
io(2) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion io(2) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion
io(3) = linio([mdl, '/Fs'], 1, 'input'); % External forces on the sample io(3) = linio([mdl, '/Fs'], 1, 'input'); % External forces on the sample
io(4) = linio([mdl, '/Fnl'], 1, 'input'); % Forces applied on the NASS's legs io(4) = linio([mdl, '/Fnl'], 1, 'input'); % Forces applied on the NASS's legs
io(5) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample io(5) = linio([mdl, '/Fd'], 1, 'input'); % Disturbance Forces
io(6) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs io(6) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample
io(7) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs io(7) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
io(8) = linio([mdl, '/Es'], 1, 'output'); % Position Error w.r.t. NASS base io(8) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
io(9) = linio([mdl, '/Es'], 1, 'output'); % Position Error w.r.t. NASS base
io(10) = linio([mdl, '/Vlm'], 1, 'output'); % Measured absolute velocity of the legs
%% Run the linearization %% Run the linearization
G = linearize(mdl, io, 0); G = linearize(mdl, io, options);
G.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz', ... G.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz', ...
'Dgx', 'Dgy', 'Dgz', ... 'Dgx', 'Dgy', 'Dgz', ...
'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz', ... 'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz', ...
'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}; 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', ...
'Frzz', 'Ftyx', 'Ftyz'};
G.OutputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz', ... G.OutputName = {'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz', ...
'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6', ... 'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6', ...
'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', ... 'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6', ...
'Edx', 'Rdy', 'Edz', 'Erx', 'Ery', 'Erz'}; 'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz', ...
'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
%% Create the sub transfer functions %% Create the sub transfer functions
minreal_tol = sqrt(eps);
% From forces applied in the cartesian frame to displacement of the sample in the cartesian frame % From forces applied in the cartesian frame to displacement of the sample in the cartesian frame
sys.G_cart = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'})); sys.G_cart = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}), minreal_tol, false);
% From ground motion to Sample displacement % From ground motion to Sample displacement
sys.G_gm = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Dgx', 'Dgy', 'Dgz'})); sys.G_gm = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Dgx', 'Dgy', 'Dgz'}), minreal_tol, false);
% From direct forces applied on the sample to displacement of the sample % From direct forces applied on the sample to displacement of the sample
sys.G_fs = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz'})); sys.G_fs = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Fsx', 'Fsy', 'Fsz', 'Msx', 'Msy', 'Msz'}), minreal_tol, false);
% From forces applied on NASS's legs to force sensor in each leg % From forces applied on NASS's legs to force sensor in each leg
sys.G_iff = minreal(G({'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_iff = minreal(G({'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}), minreal_tol, false);
% From forces applied on NASS's legs to displacement of each leg % From forces applied on NASS's legs to displacement of each leg
sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'})); sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}), minreal_tol, false);
% From forces applied on NASS's legs to displacement of each leg % From forces/torques applied by the NASS to position error
sys.G_plant = minreal(G({'Edx', 'Rdy', 'Edz', 'Erx', 'Ery', 'Erz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'})); sys.G_plant = minreal(G({'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}), minreal_tol, false);
% From forces/torques applied by the NASS to velocity of the actuator
sys.G_geoph = minreal(G({'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}), minreal_tol, false);
% From various disturbance forces to position error
sys.G_dist = minreal(G({'Dx', 'Dy', 'Dz', 'Rx', 'Ry', 'Rz'}, {'Frzz', 'Ftyx', 'Ftyz'}), minreal_tol, false);
%% We remove low frequency and high frequency dynamics that are usually unstable
% using =freqsep= is risky as it may change the shape of the transfer functions
% f_min = 0.1; % [Hz]
% f_max = 1e4; % [Hz]
% [~, sys.G_cart] = freqsep(freqsep(sys.G_cart, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_gm] = freqsep(freqsep(sys.G_gm, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_fs] = freqsep(freqsep(sys.G_fs, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_iff] = freqsep(freqsep(sys.G_iff, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_dleg] = freqsep(freqsep(sys.G_dleg, 2*pi*f_max), 2*pi*f_min);
% [~, sys.G_plant] = freqsep(freqsep(sys.G_plant, 2*pi*f_max), 2*pi*f_min);
%% We finally verify that the system is stable
if ~isstable(sys.G_cart) || ~isstable(sys.G_gm) || ~isstable(sys.G_fs) || ~isstable(sys.G_iff) || ~isstable(sys.G_dleg) || ~isstable(sys.G_plant)
warning('One of the identified system is unstable');
end
end end

View File

@ -68,7 +68,7 @@ function [ty] = initializeTy(opts_param)
ty.k.ax = 1e12; % Axial Stiffness for each of the 4 guidance (y) [N/m] ty.k.ax = 1e12; % Axial Stiffness for each of the 4 guidance (y) [N/m]
ty.k.rad = 1e12; % Radial Stiffness for each of the 4 guidance (x-z) [N/m] ty.k.rad = 1e12; % Radial Stiffness for each of the 4 guidance (x-z) [N/m]
else else
ty.k.ax = 5e7; % Axial Stiffness for each of the 4 guidance (y) [N/m] ty.k.ax = 5e8; % Axial Stiffness for each of the 4 guidance (y) [N/m]
ty.k.rad = 5e7; % Radial Stiffness for each of the 4 guidance (x-z) [N/m] ty.k.rad = 5e7; % Radial Stiffness for each of the 4 guidance (x-z) [N/m]
end end