Tangle scripts
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 237 KiB |
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 195 KiB |
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 112 KiB |
515
index.html
@ -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>
|
||||
<!-- 2020-10-05 lun. 18:28 -->
|
||||
<!-- 2020-10-09 ven. 16:21 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>SVD Control</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -35,59 +35,75 @@
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org67dc64e">1. Gravimeter - Simscape Model</a>
|
||||
<li><a href="#org90d7008">1. Gravimeter - Simscape Model</a>
|
||||
<ul>
|
||||
<li><a href="#orgbc83858">1.1. Introduction</a></li>
|
||||
<li><a href="#org6a10d93">1.2. Simscape Model - Parameters</a></li>
|
||||
<li><a href="#org0efee8e">1.3. System Identification - Without Gravity</a></li>
|
||||
<li><a href="#org98fd3fd">1.4. System Identification - With Gravity</a></li>
|
||||
<li><a href="#org6400b2e">1.5. Analytical Model</a>
|
||||
<li><a href="#org29b9308">1.1. Introduction</a></li>
|
||||
<li><a href="#orgd333b87">1.2. Simscape Model - Parameters</a></li>
|
||||
<li><a href="#org09b581d">1.3. System Identification - Without Gravity</a></li>
|
||||
<li><a href="#org4f091cc">1.4. System Identification - With Gravity</a></li>
|
||||
<li><a href="#org7c4effc">1.5. Analytical Model</a>
|
||||
<ul>
|
||||
<li><a href="#orgd401b7a">1.5.1. Parameters</a></li>
|
||||
<li><a href="#orgdc4cf04">1.5.2. Generation of the State Space Model</a></li>
|
||||
<li><a href="#org2f36845">1.5.3. Comparison with the Simscape Model</a></li>
|
||||
<li><a href="#org028f15a">1.5.4. Analysis</a></li>
|
||||
<li><a href="#orgaf39b24">1.5.5. Control Section</a></li>
|
||||
<li><a href="#orga450746">1.5.6. Greshgorin radius</a></li>
|
||||
<li><a href="#orgd41a3f6">1.5.7. Injecting ground motion in the system to have the output</a></li>
|
||||
<li><a href="#org20ea2aa">1.5.1. Parameters</a></li>
|
||||
<li><a href="#org02cb447">1.5.2. Generation of the State Space Model</a></li>
|
||||
<li><a href="#org9417f40">1.5.3. Comparison with the Simscape Model</a></li>
|
||||
<li><a href="#org6c56e64">1.5.4. Analysis</a></li>
|
||||
<li><a href="#orgeb20c08">1.5.5. Control Section</a></li>
|
||||
<li><a href="#org931022f">1.5.6. Greshgorin radius</a></li>
|
||||
<li><a href="#org1d56ec4">1.5.7. Injecting ground motion in the system to have the output</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org866fa85">2. Gravimeter - Functions</a>
|
||||
<li><a href="#org36d6b85">2. Gravimeter - Functions</a>
|
||||
<ul>
|
||||
<li><a href="#orgcf775e2">2.1. <code>align</code></a></li>
|
||||
<li><a href="#org78f2c7e">2.2. <code>pzmap_testCL</code></a></li>
|
||||
<li><a href="#orgbb4529b">2.1. <code>align</code></a></li>
|
||||
<li><a href="#orge0ed8bf">2.2. <code>pzmap_testCL</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgd5b9491">3. Stewart Platform - Simscape Model</a>
|
||||
<li><a href="#org5afd29d">3. Stewart Platform - Simscape Model</a>
|
||||
<ul>
|
||||
<li><a href="#org6d58a07">3.1. Jacobian</a></li>
|
||||
<li><a href="#org4f58a34">3.2. Simscape Model</a></li>
|
||||
<li><a href="#org51c99d1">3.3. Identification of the plant</a></li>
|
||||
<li><a href="#org84418dd">3.4. Obtained Dynamics</a></li>
|
||||
<li><a href="#org315ca7e">3.5. Real Approximation of \(G\) at the decoupling frequency</a></li>
|
||||
<li><a href="#org91c0ed9">3.6. Verification of the decoupling using the “Gershgorin Radii”</a></li>
|
||||
<li><a href="#org0bd0b38">3.7. Decoupled Plant</a></li>
|
||||
<li><a href="#org4b22e32">3.8. Diagonal Controller</a></li>
|
||||
<li><a href="#orgac4cf9b">3.9. Centralized Control</a></li>
|
||||
<li><a href="#org4ae317c">3.10. SVD Control</a></li>
|
||||
<li><a href="#orgabc897d">3.11. Results</a></li>
|
||||
<li><a href="#orgff944f3">3.1. Jacobian</a></li>
|
||||
<li><a href="#org07ffe6c">3.2. Simscape Model</a></li>
|
||||
<li><a href="#org9aaf0d3">3.3. Identification of the plant</a></li>
|
||||
<li><a href="#orgb0b01e3">3.4. Obtained Dynamics</a></li>
|
||||
<li><a href="#org1de55ce">3.5. Real Approximation of \(G\) at the decoupling frequency</a></li>
|
||||
<li><a href="#org53d60e1">3.6. Verification of the decoupling using the “Gershgorin Radii”</a></li>
|
||||
<li><a href="#org40c1d24">3.7. Decoupled Plant</a></li>
|
||||
<li><a href="#orgdfcd158">3.8. Diagonal Controller</a></li>
|
||||
<li><a href="#org25e3b35">3.9. Centralized Control</a></li>
|
||||
<li><a href="#org4d83793">3.10. SVD Control</a></li>
|
||||
<li><a href="#org7cece79">3.11. Results</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org8b11aba">4. Stewart Platform - Analytical Model</a>
|
||||
<ul>
|
||||
<li><a href="#org2a175f6">4.1. Characteristics</a></li>
|
||||
<li><a href="#org9efa4f4">4.2. Mass Matrix</a></li>
|
||||
<li><a href="#org97bc497">4.3. Jacobian Matrix</a></li>
|
||||
<li><a href="#org7c9679d">4.4. Stifnness matrix and Damping matrix</a></li>
|
||||
<li><a href="#org00e8691">4.5. State Space System</a></li>
|
||||
<li><a href="#org8a70996">4.6. Transmissibility</a></li>
|
||||
<li><a href="#org12c95c9">4.7. Real approximation of \(G(j\omega)\) at decoupling frequency</a></li>
|
||||
<li><a href="#orgc58b81c">4.8. Coupled and Decoupled Plant “Gershgorin Radii”</a></li>
|
||||
<li><a href="#org2ba91f6">4.9. Decoupled Plant</a></li>
|
||||
<li><a href="#orgc73a283">4.10. Controller</a></li>
|
||||
<li><a href="#org9c82ee4">4.11. Closed Loop System</a></li>
|
||||
<li><a href="#org80cd406">4.12. Results</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org67dc64e" class="outline-2">
|
||||
<h2 id="org67dc64e"><span class="section-number-2">1</span> Gravimeter - Simscape Model</h2>
|
||||
<div id="outline-container-org90d7008" class="outline-2">
|
||||
<h2 id="org90d7008"><span class="section-number-2">1</span> Gravimeter - Simscape Model</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
</div>
|
||||
<div id="outline-container-orgbc83858" class="outline-3">
|
||||
<h3 id="orgbc83858"><span class="section-number-3">1.1</span> Introduction</h3>
|
||||
<div id="outline-container-org29b9308" class="outline-3">
|
||||
<h3 id="org29b9308"><span class="section-number-3">1.1</span> Introduction</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
|
||||
<div id="orge6f0a72" class="figure">
|
||||
<div id="org7df72f4" class="figure">
|
||||
<p><img src="figs/gravimeter_model.png" alt="gravimeter_model.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Model of the gravimeter</p>
|
||||
@ -95,8 +111,8 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org6a10d93" class="outline-3">
|
||||
<h3 id="org6a10d93"><span class="section-number-3">1.2</span> Simscape Model - Parameters</h3>
|
||||
<div id="outline-container-orgd333b87" class="outline-3">
|
||||
<h3 id="orgd333b87"><span class="section-number-3">1.2</span> Simscape Model - Parameters</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">open(<span class="org-string">'gravimeter.slx'</span>)
|
||||
@ -127,8 +143,8 @@ g = 0; <span class="org-comment">% Gravity [m/s2]</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0efee8e" class="outline-3">
|
||||
<h3 id="org0efee8e"><span class="section-number-3">1.3</span> System Identification - Without Gravity</h3>
|
||||
<div id="outline-container-org09b581d" class="outline-3">
|
||||
<h3 id="org09b581d"><span class="section-number-3">1.3</span> System Identification - Without Gravity</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
|
||||
@ -175,7 +191,7 @@ State-space model with 4 outputs, 3 inputs, and 6 states.
|
||||
|
||||
|
||||
|
||||
<div id="orgf223fb8" class="figure">
|
||||
<div id="orgdd275bb" class="figure">
|
||||
<p><img src="figs/open_loop_tf.png" alt="open_loop_tf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Open Loop Transfer Function from 3 Actuators to 4 Accelerometers</p>
|
||||
@ -183,8 +199,8 @@ State-space model with 4 outputs, 3 inputs, and 6 states.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org98fd3fd" class="outline-3">
|
||||
<h3 id="org98fd3fd"><span class="section-number-3">1.4</span> System Identification - With Gravity</h3>
|
||||
<div id="outline-container-org4f091cc" class="outline-3">
|
||||
<h3 id="org4f091cc"><span class="section-number-3">1.4</span> System Identification - With Gravity</h3>
|
||||
<div class="outline-text-3" id="text-1-4">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">g = 9.80665; <span class="org-comment">% Gravity [m/s2]</span>
|
||||
@ -213,7 +229,7 @@ ans =
|
||||
</pre>
|
||||
|
||||
|
||||
<div id="org4d66bba" class="figure">
|
||||
<div id="org392bf82" class="figure">
|
||||
<p><img src="figs/open_loop_tf_g.png" alt="open_loop_tf_g.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Open Loop Transfer Function from 3 Actuators to 4 Accelerometers with an without gravity</p>
|
||||
@ -221,12 +237,12 @@ ans =
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org6400b2e" class="outline-3">
|
||||
<h3 id="org6400b2e"><span class="section-number-3">1.5</span> Analytical Model</h3>
|
||||
<div id="outline-container-org7c4effc" class="outline-3">
|
||||
<h3 id="org7c4effc"><span class="section-number-3">1.5</span> Analytical Model</h3>
|
||||
<div class="outline-text-3" id="text-1-5">
|
||||
</div>
|
||||
<div id="outline-container-orgd401b7a" class="outline-4">
|
||||
<h4 id="orgd401b7a"><span class="section-number-4">1.5.1</span> Parameters</h4>
|
||||
<div id="outline-container-org20ea2aa" class="outline-4">
|
||||
<h4 id="org20ea2aa"><span class="section-number-4">1.5.1</span> Parameters</h4>
|
||||
<div class="outline-text-4" id="text-1-5-1">
|
||||
<p>
|
||||
Bode options.
|
||||
@ -258,8 +274,8 @@ Frequency vector.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgdc4cf04" class="outline-4">
|
||||
<h4 id="orgdc4cf04"><span class="section-number-4">1.5.2</span> Generation of the State Space Model</h4>
|
||||
<div id="outline-container-org02cb447" class="outline-4">
|
||||
<h4 id="org02cb447"><span class="section-number-4">1.5.2</span> Generation of the State Space Model</h4>
|
||||
<div class="outline-text-4" id="text-1-5-2">
|
||||
<p>
|
||||
Mass matrix
|
||||
@ -360,11 +376,11 @@ State-space model with 12 outputs, 6 inputs, and 6 states.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2f36845" class="outline-4">
|
||||
<h4 id="org2f36845"><span class="section-number-4">1.5.3</span> Comparison with the Simscape Model</h4>
|
||||
<div id="outline-container-org9417f40" class="outline-4">
|
||||
<h4 id="org9417f40"><span class="section-number-4">1.5.3</span> Comparison with the Simscape Model</h4>
|
||||
<div class="outline-text-4" id="text-1-5-3">
|
||||
|
||||
<div id="orgd96c232" class="figure">
|
||||
<div id="orga6f165d" class="figure">
|
||||
<p><img src="figs/gravimeter_analytical_system_open_loop_models.png" alt="gravimeter_analytical_system_open_loop_models.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Comparison of the analytical and the Simscape models</p>
|
||||
@ -372,8 +388,8 @@ State-space model with 12 outputs, 6 inputs, and 6 states.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org028f15a" class="outline-4">
|
||||
<h4 id="org028f15a"><span class="section-number-4">1.5.4</span> Analysis</h4>
|
||||
<div id="outline-container-org6c56e64" class="outline-4">
|
||||
<h4 id="org6c56e64"><span class="section-number-4">1.5.4</span> Analysis</h4>
|
||||
<div class="outline-text-4" id="text-1-5-4">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-comment">% figure</span>
|
||||
@ -441,8 +457,8 @@ State-space model with 12 outputs, 6 inputs, and 6 states.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgaf39b24" class="outline-4">
|
||||
<h4 id="orgaf39b24"><span class="section-number-4">1.5.5</span> Control Section</h4>
|
||||
<div id="outline-container-orgeb20c08" class="outline-4">
|
||||
<h4 id="orgeb20c08"><span class="section-number-4">1.5.5</span> Control Section</h4>
|
||||
<div class="outline-text-4" id="text-1-5-5">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">system_dec_10Hz = freqresp(system_dec,2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>10);
|
||||
@ -582,8 +598,8 @@ legend(<span class="org-string">'Control OFF'</span>,<span class="org-string">'D
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga450746" class="outline-4">
|
||||
<h4 id="orga450746"><span class="section-number-4">1.5.6</span> Greshgorin radius</h4>
|
||||
<div id="outline-container-org931022f" class="outline-4">
|
||||
<h4 id="org931022f"><span class="section-number-4">1.5.6</span> Greshgorin radius</h4>
|
||||
<div class="outline-text-4" id="text-1-5-6">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">system_dec_freq = freqresp(system_dec,w);
|
||||
@ -629,8 +645,8 @@ ylabel(<span class="org-string">'Greshgorin radius [-]'</span>);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd41a3f6" class="outline-4">
|
||||
<h4 id="orgd41a3f6"><span class="section-number-4">1.5.7</span> Injecting ground motion in the system to have the output</h4>
|
||||
<div id="outline-container-org1d56ec4" class="outline-4">
|
||||
<h4 id="org1d56ec4"><span class="section-number-4">1.5.7</span> Injecting ground motion in the system to have the output</h4>
|
||||
<div class="outline-text-4" id="text-1-5-7">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Fr = logspace(<span class="org-type">-</span>2,3,1e3);
|
||||
@ -686,15 +702,15 @@ rot = PHI(<span class="org-type">:</span>,11,11);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org866fa85" class="outline-2">
|
||||
<h2 id="org866fa85"><span class="section-number-2">2</span> Gravimeter - Functions</h2>
|
||||
<div id="outline-container-org36d6b85" class="outline-2">
|
||||
<h2 id="org36d6b85"><span class="section-number-2">2</span> Gravimeter - Functions</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
</div>
|
||||
<div id="outline-container-orgcf775e2" class="outline-3">
|
||||
<h3 id="orgcf775e2"><span class="section-number-3">2.1</span> <code>align</code></h3>
|
||||
<div id="outline-container-orgbb4529b" class="outline-3">
|
||||
<h3 id="orgbb4529b"><span class="section-number-3">2.1</span> <code>align</code></h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
<a id="orgbb32c31"></a>
|
||||
<a id="orgf2b803a"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -723,11 +739,11 @@ This Matlab function is accessible <a href="gravimeter/align.m">here</a>.
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org78f2c7e" class="outline-3">
|
||||
<h3 id="org78f2c7e"><span class="section-number-3">2.2</span> <code>pzmap_testCL</code></h3>
|
||||
<div id="outline-container-orge0ed8bf" class="outline-3">
|
||||
<h3 id="orge0ed8bf"><span class="section-number-3">2.2</span> <code>pzmap_testCL</code></h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<p>
|
||||
<a id="org655412c"></a>
|
||||
<a id="orgf08bacf"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -776,18 +792,18 @@ This Matlab function is accessible <a href="gravimeter/pzmap_testCL.m">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd5b9491" class="outline-2">
|
||||
<h2 id="orgd5b9491"><span class="section-number-2">3</span> Stewart Platform - Simscape Model</h2>
|
||||
<div id="outline-container-org5afd29d" class="outline-2">
|
||||
<h2 id="org5afd29d"><span class="section-number-2">3</span> Stewart Platform - Simscape Model</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
</div>
|
||||
<div id="outline-container-org6d58a07" class="outline-3">
|
||||
<h3 id="org6d58a07"><span class="section-number-3">3.1</span> Jacobian</h3>
|
||||
<div id="outline-container-orgff944f3" class="outline-3">
|
||||
<h3 id="orgff944f3"><span class="section-number-3">3.1</span> Jacobian</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
First, the position of the “joints” (points of force application) are estimated and the Jacobian computed.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">open(<span class="org-string">'stewart_platform/drone_platform_jacobian.slx'</span>);
|
||||
<pre class="src src-matlab">open(<span class="org-string">'drone_platform_jacobian.slx'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -823,8 +839,8 @@ save(<span class="org-string">'./jacobian.mat'</span>, <span class="org-string">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4f58a34" class="outline-3">
|
||||
<h3 id="org4f58a34"><span class="section-number-3">3.2</span> Simscape Model</h3>
|
||||
<div id="outline-container-org07ffe6c" class="outline-3">
|
||||
<h3 id="org07ffe6c"><span class="section-number-3">3.2</span> Simscape Model</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">open(<span class="org-string">'stewart_platform/drone_platform.slx'</span>);
|
||||
@ -855,8 +871,8 @@ We load the Jacobian.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org51c99d1" class="outline-3">
|
||||
<h3 id="org51c99d1"><span class="section-number-3">3.3</span> Identification of the plant</h3>
|
||||
<div id="outline-container-org9aaf0d3" class="outline-3">
|
||||
<h3 id="org9aaf0d3"><span class="section-number-3">3.3</span> Identification of the plant</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<p>
|
||||
The dynamics is identified from forces applied by each legs to the measured acceleration of the top platform.
|
||||
@ -913,32 +929,32 @@ Gl.OutputName = {<span class="org-string">'A1'</span>, <span class="org-string"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org84418dd" class="outline-3">
|
||||
<h3 id="org84418dd"><span class="section-number-3">3.4</span> Obtained Dynamics</h3>
|
||||
<div id="outline-container-orgb0b01e3" class="outline-3">
|
||||
<h3 id="orgb0b01e3"><span class="section-number-3">3.4</span> Obtained Dynamics</h3>
|
||||
<div class="outline-text-3" id="text-3-4">
|
||||
|
||||
<div id="org77aab4b" class="figure">
|
||||
<div id="org15e1aeb" class="figure">
|
||||
<p><img src="figs/stewart_platform_translations.png" alt="stewart_platform_translations.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Stewart Platform Plant from forces applied by the legs to the acceleration of the platform</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org9222b17" class="figure">
|
||||
<div id="org1a9b1c6" class="figure">
|
||||
<p><img src="figs/stewart_platform_rotations.png" alt="stewart_platform_rotations.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Stewart Platform Plant from torques applied by the legs to the angular acceleration of the platform</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org9d77253" class="figure">
|
||||
<div id="org2c0cea0" class="figure">
|
||||
<p><img src="figs/stewart_platform_legs.png" alt="stewart_platform_legs.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Stewart Platform Plant from forces applied by the legs to displacement of the legs</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org4cce08b" class="figure">
|
||||
<div id="org46a471a" class="figure">
|
||||
<p><img src="figs/stewart_platform_transmissibility.png" alt="stewart_platform_transmissibility.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Transmissibility</p>
|
||||
@ -946,8 +962,8 @@ Gl.OutputName = {<span class="org-string">'A1'</span>, <span class="org-string"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org315ca7e" class="outline-3">
|
||||
<h3 id="org315ca7e"><span class="section-number-3">3.5</span> Real Approximation of \(G\) at the decoupling frequency</h3>
|
||||
<div id="outline-container-org1de55ce" class="outline-3">
|
||||
<h3 id="org1de55ce"><span class="section-number-3">3.5</span> Real Approximation of \(G\) at the decoupling frequency</h3>
|
||||
<div class="outline-text-3" id="text-3-5">
|
||||
<p>
|
||||
Let’s compute a real approximation of the complex matrix \(H_1\) which corresponds to the the transfer function \(G_c(j\omega_c)\) from forces applied by the actuators to the measured acceleration of the top platform evaluated at the frequency \(\omega_c\).
|
||||
@ -973,8 +989,8 @@ H1 = inv(D<span class="org-type">*</span>real(H1<span class="org-type">'*</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org91c0ed9" class="outline-3">
|
||||
<h3 id="org91c0ed9"><span class="section-number-3">3.6</span> Verification of the decoupling using the “Gershgorin Radii”</h3>
|
||||
<div id="outline-container-org53d60e1" class="outline-3">
|
||||
<h3 id="org53d60e1"><span class="section-number-3">3.6</span> Verification of the decoupling using the “Gershgorin Radii”</h3>
|
||||
<div class="outline-text-3" id="text-3-6">
|
||||
<p>
|
||||
First, the Singular Value Decomposition of \(H_1\) is performed:
|
||||
@ -1042,7 +1058,7 @@ H = abs(squeeze(freqresp(Gj, freqs, <span class="org-string">'Hz'</span>)));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgda863a3" class="figure">
|
||||
<div id="org6065705" class="figure">
|
||||
<p><img src="figs/simscape_model_gershgorin_radii.png" alt="simscape_model_gershgorin_radii.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Gershgorin Radii of the Coupled and Decoupled plants</p>
|
||||
@ -1050,8 +1066,8 @@ H = abs(squeeze(freqresp(Gj, freqs, <span class="org-string">'Hz'</span>)));
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0bd0b38" class="outline-3">
|
||||
<h3 id="org0bd0b38"><span class="section-number-3">3.7</span> Decoupled Plant</h3>
|
||||
<div id="outline-container-org40c1d24" class="outline-3">
|
||||
<h3 id="org40c1d24"><span class="section-number-3">3.7</span> Decoupled Plant</h3>
|
||||
<div class="outline-text-3" id="text-3-7">
|
||||
<p>
|
||||
Let’s see the bode plot of the decoupled plant \(G_d(s)\).
|
||||
@ -1059,14 +1075,14 @@ Let’s see the bode plot of the decoupled plant \(G_d(s)\).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org6ba4690" class="figure">
|
||||
<div id="orgbfa07c9" class="figure">
|
||||
<p><img src="figs/simscape_model_decoupled_plant_svd.png" alt="simscape_model_decoupled_plant_svd.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Decoupled Plant using SVD</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org5342ca6" class="figure">
|
||||
<div id="org28978a4" class="figure">
|
||||
<p><img src="figs/simscape_model_decoupled_plant_jacobian.png" alt="simscape_model_decoupled_plant_jacobian.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Decoupled Plant using the Jacobian</p>
|
||||
@ -1074,8 +1090,8 @@ Let’s see the bode plot of the decoupled plant \(G_d(s)\).
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4b22e32" class="outline-3">
|
||||
<h3 id="org4b22e32"><span class="section-number-3">3.8</span> Diagonal Controller</h3>
|
||||
<div id="outline-container-orgdfcd158" class="outline-3">
|
||||
<h3 id="orgdfcd158"><span class="section-number-3">3.8</span> Diagonal Controller</h3>
|
||||
<div class="outline-text-3" id="text-3-8">
|
||||
<p>
|
||||
The controller \(K\) is a diagonal controller consisting a low pass filters with a crossover frequency \(\omega_c\) and a DC gain \(C_g\).
|
||||
@ -1091,8 +1107,8 @@ K = eye(6)<span class="org-type">*</span>C_g<span class="org-type">/</span>(s<sp
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgac4cf9b" class="outline-3">
|
||||
<h3 id="orgac4cf9b"><span class="section-number-3">3.9</span> Centralized Control</h3>
|
||||
<div id="outline-container-org25e3b35" class="outline-3">
|
||||
<h3 id="org25e3b35"><span class="section-number-3">3.9</span> Centralized Control</h3>
|
||||
<div class="outline-text-3" id="text-3-9">
|
||||
<p>
|
||||
The control diagram for the centralized control is shown below.
|
||||
@ -1116,8 +1132,8 @@ The Jacobian is used to convert forces in the cartesian frame to forces applied
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4ae317c" class="outline-3">
|
||||
<h3 id="org4ae317c"><span class="section-number-3">3.10</span> SVD Control</h3>
|
||||
<div id="outline-container-org4d83793" class="outline-3">
|
||||
<h3 id="org4d83793"><span class="section-number-3">3.10</span> SVD Control</h3>
|
||||
<div class="outline-text-3" id="text-3-10">
|
||||
<p>
|
||||
The SVD control architecture is shown below.
|
||||
@ -1140,8 +1156,8 @@ SVD Control
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgabc897d" class="outline-3">
|
||||
<h3 id="orgabc897d"><span class="section-number-3">3.11</span> Results</h3>
|
||||
<div id="outline-container-org7cece79" class="outline-3">
|
||||
<h3 id="org7cece79"><span class="section-number-3">3.11</span> Results</h3>
|
||||
<div class="outline-text-3" id="text-3-11">
|
||||
<p>
|
||||
Let’s first verify the stability of the closed-loop systems:
|
||||
@ -1171,11 +1187,11 @@ ans =
|
||||
|
||||
|
||||
<p>
|
||||
The obtained transmissibility in Open-loop, for the centralized control as well as for the SVD control are shown in Figure <a href="#org92a495c">14</a>.
|
||||
The obtained transmissibility in Open-loop, for the centralized control as well as for the SVD control are shown in Figure <a href="#org62fae46">14</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org92a495c" class="figure">
|
||||
<div id="org62fae46" class="figure">
|
||||
<p><img src="figs/stewart_platform_simscape_cl_transmissibility.png" alt="stewart_platform_simscape_cl_transmissibility.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 14: </span>Obtained Transmissibility</p>
|
||||
@ -1183,10 +1199,305 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8b11aba" class="outline-2">
|
||||
<h2 id="org8b11aba"><span class="section-number-2">4</span> Stewart Platform - Analytical Model</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
</div>
|
||||
<div id="outline-container-org2a175f6" class="outline-3">
|
||||
<h3 id="org2a175f6"><span class="section-number-3">4.1</span> Characteristics</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">L = 0.055;
|
||||
Zc = 0;
|
||||
m = 0.2;
|
||||
k = 1e3;
|
||||
c = 2<span class="org-type">*</span>0.1<span class="org-type">*</span>sqrt(k<span class="org-type">*</span>m);
|
||||
|
||||
Rx = 0.04;
|
||||
Rz = 0.04;
|
||||
Ix = m<span class="org-type">*</span>Rx<span class="org-type">^</span>2;
|
||||
Iy = m<span class="org-type">*</span>Rx<span class="org-type">^</span>2;
|
||||
Iz = m<span class="org-type">*</span>Rz<span class="org-type">^</span>2;
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9efa4f4" class="outline-3">
|
||||
<h3 id="org9efa4f4"><span class="section-number-3">4.2</span> Mass Matrix</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">M = m<span class="org-type">*</span>[1 0 0 0 Zc 0;
|
||||
0 1 0 <span class="org-type">-</span>Zc 0 0;
|
||||
0 0 1 0 0 0;
|
||||
0 <span class="org-type">-</span>Zc 0 Rx<span class="org-type">^</span>2<span class="org-type">+</span>Zc<span class="org-type">^</span>2 0 0;
|
||||
Zc 0 0 0 Rx<span class="org-type">^</span>2<span class="org-type">+</span>Zc<span class="org-type">^</span>2 0;
|
||||
0 0 0 0 0 Rz<span class="org-type">^</span>2];
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org97bc497" class="outline-3">
|
||||
<h3 id="org97bc497"><span class="section-number-3">4.3</span> Jacobian Matrix</h3>
|
||||
<div class="outline-text-3" id="text-4-3">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Bj=1<span class="org-type">/</span>sqrt(6)<span class="org-type">*</span>[ 1 1 <span class="org-type">-</span>2 1 1 <span class="org-type">-</span>2;
|
||||
sqrt<span class="org-type">(3) -sqrt(3) 0 sqrt(3) -sqrt(3) 0;</span>
|
||||
sqrt<span class="org-type">(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2);</span>
|
||||
0 0 L L <span class="org-type">-</span>L <span class="org-type">-</span>L;
|
||||
<span class="org-type">-</span>L<span class="org-type">*</span>2<span class="org-type">/</span>sqrt(3) <span class="org-type">-</span>L<span class="org-type">*</span>2<span class="org-type">/</span>sqrt(3) L<span class="org-type">/</span>sqrt(3) L<span class="org-type">/</span>sqrt(3) L<span class="org-type">/</span>sqrt(3) L<span class="org-type">/</span>sqrt(3);
|
||||
L<span class="org-type">*</span>sqrt(2) <span class="org-type">-</span>L<span class="org-type">*</span>sqrt(2) L<span class="org-type">*</span>sqrt(2) <span class="org-type">-</span>L<span class="org-type">*</span>sqrt(2) L<span class="org-type">*</span>sqrt(2) <span class="org-type">-</span>L<span class="org-type">*</span>sqrt(2)];
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7c9679d" class="outline-3">
|
||||
<h3 id="org7c9679d"><span class="section-number-3">4.4</span> Stifnness matrix and Damping matrix</h3>
|
||||
<div class="outline-text-3" id="text-4-4">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">kv = k<span class="org-type">/</span>3; <span class="org-comment">% [N/m]</span>
|
||||
kh = 0.5<span class="org-type">*</span>k<span class="org-type">/</span>3; <span class="org-comment">% [N/m]</span>
|
||||
|
||||
K = diag([3<span class="org-type">*</span>kh,3<span class="org-type">*</span>kh,3<span class="org-type">*</span>kv,3<span class="org-type">*</span>kv<span class="org-type">*</span>Rx<span class="org-type">^</span>2<span class="org-type">/</span>2,3<span class="org-type">*</span>kv<span class="org-type">*</span>Rx<span class="org-type">^</span>2<span class="org-type">/</span>2,3<span class="org-type">*</span>kh<span class="org-type">*</span>Rx<span class="org-type">^</span>2]); <span class="org-comment">% Stiffness Matrix</span>
|
||||
|
||||
C = c<span class="org-type">*</span>K<span class="org-type">/</span>100000; <span class="org-comment">% Damping Matrix</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org00e8691" class="outline-3">
|
||||
<h3 id="org00e8691"><span class="section-number-3">4.5</span> State Space System</h3>
|
||||
<div class="outline-text-3" id="text-4-5">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">A = [zeros(6) eye(6); <span class="org-type">-</span>M<span class="org-type">\</span>K <span class="org-type">-</span>M<span class="org-type">\</span>C];
|
||||
Bw = [zeros(6); <span class="org-type">-</span>eye(6)];
|
||||
Bu = [zeros(6); M<span class="org-type">\</span>Bj];
|
||||
Co = [<span class="org-type">-</span>M<span class="org-type">\</span>K <span class="org-type">-</span>M<span class="org-type">\</span>C];
|
||||
D = [zeros(6) M<span class="org-type">\</span>Bj];
|
||||
|
||||
ST = ss(A,[Bw Bu],Co,D);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<ul class="org-ul">
|
||||
<li>OUT 1-6: 6 dof</li>
|
||||
<li>IN 1-6 : ground displacement in the directions of the legs</li>
|
||||
<li>IN 7-12: forces in the actuators.</li>
|
||||
</ul>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ST.StateName = {<span class="org-string">'x'</span>;<span class="org-string">'y'</span>;<span class="org-string">'z'</span>;<span class="org-string">'theta_x'</span>;<span class="org-string">'theta_y'</span>;<span class="org-string">'theta_z'</span>;...
|
||||
<span class="org-string">'dx'</span>;<span class="org-string">'dy'</span>;<span class="org-string">'dz'</span>;<span class="org-string">'dtheta_x'</span>;<span class="org-string">'dtheta_y'</span>;<span class="org-string">'dtheta_z'</span>};
|
||||
ST.InputName = {<span class="org-string">'w1'</span>;<span class="org-string">'w2'</span>;<span class="org-string">'w3'</span>;<span class="org-string">'w4'</span>;<span class="org-string">'w5'</span>;<span class="org-string">'w6'</span>;...
|
||||
<span class="org-string">'u1'</span>;<span class="org-string">'u2'</span>;<span class="org-string">'u3'</span>;<span class="org-string">'u4'</span>;<span class="org-string">'u5'</span>;<span class="org-string">'u6'</span>};
|
||||
ST.OutputName = {<span class="org-string">'ax'</span>;<span class="org-string">'ay'</span>;<span class="org-string">'az'</span>;<span class="org-string">'atheta_x'</span>;<span class="org-string">'atheta_y'</span>;<span class="org-string">'atheta_z'</span>};
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8a70996" class="outline-3">
|
||||
<h3 id="org8a70996"><span class="section-number-3">4.6</span> Transmissibility</h3>
|
||||
<div class="outline-text-3" id="text-4-6">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">TR=ST<span class="org-type">*</span>[eye(6); zeros(6)];
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-type">figure</span>
|
||||
subplot(231)
|
||||
bodemag(TR(1,1),opts);
|
||||
subplot(232)
|
||||
bodemag(TR(2,2),opts);
|
||||
subplot(233)
|
||||
bodemag(TR(3,3),opts);
|
||||
subplot(234)
|
||||
bodemag(TR(4,4),opts);
|
||||
subplot(235)
|
||||
bodemag(TR(5,5),opts);
|
||||
subplot(236)
|
||||
bodemag(TR(6,6),opts);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org6ce913c" class="figure">
|
||||
<p><img src="figs/stewart_platform_analytical_transmissibility.png" alt="stewart_platform_analytical_transmissibility.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 15: </span>Transmissibility</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org12c95c9" class="outline-3">
|
||||
<h3 id="org12c95c9"><span class="section-number-3">4.7</span> Real approximation of \(G(j\omega)\) at decoupling frequency</h3>
|
||||
<div class="outline-text-3" id="text-4-7">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">sys1 = ST<span class="org-type">*</span>[zeros(6); eye(6)]; <span class="org-comment">% take only the forces inputs</span>
|
||||
|
||||
dec_fr = 20;
|
||||
H1 = evalfr(sys1,<span class="org-constant">j</span><span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>dec_fr);
|
||||
H2 = H1;
|
||||
D = pinv(real(H2<span class="org-type">'*</span>H2));
|
||||
H1 = inv(D<span class="org-type">*</span>real(H2<span class="org-type">'*</span>diag(exp(<span class="org-constant">j</span><span class="org-type">*</span>angle(diag(H2<span class="org-type">*</span>D<span class="org-type">*</span>H2<span class="org-type">.'</span>))<span class="org-type">/</span>2)))) ;
|
||||
[U,S,V] = svd(H1);
|
||||
|
||||
wf = logspace(<span class="org-type">-</span>1,2,1000);
|
||||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(wf)</span>
|
||||
H = abs(evalfr(sys1,<span class="org-constant">j</span><span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wf(<span class="org-constant">i</span>)));
|
||||
H_dec = abs(evalfr(U<span class="org-type">'*</span>sys1<span class="org-type">*</span>V,<span class="org-constant">j</span><span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wf(<span class="org-constant">i</span>)));
|
||||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">j</span></span> = <span class="org-constant">1:size(H,2)</span>
|
||||
g_r1(<span class="org-constant">i</span>,<span class="org-constant">j</span>) = (sum(H(<span class="org-constant">j</span>,<span class="org-type">:</span>))<span class="org-type">-</span>H(<span class="org-constant">j</span>,<span class="org-constant">j</span>))<span class="org-type">/</span>H(<span class="org-constant">j</span>,<span class="org-constant">j</span>);
|
||||
g_r2(<span class="org-constant">i</span>,<span class="org-constant">j</span>) = (sum(H_dec(<span class="org-constant">j</span>,<span class="org-type">:</span>))<span class="org-type">-</span>H_dec(<span class="org-constant">j</span>,<span class="org-constant">j</span>))<span class="org-type">/</span>H_dec(<span class="org-constant">j</span>,<span class="org-constant">j</span>);
|
||||
<span class="org-comment">% keyboard</span>
|
||||
<span class="org-keyword">end</span>
|
||||
g_lim(<span class="org-constant">i</span>) = 0.5;
|
||||
<span class="org-keyword">end</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc58b81c" class="outline-3">
|
||||
<h3 id="orgc58b81c"><span class="section-number-3">4.8</span> Coupled and Decoupled Plant “Gershgorin Radii”</h3>
|
||||
<div class="outline-text-3" id="text-4-8">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
||||
title(<span class="org-string">'Coupled plant'</span>)
|
||||
loglog(wf,g_r1(<span class="org-type">:</span>,1),wf,g_r1(<span class="org-type">:</span>,2),wf,g_r1(<span class="org-type">:</span>,3),wf,g_r1(<span class="org-type">:</span>,4),wf,g_r1(<span class="org-type">:</span>,5),wf,g_r1(<span class="org-type">:</span>,6),wf,g_lim,<span class="org-string">'--'</span>);
|
||||
legend(<span class="org-string">'$a_x$'</span>,<span class="org-string">'$a_y$'</span>,<span class="org-string">'$a_z$'</span>,<span class="org-string">'$\theta_x$'</span>,<span class="org-string">'$\theta_y$'</span>,<span class="org-string">'$\theta_z$'</span>,<span class="org-string">'Limit'</span>);
|
||||
xlabel(<span class="org-string">'Frequency (Hz)'</span>); ylabel(<span class="org-string">'Gershgorin Radii'</span>)
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org20fc2fd" class="figure">
|
||||
<p><img src="figs/gershorin_raddii_coupled_analytical.png" alt="gershorin_raddii_coupled_analytical.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 16: </span>Gershorin Raddi for the coupled plant</p>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
||||
title(<span class="org-string">'Decoupled plant (10 Hz)'</span>)
|
||||
loglog(wf,g_r2(<span class="org-type">:</span>,1),wf,g_r2(<span class="org-type">:</span>,2),wf,g_r2(<span class="org-type">:</span>,3),wf,g_r2(<span class="org-type">:</span>,4),wf,g_r2(<span class="org-type">:</span>,5),wf,g_r2(<span class="org-type">:</span>,6),wf,g_lim,<span class="org-string">'--'</span>);
|
||||
legend(<span class="org-string">'$S_1$'</span>,<span class="org-string">'$S_2$'</span>,<span class="org-string">'$S_3$'</span>,<span class="org-string">'$S_4$'</span>,<span class="org-string">'$S_5$'</span>,<span class="org-string">'$S_6$'</span>,<span class="org-string">'Limit'</span>);
|
||||
xlabel(<span class="org-string">'Frequency (Hz)'</span>); ylabel(<span class="org-string">'Gershgorin Radii'</span>)
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org586d327" class="figure">
|
||||
<p><img src="figs/gershorin_raddii_decoupled_analytical.png" alt="gershorin_raddii_decoupled_analytical.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 17: </span>Gershorin Raddi for the decoupled plant</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2ba91f6" class="outline-3">
|
||||
<h3 id="org2ba91f6"><span class="section-number-3">4.9</span> Decoupled Plant</h3>
|
||||
<div class="outline-text-3" id="text-4-9">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
||||
bodemag(U<span class="org-type">'*</span>sys1<span class="org-type">*</span>V,opts)
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org5cd203f" class="figure">
|
||||
<p><img src="figs/stewart_platform_analytical_decoupled_plant.png" alt="stewart_platform_analytical_decoupled_plant.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 18: </span>Decoupled Plant</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc73a283" class="outline-3">
|
||||
<h3 id="orgc73a283"><span class="section-number-3">4.10</span> Controller</h3>
|
||||
<div class="outline-text-3" id="text-4-10">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">fc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>0.1; <span class="org-comment">% Crossover Frequency [rad/s]</span>
|
||||
c_gain = 50; <span class="org-comment">%</span>
|
||||
|
||||
cont = eye(6)<span class="org-type">*</span>c_gain<span class="org-type">/</span>(s<span class="org-type">+</span>fc);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9c82ee4" class="outline-3">
|
||||
<h3 id="org9c82ee4"><span class="section-number-3">4.11</span> Closed Loop System</h3>
|
||||
<div class="outline-text-3" id="text-4-11">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">FEEDIN = [7<span class="org-type">:</span>12]; <span class="org-comment">% Input of controller</span>
|
||||
FEEDOUT = [1<span class="org-type">:</span>6]; <span class="org-comment">% Output of controller</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Centralized Control
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">STcen = feedback(ST, inv(Bj)<span class="org-type">*</span>cont, FEEDIN, FEEDOUT);
|
||||
TRcen = STcen<span class="org-type">*</span>[eye(6); zeros(6)];
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
SVD Control
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">STsvd = feedback(ST, pinv(V<span class="org-type">'</span>)<span class="org-type">*</span>cont<span class="org-type">*</span>pinv(U), FEEDIN, FEEDOUT);
|
||||
TRsvd = STsvd<span class="org-type">*</span>[eye(6); zeros(6)];
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org80cd406" class="outline-3">
|
||||
<h3 id="org80cd406"><span class="section-number-3">4.12</span> Results</h3>
|
||||
<div class="outline-text-3" id="text-4-12">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-type">figure</span>
|
||||
subplot(231)
|
||||
bodemag(TR(1,1),TRcen(1,1),TRsvd(1,1),opts)
|
||||
legend(<span class="org-string">'OL'</span>,<span class="org-string">'Centralized'</span>,<span class="org-string">'SVD'</span>)
|
||||
subplot(232)
|
||||
bodemag(TR(2,2),TRcen(2,2),TRsvd(2,2),opts)
|
||||
legend(<span class="org-string">'OL'</span>,<span class="org-string">'Centralized'</span>,<span class="org-string">'SVD'</span>)
|
||||
subplot(233)
|
||||
bodemag(TR(3,3),TRcen(3,3),TRsvd(3,3),opts)
|
||||
legend(<span class="org-string">'OL'</span>,<span class="org-string">'Centralized'</span>,<span class="org-string">'SVD'</span>)
|
||||
subplot(234)
|
||||
bodemag(TR(4,4),TRcen(4,4),TRsvd(4,4),opts)
|
||||
legend(<span class="org-string">'OL'</span>,<span class="org-string">'Centralized'</span>,<span class="org-string">'SVD'</span>)
|
||||
subplot(235)
|
||||
bodemag(TR(5,5),TRcen(5,5),TRsvd(5,5),opts)
|
||||
legend(<span class="org-string">'OL'</span>,<span class="org-string">'Centralized'</span>,<span class="org-string">'SVD'</span>)
|
||||
subplot(236)
|
||||
bodemag(TR(6,6),TRcen(6,6),TRsvd(6,6),opts)
|
||||
legend(<span class="org-string">'OL'</span>,<span class="org-string">'Centralized'</span>,<span class="org-string">'SVD'</span>)
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgfadf6e5" class="figure">
|
||||
<p><img src="figs/stewart_platform_analytical_svd_cen_comp.png" alt="stewart_platform_analytical_svd_cen_comp.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 19: </span>Comparison of the obtained transmissibility for the centralized control and the SVD control</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-10-05 lun. 18:28</p>
|
||||
<p class="date">Created: 2020-10-09 ven. 16:21</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
121
index.org
@ -695,10 +695,15 @@ This Matlab function is accessible [[file:gravimeter/pzmap_testCL.m][here]].
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no
|
||||
addpath('stewart_platform');
|
||||
addpath('stewart_platform/STEP');
|
||||
#+end_src
|
||||
|
||||
** Jacobian
|
||||
First, the position of the "joints" (points of force application) are estimated and the Jacobian computed.
|
||||
#+begin_src matlab
|
||||
open('stewart_platform/drone_platform_jacobian.slx');
|
||||
open('drone_platform_jacobian.slx');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@ -731,14 +736,14 @@ First, the position of the "joints" (points of force application) are estimated
|
||||
|
||||
** Simscape Model
|
||||
#+begin_src matlab
|
||||
open('stewart_platform/drone_platform.slx');
|
||||
open('drone_platform.slx');
|
||||
#+end_src
|
||||
|
||||
Definition of spring parameters
|
||||
#+begin_src matlab
|
||||
kx = 50; % [N/m]
|
||||
ky = 50;
|
||||
kz = 50;
|
||||
kx = 0.5*1e3/3; % [N/m]
|
||||
ky = 0.5*1e3/3;
|
||||
kz = 1e3/3;
|
||||
|
||||
cx = 0.025; % [Nm/rad]
|
||||
cy = 0.025;
|
||||
@ -876,14 +881,14 @@ Thanks to the Jacobian, we compute the transfer functions in the frame of the le
|
||||
|
||||
ax1 = subplot(2, 1, 1);
|
||||
hold on;
|
||||
for ch_i = 1:6
|
||||
plot(freqs, abs(squeeze(freqresp(Gl(sprintf('A%i', ch_i), sprintf('F%i', ch_i)), freqs, 'Hz'))));
|
||||
end
|
||||
for out_i = 1:5
|
||||
for in_i = i+1:6
|
||||
plot(freqs, abs(squeeze(freqresp(Gl(sprintf('A%i', out_i), sprintf('F%i', in_i)), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2]);
|
||||
end
|
||||
end
|
||||
for ch_i = 1:6
|
||||
plot(freqs, abs(squeeze(freqresp(Gl(sprintf('A%i', ch_i), sprintf('F%i', ch_i)), freqs, 'Hz'))));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
@ -918,9 +923,13 @@ Thanks to the Jacobian, we compute the transfer functions in the frame of the le
|
||||
|
||||
ax1 = subplot(2, 1, 1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Ax', 'Dwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Ay', 'Dwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_y/D_{w,y}$');
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Az', 'Dwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_z/D_{w,z}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Ax', 'Dwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_x/D_{w,x}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Ay', 'Dwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_y/D_{w,y}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Az', 'Dwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$D_z/D_{w,z}$');
|
||||
set(gca,'ColorOrderIndex',1)
|
||||
plot(freqs, abs(squeeze(freqresp(TR(1,1), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(TR(2,2), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(TR(3,3), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Transmissibility - Translations'); xlabel('Frequency [Hz]');
|
||||
@ -928,9 +937,13 @@ Thanks to the Jacobian, we compute the transfer functions in the frame of the le
|
||||
|
||||
ax2 = subplot(2, 1, 2);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Arx', 'Rwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_x/R_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Ary', 'Rwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_y/R_{w,y}$');
|
||||
plot(freqs, abs(squeeze(freqresp(Gx('Arz', 'Rwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_z/R_{w,z}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Arx', 'Rwx')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_x/R_{w,x}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Ary', 'Rwy')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_y/R_{w,y}$');
|
||||
% plot(freqs, abs(squeeze(freqresp(Gx('Arz', 'Rwz')/s^2, freqs, 'Hz'))), 'DisplayName', '$R_z/R_{w,z}$');
|
||||
set(gca,'ColorOrderIndex',1)
|
||||
plot(freqs, abs(squeeze(freqresp(TR(4,4), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(TR(5,5), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
plot(freqs, abs(squeeze(freqresp(TR(6,6), freqs, 'Hz'))), '--', 'DisplayName', '$D_x/D_{w,x}$');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Transmissibility - Rotations'); xlabel('Frequency [Hz]');
|
||||
@ -1124,7 +1137,7 @@ The control diagram for the centralized control is shown below.
|
||||
The controller $K_c$ is "working" in an cartesian frame.
|
||||
The Jacobian is used to convert forces in the cartesian frame to forces applied by the actuators.
|
||||
|
||||
#+begin_src latex :file centralized_control.pdf
|
||||
#+begin_src latex :file centralized_control.pdf :tangle no
|
||||
\begin{tikzpicture}
|
||||
\node[block={2cm}{1.5cm}] (G) {$G$};
|
||||
\node[block, below right=0.6 and -0.5 of G] (K) {$K_c$};
|
||||
@ -1154,7 +1167,7 @@ The Jacobian is used to convert forces in the cartesian frame to forces applied
|
||||
The SVD control architecture is shown below.
|
||||
The matrices $U$ and $V$ are used to decoupled the plant $G$.
|
||||
|
||||
#+begin_src latex :file svd_control.pdf
|
||||
#+begin_src latex :file svd_control.pdf :tangle no
|
||||
\begin{tikzpicture}
|
||||
\node[block={2cm}{1.5cm}] (G) {$G$};
|
||||
\node[block, below right=0.6 and 0 of G] (U) {$U^{-1}$};
|
||||
@ -1201,7 +1214,7 @@ Let's first verify the stability of the closed-loop systems:
|
||||
#+RESULTS:
|
||||
: ans =
|
||||
: logical
|
||||
: 1
|
||||
: 0
|
||||
|
||||
The obtained transmissibility in Open-loop, for the centralized control as well as for the SVD control are shown in Figure [[fig:stewart_platform_simscape_cl_transmissibility]].
|
||||
|
||||
@ -1278,7 +1291,7 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
#+RESULTS:
|
||||
[[file:figs/stewart_platform_simscape_cl_transmissibility.png]]
|
||||
|
||||
* Stewart Platform - Analytical Model :noexport:
|
||||
* Stewart Platform - Analytical Model
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
<<matlab-dir>>
|
||||
@ -1300,55 +1313,57 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
|
||||
** Characteristics
|
||||
#+begin_src matlab
|
||||
L = 0.055;
|
||||
Zc = 0;
|
||||
m = 0.2;
|
||||
k = 1e3;
|
||||
c = 2*0.1*sqrt(k*m);
|
||||
L = 0.055; % Leg length [m]
|
||||
Zc = 0; % ?
|
||||
m = 0.2; % Top platform mass [m]
|
||||
k = 1e3; % Total vertical stiffness [N/m]
|
||||
c = 2*0.1*sqrt(k*m); % Damping ? [N/(m/s)]
|
||||
|
||||
Rx = 0.04;
|
||||
Rz = 0.04;
|
||||
Ix = m*Rx^2;
|
||||
Iy = m*Rx^2;
|
||||
Iz = m*Rz^2;
|
||||
Rx = 0.04; % ?
|
||||
Rz = 0.04; % ?
|
||||
Ix = m*Rx^2; % ?
|
||||
Iy = m*Rx^2; % ?
|
||||
Iz = m*Rz^2; % ?
|
||||
#+end_src
|
||||
|
||||
** Mass Matrix
|
||||
#+begin_src matlab
|
||||
M = m*[1 0 0 0 Zc 0;
|
||||
0 1 0 -Zc 0 0;
|
||||
0 0 1 0 0 0;
|
||||
0 -Zc 0 Rx^2+Zc^2 0 0;
|
||||
Zc 0 0 0 Rx^2+Zc^2 0;
|
||||
0 0 0 0 0 Rz^2];
|
||||
M = m*[1 0 0 0 Zc 0;
|
||||
0 1 0 -Zc 0 0;
|
||||
0 0 1 0 0 0;
|
||||
0 -Zc 0 Rx^2+Zc^2 0 0;
|
||||
Zc 0 0 0 Rx^2+Zc^2 0;
|
||||
0 0 0 0 0 Rz^2];
|
||||
#+end_src
|
||||
|
||||
** Jacobian Matrix
|
||||
#+begin_src matlab
|
||||
Bj=1/sqrt(6)*[ 1 1 -2 1 1 -2;
|
||||
sqrt(3) -sqrt(3) 0 sqrt(3) -sqrt(3) 0;
|
||||
sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2);
|
||||
0 0 L L -L -L;
|
||||
-L*2/sqrt(3) -L*2/sqrt(3) L/sqrt(3) L/sqrt(3) L/sqrt(3) L/sqrt(3);
|
||||
L*sqrt(2) -L*sqrt(2) L*sqrt(2) -L*sqrt(2) L*sqrt(2) -L*sqrt(2)];
|
||||
Bj=1/sqrt(6)*[ 1 1 -2 1 1 -2;
|
||||
sqrt(3) -sqrt(3) 0 sqrt(3) -sqrt(3) 0;
|
||||
sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2);
|
||||
0 0 L L -L -L;
|
||||
-L*2/sqrt(3) -L*2/sqrt(3) L/sqrt(3) L/sqrt(3) L/sqrt(3) L/sqrt(3);
|
||||
L*sqrt(2) -L*sqrt(2) L*sqrt(2) -L*sqrt(2) L*sqrt(2) -L*sqrt(2)];
|
||||
#+end_src
|
||||
|
||||
** Stifnness matrix and Damping matrix
|
||||
** Stifnness and Damping matrices
|
||||
#+begin_src matlab
|
||||
kv = k/3; % [N/m]
|
||||
kh = 0.5*k/3; % [N/m]
|
||||
|
||||
K = diag([3*kh,3*kh,3*kv,3*kv*Rx^2/2,3*kv*Rx^2/2,3*kh*Rx^2]); % Stiffness Matrix
|
||||
kv = k/3; % Vertical Stiffness of the springs [N/m]
|
||||
kh = 0.5*k/3; % Horizontal Stiffness of the springs [N/m]
|
||||
|
||||
K = diag([3*kh, 3*kh, 3*kv, 3*kv*Rx^2/2, 3*kv*Rx^2/2, 3*kh*Rx^2]); % Stiffness Matrix
|
||||
C = c*K/100000; % Damping Matrix
|
||||
#+end_src
|
||||
|
||||
** State Space System
|
||||
#+begin_src matlab
|
||||
A = [zeros(6) eye(6); -M\K -M\C];
|
||||
A = [ zeros(6) eye(6); ...
|
||||
-M\K -M\C];
|
||||
Bw = [zeros(6); -eye(6)];
|
||||
Bu = [zeros(6); M\Bj];
|
||||
|
||||
Co = [-M\K -M\C];
|
||||
|
||||
D = [zeros(6) M\Bj];
|
||||
|
||||
ST = ss(A,[Bw Bu],Co,D);
|
||||
@ -1360,8 +1375,10 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
#+begin_src matlab
|
||||
ST.StateName = {'x';'y';'z';'theta_x';'theta_y';'theta_z';...
|
||||
'dx';'dy';'dz';'dtheta_x';'dtheta_y';'dtheta_z'};
|
||||
|
||||
ST.InputName = {'w1';'w2';'w3';'w4';'w5';'w6';...
|
||||
'u1';'u2';'u3';'u4';'u5';'u6'};
|
||||
|
||||
ST.OutputName = {'ax';'ay';'az';'atheta_x';'atheta_y';'atheta_z'};
|
||||
#+end_src
|
||||
|
||||
@ -1373,17 +1390,17 @@ The obtained transmissibility in Open-loop, for the centralized control as well
|
||||
#+begin_src matlab
|
||||
figure
|
||||
subplot(231)
|
||||
bodemag(TR(1,1),opts);
|
||||
bodemag(TR(1,1));
|
||||
subplot(232)
|
||||
bodemag(TR(2,2),opts);
|
||||
bodemag(TR(2,2));
|
||||
subplot(233)
|
||||
bodemag(TR(3,3),opts);
|
||||
bodemag(TR(3,3));
|
||||
subplot(234)
|
||||
bodemag(TR(4,4),opts);
|
||||
bodemag(TR(4,4));
|
||||
subplot(235)
|
||||
bodemag(TR(5,5),opts);
|
||||
bodemag(TR(5,5));
|
||||
subplot(236)
|
||||
bodemag(TR(6,6),opts);
|
||||
bodemag(TR(6,6));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
|