Merge few figures

This commit is contained in:
Thomas Dehaeze 2020-03-16 11:23:15 +01:00
parent 8fe6e814f2
commit cdecb24470
34 changed files with 252 additions and 374 deletions

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-03-13 ven. 13:23 --> <!-- 2020-03-16 lun. 11:22 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Stewart Platform - Tracking Control</title> <title>Stewart Platform - Tracking Control</title>
@ -248,42 +248,42 @@
<ul> <ul>
<li><a href="#orgd7b25e5">1. Decentralized Control Architecture using Strut Length</a> <li><a href="#orgd7b25e5">1. Decentralized Control Architecture using Strut Length</a>
<ul> <ul>
<li><a href="#orga470275">1.1. Control Schematic</a></li> <li><a href="#orgaf4f125">1.1. Control Schematic</a></li>
<li><a href="#org3cdd958">1.2. Initialize the Stewart platform</a></li> <li><a href="#org5efa5dc">1.2. Initialize the Stewart platform</a></li>
<li><a href="#org8ae8979">1.3. Identification of the plant</a></li> <li><a href="#orgf2a4e09">1.3. Identification of the plant</a></li>
<li><a href="#org486a2e4">1.4. Plant Analysis</a></li> <li><a href="#org346704a">1.4. Plant Analysis</a></li>
<li><a href="#org484c823">1.5. Controller Design</a></li> <li><a href="#org303d728">1.5. Controller Design</a></li>
<li><a href="#org013a9ba">1.6. Simulation</a></li> <li><a href="#orgac9e2fb">1.6. Simulation</a></li>
<li><a href="#org974b430">1.7. Results</a></li> <li><a href="#org974b430">1.7. Results</a></li>
<li><a href="#org19a6760">1.8. Conclusion</a></li> <li><a href="#org8f3d960">1.8. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orga519721">2. Centralized Control Architecture using Pose Measurement</a> <li><a href="#orga519721">2. Centralized Control Architecture using Pose Measurement</a>
<ul> <ul>
<li><a href="#orga5acf65">2.1. Control Schematic</a></li> <li><a href="#org373826d">2.1. Control Schematic</a></li>
<li><a href="#org0250b01">2.2. Initialize the Stewart platform</a></li> <li><a href="#orgdb540d4">2.2. Initialize the Stewart platform</a></li>
<li><a href="#orgf2a4e09">2.3. Identification of the plant</a></li> <li><a href="#org7e2bbea">2.3. Identification of the plant</a></li>
<li><a href="#org2223469">2.4. Diagonal Control - Leg&rsquo;s Frame</a> <li><a href="#org2223469">2.4. Diagonal Control - Leg&rsquo;s Frame</a>
<ul> <ul>
<li><a href="#org8e1e62c">2.4.1. Control Architecture</a></li> <li><a href="#org42dc407">2.4.1. Control Architecture</a></li>
<li><a href="#org133ca61">2.4.2. Plant Analysis</a></li> <li><a href="#org33774e9">2.4.2. Plant Analysis</a></li>
<li><a href="#org6afc297">2.4.3. Controller Design</a></li> <li><a href="#orgc7ddab1">2.4.3. Controller Design</a></li>
<li><a href="#orgdb24c37">2.4.4. Simulation</a></li> <li><a href="#org3021cf3">2.4.4. Simulation</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org26a8857">2.5. Diagonal Control - Cartesian Frame</a> <li><a href="#org26a8857">2.5. Diagonal Control - Cartesian Frame</a>
<ul> <ul>
<li><a href="#org0f41ce9">2.5.1. Control Architecture</a></li> <li><a href="#org185190b">2.5.1. Control Architecture</a></li>
<li><a href="#org9691244">2.5.2. Plant Analysis</a></li> <li><a href="#orgac4e8f3">2.5.2. Plant Analysis</a></li>
<li><a href="#org7f32f8e">2.5.3. Controller Design</a></li> <li><a href="#org87c1a48">2.5.3. Controller Design</a></li>
<li><a href="#orgac9e2fb">2.5.4. Simulation</a></li> <li><a href="#org73875ca">2.5.4. Simulation</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgad7bc54">2.6. Diagonal Control - Steady State Decoupling</a> <li><a href="#orgad7bc54">2.6. Diagonal Control - Steady State Decoupling</a>
<ul> <ul>
<li><a href="#org42dc407">2.6.1. Control Architecture</a></li> <li><a href="#orgdeee29c">2.6.1. Control Architecture</a></li>
<li><a href="#org346704a">2.6.2. Plant Analysis</a></li> <li><a href="#org4c98210">2.6.2. Plant Analysis</a></li>
<li><a href="#org8b2a544">2.6.3. Controller Design</a></li> <li><a href="#orgbf66d4c">2.6.3. Controller Design</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orga2eadeb">2.7. Comparison</a> <li><a href="#orga2eadeb">2.7. Comparison</a>
@ -292,29 +292,29 @@
<li><a href="#org23ae479">2.7.2. Simulation Results</a></li> <li><a href="#org23ae479">2.7.2. Simulation Results</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgc7e00b3">2.8. Conclusion</a></li> <li><a href="#orgd2764a2">2.8. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org4b8c360">3. Hybrid Control Architecture - HAC-LAC with relative DVF</a> <li><a href="#org4b8c360">3. Hybrid Control Architecture - HAC-LAC with relative DVF</a>
<ul> <ul>
<li><a href="#orgaf4f125">3.1. Control Schematic</a></li> <li><a href="#org539565c">3.1. Control Schematic</a></li>
<li><a href="#org5efa5dc">3.2. Initialize the Stewart platform</a></li> <li><a href="#orga9bdd4e">3.2. Initialize the Stewart platform</a></li>
<li><a href="#org3274a98">3.3. First Control Loop - \(\bm{K}_\mathcal{L}\)</a> <li><a href="#org3274a98">3.3. First Control Loop - \(\bm{K}_\mathcal{L}\)</a>
<ul> <ul>
<li><a href="#orgfb552d7">3.3.1. Identification</a></li> <li><a href="#orgd69b37c">3.3.1. Identification</a></li>
<li><a href="#orge84aa66">3.3.2. Obtained Plant</a></li> <li><a href="#org2a634da">3.3.2. Obtained Plant</a></li>
<li><a href="#orgfeef351">3.3.3. Controller Design</a></li> <li><a href="#org23695fa">3.3.3. Controller Design</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org8440c0b">3.4. Second Control Loop - \(\bm{K}_\mathcal{X}\)</a> <li><a href="#org8440c0b">3.4. Second Control Loop - \(\bm{K}_\mathcal{X}\)</a>
<ul> <ul>
<li><a href="#orgd69b37c">3.4.1. Identification</a></li> <li><a href="#orgeec6c35">3.4.1. Identification</a></li>
<li><a href="#org2a634da">3.4.2. Obtained Plant</a></li> <li><a href="#org57836ee">3.4.2. Obtained Plant</a></li>
<li><a href="#org303d728">3.4.3. Controller Design</a></li> <li><a href="#orgcebb0d5">3.4.3. Controller Design</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org74d3dcd">3.5. Simulations</a></li> <li><a href="#org74d3dcd">3.5. Simulations</a></li>
<li><a href="#org8f3d960">3.6. Conclusion</a></li> <li><a href="#org771bea0">3.6. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org798d54f">4. Comparison of all the methods</a></li> <li><a href="#org798d54f">4. Comparison of all the methods</a></li>
@ -351,11 +351,11 @@ The control configuration are compare in section <a href="#orgb3403cb">4</a>.
<a id="orgea7df6c"></a> <a id="orgea7df6c"></a>
</p> </p>
</div> </div>
<div id="outline-container-orga470275" class="outline-3"> <div id="outline-container-orgaf4f125" class="outline-3">
<h3 id="orga470275"><span class="section-number-3">1.1</span> Control Schematic</h3> <h3 id="orgaf4f125"><span class="section-number-3">1.1</span> Control Schematic</h3>
<div class="outline-text-3" id="text-1-1"> <div class="outline-text-3" id="text-1-1">
<p> <p>
The control architecture is shown in Figure <a href="#org4f704a1">1</a>. The control architecture is shown in Figure <a href="#org897886b">1</a>.
</p> </p>
<p> <p>
@ -367,16 +367,16 @@ Then, a diagonal (decentralized) controller \(\bm{K}_\mathcal{L}\) is used such
</p> </p>
<div id="org4f704a1" class="figure"> <div id="org897886b" class="figure">
<p><img src="figs/control_measure_rotating_2dof.png" alt="control_measure_rotating_2dof.png" /> <p><img src="figs/decentralized_reference_tracking_L.png" alt="decentralized_reference_tracking_L.png" />
</p> </p>
<p><span class="figure-number">Figure 1: </span>Decentralized control for reference tracking</p> <p><span class="figure-number">Figure 1: </span>Decentralized control for reference tracking</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org3cdd958" class="outline-3"> <div id="outline-container-org5efa5dc" class="outline-3">
<h3 id="org3cdd958"><span class="section-number-3">1.2</span> Initialize the Stewart platform</h3> <h3 id="org5efa5dc"><span class="section-number-3">1.2</span> Initialize the Stewart platform</h3>
<div class="outline-text-3" id="text-1-2"> <div class="outline-text-3" id="text-1-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% Stewart Platform</span> <pre class="src src-matlab"><span class="org-comment">% Stewart Platform</span>
@ -407,8 +407,8 @@ references = initializeReferences(stewart);
</div> </div>
</div> </div>
<div id="outline-container-org8ae8979" class="outline-3"> <div id="outline-container-orgf2a4e09" class="outline-3">
<h3 id="org8ae8979"><span class="section-number-3">1.3</span> Identification of the plant</h3> <h3 id="orgf2a4e09"><span class="section-number-3">1.3</span> Identification of the plant</h3>
<div class="outline-text-3" id="text-1-3"> <div class="outline-text-3" id="text-1-3">
<p> <p>
Let&rsquo;s identify the transfer function from \(\bm{\tau}\) to \(\bm{\mathcal{L}}\). Let&rsquo;s identify the transfer function from \(\bm{\tau}\) to \(\bm{\mathcal{L}}\).
@ -431,43 +431,29 @@ G.OutputName = {<span class="org-string">'L1'</span>, <span class="org-string">'
</div> </div>
</div> </div>
<div id="outline-container-org486a2e4" class="outline-3"> <div id="outline-container-org346704a" class="outline-3">
<h3 id="org486a2e4"><span class="section-number-3">1.4</span> Plant Analysis</h3> <h3 id="org346704a"><span class="section-number-3">1.4</span> Plant Analysis</h3>
<div class="outline-text-3" id="text-1-4"> <div class="outline-text-3" id="text-1-4">
<p> <p>
The diagonal terms of the plant is shown in Figure <a href="#org8c82316">2</a>. The diagonal and off-diagonal terms of the plant are shown in Figure <a href="#org50fb6db">2</a>.
</p> </p>
<p> <p>
All the diagonal terms are equal. All the diagonal terms are equal.
</p>
<div id="org8c82316" class="figure">
<p><img src="figs/plant_decentralized_diagonal.png" alt="plant_decentralized_diagonal.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Diagonal Elements of the Plant (<a href="./figs/plant_decentralized_diagonal.png">png</a>, <a href="./figs/plant_decentralized_diagonal.pdf">pdf</a>)</p>
</div>
<p>
The off-diagonal terms are shown in Figure <a href="#org2ba5482">3</a>.
</p>
<p>
We see that the plant is decoupled at low frequency which indicate that decentralized control may be a good idea. We see that the plant is decoupled at low frequency which indicate that decentralized control may be a good idea.
</p> </p>
<div id="org2ba5482" class="figure"> <div id="org50fb6db" class="figure">
<p><img src="figs/plant_decentralized_off_diagonal.png" alt="plant_decentralized_off_diagonal.png" /> <p><img src="figs/plant_decentralized_L.png" alt="plant_decentralized_L.png" />
</p> </p>
<p><span class="figure-number">Figure 3: </span>Diagonal Elements of the Plant (<a href="./figs/plant_decentralized_off_diagonal.png">png</a>, <a href="./figs/plant_decentralized_off_diagonal.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 2: </span>Obtain Diagonal and off diagonal dynamics (<a href="./figs/plant_decentralized_L.png">png</a>, <a href="./figs/plant_decentralized_L.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org484c823" class="outline-3"> <div id="outline-container-org303d728" class="outline-3">
<h3 id="org484c823"><span class="section-number-3">1.5</span> Controller Design</h3> <h3 id="org303d728"><span class="section-number-3">1.5</span> Controller Design</h3>
<div class="outline-text-3" id="text-1-5"> <div class="outline-text-3" id="text-1-5">
<p> <p>
The controller consists of: The controller consists of:
@ -478,7 +464,7 @@ The controller consists of:
</ul> </ul>
<p> <p>
The obtained loop gains corresponding to the diagonal elements are shown in Figure <a href="#org08e591a">4</a>. The obtained loop gains corresponding to the diagonal elements are shown in Figure <a href="#org08e591a">3</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -491,13 +477,13 @@ Kl = diag(1<span class="org-type">./</span>diag(abs(freqresp(G, wc)))) <span cla
<div id="org08e591a" class="figure"> <div id="org08e591a" class="figure">
<p><img src="figs/loop_gain_decentralized_L.png" alt="loop_gain_decentralized_L.png" /> <p><img src="figs/loop_gain_decentralized_L.png" alt="loop_gain_decentralized_L.png" />
</p> </p>
<p><span class="figure-number">Figure 4: </span>Loop Gain of the diagonal elements (<a href="./figs/loop_gain_decentralized_L.png">png</a>, <a href="./figs/loop_gain_decentralized_L.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 3: </span>Loop Gain of the diagonal elements (<a href="./figs/loop_gain_decentralized_L.png">png</a>, <a href="./figs/loop_gain_decentralized_L.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org013a9ba" class="outline-3"> <div id="outline-container-orgac9e2fb" class="outline-3">
<h3 id="org013a9ba"><span class="section-number-3">1.6</span> Simulation</h3> <h3 id="orgac9e2fb"><span class="section-number-3">1.6</span> Simulation</h3>
<div class="outline-text-3" id="text-1-6"> <div class="outline-text-3" id="text-1-6">
<p> <p>
Let&rsquo;s define some reference path to follow. Let&rsquo;s define some reference path to follow.
@ -516,7 +502,7 @@ references = initializeReferences(stewart, <span class="org-string">'t'</span>,
</div> </div>
<p> <p>
The reference path is shown in Figure <a href="#orga6384f7">5</a>. The reference path is shown in Figure <a href="#orga6384f7">4</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -532,7 +518,7 @@ zlabel(<span class="org-string">'Z [m]'</span>);
<div id="orga6384f7" class="figure"> <div id="orga6384f7" class="figure">
<p><img src="figs/tracking_control_reference_path.png" alt="tracking_control_reference_path.png" /> <p><img src="figs/tracking_control_reference_path.png" alt="tracking_control_reference_path.png" />
</p> </p>
<p><span class="figure-number">Figure 5: </span>Reference path used for Tracking control (<a href="./figs/tracking_control_reference_path.png">png</a>, <a href="./figs/tracking_control_reference_path.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 4: </span>Reference path used for Tracking control (<a href="./figs/tracking_control_reference_path.png">png</a>, <a href="./figs/tracking_control_reference_path.pdf">pdf</a>)</p>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
@ -558,7 +544,7 @@ simout_D = simout;
<h3 id="org974b430"><span class="section-number-3">1.7</span> Results</h3> <h3 id="org974b430"><span class="section-number-3">1.7</span> Results</h3>
<div class="outline-text-3" id="text-1-7"> <div class="outline-text-3" id="text-1-7">
<p> <p>
The reference path and the position of the mobile platform are shown in Figure <a href="#orge497f54">6</a>. The reference path and the position of the mobile platform are shown in Figure <a href="#orge497f54">5</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -577,27 +563,27 @@ zlim([0, <span class="org-constant">inf</span>]);
<div id="orge497f54" class="figure"> <div id="orge497f54" class="figure">
<p><img src="figs/decentralized_control_3d_pos.png" alt="decentralized_control_3d_pos.png" /> <p><img src="figs/decentralized_control_3d_pos.png" alt="decentralized_control_3d_pos.png" />
</p> </p>
<p><span class="figure-number">Figure 6: </span>Reference path and Obtained Position (<a href="./figs/decentralized_control_3d_pos.png">png</a>, <a href="./figs/decentralized_control_3d_pos.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 5: </span>Reference path and Obtained Position (<a href="./figs/decentralized_control_3d_pos.png">png</a>, <a href="./figs/decentralized_control_3d_pos.pdf">pdf</a>)</p>
</div> </div>
<div id="org1ac9124" class="figure"> <div id="org1ac9124" class="figure">
<p><img src="figs/decentralized_control_Ex.png" alt="decentralized_control_Ex.png" /> <p><img src="figs/decentralized_control_Ex.png" alt="decentralized_control_Ex.png" />
</p> </p>
<p><span class="figure-number">Figure 7: </span>Position error \(\bm{\epsilon}_\mathcal{X}\) (<a href="./figs/decentralized_control_Ex.png">png</a>, <a href="./figs/decentralized_control_Ex.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 6: </span>Position error \(\bm{\epsilon}_\mathcal{X}\) (<a href="./figs/decentralized_control_Ex.png">png</a>, <a href="./figs/decentralized_control_Ex.pdf">pdf</a>)</p>
</div> </div>
<div id="org10eb8ae" class="figure"> <div id="org10eb8ae" class="figure">
<p><img src="figs/decentralized_control_El.png" alt="decentralized_control_El.png" /> <p><img src="figs/decentralized_control_El.png" alt="decentralized_control_El.png" />
</p> </p>
<p><span class="figure-number">Figure 8: </span>Position error \(\bm{\epsilon}_\mathcal{L}\) (<a href="./figs/decentralized_control_El.png">png</a>, <a href="./figs/decentralized_control_El.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 7: </span>Position error \(\bm{\epsilon}_\mathcal{L}\) (<a href="./figs/decentralized_control_El.png">png</a>, <a href="./figs/decentralized_control_El.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org19a6760" class="outline-3"> <div id="outline-container-org8f3d960" class="outline-3">
<h3 id="org19a6760"><span class="section-number-3">1.8</span> Conclusion</h3> <h3 id="org8f3d960"><span class="section-number-3">1.8</span> Conclusion</h3>
<div class="outline-text-3" id="text-1-8"> <div class="outline-text-3" id="text-1-8">
<p> <p>
Such control architecture is easy to implement and give good results. Such control architecture is easy to implement and give good results.
@ -618,11 +604,11 @@ However, as \(\mathcal{X}\) is not directly measured, it is possible that import
<a id="org48604d1"></a> <a id="org48604d1"></a>
</p> </p>
</div> </div>
<div id="outline-container-orga5acf65" class="outline-3"> <div id="outline-container-org373826d" class="outline-3">
<h3 id="orga5acf65"><span class="section-number-3">2.1</span> Control Schematic</h3> <h3 id="org373826d"><span class="section-number-3">2.1</span> Control Schematic</h3>
<div class="outline-text-3" id="text-2-1"> <div class="outline-text-3" id="text-2-1">
<p> <p>
The centralized controller takes the position error \(\bm{\epsilon}_\mathcal{X}\) as an inputs and generate actuator forces \(\bm{\tau}\) (see Figure <a href="#org97ec686">9</a>). The centralized controller takes the position error \(\bm{\epsilon}_\mathcal{X}\) as an inputs and generate actuator forces \(\bm{\tau}\) (see Figure <a href="#org97ec686">8</a>).
The signals are: The signals are:
</p> </p>
<ul class="org-ul"> <ul class="org-ul">
@ -636,7 +622,7 @@ The signals are:
<div id="org97ec686" class="figure"> <div id="org97ec686" class="figure">
<p><img src="figs/centralized_reference_tracking.png" alt="centralized_reference_tracking.png" /> <p><img src="figs/centralized_reference_tracking.png" alt="centralized_reference_tracking.png" />
</p> </p>
<p><span class="figure-number">Figure 9: </span>Centralized Controller</p> <p><span class="figure-number">Figure 8: </span>Centralized Controller</p>
</div> </div>
<p> <p>
@ -649,7 +635,7 @@ We can think of two ways to make the plant more diagonal that are described in s
<div class="important"> <div class="important">
<p> <p>
Note here that the subtraction shown in Figure <a href="#org97ec686">9</a> is not a real subtraction. Note here that the subtraction shown in Figure <a href="#org97ec686">8</a> is not a real subtraction.
It is indeed a more complex computation explained in section <a href="#org5f61540">5</a>. It is indeed a more complex computation explained in section <a href="#org5f61540">5</a>.
</p> </p>
@ -657,8 +643,8 @@ It is indeed a more complex computation explained in section <a href="#org5f6154
</div> </div>
</div> </div>
<div id="outline-container-org0250b01" class="outline-3"> <div id="outline-container-orgdb540d4" class="outline-3">
<h3 id="org0250b01"><span class="section-number-3">2.2</span> Initialize the Stewart platform</h3> <h3 id="orgdb540d4"><span class="section-number-3">2.2</span> Initialize the Stewart platform</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% Stewart Platform</span> <pre class="src src-matlab"><span class="org-comment">% Stewart Platform</span>
@ -689,8 +675,8 @@ references = initializeReferences(stewart);
</div> </div>
</div> </div>
<div id="outline-container-orgf2a4e09" class="outline-3"> <div id="outline-container-org7e2bbea" class="outline-3">
<h3 id="orgf2a4e09"><span class="section-number-3">2.3</span> Identification of the plant</h3> <h3 id="org7e2bbea"><span class="section-number-3">2.3</span> Identification of the plant</h3>
<div class="outline-text-3" id="text-2-3"> <div class="outline-text-3" id="text-2-3">
<p> <p>
Let&rsquo;s identify the transfer function from \(\bm{\tau}\) to \(\bm{\mathcal{X}}\). Let&rsquo;s identify the transfer function from \(\bm{\tau}\) to \(\bm{\mathcal{X}}\).
@ -720,13 +706,13 @@ G.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string">'
<a id="org31fd942"></a> <a id="org31fd942"></a>
</p> </p>
</div> </div>
<div id="outline-container-org8e1e62c" class="outline-4"> <div id="outline-container-org42dc407" class="outline-4">
<h4 id="org8e1e62c"><span class="section-number-4">2.4.1</span> Control Architecture</h4> <h4 id="org42dc407"><span class="section-number-4">2.4.1</span> Control Architecture</h4>
<div class="outline-text-4" id="text-2-4-1"> <div class="outline-text-4" id="text-2-4-1">
<p> <p>
The pose error \(\bm{\epsilon}_\mathcal{X}\) is first converted in the frame of the leg by using the Jacobian matrix. The pose error \(\bm{\epsilon}_\mathcal{X}\) is first converted in the frame of the leg by using the Jacobian matrix.
Then a diagonal controller \(\bm{K}_\mathcal{L}\) is designed. Then a diagonal controller \(\bm{K}_\mathcal{L}\) is designed.
The final implemented controller is \(\bm{K} = \bm{K}_\mathcal{L} \cdot \bm{J}\) as shown in Figure <a href="#orgb1f5ad2">10</a> The final implemented controller is \(\bm{K} = \bm{K}_\mathcal{L} \cdot \bm{J}\) as shown in Figure <a href="#orgb1f5ad2">9</a>
</p> </p>
<p> <p>
@ -737,16 +723,16 @@ Note here that the transformation from the pose error \(\bm{\epsilon}_\mathcal{X
<div id="orgb1f5ad2" class="figure"> <div id="orgb1f5ad2" class="figure">
<p><img src="figs/centralized_reference_tracking_L.png" alt="centralized_reference_tracking_L.png" /> <p><img src="figs/centralized_reference_tracking_L.png" alt="centralized_reference_tracking_L.png" />
</p> </p>
<p><span class="figure-number">Figure 10: </span>Controller in the frame of the legs</p> <p><span class="figure-number">Figure 9: </span>Controller in the frame of the legs</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org133ca61" class="outline-4"> <div id="outline-container-org33774e9" class="outline-4">
<h4 id="org133ca61"><span class="section-number-4">2.4.2</span> Plant Analysis</h4> <h4 id="org33774e9"><span class="section-number-4">2.4.2</span> Plant Analysis</h4>
<div class="outline-text-4" id="text-2-4-2"> <div class="outline-text-4" id="text-2-4-2">
<p> <p>
We now multiply the plant by the Jacobian matrix as shown in Figure <a href="#orgb1f5ad2">10</a> to obtain a more diagonal plant. We now multiply the plant by the Jacobian matrix as shown in Figure <a href="#orgb1f5ad2">9</a> to obtain a more diagonal plant.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -755,27 +741,17 @@ Gl.OutputName = {<span class="org-string">'D1'</span>, <span class="org-string"
</pre> </pre>
</div> </div>
<div id="org6658ce5" class="figure">
<p><img src="figs/plant_centralized_diagonal_L.png" alt="plant_centralized_diagonal_L.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Diagonal Elements of the plant \(\bm{J} \bm{G}\) (<a href="./figs/plant_centralized_diagonal_L.png">png</a>, <a href="./figs/plant_centralized_diagonal_L.pdf">pdf</a>)</p>
</div>
<p> <p>
All the diagonal elements are identical. The bode plot of the plant is shown in Figure <a href="#org6c8d99f">10</a>.
We can see that the diagonal elements are identical.
This will simplify the design of the controller as all the elements of the diagonal controller can be made identical. This will simplify the design of the controller as all the elements of the diagonal controller can be made identical.
</p> </p>
<p>
The off-diagonal terms of the controller are shown in Figure <a href="#orgba050e4">12</a>.
</p>
<div id="org6c8d99f" class="figure">
<div id="orgba050e4" class="figure"> <p><img src="figs/plant_centralized_L.png" alt="plant_centralized_L.png" />
<p><img src="figs/plant_centralized_off_diagonal_L.png" alt="plant_centralized_off_diagonal_L.png" />
</p> </p>
<p><span class="figure-number">Figure 12: </span>Off Diagonal Elements of the plant \(\bm{J} \bm{G}\) (<a href="./figs/plant_centralized_off_diagonal_L.png">png</a>, <a href="./figs/plant_centralized_off_diagonal_L.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 10: </span>Diagonal and off-diagonal elements of the plant \(\bm{K}\bm{G}\) (<a href="./figs/plant_centralized_L.png">png</a>, <a href="./figs/plant_centralized_L.pdf">pdf</a>)</p>
</div> </div>
<p> <p>
@ -793,8 +769,8 @@ Thus \(J \cdot G(\omega = 0) = J \cdot \frac{\delta\bm{\mathcal{X}}}{\delta\bm{\
</div> </div>
</div> </div>
<div id="outline-container-org6afc297" class="outline-4"> <div id="outline-container-orgc7ddab1" class="outline-4">
<h4 id="org6afc297"><span class="section-number-4">2.4.3</span> Controller Design</h4> <h4 id="orgc7ddab1"><span class="section-number-4">2.4.3</span> Controller Design</h4>
<div class="outline-text-4" id="text-2-4-3"> <div class="outline-text-4" id="text-2-4-3">
<p> <p>
The controller consists of: The controller consists of:
@ -805,7 +781,7 @@ The controller consists of:
</ul> </ul>
<p> <p>
The obtained loop gains corresponding to the diagonal elements are shown in Figure <a href="#orga803083">13</a>. The obtained loop gains corresponding to the diagonal elements are shown in Figure <a href="#orga803083">11</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -818,7 +794,7 @@ Kl = diag(1<span class="org-type">./</span>diag(abs(freqresp(Gl, wc)))) <span cl
<div id="orga803083" class="figure"> <div id="orga803083" class="figure">
<p><img src="figs/loop_gain_centralized_L.png" alt="loop_gain_centralized_L.png" /> <p><img src="figs/loop_gain_centralized_L.png" alt="loop_gain_centralized_L.png" />
</p> </p>
<p><span class="figure-number">Figure 13: </span>Loop Gain of the diagonal elements (<a href="./figs/loop_gain_centralized_L.png">png</a>, <a href="./figs/loop_gain_centralized_L.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 11: </span>Loop Gain of the diagonal elements (<a href="./figs/loop_gain_centralized_L.png">png</a>, <a href="./figs/loop_gain_centralized_L.pdf">pdf</a>)</p>
</div> </div>
<p> <p>
@ -831,8 +807,8 @@ The controller \(\bm{K} = \bm{K}_\mathcal{L} \bm{J}\) is computed.
</div> </div>
</div> </div>
<div id="outline-container-orgdb24c37" class="outline-4"> <div id="outline-container-org3021cf3" class="outline-4">
<h4 id="orgdb24c37"><span class="section-number-4">2.4.4</span> Simulation</h4> <h4 id="org3021cf3"><span class="section-number-4">2.4.4</span> Simulation</h4>
<div class="outline-text-4" id="text-2-4-4"> <div class="outline-text-4" id="text-2-4-4">
<p> <p>
We specify the reference path to follow. We specify the reference path to follow.
@ -876,11 +852,11 @@ save(<span class="org-string">'./mat/control_tracking.mat'</span>, <span class="
<a id="orgfd201c3"></a> <a id="orgfd201c3"></a>
</p> </p>
</div> </div>
<div id="outline-container-org0f41ce9" class="outline-4"> <div id="outline-container-org185190b" class="outline-4">
<h4 id="org0f41ce9"><span class="section-number-4">2.5.1</span> Control Architecture</h4> <h4 id="org185190b"><span class="section-number-4">2.5.1</span> Control Architecture</h4>
<div class="outline-text-4" id="text-2-5-1"> <div class="outline-text-4" id="text-2-5-1">
<p> <p>
A diagonal controller \(\bm{K}_\mathcal{X}\) take the pose error \(\bm{\epsilon}_\mathcal{X}\) and generate cartesian forces \(\bm{\mathcal{F}}\) that are then converted to actuators forces using the Jacobian as shown in Figure e <a href="#org6b158db">14</a>. A diagonal controller \(\bm{K}_\mathcal{X}\) take the pose error \(\bm{\epsilon}_\mathcal{X}\) and generate cartesian forces \(\bm{\mathcal{F}}\) that are then converted to actuators forces using the Jacobian as shown in Figure e <a href="#org6b158db">12</a>.
</p> </p>
<p> <p>
@ -891,16 +867,16 @@ The final implemented controller is \(\bm{K} = \bm{J}^{-T} \cdot \bm{K}_\mathcal
<div id="org6b158db" class="figure"> <div id="org6b158db" class="figure">
<p><img src="figs/centralized_reference_tracking_X.png" alt="centralized_reference_tracking_X.png" /> <p><img src="figs/centralized_reference_tracking_X.png" alt="centralized_reference_tracking_X.png" />
</p> </p>
<p><span class="figure-number">Figure 14: </span>Controller in the cartesian frame</p> <p><span class="figure-number">Figure 12: </span>Controller in the cartesian frame</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org9691244" class="outline-4"> <div id="outline-container-orgac4e8f3" class="outline-4">
<h4 id="org9691244"><span class="section-number-4">2.5.2</span> Plant Analysis</h4> <h4 id="orgac4e8f3"><span class="section-number-4">2.5.2</span> Plant Analysis</h4>
<div class="outline-text-4" id="text-2-5-2"> <div class="outline-text-4" id="text-2-5-2">
<p> <p>
We now multiply the plant by the Jacobian matrix as shown in Figure <a href="#org6b158db">14</a> to obtain a more diagonal plant. We now multiply the plant by the Jacobian matrix as shown in Figure <a href="#org6b158db">12</a> to obtain a more diagonal plant.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -910,10 +886,10 @@ Gx.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">
</div> </div>
<div id="org2b61181" class="figure"> <div id="org0173211" class="figure">
<p><img src="figs/plant_centralized_diagonal_X.png" alt="plant_centralized_diagonal_X.png" /> <p><img src="figs/plant_centralized_X.png" alt="plant_centralized_X.png" />
</p> </p>
<p><span class="figure-number">Figure 15: </span>Diagonal Elements of the plant \(\bm{G} \bm{J}^{-T}\) (<a href="./figs/plant_centralized_diagonal_X.png">png</a>, <a href="./figs/plant_centralized_diagonal_X.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 13: </span>Diagonal and off-diagonal elements of the plant \(\bm{G} \bm{J}^{-T}\) (<a href="./figs/plant_centralized_X.png">png</a>, <a href="./figs/plant_centralized_X.pdf">pdf</a>)</p>
</div> </div>
<p> <p>
@ -922,13 +898,6 @@ The resonances of the system are &ldquo;decoupled&rdquo;.
For instance, the vertical resonance of the system is only present on the diagonal term corresponding to \(D_z/\mathcal{F}_z\). For instance, the vertical resonance of the system is only present on the diagonal term corresponding to \(D_z/\mathcal{F}_z\).
</p> </p>
<div id="org1ff5b9c" class="figure">
<p><img src="figs/plant_centralized_off_diagonal_X.png" alt="plant_centralized_off_diagonal_X.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Off Diagonal Elements of the plant \(\bm{G} \bm{J}^{-T}\) (<a href="./figs/plant_centralized_off_diagonal_X.png">png</a>, <a href="./figs/plant_centralized_off_diagonal_X.pdf">pdf</a>)</p>
</div>
<p> <p>
Here the system is almost decoupled at all frequencies except for the transfer functions \(\frac{R_y}{\mathcal{F}_x}\) and \(\frac{R_x}{\mathcal{F}_y}\). Here the system is almost decoupled at all frequencies except for the transfer functions \(\frac{R_y}{\mathcal{F}_x}\) and \(\frac{R_x}{\mathcal{F}_y}\).
</p> </p>
@ -1019,8 +988,8 @@ This control architecture can also give a dynamically decoupled plant if the Cen
</div> </div>
</div> </div>
<div id="outline-container-org7f32f8e" class="outline-4"> <div id="outline-container-org87c1a48" class="outline-4">
<h4 id="org7f32f8e"><span class="section-number-4">2.5.3</span> Controller Design</h4> <h4 id="org87c1a48"><span class="section-number-4">2.5.3</span> Controller Design</h4>
<div class="outline-text-4" id="text-2-5-3"> <div class="outline-text-4" id="text-2-5-3">
<p> <p>
The controller consists of: The controller consists of:
@ -1031,7 +1000,7 @@ The controller consists of:
</ul> </ul>
<p> <p>
The obtained loop gains corresponding to the diagonal elements are shown in Figure <a href="#org9051c86">17</a>. The obtained loop gains corresponding to the diagonal elements are shown in Figure <a href="#org9051c86">14</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -1044,7 +1013,7 @@ Kx = diag(1<span class="org-type">./</span>diag(abs(freqresp(Gx, wc)))) <span cl
<div id="org9051c86" class="figure"> <div id="org9051c86" class="figure">
<p><img src="figs/loop_gain_centralized_X.png" alt="loop_gain_centralized_X.png" /> <p><img src="figs/loop_gain_centralized_X.png" alt="loop_gain_centralized_X.png" />
</p> </p>
<p><span class="figure-number">Figure 17: </span>Loop Gain of the diagonal elements (<a href="./figs/loop_gain_centralized_X.png">png</a>, <a href="./figs/loop_gain_centralized_X.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 14: </span>Loop Gain of the diagonal elements (<a href="./figs/loop_gain_centralized_X.png">png</a>, <a href="./figs/loop_gain_centralized_X.pdf">pdf</a>)</p>
</div> </div>
<p> <p>
@ -1057,8 +1026,8 @@ The controller \(\bm{K} = \bm{J}^{-T} \bm{K}_\mathcal{X}\) is computed.
</div> </div>
</div> </div>
<div id="outline-container-orgac9e2fb" class="outline-4"> <div id="outline-container-org73875ca" class="outline-4">
<h4 id="orgac9e2fb"><span class="section-number-4">2.5.4</span> Simulation</h4> <h4 id="org73875ca"><span class="section-number-4">2.5.4</span> Simulation</h4>
<div class="outline-text-4" id="text-2-5-4"> <div class="outline-text-4" id="text-2-5-4">
<p> <p>
We specify the reference path to follow. We specify the reference path to follow.
@ -1102,8 +1071,8 @@ save(<span class="org-string">'./mat/control_tracking.mat'</span>, <span class="
<a id="org789ba4a"></a> <a id="org789ba4a"></a>
</p> </p>
</div> </div>
<div id="outline-container-org42dc407" class="outline-4"> <div id="outline-container-orgdeee29c" class="outline-4">
<h4 id="org42dc407"><span class="section-number-4">2.6.1</span> Control Architecture</h4> <h4 id="orgdeee29c"><span class="section-number-4">2.6.1</span> Control Architecture</h4>
<div class="outline-text-4" id="text-2-6-1"> <div class="outline-text-4" id="text-2-6-1">
<p> <p>
The plant \(\bm{G}\) is pre-multiply by \(\bm{G}^{-1}(\omega = 0)\) such that the &ldquo;shaped plant&rdquo; \(\bm{G}_0 = \bm{G} \bm{G}^{-1}(\omega = 0)\) is diagonal at low frequency. The plant \(\bm{G}\) is pre-multiply by \(\bm{G}^{-1}(\omega = 0)\) such that the &ldquo;shaped plant&rdquo; \(\bm{G}_0 = \bm{G} \bm{G}^{-1}(\omega = 0)\) is diagonal at low frequency.
@ -1114,24 +1083,24 @@ Then a diagonal controller \(\bm{K}_0\) is designed.
</p> </p>
<p> <p>
The control architecture is shown in Figure <a href="#orgb226e44">18</a>. The control architecture is shown in Figure <a href="#orgb226e44">15</a>.
</p> </p>
<div id="orgb226e44" class="figure"> <div id="orgb226e44" class="figure">
<p><img src="figs/centralized_reference_tracking_S.png" alt="centralized_reference_tracking_S.png" /> <p><img src="figs/centralized_reference_tracking_S.png" alt="centralized_reference_tracking_S.png" />
</p> </p>
<p><span class="figure-number">Figure 18: </span>Static Decoupling of the Plant</p> <p><span class="figure-number">Figure 15: </span>Static Decoupling of the Plant</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org346704a" class="outline-4"> <div id="outline-container-org4c98210" class="outline-4">
<h4 id="org346704a"><span class="section-number-4">2.6.2</span> Plant Analysis</h4> <h4 id="org4c98210"><span class="section-number-4">2.6.2</span> Plant Analysis</h4>
<div class="outline-text-4" id="text-2-6-2"> <div class="outline-text-4" id="text-2-6-2">
<p> <p>
The plant is pre-multiplied by \(\bm{G}^{-1}(\omega = 0)\). The plant is pre-multiplied by \(\bm{G}^{-1}(\omega = 0)\).
The diagonal elements of the shaped plant are shown in Figure <a href="#orgc15aa83">19</a>. The diagonal and off-diagonal elements of the shaped plant are shown in Figure <a href="#org0b73eca">16</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -1140,23 +1109,16 @@ The diagonal elements of the shaped plant are shown in Figure <a href="#orgc15aa
</div> </div>
<div id="orgc15aa83" class="figure"> <div id="org0b73eca" class="figure">
<p><img src="figs/plant_centralized_diagonal_SD.png" alt="plant_centralized_diagonal_SD.png" /> <p><img src="figs/plant_centralized_SD.png" alt="plant_centralized_SD.png" />
</p> </p>
<p><span class="figure-number">Figure 19: </span>Diagonal Elements of the plant \(\bm{G} \bm{G}^{-1}(\omega = 0)\) (<a href="./figs/plant_centralized_diagonal_SD.png">png</a>, <a href="./figs/plant_centralized_diagonal_SD.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 16: </span>Diagonal and off-diagonal elements of the plant \(\bm{G} \bm{G}^{-1}(\omega = 0)\) (<a href="./figs/plant_centralized_SD.png">png</a>, <a href="./figs/plant_centralized_SD.pdf">pdf</a>)</p>
</div>
<div id="orga6b8b41" class="figure">
<p><img src="figs/plant_centralized_off_diagonal_SD.png" alt="plant_centralized_off_diagonal_SD.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Off Diagonal Elements of the plant \(\bm{G} \bm{J}^{-T}\) (<a href="./figs/plant_centralized_off_diagonal_SD.png">png</a>, <a href="./figs/plant_centralized_off_diagonal_SD.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org8b2a544" class="outline-4"> <div id="outline-container-orgbf66d4c" class="outline-4">
<h4 id="org8b2a544"><span class="section-number-4">2.6.3</span> Controller Design</h4> <h4 id="orgbf66d4c"><span class="section-number-4">2.6.3</span> Controller Design</h4>
<div class="outline-text-4" id="text-2-6-3"> <div class="outline-text-4" id="text-2-6-3">
<p> <p>
We have that: We have that:
@ -1188,7 +1150,7 @@ We have that \(\bm{K}_0(s)\) commutes with \(\bm{G}^{-1}(\omega = 0)\) and thus
<div id="orgf4c7f15" class="figure"> <div id="orgf4c7f15" class="figure">
<p><img src="figs/centralized_control_comp_K.png" alt="centralized_control_comp_K.png" /> <p><img src="figs/centralized_control_comp_K.png" alt="centralized_control_comp_K.png" />
</p> </p>
<p><span class="figure-number">Figure 21: </span>Comparison of the MIMO controller \(\bm{K}\) for both centralized architectures (<a href="./figs/centralized_control_comp_K.png">png</a>, <a href="./figs/centralized_control_comp_K.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 17: </span>Comparison of the MIMO controller \(\bm{K}\) for both centralized architectures (<a href="./figs/centralized_control_comp_K.png">png</a>, <a href="./figs/centralized_control_comp_K.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
@ -1197,11 +1159,11 @@ We have that \(\bm{K}_0(s)\) commutes with \(\bm{G}^{-1}(\omega = 0)\) and thus
<h4 id="org23ae479"><span class="section-number-4">2.7.2</span> Simulation Results</h4> <h4 id="org23ae479"><span class="section-number-4">2.7.2</span> Simulation Results</h4>
<div class="outline-text-4" id="text-2-7-2"> <div class="outline-text-4" id="text-2-7-2">
<p> <p>
The position error \(\bm{\epsilon}_\mathcal{X}\) for both centralized architecture are shown in Figure <a href="#org9fa8c8a">22</a>. The position error \(\bm{\epsilon}_\mathcal{X}\) for both centralized architecture are shown in Figure <a href="#org9fa8c8a">18</a>.
</p> </p>
<p> <p>
Based on Figure <a href="#org9fa8c8a">22</a>, we can see that: Based on Figure <a href="#org9fa8c8a">18</a>, we can see that:
</p> </p>
<ul class="org-ul"> <ul class="org-ul">
<li>There is some tracking error \(\epsilon_x\)</li> <li>There is some tracking error \(\epsilon_x\)</li>
@ -1216,14 +1178,14 @@ This error is much lower when using the diagonal control in the frame of the leg
<div id="org9fa8c8a" class="figure"> <div id="org9fa8c8a" class="figure">
<p><img src="figs/centralized_control_comp_Ex.png" alt="centralized_control_comp_Ex.png" /> <p><img src="figs/centralized_control_comp_Ex.png" alt="centralized_control_comp_Ex.png" />
</p> </p>
<p><span class="figure-number">Figure 22: </span>Comparison of the position error \(\bm{\epsilon}_\mathcal{X}\) for both centralized controllers (<a href="./figs/centralized_control_comp_Ex.png">png</a>, <a href="./figs/centralized_control_comp_Ex.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 18: </span>Comparison of the position error \(\bm{\epsilon}_\mathcal{X}\) for both centralized controllers (<a href="./figs/centralized_control_comp_Ex.png">png</a>, <a href="./figs/centralized_control_comp_Ex.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgc7e00b3" class="outline-3"> <div id="outline-container-orgd2764a2" class="outline-3">
<h3 id="orgc7e00b3"><span class="section-number-3">2.8</span> Conclusion</h3> <h3 id="orgd2764a2"><span class="section-number-3">2.8</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-8"> <div class="outline-text-3" id="text-2-8">
<p> <p>
Both control architecture gives similar results even tough the control in the Leg&rsquo;s frame gives slightly better results. Both control architecture gives similar results even tough the control in the Leg&rsquo;s frame gives slightly better results.
@ -1306,11 +1268,11 @@ Thus, this method should be quite robust against parameter variation (e.g. the p
<a id="org14e3e5f"></a> <a id="org14e3e5f"></a>
</p> </p>
</div> </div>
<div id="outline-container-orgaf4f125" class="outline-3"> <div id="outline-container-org539565c" class="outline-3">
<h3 id="orgaf4f125"><span class="section-number-3">3.1</span> Control Schematic</h3> <h3 id="org539565c"><span class="section-number-3">3.1</span> Control Schematic</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<p> <p>
Let&rsquo;s consider the control schematic shown in Figure <a href="#org3a1b1db">23</a>. Let&rsquo;s consider the control schematic shown in Figure <a href="#org3a1b1db">19</a>.
</p> </p>
<p> <p>
@ -1343,13 +1305,13 @@ This second loop is responsible for the reference tracking.
<div id="org3a1b1db" class="figure"> <div id="org3a1b1db" class="figure">
<p><img src="figs/hybrid_reference_tracking.png" alt="hybrid_reference_tracking.png" /> <p><img src="figs/hybrid_reference_tracking.png" alt="hybrid_reference_tracking.png" />
</p> </p>
<p><span class="figure-number">Figure 23: </span>Hybrid Control Architecture</p> <p><span class="figure-number">Figure 19: </span>Hybrid Control Architecture</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org5efa5dc" class="outline-3"> <div id="outline-container-orga9bdd4e" class="outline-3">
<h3 id="org5efa5dc"><span class="section-number-3">3.2</span> Initialize the Stewart platform</h3> <h3 id="orga9bdd4e"><span class="section-number-3">3.2</span> Initialize the Stewart platform</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-3-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% Stewart Platform</span> <pre class="src src-matlab"><span class="org-comment">% Stewart Platform</span>
@ -1384,8 +1346,8 @@ references = initializeReferences(stewart);
<h3 id="org3274a98"><span class="section-number-3">3.3</span> First Control Loop - \(\bm{K}_\mathcal{L}\)</h3> <h3 id="org3274a98"><span class="section-number-3">3.3</span> First Control Loop - \(\bm{K}_\mathcal{L}\)</h3>
<div class="outline-text-3" id="text-3-3"> <div class="outline-text-3" id="text-3-3">
</div> </div>
<div id="outline-container-orgfb552d7" class="outline-4"> <div id="outline-container-orgd69b37c" class="outline-4">
<h4 id="orgfb552d7"><span class="section-number-4">3.3.1</span> Identification</h4> <h4 id="orgd69b37c"><span class="section-number-4">3.3.1</span> Identification</h4>
<div class="outline-text-4" id="text-3-3-1"> <div class="outline-text-4" id="text-3-3-1">
<p> <p>
Let&rsquo;s identify the transfer function from \(\bm{\tau}\) to \(\bm{L}\). Let&rsquo;s identify the transfer function from \(\bm{\tau}\) to \(\bm{L}\).
@ -1408,31 +1370,24 @@ Gl.OutputName = {<span class="org-string">'L1'</span>, <span class="org-string">
</div> </div>
</div> </div>
<div id="outline-container-orge84aa66" class="outline-4"> <div id="outline-container-org2a634da" class="outline-4">
<h4 id="orge84aa66"><span class="section-number-4">3.3.2</span> Obtained Plant</h4> <h4 id="org2a634da"><span class="section-number-4">3.3.2</span> Obtained Plant</h4>
<div class="outline-text-4" id="text-3-3-2"> <div class="outline-text-4" id="text-3-3-2">
<p> <p>
The diagonal elements of the plant are shown in Figure <a href="#org687a922">24</a> while the off diagonal terms are shown in Figure <a href="#orge568b8a">25</a>. The obtained plant is shown in Figure <a href="#orgf627577">20</a>.
</p> </p>
<div id="org687a922" class="figure"> <div id="orgf627577" class="figure">
<p><img src="figs/hybrid_control_Kl_plant_diagonal.png" alt="hybrid_control_Kl_plant_diagonal.png" /> <p><img src="figs/hybrid_control_Kl_plant.png" alt="hybrid_control_Kl_plant.png" />
</p> </p>
<p><span class="figure-number">Figure 24: </span>Diagonal elements of the plant for the design of \(\bm{K}_\mathcal{L}\) (<a href="./figs/hybrid_control_Kl_plant_diagonal.png">png</a>, <a href="./figs/hybrid_control_Kl_plant_diagonal.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 20: </span>Diagonal and off-diagonal elements of the plant for the design of \(\bm{K}_\mathcal{L}\) (<a href="./figs/hybrid_control_Kl_plant.png">png</a>, <a href="./figs/hybrid_control_Kl_plant.pdf">pdf</a>)</p>
</div>
<div id="orge568b8a" class="figure">
<p><img src="figs/hybrid_control_Kl_plant_off_diagonal.png" alt="hybrid_control_Kl_plant_off_diagonal.png" />
</p>
<p><span class="figure-number">Figure 25: </span>Off-diagonal elements of the plant for the design of \(\bm{K}_\mathcal{L}\) (<a href="./figs/hybrid_control_Kl_plant_off_diagonal.png">png</a>, <a href="./figs/hybrid_control_Kl_plant_off_diagonal.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgfeef351" class="outline-4"> <div id="outline-container-org23695fa" class="outline-4">
<h4 id="orgfeef351"><span class="section-number-4">3.3.3</span> Controller Design</h4> <h4 id="org23695fa"><span class="section-number-4">3.3.3</span> Controller Design</h4>
<div class="outline-text-4" id="text-3-3-3"> <div class="outline-text-4" id="text-3-3-3">
<p> <p>
We apply a decentralized (diagonal) direct velocity feedback. We apply a decentralized (diagonal) direct velocity feedback.
@ -1442,7 +1397,7 @@ The gain of the controller is chosen such that the resonances are critically dam
</p> </p>
<p> <p>
The obtain loop gain is shown in Figure <a href="#orgb74befe">26</a>. The obtain loop gain is shown in Figure <a href="#orgb74befe">21</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -1454,7 +1409,7 @@ The obtain loop gain is shown in Figure <a href="#orgb74befe">26</a>.
<div id="orgb74befe" class="figure"> <div id="orgb74befe" class="figure">
<p><img src="figs/hybrid_control_Kl_loop_gain.png" alt="hybrid_control_Kl_loop_gain.png" /> <p><img src="figs/hybrid_control_Kl_loop_gain.png" alt="hybrid_control_Kl_loop_gain.png" />
</p> </p>
<p><span class="figure-number">Figure 26: </span>Obtain Loop Gain for the DVF control loop (<a href="./figs/hybrid_control_Kl_loop_gain.png">png</a>, <a href="./figs/hybrid_control_Kl_loop_gain.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 21: </span>Obtain Loop Gain for the DVF control loop (<a href="./figs/hybrid_control_Kl_loop_gain.png">png</a>, <a href="./figs/hybrid_control_Kl_loop_gain.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
@ -1464,8 +1419,8 @@ The obtain loop gain is shown in Figure <a href="#orgb74befe">26</a>.
<h3 id="org8440c0b"><span class="section-number-3">3.4</span> Second Control Loop - \(\bm{K}_\mathcal{X}\)</h3> <h3 id="org8440c0b"><span class="section-number-3">3.4</span> Second Control Loop - \(\bm{K}_\mathcal{X}\)</h3>
<div class="outline-text-3" id="text-3-4"> <div class="outline-text-3" id="text-3-4">
</div> </div>
<div id="outline-container-orgd69b37c" class="outline-4"> <div id="outline-container-orgeec6c35" class="outline-4">
<h4 id="orgd69b37c"><span class="section-number-4">3.4.1</span> Identification</h4> <h4 id="orgeec6c35"><span class="section-number-4">3.4.1</span> Identification</h4>
<div class="outline-text-4" id="text-3-4-1"> <div class="outline-text-4" id="text-3-4-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Kx = tf(zeros(6)); <pre class="src src-matlab">Kx = tf(zeros(6));
@ -1492,8 +1447,8 @@ G.OutputName = {<span class="org-string">'Dx'</span>, <span class="org-string">'
</div> </div>
</div> </div>
<div id="outline-container-org2a634da" class="outline-4"> <div id="outline-container-org57836ee" class="outline-4">
<h4 id="org2a634da"><span class="section-number-4">3.4.2</span> Obtained Plant</h4> <h4 id="org57836ee"><span class="section-number-4">3.4.2</span> Obtained Plant</h4>
<div class="outline-text-4" id="text-3-4-2"> <div class="outline-text-4" id="text-3-4-2">
<p> <p>
We use the Jacobian matrix to apply forces in the cartesian frame. We use the Jacobian matrix to apply forces in the cartesian frame.
@ -1505,19 +1460,19 @@ Gx.InputName = {<span class="org-string">'Fx'</span>, <span class="org-string">
</div> </div>
<p> <p>
The obtained plant is shown in Figure <a href="#org2517e3d">27</a>. The obtained plant is shown in Figure <a href="#org2517e3d">22</a>.
</p> </p>
<div id="org2517e3d" class="figure"> <div id="org2517e3d" class="figure">
<p><img src="figs/hybrid_control_Kx_plant.png" alt="hybrid_control_Kx_plant.png" /> <p><img src="figs/hybrid_control_Kx_plant.png" alt="hybrid_control_Kx_plant.png" />
</p> </p>
<p><span class="figure-number">Figure 27: </span>Diagonal and Off-diagonal elements of the plant for the design of \(\bm{K}_\mathcal{L}\) (<a href="./figs/hybrid_control_Kx_plant.png">png</a>, <a href="./figs/hybrid_control_Kx_plant.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 22: </span>Diagonal and Off-diagonal elements of the plant for the design of \(\bm{K}_\mathcal{L}\) (<a href="./figs/hybrid_control_Kx_plant.png">png</a>, <a href="./figs/hybrid_control_Kx_plant.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org303d728" class="outline-4"> <div id="outline-container-orgcebb0d5" class="outline-4">
<h4 id="org303d728"><span class="section-number-4">3.4.3</span> Controller Design</h4> <h4 id="orgcebb0d5"><span class="section-number-4">3.4.3</span> Controller Design</h4>
<div class="outline-text-4" id="text-3-4-3"> <div class="outline-text-4" id="text-3-4-3">
<p> <p>
The controller consists of: The controller consists of:
@ -1545,7 +1500,7 @@ Kx = Kx<span class="org-type">.*</span>diag(1<span class="org-type">./</span>dia
<div id="org30ad867" class="figure"> <div id="org30ad867" class="figure">
<p><img src="figs/hybrid_control_Kx_loop_gain.png" alt="hybrid_control_Kx_loop_gain.png" /> <p><img src="figs/hybrid_control_Kx_loop_gain.png" alt="hybrid_control_Kx_loop_gain.png" />
</p> </p>
<p><span class="figure-number">Figure 28: </span>Obtained Loop Gain for the controller \(\bm{K}_\mathcal{X}\) (<a href="./figs/hybrid_control_Kx_loop_gain.png">png</a>, <a href="./figs/hybrid_control_Kx_loop_gain.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 23: </span>Obtained Loop Gain for the controller \(\bm{K}_\mathcal{X}\) (<a href="./figs/hybrid_control_Kx_loop_gain.png">png</a>, <a href="./figs/hybrid_control_Kx_loop_gain.pdf">pdf</a>)</p>
</div> </div>
<p> <p>
@ -1590,20 +1545,20 @@ save(<span class="org-string">'./mat/control_tracking.mat'</span>, <span class="
</div> </div>
<p> <p>
The obtained position error is shown in Figure <a href="#org19456cf">29</a>. The obtained position error is shown in Figure <a href="#org19456cf">24</a>.
</p> </p>
<div id="org19456cf" class="figure"> <div id="org19456cf" class="figure">
<p><img src="figs/hybrid_control_Ex.png" alt="hybrid_control_Ex.png" /> <p><img src="figs/hybrid_control_Ex.png" alt="hybrid_control_Ex.png" />
</p> </p>
<p><span class="figure-number">Figure 29: </span>Obtained position error \(\bm{\epsilon}_\mathcal{X}\) (<a href="./figs/hybrid_control_Ex.png">png</a>, <a href="./figs/hybrid_control_Ex.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 24: </span>Obtained position error \(\bm{\epsilon}_\mathcal{X}\) (<a href="./figs/hybrid_control_Ex.png">png</a>, <a href="./figs/hybrid_control_Ex.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org8f3d960" class="outline-3"> <div id="outline-container-org771bea0" class="outline-3">
<h3 id="org8f3d960"><span class="section-number-3">3.6</span> Conclusion</h3> <h3 id="org771bea0"><span class="section-number-3">3.6</span> Conclusion</h3>
</div> </div>
</div> </div>
@ -1615,7 +1570,7 @@ The obtained position error is shown in Figure <a href="#org19456cf">29</a>.
</p> </p>
<p> <p>
Let&rsquo;s load the simulation results and compare them in Figure <a href="#org6fa53fa">30</a>. Let&rsquo;s load the simulation results and compare them in Figure <a href="#org6fa53fa">25</a>.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/control_tracking.mat'</span>, <span class="org-string">'simout_D'</span>, <span class="org-string">'simout_L'</span>, <span class="org-string">'simout_X'</span>, <span class="org-string">'simout_H'</span>); <pre class="src src-matlab">load(<span class="org-string">'./mat/control_tracking.mat'</span>, <span class="org-string">'simout_D'</span>, <span class="org-string">'simout_L'</span>, <span class="org-string">'simout_X'</span>, <span class="org-string">'simout_H'</span>);
@ -1626,7 +1581,7 @@ Let&rsquo;s load the simulation results and compare them in Figure <a href="#org
<div id="org6fa53fa" class="figure"> <div id="org6fa53fa" class="figure">
<p><img src="figs/reference_tracking_performance_comparison.png" alt="reference_tracking_performance_comparison.png" /> <p><img src="figs/reference_tracking_performance_comparison.png" alt="reference_tracking_performance_comparison.png" />
</p> </p>
<p><span class="figure-number">Figure 30: </span>Comparison of the position errors for all the Control architecture used (<a href="./figs/reference_tracking_performance_comparison.png">png</a>, <a href="./figs/reference_tracking_performance_comparison.pdf">pdf</a>)</p> <p><span class="figure-number">Figure 25: </span>Comparison of the position errors for all the Control architecture used (<a href="./figs/reference_tracking_performance_comparison.png">png</a>, <a href="./figs/reference_tracking_performance_comparison.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
@ -1767,7 +1722,7 @@ Erz = atan2(<span class="org-type">-</span>T(1, 2)<span class="org-type">/</span
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-13 ven. 13:23</p> <p class="date">Created: 2020-03-16 lun. 11:22</p>
</div> </div>
</body> </body>
</html> </html>

View File

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

View File

@ -70,13 +70,13 @@ The control configuration are compare in section [[sec:comparison]].
#+end_src #+end_src
** Control Schematic ** Control Schematic
The control architecture is shown in Figure [[fig:control_measure_rotating_2dof]]. The control architecture is shown in Figure [[fig:decentralized_reference_tracking_L]].
The required leg length $\bm{r}_\mathcal{L}$ is computed from the reference path $\bm{r}_\mathcal{X}$ using the inverse kinematics. The required leg length $\bm{r}_\mathcal{L}$ is computed from the reference path $\bm{r}_\mathcal{X}$ using the inverse kinematics.
Then, a diagonal (decentralized) controller $\bm{K}_\mathcal{L}$ is used such that each leg lengths stays close to its required length. Then, a diagonal (decentralized) controller $\bm{K}_\mathcal{L}$ is used such that each leg lengths stays close to its required length.
#+begin_src latex :file control_measure_rotating_2dof.pdf #+begin_src latex :file decentralized_reference_tracking_L.pdf
\begin{tikzpicture} \begin{tikzpicture}
% Blocs % Blocs
\node[block, align=center] (J) at (0, 0) {Inverse\\Kinematics}; \node[block, align=center] (J) at (0, 0) {Inverse\\Kinematics};
@ -93,10 +93,10 @@ Then, a diagonal (decentralized) controller $\bm{K}_\mathcal{L}$ is used such th
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:control_measure_rotating_2dof #+name: fig:decentralized_reference_tracking_L
#+caption: Decentralized control for reference tracking #+caption: Decentralized control for reference tracking
#+RESULTS: #+RESULTS:
[[file:figs/control_measure_rotating_2dof.png]] [[file:figs/decentralized_reference_tracking_L.png]]
** Initialize the Stewart platform ** Initialize the Stewart platform
#+begin_src matlab :noweb yes #+begin_src matlab :noweb yes
@ -121,49 +121,9 @@ Let's identify the transfer function from $\bm{\tau}$ to $\bm{\mathcal{L}}$.
#+end_src #+end_src
** Plant Analysis ** Plant Analysis
The diagonal terms of the plant is shown in Figure [[fig:plant_decentralized_diagonal]]. The diagonal and off-diagonal terms of the plant are shown in Figure [[fig:plant_decentralized_L]].
All the diagonal terms are equal. All the diagonal terms are equal.
#+begin_src matlab :exports none
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(G(i, i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
hold on;
for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(G(i, i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x');
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/plant_decentralized_diagonal.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:plant_decentralized_diagonal
#+caption: Diagonal Elements of the Plant ([[./figs/plant_decentralized_diagonal.png][png]], [[./figs/plant_decentralized_diagonal.pdf][pdf]])
[[file:figs/plant_decentralized_diagonal.png]]
The off-diagonal terms are shown in Figure [[fig:plant_decentralized_off_diagonal]].
We see that the plant is decoupled at low frequency which indicate that decentralized control may be a good idea. We see that the plant is decoupled at low frequency which indicate that decentralized control may be a good idea.
#+begin_src matlab :exports none #+begin_src matlab :exports none
@ -171,7 +131,29 @@ We see that the plant is decoupled at low frequency which indicate that decentra
figure; figure;
ax1 = subplot(2, 1, 1); ax1 = subplot(2, 2, 1);
hold on;
for i = 1:6
plot(freqs, abs(squeeze(freqresp(G(i, i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Diagonal elements of the Plant');
ax2 = subplot(2, 2, 3);
hold on;
for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(G(i, i), freqs, 'Hz'))), 'DisplayName', sprintf('$d\\mathcal{L}_%i/\\tau_%i$', i, i));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
legend('location', 'northwest');
ax3 = subplot(2, 2, 2);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -183,8 +165,9 @@ We see that the plant is decoupled at low frequency which indicate that decentra
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Off-Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax4 = subplot(2, 2, 4);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -199,17 +182,17 @@ We see that the plant is decoupled at low frequency which indicate that decentra
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2,ax3,ax4],'x');
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes #+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/plant_decentralized_off_diagonal.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/plant_decentralized_L.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+name: fig:plant_decentralized_off_diagonal #+name: fig:plant_decentralized_L
#+caption: Diagonal Elements of the Plant ([[./figs/plant_decentralized_off_diagonal.png][png]], [[./figs/plant_decentralized_off_diagonal.pdf][pdf]]) #+caption: Obtain Diagonal and off diagonal dynamics ([[./figs/plant_decentralized_L.png][png]], [[./figs/plant_decentralized_L.pdf][pdf]])
[[file:figs/plant_decentralized_off_diagonal.png]] [[file:figs/plant_decentralized_L.png]]
** Controller Design ** Controller Design
The controller consists of: The controller consists of:
@ -558,12 +541,16 @@ We now multiply the plant by the Jacobian matrix as shown in Figure [[fig:centra
Gl.OutputName = {'D1', 'D2', 'D3', 'D4', 'D5', 'D6'}; Gl.OutputName = {'D1', 'D2', 'D3', 'D4', 'D5', 'D6'};
#+end_src #+end_src
The bode plot of the plant is shown in Figure [[fig:plant_centralized_L]].
We can see that the diagonal elements are identical.
This will simplify the design of the controller as all the elements of the diagonal controller can be made identical.
#+begin_src matlab :exports none #+begin_src matlab :exports none
freqs = logspace(1, 4, 1000); freqs = logspace(1, 4, 1000);
figure; figure;
ax1 = subplot(2, 1, 1); ax1 = subplot(2, 2, 1);
hold on; hold on;
for i = 1:6 for i = 1:6
plot(freqs, abs(squeeze(freqresp(Gl(i, i), freqs, 'Hz')))); plot(freqs, abs(squeeze(freqresp(Gl(i, i), freqs, 'Hz'))));
@ -571,42 +558,21 @@ We now multiply the plant by the Jacobian matrix as shown in Figure [[fig:centra
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax2 = subplot(2, 2, 3);
hold on; hold on;
for i = 1:6 for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(Gl(i, i), freqs, 'Hz'))), 'DisplayName', ['$d\mathcal{L}_' num2str(i) '/\tau_' num2str(i) '$']); plot(freqs, 180/pi*angle(squeeze(freqresp(Gl(i, i), freqs, 'Hz'))), 'DisplayName', sprintf('$\\epsilon_{\\mathcal{L}_%i}/\\tau_%i$', i, i));
end end
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
legend(); legend('location', 'northwest');
linkaxes([ax1,ax2],'x'); ax3 = subplot(2, 2, 2);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/plant_centralized_diagonal_L.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:plant_centralized_diagonal_L
#+caption: Diagonal Elements of the plant $\bm{J} \bm{G}$ ([[./figs/plant_centralized_diagonal_L.png][png]], [[./figs/plant_centralized_diagonal_L.pdf][pdf]])
[[file:figs/plant_centralized_diagonal_L.png]]
All the diagonal elements are identical.
This will simplify the design of the controller as all the elements of the diagonal controller can be made identical.
The off-diagonal terms of the controller are shown in Figure [[fig:plant_centralized_off_diagonal_L]].
#+begin_src matlab :exports none
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -618,8 +584,9 @@ The off-diagonal terms of the controller are shown in Figure [[fig:plant_central
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Off-Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax4 = subplot(2, 2, 4);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -634,17 +601,17 @@ The off-diagonal terms of the controller are shown in Figure [[fig:plant_central
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2,ax3,ax4],'x');
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes #+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/plant_centralized_off_diagonal_L.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/plant_centralized_L.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+name: fig:plant_centralized_off_diagonal_L #+name: fig:plant_centralized_L
#+caption: Off Diagonal Elements of the plant $\bm{J} \bm{G}$ ([[./figs/plant_centralized_off_diagonal_L.png][png]], [[./figs/plant_centralized_off_diagonal_L.pdf][pdf]]) #+caption: Diagonal and off-diagonal elements of the plant $\bm{K}\bm{G}$ ([[./figs/plant_centralized_L.png][png]], [[./figs/plant_centralized_L.pdf][pdf]])
[[file:figs/plant_centralized_off_diagonal_L.png]] [[file:figs/plant_centralized_L.png]]
We can see that this *totally decouples the system at low frequency*. We can see that this *totally decouples the system at low frequency*.
@ -774,7 +741,7 @@ We now multiply the plant by the Jacobian matrix as shown in Figure [[fig:centra
figure; figure;
ax1 = subplot(2, 1, 1); ax1 = subplot(2, 2, 1);
hold on; hold on;
for i = 1:6 for i = 1:6
plot(freqs, abs(squeeze(freqresp(Gx(i, i), freqs, 'Hz')))); plot(freqs, abs(squeeze(freqresp(Gx(i, i), freqs, 'Hz'))));
@ -782,8 +749,9 @@ We now multiply the plant by the Jacobian matrix as shown in Figure [[fig:centra
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax2 = subplot(2, 2, 3);
hold on; hold on;
for i = 1:6 for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(Gx(i, i), freqs, 'Hz'))), 'DisplayName', labels{i}); plot(freqs, 180/pi*angle(squeeze(freqresp(Gx(i, i), freqs, 'Hz'))), 'DisplayName', labels{i});
@ -793,30 +761,9 @@ We now multiply the plant by the Jacobian matrix as shown in Figure [[fig:centra
ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
legend(); legend('location', 'northwest');
linkaxes([ax1,ax2],'x'); ax3 = subplot(2, 2, 2);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/plant_centralized_diagonal_X.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:plant_centralized_diagonal_X
#+caption: Diagonal Elements of the plant $\bm{G} \bm{J}^{-T}$ ([[./figs/plant_centralized_diagonal_X.png][png]], [[./figs/plant_centralized_diagonal_X.pdf][pdf]])
[[file:figs/plant_centralized_diagonal_X.png]]
The diagonal terms are not the same.
The resonances of the system are "decoupled".
For instance, the vertical resonance of the system is only present on the diagonal term corresponding to $D_z/\mathcal{F}_z$.
#+begin_src matlab :exports none
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -828,8 +775,9 @@ For instance, the vertical resonance of the system is only present on the diagon
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Off-Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax4 = subplot(2, 2, 4);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -844,17 +792,21 @@ For instance, the vertical resonance of the system is only present on the diagon
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2,ax3,ax4],'x');
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes #+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/plant_centralized_off_diagonal_X.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/plant_centralized_X.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+name: fig:plant_centralized_off_diagonal_X #+name: fig:plant_centralized_X
#+caption: Off Diagonal Elements of the plant $\bm{G} \bm{J}^{-T}$ ([[./figs/plant_centralized_off_diagonal_X.png][png]], [[./figs/plant_centralized_off_diagonal_X.pdf][pdf]]) #+caption: Diagonal and off-diagonal elements of the plant $\bm{G} \bm{J}^{-T}$ ([[./figs/plant_centralized_X.png][png]], [[./figs/plant_centralized_X.pdf][pdf]])
[[file:figs/plant_centralized_off_diagonal_X.png]] [[file:figs/plant_centralized_X.png]]
The diagonal terms are not the same.
The resonances of the system are "decoupled".
For instance, the vertical resonance of the system is only present on the diagonal term corresponding to $D_z/\mathcal{F}_z$.
Here the system is almost decoupled at all frequencies except for the transfer functions $\frac{R_y}{\mathcal{F}_x}$ and $\frac{R_x}{\mathcal{F}_y}$. Here the system is almost decoupled at all frequencies except for the transfer functions $\frac{R_y}{\mathcal{F}_x}$ and $\frac{R_x}{\mathcal{F}_y}$.
@ -985,7 +937,7 @@ The control architecture is shown in Figure [[fig:centralized_reference_tracking
*** Plant Analysis *** Plant Analysis
The plant is pre-multiplied by $\bm{G}^{-1}(\omega = 0)$. The plant is pre-multiplied by $\bm{G}^{-1}(\omega = 0)$.
The diagonal elements of the shaped plant are shown in Figure [[fig:plant_centralized_diagonal_SD]]. The diagonal and off-diagonal elements of the shaped plant are shown in Figure [[fig:plant_centralized_SD]].
#+begin_src matlab #+begin_src matlab
G0 = G*inv(freqresp(G, 0)); G0 = G*inv(freqresp(G, 0));
@ -996,7 +948,7 @@ The diagonal elements of the shaped plant are shown in Figure [[fig:plant_centra
figure; figure;
ax1 = subplot(2, 1, 1); ax1 = subplot(2, 2, 1);
hold on; hold on;
for i = 1:6 for i = 1:6
plot(freqs, abs(squeeze(freqresp(G0(i, i), freqs, 'Hz')))); plot(freqs, abs(squeeze(freqresp(G0(i, i), freqs, 'Hz'))));
@ -1004,37 +956,21 @@ The diagonal elements of the shaped plant are shown in Figure [[fig:plant_centra
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax2 = subplot(2, 2, 3);
hold on; hold on;
for i = 1:6 for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(G0(i, i), freqs, 'Hz'))), 'DisplayName', ['$G_0(' num2str(i) ',' num2str(i) ')$']); plot(freqs, 180/pi*angle(squeeze(freqresp(G0(i, i), freqs, 'Hz'))), 'DisplayName', sprintf('$G_0(%i,%i)$', i, i));
end end
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
legend(); legend('location', 'northwest');
linkaxes([ax1,ax2],'x'); ax3 = subplot(2, 2, 2);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/plant_centralized_diagonal_SD.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:plant_centralized_diagonal_SD
#+caption: Diagonal Elements of the plant $\bm{G} \bm{G}^{-1}(\omega = 0)$ ([[./figs/plant_centralized_diagonal_SD.png][png]], [[./figs/plant_centralized_diagonal_SD.pdf][pdf]])
[[file:figs/plant_centralized_diagonal_SD.png]]
#+begin_src matlab :exports none
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -1046,8 +982,9 @@ The diagonal elements of the shaped plant are shown in Figure [[fig:plant_centra
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Off-Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax4 = subplot(2, 2, 4);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -1062,17 +999,17 @@ The diagonal elements of the shaped plant are shown in Figure [[fig:plant_centra
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2,ax3,ax4],'x');
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes #+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/plant_centralized_off_diagonal_SD.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/plant_centralized_SD.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+name: fig:plant_centralized_off_diagonal_SD #+name: fig:plant_centralized_SD
#+caption: Off Diagonal Elements of the plant $\bm{G} \bm{J}^{-T}$ ([[./figs/plant_centralized_off_diagonal_SD.png][png]], [[./figs/plant_centralized_off_diagonal_SD.pdf][pdf]]) #+caption: Diagonal and off-diagonal elements of the plant $\bm{G} \bm{G}^{-1}(\omega = 0)$ ([[./figs/plant_centralized_SD.png][png]], [[./figs/plant_centralized_SD.pdf][pdf]])
[[file:figs/plant_centralized_off_diagonal_SD.png]] [[file:figs/plant_centralized_SD.png]]
*** Controller Design *** Controller Design
We have that: We have that:
@ -1296,14 +1233,14 @@ Let's identify the transfer function from $\bm{\tau}$ to $\bm{L}$.
#+end_src #+end_src
*** Obtained Plant *** Obtained Plant
The diagonal elements of the plant are shown in Figure [[fig:hybrid_control_Kl_plant_diagonal]] while the off diagonal terms are shown in Figure [[fig:hybrid_control_Kl_plant_off_diagonal]]. The obtained plant is shown in Figure [[fig:hybrid_control_Kl_plant]].
#+begin_src matlab :exports none #+begin_src matlab :exports none
freqs = logspace(1, 4, 1000); freqs = logspace(1, 4, 1000);
figure; figure;
ax1 = subplot(2, 1, 1); ax1 = subplot(2, 2, 1);
hold on; hold on;
for i = 1:6 for i = 1:6
plot(freqs, abs(squeeze(freqresp(Gl(i, i), freqs, 'Hz')))); plot(freqs, abs(squeeze(freqresp(Gl(i, i), freqs, 'Hz'))));
@ -1311,36 +1248,21 @@ The diagonal elements of the plant are shown in Figure [[fig:hybrid_control_Kl_p
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax2 = subplot(2, 2, 3);
hold on; hold on;
for i = 1:6 for i = 1:6
plot(freqs, 180/pi*angle(squeeze(freqresp(Gl(i, i), freqs, 'Hz')))); plot(freqs, 180/pi*angle(squeeze(freqresp(Gl(i, i), freqs, 'Hz'))), 'DisplayName', sprintf('$\\epsilon_{\\mathcal{L}_%i}/\\tau_%i$', i, i));
end end
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
legend('location', 'northwest');
linkaxes([ax1,ax2],'x'); ax3 = subplot(2, 2, 2);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/hybrid_control_Kl_plant_diagonal.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:hybrid_control_Kl_plant_diagonal
#+caption: Diagonal elements of the plant for the design of $\bm{K}_\mathcal{L}$ ([[./figs/hybrid_control_Kl_plant_diagonal.png][png]], [[./figs/hybrid_control_Kl_plant_diagonal.pdf][pdf]])
[[file:figs/hybrid_control_Kl_plant_diagonal.png]]
#+begin_src matlab :exports none
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -1352,8 +1274,9 @@ The diagonal elements of the plant are shown in Figure [[fig:hybrid_control_Kl_p
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('Off-Diagonal elements of the Plant');
ax2 = subplot(2, 1, 2); ax4 = subplot(2, 2, 4);
hold on; hold on;
for i = 1:5 for i = 1:5
for j = i+1:6 for j = i+1:6
@ -1368,17 +1291,17 @@ The diagonal elements of the plant are shown in Figure [[fig:hybrid_control_Kl_p
ylim([-180, 180]); ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]); yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2,ax3,ax4],'x');
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes #+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/hybrid_control_Kl_plant_off_diagonal.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/hybrid_control_Kl_plant.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+name: fig:hybrid_control_Kl_plant_off_diagonal #+name: fig:hybrid_control_Kl_plant
#+caption: Off-diagonal elements of the plant for the design of $\bm{K}_\mathcal{L}$ ([[./figs/hybrid_control_Kl_plant_off_diagonal.png][png]], [[./figs/hybrid_control_Kl_plant_off_diagonal.pdf][pdf]]) #+caption: Diagonal and off-diagonal elements of the plant for the design of $\bm{K}_\mathcal{L}$ ([[./figs/hybrid_control_Kl_plant.png][png]], [[./figs/hybrid_control_Kl_plant.pdf][pdf]])
[[file:figs/hybrid_control_Kl_plant_off_diagonal.png]] [[file:figs/hybrid_control_Kl_plant.png]]
*** Controller Design *** Controller Design
We apply a decentralized (diagonal) direct velocity feedback. We apply a decentralized (diagonal) direct velocity feedback.