Update html pages

This commit is contained in:
Thomas Dehaeze 2020-03-11 19:00:22 +01:00
parent 62a9796945
commit b5d73ab978
5 changed files with 2338 additions and 886 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-03-02 lun. 17:57 -->
<!-- 2020-03-11 mer. 18:59 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Stewart Platform - Vibration Isolation</title>
@ -249,28 +249,28 @@
<li><a href="#org272e7f8">1. HAC-LAC (Cascade) Control - Integral Control</a>
<ul>
<li><a href="#orga5c9b98">1.1. Introduction</a></li>
<li><a href="#org5907395">1.2. Initialization</a></li>
<li><a href="#org080a6bd">1.3. Identification</a>
<li><a href="#orgc3f9713">1.2. Initialization</a></li>
<li><a href="#org7e03b59">1.3. Identification</a>
<ul>
<li><a href="#org183dcef">1.3.1. HAC - Without LAC</a></li>
<li><a href="#orgc3e7950">1.3.2. HAC - IFF</a></li>
<li><a href="#orgd4db8b6">1.3.3. HAC - DVF</a></li>
<li><a href="#org33f5d7c">1.3.1. HAC - Without LAC</a></li>
<li><a href="#org09a49c0">1.3.2. HAC - IFF</a></li>
<li><a href="#org9420024">1.3.3. HAC - DVF</a></li>
</ul>
</li>
<li><a href="#org61a6098">1.4. Control Architecture</a></li>
<li><a href="#orgdca8b1b">1.5. 6x6 Plant Comparison</a></li>
<li><a href="#org7c72eb7">1.6. HAC - DVF</a>
<li><a href="#orgf1f6f9b">1.6. HAC - DVF</a>
<ul>
<li><a href="#org673a1cd">1.6.1. Plant</a></li>
<li><a href="#org652bff1">1.6.2. Controller Design</a></li>
<li><a href="#orge39d6bb">1.6.3. Obtained Performance</a></li>
<li><a href="#org5d68208">1.6.1. Plant</a></li>
<li><a href="#orge650cdd">1.6.2. Controller Design</a></li>
<li><a href="#orge5a568c">1.6.3. Obtained Performance</a></li>
</ul>
</li>
<li><a href="#org09a49c0">1.7. HAC - IFF</a>
<li><a href="#org2abd2cc">1.7. HAC - IFF</a>
<ul>
<li><a href="#org5d68208">1.7.1. Plant</a></li>
<li><a href="#orge650cdd">1.7.2. Controller Design</a></li>
<li><a href="#orge5a568c">1.7.3. Obtained Performance</a></li>
<li><a href="#org9060c71">1.7.1. Plant</a></li>
<li><a href="#org57d2db6">1.7.2. Controller Design</a></li>
<li><a href="#orgc77ad88">1.7.3. Obtained Performance</a></li>
</ul>
</li>
<li><a href="#org9224c01">1.8. Comparison</a></li>
@ -278,11 +278,11 @@
</li>
<li><a href="#orgde62390">2. MIMO Analysis</a>
<ul>
<li><a href="#org56a7ed4">2.1. Initialization</a></li>
<li><a href="#org7b6441f">2.2. Identification</a>
<li><a href="#orgb2025bf">2.1. Initialization</a></li>
<li><a href="#orgbdf2213">2.2. Identification</a>
<ul>
<li><a href="#org33f5d7c">2.2.1. HAC - Without LAC</a></li>
<li><a href="#org9420024">2.2.2. HAC - DVF</a></li>
<li><a href="#org9a68faf">2.2.1. HAC - Without LAC</a></li>
<li><a href="#org65a7b31">2.2.2. HAC - DVF</a></li>
<li><a href="#orgf7913d5">2.2.3. Cartesian Frame</a></li>
</ul>
</li>
@ -291,8 +291,8 @@
</li>
<li><a href="#orgebf6121">3. Diagonal Control based on the damped plant</a>
<ul>
<li><a href="#orgc3f9713">3.1. Initialization</a></li>
<li><a href="#org7e03b59">3.2. Identification</a></li>
<li><a href="#orgf7aefc3">3.1. Initialization</a></li>
<li><a href="#org827d3cd">3.2. Identification</a></li>
<li><a href="#orgab6bc6f">3.3. Steady State Decoupling</a>
<ul>
<li><a href="#orga589a4a">3.3.1. Pre-Compensator Design</a></li>
@ -303,9 +303,17 @@
<li><a href="#org7af13df">3.4. Decoupling at Crossover</a></li>
</ul>
</li>
<li><a href="#org1ce6b23">4. Functions</a>
<li><a href="#orgde0f265">4. Time Domain Simulation</a>
<ul>
<li><a href="#org9b036f8">4.1. <code>initializeController</code>: Initialize the Controller</a>
<li><a href="#org8418e03">4.1. Initialization</a></li>
<li><a href="#org27ed7aa">4.2. HAC IFF</a></li>
<li><a href="#orgfd6afac">4.3. HAC-DVF</a></li>
<li><a href="#org5d77351">4.4. Results</a></li>
</ul>
</li>
<li><a href="#org1ce6b23">5. Functions</a>
<ul>
<li><a href="#org9b036f8">5.1. <code>initializeController</code>: Initialize the Controller</a>
<ul>
<li><a href="#org89608d1">Function description</a></li>
<li><a href="#orgb457316">Optional Parameters</a></li>
@ -319,6 +327,28 @@
</div>
</div>
<p>
Control architectures can be divided in different ways.
</p>
<p>
It can depend on the sensor used:
</p>
<ul class="org-ul">
<li>Sensors located in each strut: relative motion, force sensor, inertial sensor</li>
<li>Sensors measuring the relative motion between the fixed base and the mobile platform</li>
<li>Inertial sensors located on the mobile platform</li>
</ul>
<p>
It can also depends on the control objective:
</p>
<ul class="org-ul">
<li>Reference Tracking</li>
<li>Active Damping</li>
<li>Vibration Isolation</li>
</ul>
<div id="outline-container-org272e7f8" class="outline-2">
<h2 id="org272e7f8"><span class="section-number-2">1</span> HAC-LAC (Cascade) Control - Integral Control</h2>
<div class="outline-text-2" id="text-1">
@ -355,8 +385,8 @@ First, the LAC loop is closed (the LAC control is described <a href="active-damp
</div>
</div>
<div id="outline-container-org5907395" class="outline-3">
<h3 id="org5907395"><span class="section-number-3">1.2</span> Initialization</h3>
<div id="outline-container-orgc3f9713" class="outline-3">
<h3 id="orgc3f9713"><span class="section-number-3">1.2</span> Initialization</h3>
<div class="outline-text-3" id="text-1-2">
<p>
We first initialize the Stewart platform.
@ -387,8 +417,8 @@ payload = initializePayload(<span class="org-string">'type'</span>, <span class=
</div>
</div>
<div id="outline-container-org080a6bd" class="outline-3">
<h3 id="org080a6bd"><span class="section-number-3">1.3</span> Identification</h3>
<div id="outline-container-org7e03b59" class="outline-3">
<h3 id="org7e03b59"><span class="section-number-3">1.3</span> Identification</h3>
<div class="outline-text-3" id="text-1-3">
<p>
We identify the transfer function from the actuator forces \(\bm{\tau}\) to the absolute displacement of the mobile platform \(\bm{\mathcal{X}}\) in three different cases:
@ -400,8 +430,8 @@ We identify the transfer function from the actuator forces \(\bm{\tau}\) to the
</ul>
</div>
<div id="outline-container-org183dcef" class="outline-4">
<h4 id="org183dcef"><span class="section-number-4">1.3.1</span> HAC - Without LAC</h4>
<div id="outline-container-org33f5d7c" class="outline-4">
<h4 id="org33f5d7c"><span class="section-number-4">1.3.1</span> HAC - Without LAC</h4>
<div class="outline-text-4" id="text-1-3-1">
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
@ -426,8 +456,8 @@ G_ol.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string
</div>
</div>
<div id="outline-container-orgc3e7950" class="outline-4">
<h4 id="orgc3e7950"><span class="section-number-4">1.3.2</span> HAC - IFF</h4>
<div id="outline-container-org09a49c0" class="outline-4">
<h4 id="org09a49c0"><span class="section-number-4">1.3.2</span> HAC - IFF</h4>
<div class="outline-text-4" id="text-1-3-2">
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'iff'</span>);
@ -453,8 +483,8 @@ G_iff.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-strin
</div>
</div>
<div id="outline-container-orgd4db8b6" class="outline-4">
<h4 id="orgd4db8b6"><span class="section-number-4">1.3.3</span> HAC - DVF</h4>
<div id="outline-container-org9420024" class="outline-4">
<h4 id="org9420024"><span class="section-number-4">1.3.3</span> HAC - DVF</h4>
<div class="outline-text-4" id="text-1-3-3">
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>);
@ -518,12 +548,12 @@ We then design a controller based on the transfer functions from \(\bm{\mathcal{
</div>
</div>
<div id="outline-container-org7c72eb7" class="outline-3">
<h3 id="org7c72eb7"><span class="section-number-3">1.6</span> HAC - DVF</h3>
<div id="outline-container-orgf1f6f9b" class="outline-3">
<h3 id="orgf1f6f9b"><span class="section-number-3">1.6</span> HAC - DVF</h3>
<div class="outline-text-3" id="text-1-6">
</div>
<div id="outline-container-org673a1cd" class="outline-4">
<h4 id="org673a1cd"><span class="section-number-4">1.6.1</span> Plant</h4>
<div id="outline-container-org5d68208" class="outline-4">
<h4 id="org5d68208"><span class="section-number-4">1.6.1</span> Plant</h4>
<div class="outline-text-4" id="text-1-6-1">
<div id="orgbe936ef" class="figure">
@ -534,8 +564,8 @@ We then design a controller based on the transfer functions from \(\bm{\mathcal{
</div>
</div>
<div id="outline-container-org652bff1" class="outline-4">
<h4 id="org652bff1"><span class="section-number-4">1.6.2</span> Controller Design</h4>
<div id="outline-container-orge650cdd" class="outline-4">
<h4 id="orge650cdd"><span class="section-number-4">1.6.2</span> Controller Design</h4>
<div class="outline-text-4" id="text-1-6-2">
<p>
We design a diagonal controller with equal bandwidth for the 6 terms.
@ -570,8 +600,8 @@ Finally, we pre-multiply the diagonal controller by \(\bm{J}^{-T}\) prior implem
</div>
</div>
<div id="outline-container-orge39d6bb" class="outline-4">
<h4 id="orge39d6bb"><span class="section-number-4">1.6.3</span> Obtained Performance</h4>
<div id="outline-container-orge5a568c" class="outline-4">
<h4 id="orge5a568c"><span class="section-number-4">1.6.3</span> Obtained Performance</h4>
<div class="outline-text-4" id="text-1-6-3">
<p>
We identify the transmissibility and compliance of the system.
@ -608,12 +638,12 @@ We identify the transmissibility and compliance of the system.
</div>
</div>
<div id="outline-container-org09a49c0" class="outline-3">
<h3 id="org09a49c0"><span class="section-number-3">1.7</span> HAC - IFF</h3>
<div id="outline-container-org2abd2cc" class="outline-3">
<h3 id="org2abd2cc"><span class="section-number-3">1.7</span> HAC - IFF</h3>
<div class="outline-text-3" id="text-1-7">
</div>
<div id="outline-container-org5d68208" class="outline-4">
<h4 id="org5d68208"><span class="section-number-4">1.7.1</span> Plant</h4>
<div id="outline-container-org9060c71" class="outline-4">
<h4 id="org9060c71"><span class="section-number-4">1.7.1</span> Plant</h4>
<div class="outline-text-4" id="text-1-7-1">
<div id="orgcb10b82" class="figure">
@ -624,8 +654,8 @@ We identify the transmissibility and compliance of the system.
</div>
</div>
<div id="outline-container-orge650cdd" class="outline-4">
<h4 id="orge650cdd"><span class="section-number-4">1.7.2</span> Controller Design</h4>
<div id="outline-container-org57d2db6" class="outline-4">
<h4 id="org57d2db6"><span class="section-number-4">1.7.2</span> Controller Design</h4>
<div class="outline-text-4" id="text-1-7-2">
<p>
We design a diagonal controller with equal bandwidth for the 6 terms.
@ -660,8 +690,8 @@ Finally, we pre-multiply the diagonal controller by \(\bm{J}^{-T}\) prior implem
</div>
</div>
<div id="outline-container-orge5a568c" class="outline-4">
<h4 id="orge5a568c"><span class="section-number-4">1.7.3</span> Obtained Performance</h4>
<div id="outline-container-orgc77ad88" class="outline-4">
<h4 id="orgc77ad88"><span class="section-number-4">1.7.3</span> Obtained Performance</h4>
<div class="outline-text-4" id="text-1-7-3">
<p>
We identify the transmissibility and compliance of the system.
@ -750,26 +780,33 @@ Let&rsquo;s define the system as shown in figure <a href="#orgba6519a">13</a>.
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left"><b>Exogenous Inputs</b></th>
<th scope="col" class="org-left">\(\bm{\mathcal{X}}_w\)</th>
<th scope="col" class="org-left">Ground motion</th>
</tr>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left">\(\bm{\mathcal{F}}_d\)</th>
<th scope="col" class="org-left">External Forces applied to the Payload</th>
</tr>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left">\(\bm{r}\)</th>
<th scope="col" class="org-left">Reference signal for tracking</th>
<th scope="col" class="org-left"><b>Symbol</b></th>
<th scope="col" class="org-left"><b>Meaning</b></th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><b>Exogenous Inputs</b></td>
<td class="org-left">\(\bm{\mathcal{X}}_w\)</td>
<td class="org-left">Ground motion</td>
</tr>
<tr>
<td class="org-left">&#xa0;</td>
<td class="org-left">\(\bm{\mathcal{F}}_d\)</td>
<td class="org-left">External Forces applied to the Payload</td>
</tr>
<tr>
<td class="org-left">&#xa0;</td>
<td class="org-left">\(\bm{r}\)</td>
<td class="org-left">Reference signal for tracking</td>
</tr>
</tbody>
<tbody>
<tr>
<td class="org-left"><b>Exogenous Outputs</b></td>
<td class="org-left">\(\bm{\mathcal{X}}\)</td>
<td class="org-left">Absolute Motion of the Payload</td>
@ -810,8 +847,8 @@ Let&rsquo;s define the system as shown in figure <a href="#orgba6519a">13</a>.
</table>
</div>
<div id="outline-container-org56a7ed4" class="outline-3">
<h3 id="org56a7ed4"><span class="section-number-3">2.1</span> Initialization</h3>
<div id="outline-container-orgb2025bf" class="outline-3">
<h3 id="orgb2025bf"><span class="section-number-3">2.1</span> Initialization</h3>
<div class="outline-text-3" id="text-2-1">
<p>
We first initialize the Stewart platform.
@ -842,12 +879,12 @@ payload = initializePayload(<span class="org-string">'type'</span>, <span class=
</div>
</div>
<div id="outline-container-org7b6441f" class="outline-3">
<h3 id="org7b6441f"><span class="section-number-3">2.2</span> Identification</h3>
<div id="outline-container-orgbdf2213" class="outline-3">
<h3 id="orgbdf2213"><span class="section-number-3">2.2</span> Identification</h3>
<div class="outline-text-3" id="text-2-2">
</div>
<div id="outline-container-org33f5d7c" class="outline-4">
<h4 id="org33f5d7c"><span class="section-number-4">2.2.1</span> HAC - Without LAC</h4>
<div id="outline-container-org9a68faf" class="outline-4">
<h4 id="org9a68faf"><span class="section-number-4">2.2.1</span> HAC - Without LAC</h4>
<div class="outline-text-4" id="text-2-2-1">
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'open-loop'</span>);
@ -872,8 +909,8 @@ G_ol.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string
</div>
</div>
<div id="outline-container-org9420024" class="outline-4">
<h4 id="org9420024"><span class="section-number-4">2.2.2</span> HAC - DVF</h4>
<div id="outline-container-org65a7b31" class="outline-4">
<h4 id="org65a7b31"><span class="section-number-4">2.2.2</span> HAC - DVF</h4>
<div class="outline-text-4" id="text-2-2-2">
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>);
@ -971,8 +1008,8 @@ There are mainly three different cases:
</ol>
</div>
<div id="outline-container-orgc3f9713" class="outline-3">
<h3 id="orgc3f9713"><span class="section-number-3">3.1</span> Initialization</h3>
<div id="outline-container-orgf7aefc3" class="outline-3">
<h3 id="orgf7aefc3"><span class="section-number-3">3.1</span> Initialization</h3>
<div class="outline-text-3" id="text-3-1">
<p>
We first initialize the Stewart platform.
@ -1003,8 +1040,8 @@ payload = initializePayload(<span class="org-string">'type'</span>, <span class=
</div>
</div>
<div id="outline-container-org7e03b59" class="outline-3">
<h3 id="org7e03b59"><span class="section-number-3">3.2</span> Identification</h3>
<div id="outline-container-org827d3cd" class="outline-3">
<h3 id="org827d3cd"><span class="section-number-3">3.2</span> Identification</h3>
<div class="outline-text-3" id="text-3-2">
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>);
@ -1164,14 +1201,171 @@ The results are shown in figure
</div>
</div>
<div id="outline-container-org1ce6b23" class="outline-2">
<h2 id="org1ce6b23"><span class="section-number-2">4</span> Functions</h2>
<div id="outline-container-orgde0f265" class="outline-2">
<h2 id="orgde0f265"><span class="section-number-2">4</span> Time Domain Simulation</h2>
<div class="outline-text-2" id="text-4">
</div>
<div id="outline-container-org9b036f8" class="outline-3">
<h3 id="org9b036f8"><span class="section-number-3">4.1</span> <code>initializeController</code>: Initialize the Controller</h3>
<div id="outline-container-org8418e03" class="outline-3">
<h3 id="org8418e03"><span class="section-number-3">4.1</span> Initialization</h3>
<div class="outline-text-3" id="text-4-1">
<p>
We first initialize the Stewart platform.
</p>
<div class="org-src-container">
<pre class="src src-matlab">stewart = initializeStewartPlatform();
stewart = initializeFramesPositions(stewart, <span class="org-string">'H'</span>, 90e<span class="org-type">-</span>3, <span class="org-string">'MO_B'</span>, 45e<span class="org-type">-</span>3);
stewart = generateGeneralConfiguration(stewart);
stewart = computeJointsPose(stewart);
stewart = initializeStrutDynamics(stewart);
stewart = initializeJointDynamics(stewart, <span class="org-string">'type_F'</span>, <span class="org-string">'universal'</span>, <span class="org-string">'type_M'</span>, <span class="org-string">'spherical'</span>);
stewart = initializeCylindricalPlatforms(stewart);
stewart = initializeCylindricalStruts(stewart);
stewart = computeJacobian(stewart);
stewart = initializeStewartPose(stewart);
stewart = initializeInertialSensor(stewart, <span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre>
</div>
<p>
The rotation point of the ground is located at the origin of frame \(\{A\}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">ground = initializeGround(<span class="org-string">'type'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'rot_point'</span>, stewart.platform_F.FO_A);
payload = initializePayload(<span class="org-string">'type'</span>, <span class="org-string">'none'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/motion_error_ol.mat'</span>, <span class="org-string">'Eg'</span>)
</pre>
</div>
</div>
</div>
<div id="outline-container-org27ed7aa" class="outline-3">
<h3 id="org27ed7aa"><span class="section-number-3">4.2</span> HAC IFF</h3>
<div class="outline-text-3" id="text-4-2">
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'iff'</span>);
K_iff = <span class="org-type">-</span>(1e4<span class="org-type">/</span>s)<span class="org-type">*</span>eye(6);
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'stewart_platform_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Force Inputs [N]</span>
io(io_i) = linio([mdl, <span class="org-string">'/Absolute Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Sensor [m, rad]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_iff = linearize(mdl, io);
G_iff.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>};
G_iff.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>};
Gc_iff = minreal(G_iff)<span class="org-type">/</span>stewart.kinematics.J<span class="org-type">'</span>;
Gc_iff.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100; <span class="org-comment">% Wanted Bandwidth [rad/s]</span>
h = 1.2;
H_lead = 1<span class="org-type">/</span>h<span class="org-type">*</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(wc<span class="org-type">/</span>h))<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(wc<span class="org-type">*</span>h));
Kd_iff = diag(1<span class="org-type">./</span>abs(diag(freqresp(1<span class="org-type">/</span>s<span class="org-type">*</span>Gc_iff, wc)))) <span class="org-type">.*</span> H_lead <span class="org-type">.*</span> 1<span class="org-type">/</span>s;
K_hac_iff = inv(stewart.kinematics.J<span class="org-type">'</span>)<span class="org-type">*</span>Kd_iff;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-iff'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfd6afac" class="outline-3">
<h3 id="orgfd6afac"><span class="section-number-3">4.3</span> HAC-DVF</h3>
<div class="outline-text-3" id="text-4-3">
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'dvf'</span>);
K_dvf = <span class="org-type">-</span>1e4<span class="org-type">*</span>s<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>5000)<span class="org-type">*</span>eye(6);
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'stewart_platform_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Force Inputs [N]</span>
io(io_i) = linio([mdl, <span class="org-string">'/Absolute Motion Sensor'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Absolute Sensor [m, rad]</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_dvf = linearize(mdl, io);
G_dvf.InputName = {<span class="org-string">'F1'</span>, <span class="org-string">'F2'</span>, <span class="org-string">'F3'</span>, <span class="org-string">'F4'</span>, <span class="org-string">'F5'</span>, <span class="org-string">'F6'</span>};
G_dvf.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string">'Dy'</span>, <span class="org-string">'Dz'</span>, <span class="org-string">'Rx'</span>, <span class="org-string">'Ry'</span>, <span class="org-string">'Rz'</span>};
Gc_dvf = minreal(G_dvf)<span class="org-type">/</span>stewart.kinematics.J<span class="org-type">'</span>;
Gc_dvf.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">'Fy'</span>, <span class="org-string">'Fz'</span>, <span class="org-string">'Mx'</span>, <span class="org-string">'My'</span>, <span class="org-string">'Mz'</span>};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100; <span class="org-comment">% Wanted Bandwidth [rad/s]</span>
h = 1.2;
H_lead = 1<span class="org-type">/</span>h<span class="org-type">*</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(wc<span class="org-type">/</span>h))<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(wc<span class="org-type">*</span>h));
Kd_dvf = diag(1<span class="org-type">./</span>abs(diag(freqresp(1<span class="org-type">/</span>s<span class="org-type">*</span>Gc_dvf, wc)))) <span class="org-type">.*</span> H_lead <span class="org-type">.*</span> 1<span class="org-type">/</span>s;
K_hac_dvf = inv(stewart.kinematics.J<span class="org-type">'</span>)<span class="org-type">*</span>Kd_dvf;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">controller = initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org5d77351" class="outline-3">
<h3 id="org5d77351"><span class="section-number-3">4.4</span> Results</h3>
<div class="outline-text-3" id="text-4-4">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
subplot(1, 2, 1);
hold on;
plot(Eg.Time, Eg.Data(<span class="org-type">:</span>, 1), <span class="org-string">'DisplayName'</span>, <span class="org-string">'X'</span>);
plot(Eg.Time, Eg.Data(<span class="org-type">:</span>, 2), <span class="org-string">'DisplayName'</span>, <span class="org-string">'Y'</span>);
plot(Eg.Time, Eg.Data(<span class="org-type">:</span>, 3), <span class="org-string">'DisplayName'</span>, <span class="org-string">'Z'</span>);
hold off;
xlabel(<span class="org-string">'Time [s]'</span>);
ylabel(<span class="org-string">'Position error [m]'</span>);
legend();
subplot(1, 2, 2);
hold on;
plot(simout.Xa.Time, simout.Xa.Data(<span class="org-type">:</span>, 1));
plot(simout.Xa.Time, simout.Xa.Data(<span class="org-type">:</span>, 2));
plot(simout.Xa.Time, simout.Xa.Data(<span class="org-type">:</span>, 3));
hold off;
xlabel(<span class="org-string">'Time [s]'</span>);
ylabel(<span class="org-string">'Orientation error [rad]'</span>);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org1ce6b23" class="outline-2">
<h2 id="org1ce6b23"><span class="section-number-2">5</span> Functions</h2>
<div class="outline-text-2" id="text-5">
</div>
<div id="outline-container-org9b036f8" class="outline-3">
<h3 id="org9b036f8"><span class="section-number-3">5.1</span> <code>initializeController</code>: Initialize the Controller</h3>
<div class="outline-text-3" id="text-5-1">
<p>
<a id="org339969f"></a>
</p>
</div>
@ -1197,7 +1391,7 @@ The results are shown in figure
<div class="outline-text-4" id="text-orgb457316">
<div class="org-src-container">
<pre class="src src-matlab">arguments
args.type char {mustBeMember(args.type, {<span class="org-string">'open-loop'</span>, <span class="org-string">'iff'</span>, <span class="org-string">'dvf'</span>, <span class="org-string">'hac-iff'</span>, <span class="org-string">'hac-dvf'</span>})} = <span class="org-string">'open-loop'</span>
args.type char {mustBeMember(args.type, {<span class="org-string">'open-loop'</span>, <span class="org-string">'iff'</span>, <span class="org-string">'dvf'</span>, <span class="org-string">'hac-iff'</span>, <span class="org-string">'hac-dvf'</span>, <span class="org-string">'ref-track-L'</span>, <span class="org-string">'ref-track-X'</span>})} = <span class="org-string">'open-loop'</span>
<span class="org-keyword">end</span>
</pre>
</div>
@ -1229,6 +1423,10 @@ The results are shown in figure
controller.type = 3;
<span class="org-keyword">case</span> <span class="org-string">'hac-dvf'</span>
controller.type = 4;
<span class="org-keyword">case</span> <span class="org-string">'ref-track-L'</span>
controller.type = 5;
<span class="org-keyword">case</span> <span class="org-string">'ref-track-X'</span>
controller.type = 6;
<span class="org-keyword">end</span>
</pre>
</div>
@ -1239,7 +1437,7 @@ The results are shown in figure
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-02 lun. 17:57</p>
<p class="date">Created: 2020-03-11 mer. 18:59</p>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-03-02 lun. 17:57 -->
<!-- 2020-03-11 mer. 18:59 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Stewart Platform - Simscape Model</title>
@ -250,25 +250,21 @@
<li><a href="#org66977e8">2. Simulation Configuration - Configuration reference</a></li>
<li><a href="#orgb2362eb">3. Subsystem Reference</a></li>
<li><a href="#orgdfad86d">4. Subsystem - Fixed base and Mobile Platform</a></li>
<li><a href="#org9d4af75">5. Subsystem - Struts</a>
<ul>
<li><a href="#org45d9234">5.1. Strut Configuration</a></li>
</ul>
</li>
<li><a href="#org9d4af75">5. Subsystem - Struts</a></li>
<li><a href="#org7e2c432">6. Other Elements</a>
<ul>
<li><a href="#org3535b6d">6.1. Payload</a>
<ul>
<li><a href="#org5d402b9">Function description</a></li>
<li><a href="#orgc0da5ca">Optional Parameters</a></li>
<li><a href="#org1211163">Function description</a></li>
<li><a href="#org0d8dc7e">Optional Parameters</a></li>
<li><a href="#orgeeb8d35">Add Payload Type</a></li>
<li><a href="#org6d52ffc">Add Stiffness, Damping and Mass properties of the Payload</a></li>
</ul>
</li>
<li><a href="#orgaaed406">6.2. Ground</a>
<ul>
<li><a href="#org1211163">Function description</a></li>
<li><a href="#org0d8dc7e">Optional Parameters</a></li>
<li><a href="#org0bee981">Function description</a></li>
<li><a href="#orgeaeb9aa">Optional Parameters</a></li>
<li><a href="#orgef7035d">Add Ground Type</a></li>
<li><a href="#org95633e8">Add Stiffness and Damping properties of the Ground</a></li>
<li><a href="#org14ff2fc">Rotation Point</a></li>
@ -276,6 +272,23 @@
</li>
</ul>
</li>
<li><a href="#orgae6907a">7. Initialize Disturbances</a>
<ul>
<li><a href="#org0eae33e">Function Declaration and Documentation</a></li>
<li><a href="#orge03b19d">Optional Parameters</a></li>
<li><a href="#org30dc07c">Structure initialization</a></li>
<li><a href="#org0755155">Ground Motion</a></li>
<li><a href="#org7617a55">Direct Forces</a></li>
</ul>
</li>
<li><a href="#orgd45a07f">8. Initialize References</a>
<ul>
<li><a href="#org7f187c4">Function Declaration and Documentation</a></li>
<li><a href="#org28b782e">Optional Parameters</a></li>
<li><a href="#orgc274320">8.1. Compute the corresponding strut length</a></li>
<li><a href="#org36ac3fa">References</a></li>
</ul>
</li>
</ul>
</div>
</div>
@ -429,23 +442,17 @@ As always, the parameters that define the geometry are taken from the <code>stew
<div class="outline-text-2" id="text-5">
<p>
<a id="orgdb5206f"></a>
</p>
</div>
<div id="outline-container-org45d9234" class="outline-3">
<h3 id="org45d9234"><span class="section-number-3">5.1</span> Strut Configuration</h3>
<div class="outline-text-3" id="text-5-1">
<p>
For the Stewart platform, the 6 struts are identical.
Thus, all the struts used in the Stewart platform are referring to the same subsystem called <code>stewart_strut.slx</code> and shown in Figure <a href="#org1dc8fce">4</a>.
</p>
<p>
This strut as the following structure:
This strut has the following structure:
</p>
<ul class="org-ul">
<li><b>Universal Joint*</b> connected on the Fixed base</li>
<li><b>Prismatic Joint*</b> for the actuator</li>
<li><b>Spherical Joint*</b> connected on the Mobile platform</li>
<li><b>Universal Joint</b> connected on the Fixed base</li>
<li><b>Prismatic Joint</b> for the actuator</li>
<li><b>Spherical Joint</b> connected on the Mobile platform</li>
</ul>
<p>
@ -486,7 +493,6 @@ Both inertial sensors are described bellow.
</p>
</div>
</div>
</div>
<div id="outline-container-org7e2c432" class="outline-2">
<h2 id="org7e2c432"><span class="section-number-2">6</span> Other Elements</h2>
@ -504,9 +510,9 @@ This Matlab function is accessible <a href="../src/initializePayload.m">here</a>
</p>
</div>
<div id="outline-container-org5d402b9" class="outline-4">
<h4 id="org5d402b9">Function description</h4>
<div class="outline-text-4" id="text-org5d402b9">
<div id="outline-container-org1211163" class="outline-4">
<h4 id="org1211163">Function description</h4>
<div class="outline-text-4" id="text-org1211163">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[payload]</span> = <span class="org-function-name">initializePayload</span>(<span class="org-variable-name">args</span>)
<span class="org-comment">% initializePayload - Initialize the Payload that can then be used for simulations and analysis</span>
@ -536,9 +542,9 @@ This Matlab function is accessible <a href="../src/initializePayload.m">here</a>
</div>
</div>
<div id="outline-container-orgc0da5ca" class="outline-4">
<h4 id="orgc0da5ca">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgc0da5ca">
<div id="outline-container-org0d8dc7e" class="outline-4">
<h4 id="org0d8dc7e">Optional Parameters</h4>
<div class="outline-text-4" id="text-org0d8dc7e">
<div class="org-src-container">
<pre class="src src-matlab">arguments
args.type char {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'cartesian'</span>})} = <span class="org-string">'none'</span>
@ -600,9 +606,9 @@ This Matlab function is accessible <a href="../src/initializeGround.m">here</a>.
</p>
</div>
<div id="outline-container-org1211163" class="outline-4">
<h4 id="org1211163">Function description</h4>
<div class="outline-text-4" id="text-org1211163">
<div id="outline-container-org0bee981" class="outline-4">
<h4 id="org0bee981">Function description</h4>
<div class="outline-text-4" id="text-org0bee981">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[ground]</span> = <span class="org-function-name">initializeGround</span>(<span class="org-variable-name">args</span>)
<span class="org-comment">% initializeGround - Initialize the Ground that can then be used for simulations and analysis</span>
@ -626,9 +632,9 @@ This Matlab function is accessible <a href="../src/initializeGround.m">here</a>.
</div>
</div>
<div id="outline-container-org0d8dc7e" class="outline-4">
<h4 id="org0d8dc7e">Optional Parameters</h4>
<div class="outline-text-4" id="text-org0d8dc7e">
<div id="outline-container-orgeaeb9aa" class="outline-4">
<h4 id="orgeaeb9aa">Optional Parameters</h4>
<div class="outline-text-4" id="text-orgeaeb9aa">
<div class="org-src-container">
<pre class="src src-matlab">arguments
args.type char {mustBeMember(args.type,{<span class="org-string">'none'</span>, <span class="org-string">'rigid'</span>, <span class="org-string">'flexible'</span>})} = <span class="org-string">'none'</span>
@ -680,10 +686,157 @@ ground.C = args.C;
</div>
</div>
</div>
<div id="outline-container-orgae6907a" class="outline-2">
<h2 id="orgae6907a"><span class="section-number-2">7</span> Initialize Disturbances</h2>
<div class="outline-text-2" id="text-7">
<p>
<a id="org96254bf"></a>
</p>
</div>
<div id="outline-container-org0eae33e" class="outline-3">
<h3 id="org0eae33e">Function Declaration and Documentation</h3>
<div class="outline-text-3" id="text-org0eae33e">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[disturbances]</span> = <span class="org-function-name">initializeDisturbances</span>(<span class="org-variable-name">args</span>)
<span class="org-comment">% initializeDisturbances - Initialize the disturbances</span>
<span class="org-comment">%</span>
<span class="org-comment">% Syntax: [disturbances] = initializeDisturbances(args)</span>
<span class="org-comment">%</span>
<span class="org-comment">% Inputs:</span>
<span class="org-comment">% - args -</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orge03b19d" class="outline-3">
<h3 id="orge03b19d">Optional Parameters</h3>
<div class="outline-text-3" id="text-orge03b19d">
<div class="org-src-container">
<pre class="src src-matlab">arguments
args.Fd double {mustBeNumeric, mustBeReal} = zeros(6,1)
args.Fd_t double {mustBeNumeric, mustBeReal} = 0
args.Dw double {mustBeNumeric, mustBeReal} = zeros(6,1)
args.Dw_t double {mustBeNumeric, mustBeReal} = 0
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org30dc07c" class="outline-3">
<h3 id="org30dc07c">Structure initialization</h3>
<div class="outline-text-3" id="text-org30dc07c">
<div class="org-src-container">
<pre class="src src-matlab">disturbances = struct();
</pre>
</div>
</div>
</div>
<div id="outline-container-org0755155" class="outline-3">
<h3 id="org0755155">Ground Motion</h3>
<div class="outline-text-3" id="text-org0755155">
<div class="org-src-container">
<pre class="src src-matlab">disturbances.Dw = timeseries([args.Dw], args.Dw_t);
</pre>
</div>
</div>
</div>
<div id="outline-container-org7617a55" class="outline-3">
<h3 id="org7617a55">Direct Forces</h3>
<div class="outline-text-3" id="text-org7617a55">
<div class="org-src-container">
<pre class="src src-matlab">disturbances.Fd = timeseries([args.Fd], args.Fd_t);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgd45a07f" class="outline-2">
<h2 id="orgd45a07f"><span class="section-number-2">8</span> Initialize References</h2>
<div class="outline-text-2" id="text-8">
<p>
<a id="org7e762f4"></a>
</p>
</div>
<div id="outline-container-org7f187c4" class="outline-3">
<h3 id="org7f187c4">Function Declaration and Documentation</h3>
<div class="outline-text-3" id="text-org7f187c4">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[references]</span> = <span class="org-function-name">initializeReferences</span>(<span class="org-variable-name">stewart</span>, <span class="org-variable-name">args</span>)
<span class="org-comment">% initializeReferences - Initialize the references</span>
<span class="org-comment">%</span>
<span class="org-comment">% Syntax: [references] = initializeReferences(args)</span>
<span class="org-comment">%</span>
<span class="org-comment">% Inputs:</span>
<span class="org-comment">% - args -</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org28b782e" class="outline-3">
<h3 id="org28b782e">Optional Parameters</h3>
<div class="outline-text-3" id="text-org28b782e">
<div class="org-src-container">
<pre class="src src-matlab">arguments
stewart
args.t double {mustBeNumeric, mustBeReal} = 0
args.r double {mustBeNumeric, mustBeReal} = zeros(6, 1)
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc274320" class="outline-3">
<h3 id="orgc274320"><span class="section-number-3">8.1</span> Compute the corresponding strut length</h3>
<div class="outline-text-3" id="text-8-1">
<div class="org-src-container">
<pre class="src src-matlab">rL = zeros(6, length(args.t));
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(args.t)</span>
R = [cos(args.r(6,<span class="org-constant">i</span>)) <span class="org-type">-</span>sin(args.r(6,<span class="org-constant">i</span>)) 0;
sin(args.r(6,<span class="org-constant">i</span>)) cos(args.r(6,<span class="org-constant">i</span>)) 0;
0 0 1] <span class="org-type">*</span> ...
[cos(args.r(5,<span class="org-constant">i</span>)) 0 sin(args.r(5,<span class="org-constant">i</span>));
0 1 0;
<span class="org-type">-</span>sin(args.r(5,<span class="org-constant">i</span>)) 0 cos(args.r(5,<span class="org-constant">i</span>))] <span class="org-type">*</span> ...
[1 0 0;
0 cos(args.r(4,<span class="org-constant">i</span>)) <span class="org-type">-</span>sin(args.r(4,<span class="org-constant">i</span>));
0 sin(args.r(4,<span class="org-constant">i</span>)) cos(args.r(4,<span class="org-constant">i</span>))];
[Li, dLi] = inverseKinematics(stewart, <span class="org-string">'AP'</span>, [args.r(1,<span class="org-constant">i</span>); args.r(2,<span class="org-constant">i</span>); args.r(3,<span class="org-constant">i</span>)], <span class="org-string">'ARB'</span>, R);
rL(<span class="org-type">:</span>, <span class="org-constant">i</span>) = dLi;
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org36ac3fa" class="outline-3">
<h3 id="org36ac3fa">References</h3>
<div class="outline-text-3" id="text-org36ac3fa">
<div class="org-src-container">
<pre class="src src-matlab">references.r = timeseries(args.r, args.t);
references.rL = timeseries(rL, args.t);
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-02 lun. 17:57</p>
<p class="date">Created: 2020-03-11 mer. 18:59</p>
</div>
</body>
</html>

View File

@ -989,7 +989,7 @@ The control architecture is shown in Figure [[fig:centralized_reference_tracking
*** Plant Analysis
The plant is pre-multiplied by $\bm{G}^{-1}(\omega = 0)$.
The diagonal elements of the shaped plant are shown in Figure [[fig:centralized_reference_tracking_SD]].
The diagonal elements of the shaped plant are shown in Figure [[fig:plant_centralized_diagonal_SD]].
#+begin_src matlab
G0 = G*inv(freqresp(G, 0));