Update stiffness of Ty stage. Add init of Cedrat actuator
This commit is contained in:
parent
080996e579
commit
0ed2768295
@ -3,7 +3,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2019-10-15 mar. 09:28 -->
|
||||
<!-- 2019-10-16 mer. 13:20 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Simscape Model</title>
|
||||
@ -258,68 +258,68 @@ for the JavaScript code in this tag.
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org96e2c6b">1. Simulink Project - Startup and Shutdown scripts</a></li>
|
||||
<li><a href="#orgf16072c">2. Simscape Multibody - Presentation</a>
|
||||
<li><a href="#org3e1cf29">1. Simulink Project - Startup and Shutdown scripts</a></li>
|
||||
<li><a href="#org1c09342">2. Simscape Multibody - Presentation</a>
|
||||
<ul>
|
||||
<li><a href="#orgbc7aec6">2.1. Solid bodies</a></li>
|
||||
<li><a href="#org299ad31">2.2. Frames</a></li>
|
||||
<li><a href="#org63bf417">2.3. Joints</a></li>
|
||||
<li><a href="#org0aea933">2.4. Measurements</a></li>
|
||||
<li><a href="#orgdb1ed37">2.5. Excitation</a></li>
|
||||
<li><a href="#org8456f59">2.1. Solid bodies</a></li>
|
||||
<li><a href="#orge3189c0">2.2. Frames</a></li>
|
||||
<li><a href="#orgde21d23">2.3. Joints</a></li>
|
||||
<li><a href="#org00591e4">2.4. Measurements</a></li>
|
||||
<li><a href="#org3527feb">2.5. Excitation</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgc5e1ba2">3. Simulink files and signal names</a>
|
||||
<li><a href="#orgcf96a70">3. Simulink files and signal names</a>
|
||||
<ul>
|
||||
<li><a href="#org4e2c64d">3.1. List of Simscape files</a></li>
|
||||
<li><a href="#org7e6d6ee">3.2. List of Inputs</a>
|
||||
<li><a href="#orgc3c8276">3.1. List of Simscape files</a></li>
|
||||
<li><a href="#orgd725cbe">3.2. List of Inputs</a>
|
||||
<ul>
|
||||
<li><a href="#org6645203">3.2.1. Perturbations</a></li>
|
||||
<li><a href="#org7be9ba3">3.2.2. Measurement Noise</a></li>
|
||||
<li><a href="#org41b1dfa">3.2.3. Control Inputs</a></li>
|
||||
<li><a href="#orgc8c59ec">3.2.1. Perturbations</a></li>
|
||||
<li><a href="#org083bb4b">3.2.2. Measurement Noise</a></li>
|
||||
<li><a href="#org3cd7a2c">3.2.3. Control Inputs</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orge471f78">3.3. List of Outputs</a></li>
|
||||
<li><a href="#orgfd2e554">3.3. List of Outputs</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org5525cc6">4. Simulink Library</a>
|
||||
<li><a href="#org49831aa">4. Simulink Library</a>
|
||||
<ul>
|
||||
<li><a href="#orgf34437e">4.1. <code>inputs</code></a></li>
|
||||
<li><a href="#org45cb930">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="#org933ef5e">4.4. <code>QuaternionToAngles</code></a></li>
|
||||
<li><a href="#org2bc9fbc">4.5. <code>RotationMatrixToAngle</code></a></li>
|
||||
<li><a href="#org3f18fb2">4.1. <code>inputs</code></a></li>
|
||||
<li><a href="#orgaefc1f3">4.2. <code>nass_library</code></a></li>
|
||||
<li><a href="#org68263b0">4.3. <code>pos_error_wrt_nass_base</code></a></li>
|
||||
<li><a href="#org6d2bf6b">4.4. <code>QuaternionToAngles</code></a></li>
|
||||
<li><a href="#org2497f48">4.5. <code>RotationMatrixToAngle</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgb9ce7fd">5. Scripts</a>
|
||||
<li><a href="#org806f9e5">5. Scripts</a>
|
||||
<ul>
|
||||
<li><a href="#orgf33c223">5.1. Simulation Initialization</a></li>
|
||||
<li><a href="#orge58f7eb">5.1. Simulation Initialization</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org4fdacaa">6. Functions</a>
|
||||
<li><a href="#orgb738acb">6. Functions</a>
|
||||
<ul>
|
||||
<li><a href="#org43915cc">6.1. computePsdDispl</a></li>
|
||||
<li><a href="#orgd7ee25b">6.2. computeSetpoint</a></li>
|
||||
<li><a href="#orgbb5f7a9">6.3. converErrorBasis</a></li>
|
||||
<li><a href="#org4a8080d">6.4. generateDiagPidControl</a></li>
|
||||
<li><a href="#org0bca141">6.5. identifyPlant</a></li>
|
||||
<li><a href="#orgb5a1268">6.6. runSimulation</a></li>
|
||||
<li><a href="#orga74019d">6.1. computePsdDispl</a></li>
|
||||
<li><a href="#orgf72e736">6.2. computeSetpoint</a></li>
|
||||
<li><a href="#org9651b74">6.3. converErrorBasis</a></li>
|
||||
<li><a href="#org7afdcb3">6.4. generateDiagPidControl</a></li>
|
||||
<li><a href="#orgdb550d2">6.5. identifyPlant</a></li>
|
||||
<li><a href="#orgd7e834e">6.6. runSimulation</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org3d69ec6">7. Initialize Elements</a>
|
||||
<li><a href="#org18d0a30">7. Initialize Elements</a>
|
||||
<ul>
|
||||
<li><a href="#orgc4959ef">7.1. Simulation Configuration</a></li>
|
||||
<li><a href="#org2fb7886">7.2. Experiment</a></li>
|
||||
<li><a href="#org710acf3">7.3. Inputs</a></li>
|
||||
<li><a href="#orge26db3d">7.4. Ground</a></li>
|
||||
<li><a href="#org725a842">7.5. Granite</a></li>
|
||||
<li><a href="#org505fe65">7.6. Translation Stage</a></li>
|
||||
<li><a href="#org4a37dc0">7.7. Tilt Stage</a></li>
|
||||
<li><a href="#org9f4e484">7.8. Spindle</a></li>
|
||||
<li><a href="#org0a3467b">7.9. Micro Hexapod</a></li>
|
||||
<li><a href="#org0b6b398">7.10. Center of gravity compensation</a></li>
|
||||
<li><a href="#org450d92d">7.11. Mirror</a></li>
|
||||
<li><a href="#orgda72767">7.12. Nano Hexapod</a></li>
|
||||
<li><a href="#org9a8f272">7.13. Sample</a></li>
|
||||
<li><a href="#org9fe06e1">7.1. Simulation Configuration</a></li>
|
||||
<li><a href="#org66f3562">7.2. Experiment</a></li>
|
||||
<li><a href="#org79e1d7e">7.3. Inputs</a></li>
|
||||
<li><a href="#orgb40ac8d">7.4. Ground</a></li>
|
||||
<li><a href="#org8b53c51">7.5. Granite</a></li>
|
||||
<li><a href="#org45b15c7">7.6. Translation Stage</a></li>
|
||||
<li><a href="#orgb4f2e7d">7.7. Tilt Stage</a></li>
|
||||
<li><a href="#orgc9fe898">7.8. Spindle</a></li>
|
||||
<li><a href="#org438103e">7.9. Micro Hexapod</a></li>
|
||||
<li><a href="#org85b3f9f">7.10. Center of gravity compensation</a></li>
|
||||
<li><a href="#org68746c9">7.11. Mirror</a></li>
|
||||
<li><a href="#org8e736b6">7.12. Nano Hexapod</a></li>
|
||||
<li><a href="#org58409aa">7.13. Sample</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@ -330,20 +330,20 @@ for the JavaScript code in this tag.
|
||||
This file is used to explain how this Simscape Model works.
|
||||
</p>
|
||||
<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="#org891dc1a">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="#orgeba961a">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="#orgace5606">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="#orgb54e2e3">1</a>, the simulink project with the associated scripts are presented</li>
|
||||
<li>In section <a href="#org9feec6d">2</a>, an introduction to Simscape Multibody is done</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="#org1168978">4</a>, the list of the Simulink library elements 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="#orga71cb40">6</a>, a list of Matlab function that will be used are defined here</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>
|
||||
|
||||
<div id="outline-container-org96e2c6b" class="outline-2">
|
||||
<h2 id="org96e2c6b"><span class="section-number-2">1</span> Simulink Project - Startup and Shutdown scripts</h2>
|
||||
<div id="outline-container-org3e1cf29" class="outline-2">
|
||||
<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">
|
||||
<p>
|
||||
<a id="org78dc1a8"></a>
|
||||
<a id="orgb54e2e3"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -409,11 +409,11 @@ The project also permits to automatically add defined folder to the path when th
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf16072c" class="outline-2">
|
||||
<h2 id="orgf16072c"><span class="section-number-2">2</span> Simscape Multibody - Presentation</h2>
|
||||
<div id="outline-container-org1c09342" class="outline-2">
|
||||
<h2 id="org1c09342"><span class="section-number-2">2</span> Simscape Multibody - Presentation</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
<a id="org891dc1a"></a>
|
||||
<a id="org9feec6d"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -425,8 +425,8 @@ A <a href="https://.mathworks.com/products/simscape.html">simscape</a> model per
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgbc7aec6" class="outline-3">
|
||||
<h3 id="orgbc7aec6"><span class="section-number-3">2.1</span> Solid bodies</h3>
|
||||
<div id="outline-container-org8456f59" class="outline-3">
|
||||
<h3 id="org8456f59"><span class="section-number-3">2.1</span> Solid bodies</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
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 id="outline-container-org299ad31" class="outline-3">
|
||||
<h3 id="org299ad31"><span class="section-number-3">2.2</span> Frames</h3>
|
||||
<div id="outline-container-orge3189c0" class="outline-3">
|
||||
<h3 id="orge3189c0"><span class="section-number-3">2.2</span> Frames</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<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.
|
||||
@ -448,8 +448,8 @@ They can be defined from the solid body geometry, or using the <a href="https://
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org63bf417" class="outline-3">
|
||||
<h3 id="org63bf417"><span class="section-number-3">2.3</span> Joints</h3>
|
||||
<div id="outline-container-orgde21d23" class="outline-3">
|
||||
<h3 id="orgde21d23"><span class="section-number-3">2.3</span> Joints</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<p>
|
||||
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>.
|
||||
</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>
|
||||
|
||||
<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>
|
||||
</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>
|
||||
|
||||
<colgroup>
|
||||
@ -884,8 +884,8 @@ Composite Force/Torque sensing:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0aea933" class="outline-3">
|
||||
<h3 id="org0aea933"><span class="section-number-3">2.4</span> Measurements</h3>
|
||||
<div id="outline-container-org00591e4" class="outline-3">
|
||||
<h3 id="org00591e4"><span class="section-number-3">2.4</span> Measurements</h3>
|
||||
<div class="outline-text-3" id="text-2-4">
|
||||
<p>
|
||||
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 id="outline-container-orgdb1ed37" class="outline-3">
|
||||
<h3 id="orgdb1ed37"><span class="section-number-3">2.5</span> Excitation</h3>
|
||||
<div id="outline-container-org3527feb" class="outline-3">
|
||||
<h3 id="org3527feb"><span class="section-number-3">2.5</span> Excitation</h3>
|
||||
<div class="outline-text-3" id="text-2-5">
|
||||
<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>.
|
||||
@ -923,11 +923,11 @@ Internal force, acting reciprocally between base and following origins is implem
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc5e1ba2" class="outline-2">
|
||||
<h2 id="orgc5e1ba2"><span class="section-number-2">3</span> Simulink files and signal names</h2>
|
||||
<div id="outline-container-orgcf96a70" class="outline-2">
|
||||
<h2 id="orgcf96a70"><span class="section-number-2">3</span> Simulink files and signal names</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
<a id="org53599f2"></a>
|
||||
<a id="orga2ea1e0"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -935,8 +935,8 @@ In order to "normalize" things, the names of all the signal are listed here.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4e2c64d" class="outline-3">
|
||||
<h3 id="org4e2c64d"><span class="section-number-3">3.1</span> List of Simscape files</h3>
|
||||
<div id="outline-container-orgc3c8276" class="outline-3">
|
||||
<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">
|
||||
<p>
|
||||
Few different Simulink files are used:
|
||||
@ -948,7 +948,7 @@ Few different Simulink files are used:
|
||||
<li>control</li>
|
||||
</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>
|
||||
|
||||
<colgroup>
|
||||
@ -1015,14 +1015,14 @@ Few different Simulink files are used:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7e6d6ee" class="outline-3">
|
||||
<h3 id="org7e6d6ee"><span class="section-number-3">3.2</span> List of Inputs</h3>
|
||||
<div id="outline-container-orgd725cbe" class="outline-3">
|
||||
<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>
|
||||
<div id="outline-container-org6645203" class="outline-4">
|
||||
<h4 id="org6645203"><span class="section-number-4">3.2.1</span> Perturbations</h4>
|
||||
<div id="outline-container-orgc8c59ec" class="outline-4">
|
||||
<h4 id="orgc8c59ec"><span class="section-number-4">3.2.1</span> Perturbations</h4>
|
||||
<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>
|
||||
|
||||
<colgroup>
|
||||
@ -1068,10 +1068,10 @@ Few different Simulink files are used:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7be9ba3" class="outline-4">
|
||||
<h4 id="org7be9ba3"><span class="section-number-4">3.2.2</span> Measurement Noise</h4>
|
||||
<div id="outline-container-org083bb4b" class="outline-4">
|
||||
<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">
|
||||
<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>
|
||||
|
||||
<colgroup>
|
||||
@ -1103,10 +1103,10 @@ Few different Simulink files are used:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org41b1dfa" class="outline-4">
|
||||
<h4 id="org41b1dfa"><span class="section-number-4">3.2.3</span> Control Inputs</h4>
|
||||
<div id="outline-container-org3cd7a2c" class="outline-4">
|
||||
<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">
|
||||
<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>
|
||||
|
||||
<colgroup>
|
||||
@ -1228,10 +1228,10 @@ Few different Simulink files are used:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge471f78" class="outline-3">
|
||||
<h3 id="orge471f78"><span class="section-number-3">3.3</span> List of Outputs</h3>
|
||||
<div id="outline-container-orgfd2e554" class="outline-3">
|
||||
<h3 id="orgfd2e554"><span class="section-number-3">3.3</span> List of Outputs</h3>
|
||||
<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>
|
||||
|
||||
<colgroup>
|
||||
@ -1347,11 +1347,11 @@ Few different Simulink files are used:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5525cc6" class="outline-2">
|
||||
<h2 id="org5525cc6"><span class="section-number-2">4</span> Simulink Library</h2>
|
||||
<div id="outline-container-org49831aa" class="outline-2">
|
||||
<h2 id="org49831aa"><span class="section-number-2">4</span> Simulink Library</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
<p>
|
||||
<a id="orgeba961a"></a>
|
||||
<a id="org1168978"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1359,8 +1359,8 @@ A simulink library is developed in order to share elements between the different
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf34437e" class="outline-3">
|
||||
<h3 id="orgf34437e"><span class="section-number-3">4.1</span> <code>inputs</code></h3>
|
||||
<div id="outline-container-org3f18fb2" class="outline-3">
|
||||
<h3 id="org3f18fb2"><span class="section-number-3">4.1</span> <code>inputs</code></h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
<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 id="outline-container-org45cb930" class="outline-3">
|
||||
<h3 id="org45cb930"><span class="section-number-3">4.2</span> <code>nass_library</code></h3>
|
||||
<div id="outline-container-orgaefc1f3" class="outline-3">
|
||||
<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">
|
||||
<p>
|
||||
<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 id="outline-container-orgc05468b" class="outline-3">
|
||||
<h3 id="orgc05468b"><span class="section-number-3">4.3</span> <code>pos_error_wrt_nass_base</code></h3>
|
||||
<div id="outline-container-org68263b0" class="outline-3">
|
||||
<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">
|
||||
<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>
|
||||
@ -1386,8 +1386,8 @@ A simulink library is developed in order to share elements between the different
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org933ef5e" class="outline-3">
|
||||
<h3 id="org933ef5e"><span class="section-number-3">4.4</span> <code>QuaternionToAngles</code></h3>
|
||||
<div id="outline-container-org6d2bf6b" class="outline-3">
|
||||
<h3 id="org6d2bf6b"><span class="section-number-3">4.4</span> <code>QuaternionToAngles</code></h3>
|
||||
<div class="outline-text-3" id="text-4-4">
|
||||
<p>
|
||||
<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 id="outline-container-org2bc9fbc" class="outline-3">
|
||||
<h3 id="org2bc9fbc"><span class="section-number-3">4.5</span> <code>RotationMatrixToAngle</code></h3>
|
||||
<div id="outline-container-org2497f48" class="outline-3">
|
||||
<h3 id="org2497f48"><span class="section-number-3">4.5</span> <code>RotationMatrixToAngle</code></h3>
|
||||
<div class="outline-text-3" id="text-4-5">
|
||||
<p>
|
||||
<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 id="outline-container-orgb9ce7fd" class="outline-2">
|
||||
<h2 id="orgb9ce7fd"><span class="section-number-2">5</span> Scripts</h2>
|
||||
<div id="outline-container-org806f9e5" class="outline-2">
|
||||
<h2 id="org806f9e5"><span class="section-number-2">5</span> Scripts</h2>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
<p>
|
||||
<a id="orgf2d92b0"></a>
|
||||
<a id="org7e3aead"></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf33c223" class="outline-3">
|
||||
<h3 id="orgf33c223"><span class="section-number-3">5.1</span> Simulation Initialization</h3>
|
||||
<div id="outline-container-orge58f7eb" class="outline-3">
|
||||
<h3 id="orge58f7eb"><span class="section-number-3">5.1</span> Simulation Initialization</h3>
|
||||
<div class="outline-text-3" id="text-5-1">
|
||||
<p>
|
||||
<a id="orgda5e763"></a>
|
||||
<a id="org1f1a9a4"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1441,19 +1441,19 @@ load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4fdacaa" class="outline-2">
|
||||
<h2 id="org4fdacaa"><span class="section-number-2">6</span> Functions</h2>
|
||||
<div id="outline-container-orgb738acb" class="outline-2">
|
||||
<h2 id="orgb738acb"><span class="section-number-2">6</span> Functions</h2>
|
||||
<div class="outline-text-2" id="text-6">
|
||||
<p>
|
||||
<a id="orgace5606"></a>
|
||||
<a id="orga71cb40"></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org43915cc" class="outline-3">
|
||||
<h3 id="org43915cc"><span class="section-number-3">6.1</span> computePsdDispl</h3>
|
||||
<div id="outline-container-orga74019d" class="outline-3">
|
||||
<h3 id="orga74019d"><span class="section-number-3">6.1</span> computePsdDispl</h3>
|
||||
<div class="outline-text-3" id="text-6-1">
|
||||
<p>
|
||||
<a id="org09a017b"></a>
|
||||
<a id="orgad80ead"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1489,11 +1489,11 @@ This Matlab function is accessible <a href="../src/computePsdDispl.m">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd7ee25b" class="outline-3">
|
||||
<h3 id="orgd7ee25b"><span class="section-number-3">6.2</span> computeSetpoint</h3>
|
||||
<div id="outline-container-orgf72e736" class="outline-3">
|
||||
<h3 id="orgf72e736"><span class="section-number-3">6.2</span> computeSetpoint</h3>
|
||||
<div class="outline-text-3" id="text-6-2">
|
||||
<p>
|
||||
<a id="org7e68bf4"></a>
|
||||
<a id="org3313372"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1565,11 +1565,11 @@ setpoint<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-hi
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgbb5f7a9" class="outline-3">
|
||||
<h3 id="orgbb5f7a9"><span class="section-number-3">6.3</span> converErrorBasis</h3>
|
||||
<div id="outline-container-org9651b74" class="outline-3">
|
||||
<h3 id="org9651b74"><span class="section-number-3">6.3</span> converErrorBasis</h3>
|
||||
<div class="outline-text-3" id="text-6-3">
|
||||
<p>
|
||||
<a id="orgdf35d55"></a>
|
||||
<a id="org4bd5417"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1707,11 +1707,11 @@ error_nass = <span class="org-rainbow-delimiters-depth-1">[</span>dx; dy; dz; th
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4a8080d" class="outline-3">
|
||||
<h3 id="org4a8080d"><span class="section-number-3">6.4</span> generateDiagPidControl</h3>
|
||||
<div id="outline-container-org7afdcb3" class="outline-3">
|
||||
<h3 id="org7afdcb3"><span class="section-number-3">6.4</span> generateDiagPidControl</h3>
|
||||
<div class="outline-text-3" id="text-6-4">
|
||||
<p>
|
||||
<a id="org90bc335"></a>
|
||||
<a id="org1c2dcc7"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1741,11 +1741,11 @@ This Matlab function is accessible <a href="../src/generateDiagPidControl.m">her
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org0bca141" class="outline-3">
|
||||
<h3 id="org0bca141"><span class="section-number-3">6.5</span> identifyPlant</h3>
|
||||
<div id="outline-container-orgdb550d2" class="outline-3">
|
||||
<h3 id="orgdb550d2"><span class="section-number-3">6.5</span> identifyPlant</h3>
|
||||
<div class="outline-text-3" id="text-6-5">
|
||||
<p>
|
||||
<a id="org91dcabe"></a>
|
||||
<a id="orgbbb9128"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1810,11 +1810,11 @@ This Matlab function is accessible <a href="../src/identifyPlant.m">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-orgb5a1268" class="outline-3">
|
||||
<h3 id="orgb5a1268"><span class="section-number-3">6.6</span> runSimulation</h3>
|
||||
<div id="outline-container-orgd7e834e" class="outline-3">
|
||||
<h3 id="orgd7e834e"><span class="section-number-3">6.6</span> runSimulation</h3>
|
||||
<div class="outline-text-3" id="text-6-6">
|
||||
<p>
|
||||
<a id="orgb5fec90"></a>
|
||||
<a id="org7192c97"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1883,18 +1883,18 @@ This Matlab function is accessible <a href="../src/runSimulation.m">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org3d69ec6" class="outline-2">
|
||||
<h2 id="org3d69ec6"><span class="section-number-2">7</span> Initialize Elements</h2>
|
||||
<div id="outline-container-org18d0a30" class="outline-2">
|
||||
<h2 id="org18d0a30"><span class="section-number-2">7</span> Initialize Elements</h2>
|
||||
<div class="outline-text-2" id="text-7">
|
||||
<p>
|
||||
<a id="orgbf8675b"></a>
|
||||
<a id="org09bacdf"></a>
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-orgc4959ef" class="outline-3">
|
||||
<h3 id="orgc4959ef"><span class="section-number-3">7.1</span> Simulation Configuration</h3>
|
||||
<div id="outline-container-org9fe06e1" class="outline-3">
|
||||
<h3 id="org9fe06e1"><span class="section-number-3">7.1</span> Simulation Configuration</h3>
|
||||
<div class="outline-text-3" id="text-7-1">
|
||||
<p>
|
||||
<a id="org30822db"></a>
|
||||
<a id="org6935b27"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1940,11 +1940,11 @@ This Matlab function is accessible <a href="../src/initializeSimConf.m">here</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2fb7886" class="outline-3">
|
||||
<h3 id="org2fb7886"><span class="section-number-3">7.2</span> Experiment</h3>
|
||||
<div id="outline-container-org66f3562" class="outline-3">
|
||||
<h3 id="org66f3562"><span class="section-number-3">7.2</span> Experiment</h3>
|
||||
<div class="outline-text-3" id="text-7-2">
|
||||
<p>
|
||||
<a id="org54e03da"></a>
|
||||
<a id="orgee246b1"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -1984,11 +1984,11 @@ This Matlab function is accessible <a href="../src/initializeExperiment.m">here<
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org710acf3" class="outline-3">
|
||||
<h3 id="org710acf3"><span class="section-number-3">7.3</span> Inputs</h3>
|
||||
<div id="outline-container-org79e1d7e" class="outline-3">
|
||||
<h3 id="org79e1d7e"><span class="section-number-3">7.3</span> Inputs</h3>
|
||||
<div class="outline-text-3" id="text-7-3">
|
||||
<p>
|
||||
<a id="org5f2ac6c"></a>
|
||||
<a id="org9efc0e3"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -2176,11 +2176,11 @@ This Matlab function is accessible <a href="../src/initializeInputs.m">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge26db3d" class="outline-3">
|
||||
<h3 id="orge26db3d"><span class="section-number-3">7.4</span> Ground</h3>
|
||||
<div id="outline-container-orgb40ac8d" class="outline-3">
|
||||
<h3 id="orgb40ac8d"><span class="section-number-3">7.4</span> Ground</h3>
|
||||
<div class="outline-text-3" id="text-7-4">
|
||||
<p>
|
||||
<a id="orgfdfeb76"></a>
|
||||
<a id="orgfef662a"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -2204,11 +2204,11 @@ This Matlab function is accessible <a href="../src/initializeGround.m">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org725a842" class="outline-3">
|
||||
<h3 id="org725a842"><span class="section-number-3">7.5</span> Granite</h3>
|
||||
<div id="outline-container-org8b53c51" class="outline-3">
|
||||
<h3 id="org8b53c51"><span class="section-number-3">7.5</span> Granite</h3>
|
||||
<div class="outline-text-3" id="text-7-5">
|
||||
<p>
|
||||
<a id="orgeb2adf5"></a>
|
||||
<a id="org46c0691"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -2216,26 +2216,37 @@ This Matlab function is accessible <a href="../src/initializeGranite.m">here</a>
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name"><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>
|
||||
granite = struct<span class="org-rainbow-delimiters-depth-1">()</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.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.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.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>
|
||||
granite.k.x = <span class="org-highlight-numbers-number">1e8</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.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">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.c.y = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% [N/(m/s)]</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">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.c.z = <span class="org-highlight-numbers-number">1e4</span>; <span class="org-comment">% [N/(m/s)]</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">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>
|
||||
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 id="outline-container-org505fe65" class="outline-3">
|
||||
<h3 id="org505fe65"><span class="section-number-3">7.6</span> Translation Stage</h3>
|
||||
<div id="outline-container-org45b15c7" class="outline-3">
|
||||
<h3 id="org45b15c7"><span class="section-number-3">7.6</span> Translation Stage</h3>
|
||||
<div class="outline-text-3" id="text-7-6">
|
||||
<p>
|
||||
<a id="org5779bcf"></a>
|
||||
<a id="org788a893"></a>
|
||||
</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.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-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]
|
||||
<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>
|
||||
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.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.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">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>
|
||||
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 id="outline-container-org4a37dc0" class="outline-3">
|
||||
<h3 id="org4a37dc0"><span class="section-number-3">7.7</span> Tilt Stage</h3>
|
||||
<div id="outline-container-orgb4f2e7d" class="outline-3">
|
||||
<h3 id="orgb4f2e7d"><span class="section-number-3">7.7</span> Tilt Stage</h3>
|
||||
<div class="outline-text-3" id="text-7-7">
|
||||
<p>
|
||||
<a id="org1870995"></a>
|
||||
<a id="org63a3f60"></a>
|
||||
</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.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-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>
|
||||
<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.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.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.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">1e8</span>; <span class="org-comment">% Stiffness in the top 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.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.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.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.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">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">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">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>
|
||||
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 id="outline-container-org9f4e484" class="outline-3">
|
||||
<h3 id="org9f4e484"><span class="section-number-3">7.8</span> Spindle</h3>
|
||||
<div id="outline-container-orgc9fe898" class="outline-3">
|
||||
<h3 id="orgc9fe898"><span class="section-number-3">7.8</span> Spindle</h3>
|
||||
<div class="outline-text-3" id="text-7-8">
|
||||
<p>
|
||||
<a id="orgd54e318"></a>
|
||||
<a id="orgc6fc1b9"></a>
|
||||
</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>
|
||||
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.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
|
||||
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>
|
||||
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-comment">% TODO</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.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.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.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>;
|
||||
<span class="org-comment">% Damping</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">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">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">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>
|
||||
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 id="outline-container-org0a3467b" class="outline-3">
|
||||
<h3 id="org0a3467b"><span class="section-number-3">7.9</span> Micro Hexapod</h3>
|
||||
<div id="outline-container-org438103e" class="outline-3">
|
||||
<h3 id="org438103e"><span class="section-number-3">7.9</span> Micro Hexapod</h3>
|
||||
<div class="outline-text-3" id="text-7-9">
|
||||
<p>
|
||||
<a id="org4f5ef62"></a>
|
||||
<a id="orgc8a45d3"></a>
|
||||
</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>
|
||||
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.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>
|
||||
|
||||
<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 id="outline-container-org0b6b398" class="outline-3">
|
||||
<h3 id="org0b6b398"><span class="section-number-3">7.10</span> Center of gravity compensation</h3>
|
||||
<div id="outline-container-org85b3f9f" class="outline-3">
|
||||
<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">
|
||||
<p>
|
||||
<a id="orged7dcb1"></a>
|
||||
<a id="org72a3d1e"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -2732,11 +2742,12 @@ This Matlab function is accessible <a href="../src/initializeAxisc.m">here</a>.
|
||||
</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">
|
||||
<p>
|
||||
<a id="org515a282"></a>
|
||||
<a id="orgf7ccf75"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -2802,11 +2813,11 @@ This Matlab function is accessible <a href="../src/initializeMirror.m">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgda72767" class="outline-3">
|
||||
<h3 id="orgda72767"><span class="section-number-3">7.12</span> Nano Hexapod</h3>
|
||||
<div id="outline-container-org8e736b6" class="outline-3">
|
||||
<h3 id="org8e736b6"><span class="section-number-3">7.12</span> Nano Hexapod</h3>
|
||||
<div class="outline-text-3" id="text-7-12">
|
||||
<p>
|
||||
<a id="orgd2f0174"></a>
|
||||
<a id="org5178991"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -3019,11 +3030,11 @@ This Matlab function is accessible <a href="../src/initializeNanoHexapod.m">here
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9a8f272" class="outline-3">
|
||||
<h3 id="org9a8f272"><span class="section-number-3">7.13</span> Sample</h3>
|
||||
<div id="outline-container-org58409aa" class="outline-3">
|
||||
<h3 id="org58409aa"><span class="section-number-3">7.13</span> Sample</h3>
|
||||
<div class="outline-text-3" id="text-7-13">
|
||||
<p>
|
||||
<a id="org61fb9e4"></a>
|
||||
<a id="orgc1256ab"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -3068,7 +3079,7 @@ This Matlab function is accessible <a href="../src/initializeSample.m">here</a>.
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<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>
|
||||
</div>
|
||||
</body>
|
||||
|
@ -659,37 +659,64 @@ This Matlab function is accessible [[file:../src/identifyPlant.m][here]].
|
||||
io(2) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion
|
||||
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(5) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample
|
||||
io(6) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
|
||||
io(7) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
|
||||
io(8) = linio([mdl, '/Es'], 1, 'output'); % Position Error w.r.t. NASS base
|
||||
io(5) = linio([mdl, '/Fd'], 1, 'input'); % Disturbance Forces
|
||||
io(6) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample
|
||||
io(7) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
|
||||
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
|
||||
G = linearize(mdl, io, 0);
|
||||
G = linearize(mdl, io, options);
|
||||
G.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz', ...
|
||||
'Dgx', 'Dgy', 'Dgz', ...
|
||||
'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', ...
|
||||
'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6', ...
|
||||
'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
|
||||
minreal_tol = sqrt(eps);
|
||||
% 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
|
||||
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
|
||||
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
|
||||
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
|
||||
sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}));
|
||||
% From forces applied on NASS's legs to displacement of each leg
|
||||
sys.G_plant = minreal(G({'Edx', 'Rdy', 'Edz', 'Erx', 'Ery', 'Erz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}));
|
||||
sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}), minreal_tol, false);
|
||||
% From forces/torques applied by the NASS to position error
|
||||
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_src
|
||||
|
||||
** runSimulation
|
||||
:PROPERTIES:
|
||||
: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.rad = 1e12; % Radial Stiffness for each of the 4 guidance (x-z) [N/m]
|
||||
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]
|
||||
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.top = [0.7 0.7 0.7]; % [rgb]
|
||||
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.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)
|
||||
field = fieldnames(element.k);
|
||||
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);
|
||||
else
|
||||
element.c.(field{i}) = 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1876,6 +1907,46 @@ This Matlab function is accessible [[file:../src/initializeNanoHexapod.m][here]]
|
||||
end
|
||||
#+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
|
||||
:PROPERTIES:
|
||||
: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.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.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.c.z = sqrt(sample.k.y*sample.mass)/10;
|
||||
sample.c.z = 0.1*sqrt(sample.k.z*sample.mass);
|
||||
|
||||
%% Save
|
||||
save('./mat/stages.mat', 'sample', '-append');
|
||||
|
@ -1,12 +1,12 @@
|
||||
% identifyPlant
|
||||
% :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+: :eval no :results none
|
||||
% :END:
|
||||
% <<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)
|
||||
@ -32,33 +32,59 @@ function [sys] = identifyPlant(opts_param)
|
||||
io(2) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion
|
||||
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(5) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample
|
||||
io(6) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
|
||||
io(7) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
|
||||
io(8) = linio([mdl, '/Es'], 1, 'output'); % Position Error w.r.t. NASS base
|
||||
io(5) = linio([mdl, '/Fd'], 1, 'input'); % Disturbance Forces
|
||||
io(6) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample
|
||||
io(7) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
|
||||
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
|
||||
G = linearize(mdl, io, 0);
|
||||
G = linearize(mdl, io, options);
|
||||
G.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz', ...
|
||||
'Dgx', 'Dgy', 'Dgz', ...
|
||||
'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', ...
|
||||
'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6', ...
|
||||
'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
|
||||
minreal_tol = sqrt(eps);
|
||||
% 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
|
||||
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
|
||||
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
|
||||
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
|
||||
sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}));
|
||||
% From forces applied on NASS's legs to displacement of each leg
|
||||
sys.G_plant = minreal(G({'Edx', 'Rdy', 'Edz', 'Erx', 'Ery', 'Erz'}, {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}));
|
||||
sys.G_dleg = minreal(G({'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'}, {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'}), minreal_tol, false);
|
||||
% From forces/torques applied by the NASS to position error
|
||||
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
|
||||
|
@ -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.rad = 1e12; % Radial Stiffness for each of the 4 guidance (x-z) [N/m]
|
||||
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]
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user