Use online CSS and JS

This commit is contained in:
2021-02-20 23:09:27 +01:00
parent bd054638b2
commit 36181282b6
37 changed files with 8722 additions and 8640 deletions

View File

@@ -1,75 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"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-04-17 ven. 09:35 -->
<!-- 2021-02-20 sam. 23:08 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Cascade Control applied on the Simscape Model</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<script src="./js/jquery.min.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/jquery.stickytableheaders.min.js"></script>
<script src="./js/readtheorg.js"></script>
<script>MathJax = {
tex: {
tags: 'ams',
macros: {bm: ["\\boldsymbol{#1}",1],}
}
};
</script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
<script>
MathJax = {
svg: {
scale: 1,
fontCache: "global"
},
tex: {
tags: "ams",
multlineWidth: "%MULTLINEWIDTH",
tagSide: "right",
macros: {bm: ["\\boldsymbol{#1}",1],},
tagIndent: ".8em"
}
};
</script>
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
<a accesskey="H" href="./index.html"> HOME </a>
<a accesskey="H" href="../../index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Cascade Control applied on the Simscape Model</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org143e6e7">1. Initialization</a></li>
<li><a href="#orga3bd04c">2. Low Authority Control - Integral Force Feedback \(\bm{K}_\text{IFF}\)</a>
<li><a href="#org61c020f">1. Initialization</a></li>
<li><a href="#orgabcff63">2. Low Authority Control - Integral Force Feedback \(\bm{K}_\text{IFF}\)</a>
<ul>
<li><a href="#org702c612">2.1. Identification</a></li>
<li><a href="#org1eda739">2.2. Plant</a></li>
<li><a href="#orgf33a40f">2.3. Root Locus</a></li>
<li><a href="#orgd895b21">2.4. Controller and Loop Gain</a></li>
<li><a href="#org340d5c4">2.1. Identification</a></li>
<li><a href="#orga3a6bfe">2.2. Plant</a></li>
<li><a href="#org08443b2">2.3. Root Locus</a></li>
<li><a href="#orgfcc764a">2.4. Controller and Loop Gain</a></li>
</ul>
</li>
<li><a href="#org101bfbc">3. High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</a>
<li><a href="#org5f8f119">3. High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</a>
<ul>
<li><a href="#org259240d">3.1. Identification of the damped plant</a></li>
<li><a href="#orgfc86b4c">3.2. Obtained Plant</a></li>
<li><a href="#orgdea5e17">3.3. Controller Design and Loop Gain</a></li>
<li><a href="#org4c8cb18">3.1. Identification of the damped plant</a></li>
<li><a href="#org8ad1542">3.2. Obtained Plant</a></li>
<li><a href="#orge39ae16">3.3. Controller Design and Loop Gain</a></li>
</ul>
</li>
<li><a href="#org58f9f32">4. Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</a>
<li><a href="#org11a22c2">4. Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</a>
<ul>
<li><a href="#org82ca884">4.1. Identification of the linearized plant</a></li>
<li><a href="#org6f5b22e">4.2. Obtained Plant</a></li>
<li><a href="#org839cdb3">4.3. Controller Design</a></li>
<li><a href="#orgfc45f6f">4.1. Identification of the linearized plant</a></li>
<li><a href="#org170c73f">4.2. Obtained Plant</a></li>
<li><a href="#orge97b630">4.3. Controller Design</a></li>
</ul>
</li>
<li><a href="#org3300911">5. Simulation</a></li>
<li><a href="#org2943496">6. Results</a></li>
<li><a href="#org07fbc52">5. Simulation</a></li>
<li><a href="#org3e9cd70">6. Results</a></li>
</ul>
</div>
</div>
<p>
The control architecture we wish here to study is shown in Figure <a href="#org19741db">1</a>.
The control architecture we wish here to study is shown in Figure <a href="#orga0c68cb">1</a>.
</p>
<div id="org19741db" class="figure">
<div id="orga0c68cb" class="figure">
<p><img src="figs/cascade_control_architecture.png" alt="cascade_control_architecture.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Cascaded Control consisting of (from inner to outer loop): IFF, Linearization Loop, Tracking Control in the frame of the Legs</p>
@@ -79,28 +83,28 @@ The control architecture we wish here to study is shown in Figure <a href="#org1
This cascade control is designed in three steps:
</p>
<ul class="org-ul">
<li>In section <a href="#orga20c211">2</a>: an active damping controller is designed.
<li>In section <a href="#orgbc2e2fd">2</a>: an active damping controller is designed.
This is based on the Integral Force Feedback and applied in a decentralized way</li>
<li>In section <a href="#org9367d49">3</a>: a decentralized tracking control is designed in the frame of the legs.
<li>In section <a href="#orgd16580b">3</a>: a decentralized tracking control is designed in the frame of the legs.
This controller is based on the displacement of each of the legs</li>
<li>In section <a href="#orgdd883a0">4</a>: a controller is designed in the task space in order to follow the wanted reference path corresponding to the sample position with respect to the granite</li>
<li>In section <a href="#org20bc645">4</a>: a controller is designed in the task space in order to follow the wanted reference path corresponding to the sample position with respect to the granite</li>
</ul>
<div id="outline-container-org143e6e7" class="outline-2">
<h2 id="org143e6e7"><span class="section-number-2">1</span> Initialization</h2>
<div id="outline-container-org61c020f" class="outline-2">
<h2 id="org61c020f"><span class="section-number-2">1</span> Initialization</h2>
<div class="outline-text-2" id="text-1">
<p>
We initialize all the stages with the default parameters.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
<pre class="src src-matlab"> initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
</pre>
</div>
@@ -108,8 +112,8 @@ initializeMirror();
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span>);
initializeSample(<span class="org-string">'mass'</span>, 1);
<pre class="src src-matlab"> initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'piezo'</span>);
initializeSample(<span class="org-string">'mass'</span>, 1);
</pre>
</div>
@@ -117,12 +121,12 @@ initializeSample(<span class="org-string">'mass'</span>, 1);
We set the references that corresponds to a tomography experiment.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1);
<pre class="src src-matlab"> initializeReferences(<span class="org-string">'Rz_type'</span>, <span class="org-string">'rotating'</span>, <span class="org-string">'Rz_period'</span>, 1);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">initializeDisturbances();
<pre class="src src-matlab"> initializeDisturbances();
</pre>
</div>
@@ -130,7 +134,7 @@ We set the references that corresponds to a tomography experiment.
Open Loop.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeController(<span class="org-string">'type'</span>, <span class="org-string">'cascade-hac-lac'</span>);
<pre class="src src-matlab"> initializeController(<span class="org-string">'type'</span>, <span class="org-string">'cascade-hac-lac'</span>);
</pre>
</div>
@@ -138,7 +142,7 @@ Open Loop.
And we put some gravity.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
<pre class="src src-matlab"> initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">true</span>);
</pre>
</div>
@@ -146,55 +150,55 @@ And we put some gravity.
We log the signals.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
<pre class="src src-matlab"> initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Kp = tf(zeros(6));
Kl = tf(zeros(6));
Kiff = tf(zeros(6));
<pre class="src src-matlab"> Kp = tf(zeros(6));
Kl = tf(zeros(6));
Kiff = tf(zeros(6));
</pre>
</div>
</div>
</div>
<div id="outline-container-orga3bd04c" class="outline-2">
<h2 id="orga3bd04c"><span class="section-number-2">2</span> Low Authority Control - Integral Force Feedback \(\bm{K}_\text{IFF}\)</h2>
<div id="outline-container-orgabcff63" class="outline-2">
<h2 id="orgabcff63"><span class="section-number-2">2</span> Low Authority Control - Integral Force Feedback \(\bm{K}_\text{IFF}\)</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orga20c211"></a>
<a id="orgbc2e2fd"></a>
</p>
</div>
<div id="outline-container-org702c612" class="outline-3">
<h3 id="org702c612"><span class="section-number-3">2.1</span> Identification</h3>
<div id="outline-container-org340d5c4" class="outline-3">
<h3 id="org340d5c4"><span class="section-number-3">2.1</span> Identification</h3>
<div class="outline-text-3" id="text-2-1">
<p>
Let&rsquo;s first identify the plant for the IFF controller.
</p>
<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>
mdl = <span class="org-string">'nass_model'</span>;
<pre class="src src-matlab"> <span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Fnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'openoutput'</span>, [], <span class="org-string">'Fnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_iff = linearize(mdl, io, 0);
G_iff.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
G_iff.OutputName = {<span class="org-string">'Fnlm1'</span>, <span class="org-string">'Fnlm2'</span>, <span class="org-string">'Fnlm3'</span>, <span class="org-string">'Fnlm4'</span>, <span class="org-string">'Fnlm5'</span>, <span class="org-string">'Fnlm6'</span>};
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
G_iff = linearize(mdl, io, 0);
G_iff.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
G_iff.OutputName = {<span class="org-string">'Fnlm1'</span>, <span class="org-string">'Fnlm2'</span>, <span class="org-string">'Fnlm3'</span>, <span class="org-string">'Fnlm4'</span>, <span class="org-string">'Fnlm5'</span>, <span class="org-string">'Fnlm6'</span>};
</pre>
</div>
</div>
</div>
<div id="outline-container-org1eda739" class="outline-3">
<h3 id="org1eda739"><span class="section-number-3">2.2</span> Plant</h3>
<div id="outline-container-orga3a6bfe" class="outline-3">
<h3 id="orga3a6bfe"><span class="section-number-3">2.2</span> Plant</h3>
<div class="outline-text-3" id="text-2-2">
<div id="org366ff26" class="figure">
<div id="orgdfa60cc" class="figure">
<p><img src="figs/cascade_iff_plant.png" alt="cascade_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 2: </span>IFF Plant (<a href="./figs/cascade_iff_plant.png">png</a>, <a href="./figs/cascade_iff_plant.pdf">pdf</a>)</p>
@@ -202,11 +206,11 @@ G_iff.OutputName = {<span class="org-string">'Fnlm1'</span>, <span class="org-st
</div>
</div>
<div id="outline-container-orgf33a40f" class="outline-3">
<h3 id="orgf33a40f"><span class="section-number-3">2.3</span> Root Locus</h3>
<div id="outline-container-org08443b2" class="outline-3">
<h3 id="org08443b2"><span class="section-number-3">2.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-2-3">
<div id="orgdf7a93e" class="figure">
<div id="org6320a7a" class="figure">
<p><img src="figs/cascade_iff_root_locus.png" alt="cascade_iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Root Locus for the IFF control (<a href="./figs/cascade_iff_root_locus.png">png</a>, <a href="./figs/cascade_iff_root_locus.pdf">pdf</a>)</p>
@@ -218,21 +222,21 @@ The maximum damping is obtained for a control gain of \(\approx 3000\).
</div>
</div>
<div id="outline-container-orgd895b21" class="outline-3">
<h3 id="orgd895b21"><span class="section-number-3">2.4</span> Controller and Loop Gain</h3>
<div id="outline-container-orgfcc764a" class="outline-3">
<h3 id="orgfcc764a"><span class="section-number-3">2.4</span> Controller and Loop Gain</h3>
<div class="outline-text-3" id="text-2-4">
<p>
We create the \(6 \times 6\) diagonal Integral Force Feedback controller.
The obtained loop gain is shown in Figure <a href="#org7aaed92">4</a>.
The obtained loop gain is shown in Figure <a href="#org59e605f">4</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50;
Kiff = <span class="org-type">-</span>3000<span class="org-type">/</span>s<span class="org-type">*</span>eye(6);
<pre class="src src-matlab"> w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>50;
Kiff = <span class="org-type">-</span>3000<span class="org-type">/</span>s<span class="org-type">*</span>eye(6);
</pre>
</div>
<div id="org7aaed92" class="figure">
<div id="org59e605f" class="figure">
<p><img src="figs/cascade_iff_loop_gain.png" alt="cascade_iff_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Obtained Loop gain the IFF Control (<a href="./figs/cascade_iff_loop_gain.png">png</a>, <a href="./figs/cascade_iff_loop_gain.pdf">pdf</a>)</p>
@@ -241,32 +245,32 @@ Kiff = <span class="org-type">-</span>3000<span class="org-type">/</span>s<span
</div>
</div>
<div id="outline-container-org101bfbc" class="outline-2">
<h2 id="org101bfbc"><span class="section-number-2">3</span> High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</h2>
<div id="outline-container-org5f8f119" class="outline-2">
<h2 id="org5f8f119"><span class="section-number-2">3</span> High Authority Control in the joint space - \(\bm{K}_\mathcal{L}\)</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="org9367d49"></a>
<a id="orgd16580b"></a>
</p>
</div>
<div id="outline-container-org259240d" class="outline-3">
<h3 id="org259240d"><span class="section-number-3">3.1</span> Identification of the damped plant</h3>
<div id="outline-container-org4c8cb18" class="outline-3">
<h3 id="org4c8cb18"><span class="section-number-3">3.1</span> Identification of the damped plant</h3>
<div class="outline-text-3" id="text-3-1">
<p>
We now identify the transfer function from \(\tau^\prime\) to \(d\bm{\mathcal{L}}\) as shown in Figure <a href="#org19741db">1</a>.
We now identify the transfer function from \(\tau^\prime\) to \(d\bm{\mathcal{L}}\) as shown in Figure <a href="#orga0c68cb">1</a>.
</p>
<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>
mdl = <span class="org-string">'nass_model'</span>;
<pre class="src src-matlab"> <span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'output'</span>, [], <span class="org-string">'Dnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Leg Displacement</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/Micro-Station'</span>], 3, <span class="org-string">'output'</span>, [], <span class="org-string">'Dnlm'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Leg Displacement</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gl = linearize(mdl, io, 0);
Gl.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
Gl.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-string">'Dnlm2'</span>, <span class="org-string">'Dnlm3'</span>, <span class="org-string">'Dnlm4'</span>, <span class="org-string">'Dnlm5'</span>, <span class="org-string">'Dnlm6'</span>};
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gl = linearize(mdl, io, 0);
Gl.InputName = {<span class="org-string">'Fnl1'</span>, <span class="org-string">'Fnl2'</span>, <span class="org-string">'Fnl3'</span>, <span class="org-string">'Fnl4'</span>, <span class="org-string">'Fnl5'</span>, <span class="org-string">'Fnl6'</span>};
Gl.OutputName = {<span class="org-string">'Dnlm1'</span>, <span class="org-string">'Dnlm2'</span>, <span class="org-string">'Dnlm3'</span>, <span class="org-string">'Dnlm4'</span>, <span class="org-string">'Dnlm5'</span>, <span class="org-string">'Dnlm6'</span>};
</pre>
</div>
@@ -275,19 +279,19 @@ There are some unstable poles in the Plant with very small imaginary parts.
These unstable poles are probably not physical, and they disappear when taking the minimum realization of the plant.
</p>
<div class="org-src-container">
<pre class="src src-matlab">isstable(Gl)
Gl = minreal(Gl);
isstable(Gl)
<pre class="src src-matlab"> isstable(Gl)
Gl = minreal(Gl);
isstable(Gl)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfc86b4c" class="outline-3">
<h3 id="orgfc86b4c"><span class="section-number-3">3.2</span> Obtained Plant</h3>
<div id="outline-container-org8ad1542" class="outline-3">
<h3 id="org8ad1542"><span class="section-number-3">3.2</span> Obtained Plant</h3>
<div class="outline-text-3" id="text-3-2">
<p>
The obtain plant is shown in Figure <a href="#org455eb07">5</a>.
The obtain plant is shown in Figure <a href="#org5030d6d">5</a>.
</p>
<p>
@@ -295,7 +299,7 @@ We can see that the plant is quite well decoupled.
</p>
<div id="org455eb07" class="figure">
<div id="org5030d6d" class="figure">
<p><img src="figs/cascade_hac_joint_plant.png" alt="cascade_hac_joint_plant.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Plant for the High Authority Control in the Joint Space (<a href="./figs/cascade_hac_joint_plant.png">png</a>, <a href="./figs/cascade_hac_joint_plant.pdf">pdf</a>)</p>
@@ -304,8 +308,8 @@ We can see that the plant is quite well decoupled.
</div>
<div id="outline-container-orgdea5e17" class="outline-3">
<h3 id="orgdea5e17"><span class="section-number-3">3.3</span> Controller Design and Loop Gain</h3>
<div id="outline-container-orge39ae16" class="outline-3">
<h3 id="orge39ae16"><span class="section-number-3">3.3</span> Controller Design and Loop Gain</h3>
<div class="outline-text-3" id="text-3-3">
<p>
The controller consists of:
@@ -318,20 +322,20 @@ The controller consists of:
</ul>
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>400; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
<pre class="src src-matlab"> wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>400; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
h = 2; <span class="org-comment">% Lead parameter</span>
h = 2; <span class="org-comment">% Lead parameter</span>
<span class="org-comment">% Kl = (1/h) * (1 + s/wc*h)/(1 + s/wc/h) * wc/s * ((s/wc*2 + 1)/(s/wc*2)) * (1/(1 + s/wc/2));</span>
Kl = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> wc<span class="org-type">/</span>s;
<span class="org-comment">% Kl = (1/h) * (1 + s/wc*h)/(1 + s/wc/h) * wc/s * ((s/wc*2 + 1)/(s/wc*2)) * (1/(1 + s/wc/2));</span>
Kl = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> wc<span class="org-type">/</span>s;
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kl = Kl<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gl<span class="org-type">*</span>Kl, wc))));
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kl = Kl<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gl<span class="org-type">*</span>Kl, wc))));
</pre>
</div>
<div id="org3dd0142" class="figure">
<div id="org3b106c4" class="figure">
<p><img src="figs/cascade_hac_joint_loop_gain.png" alt="cascade_hac_joint_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Loop Gain for the High Autority Control in the joint space (<a href="./figs/cascade_hac_joint_loop_gain.png">png</a>, <a href="./figs/cascade_hac_joint_loop_gain.pdf">pdf</a>)</p>
@@ -340,32 +344,32 @@ Kl = Kl<span class="org-type">.*</span>diag(1<span class="org-type">./</span>dia
</div>
</div>
<div id="outline-container-org58f9f32" class="outline-2">
<h2 id="org58f9f32"><span class="section-number-2">4</span> Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</h2>
<div id="outline-container-org11a22c2" class="outline-2">
<h2 id="org11a22c2"><span class="section-number-2">4</span> Primary Controller in the task space - \(\bm{K}_\mathcal{X}\)</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="orgdd883a0"></a>
<a id="org20bc645"></a>
</p>
</div>
<div id="outline-container-org82ca884" class="outline-3">
<h3 id="org82ca884"><span class="section-number-3">4.1</span> Identification of the linearized plant</h3>
<div id="outline-container-orgfc45f6f" class="outline-3">
<h3 id="orgfc45f6f"><span class="section-number-3">4.1</span> Identification of the linearized plant</h3>
<div class="outline-text-3" id="text-4-1">
<p>
We know identify the dynamics between \(\bm{r}_{\mathcal{X}_n}\) and \(\bm{r}_\mathcal{X}\).
</p>
<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>
mdl = <span class="org-string">'nass_model'</span>;
<pre class="src src-matlab"> <span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'nass_model'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller/Cascade-HAC-LAC/Kp'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Controller/Cascade-HAC-LAC/Kp'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Tracking Error'</span>], 1, <span class="org-string">'output'</span>, [], <span class="org-string">'En'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Position Errror</span>
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gx = linearize(mdl, io, 0);
Gx.InputName = {<span class="org-string">'rL1'</span>, <span class="org-string">'rL2'</span>, <span class="org-string">'rL3'</span>, <span class="org-string">'rL4'</span>, <span class="org-string">'rL5'</span>, <span class="org-string">'rL6'</span>};
Gx.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">'Ey'</span>, <span class="org-string">'Ez'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
Gx = linearize(mdl, io, 0);
Gx.InputName = {<span class="org-string">'rL1'</span>, <span class="org-string">'rL2'</span>, <span class="org-string">'rL3'</span>, <span class="org-string">'rL4'</span>, <span class="org-string">'rL5'</span>, <span class="org-string">'rL6'</span>};
Gx.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">'Ey'</span>, <span class="org-string">'Ez'</span>, <span class="org-string">'Erx'</span>, <span class="org-string">'Ery'</span>, <span class="org-string">'Erz'</span>};
</pre>
</div>
@@ -373,19 +377,19 @@ Gx.OutputName = {<span class="org-string">'Ex'</span>, <span class="org-string">
As before, we take the minimum realization.
</p>
<div class="org-src-container">
<pre class="src src-matlab">isstable(Gx)
Gx = minreal(Gx);
isstable(Gx)
<pre class="src src-matlab"> isstable(Gx)
Gx = minreal(Gx);
isstable(Gx)
</pre>
</div>
</div>
</div>
<div id="outline-container-org6f5b22e" class="outline-3">
<h3 id="org6f5b22e"><span class="section-number-3">4.2</span> Obtained Plant</h3>
<div id="outline-container-org170c73f" class="outline-3">
<h3 id="org170c73f"><span class="section-number-3">4.2</span> Obtained Plant</h3>
<div class="outline-text-3" id="text-4-2">
<div id="orge364e46" class="figure">
<div id="org9c2e85a" class="figure">
<p><img src="figs/cascade_primary_plant.png" alt="cascade_primary_plant.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Plant for the Primary Controller (<a href="./figs/cascade_primary_plant.png">png</a>, <a href="./figs/cascade_primary_plant.pdf">pdf</a>)</p>
@@ -393,23 +397,23 @@ isstable(Gx)
</div>
</div>
<div id="outline-container-org839cdb3" class="outline-3">
<h3 id="org839cdb3"><span class="section-number-3">4.3</span> Controller Design</h3>
<div id="outline-container-orge97b630" class="outline-3">
<h3 id="orge97b630"><span class="section-number-3">4.3</span> Controller Design</h3>
<div class="outline-text-3" id="text-4-3">
<div class="org-src-container">
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>10; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
<pre class="src src-matlab"> wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>10; <span class="org-comment">% Bandwidth Bandwidth [rad/s]</span>
h = 2; <span class="org-comment">% Lead parameter</span>
h = 2; <span class="org-comment">% Lead parameter</span>
Kp = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> wc<span class="org-type">/</span>s <span class="org-type">*</span> (s <span class="org-type">+</span> 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5)<span class="org-type">/</span>s <span class="org-type">*</span> 1<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>20);
Kp = (1<span class="org-type">/</span>h) <span class="org-type">*</span> (1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">*</span>h)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc<span class="org-type">/</span>h) <span class="org-type">*</span> wc<span class="org-type">/</span>s <span class="org-type">*</span> (s <span class="org-type">+</span> 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5)<span class="org-type">/</span>s <span class="org-type">*</span> 1<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>20);
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kp = Kp<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gx<span class="org-type">*</span>Kp, wc))));
<span class="org-comment">% Normalization of the gain of have a loop gain of 1 at frequency wc</span>
Kp = Kp<span class="org-type">.*</span>diag(1<span class="org-type">./</span>diag(abs(freqresp(Gx<span class="org-type">*</span>Kp, wc))));
</pre>
</div>
<div id="orgb9d3971" class="figure">
<div id="org37a2534" class="figure">
<p><img src="figs/cascade_primary_loop_gain.png" alt="cascade_primary_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Loop Gain for the primary controller (outer loop) (<a href="./figs/cascade_primary_loop_gain.png">png</a>, <a href="./figs/cascade_primary_loop_gain.pdf">pdf</a>)</p>
@@ -418,12 +422,12 @@ Kp = Kp<span class="org-type">.*</span>diag(1<span class="org-type">./</span>dia
</div>
</div>
<div id="outline-container-org3300911" class="outline-2">
<h2 id="org3300911"><span class="section-number-2">5</span> Simulation</h2>
<div id="outline-container-org07fbc52" class="outline-2">
<h2 id="org07fbc52"><span class="section-number-2">5</span> Simulation</h2>
<div class="outline-text-2" id="text-5">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>);
<pre class="src src-matlab"> load(<span class="org-string">'mat/conf_simulink.mat'</span>);
<span class="org-matlab-simulink-keyword">set_param</span>(<span class="org-variable-name">conf_simulink</span>, <span class="org-string">'StopTime'</span>, <span class="org-string">'2'</span>);
</pre>
</div>
@@ -431,58 +435,58 @@ Kp = Kp<span class="org-type">.*</span>diag(1<span class="org-type">./</span>dia
And we simulate the system.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
<pre class="src src-matlab"> <span class="org-matlab-simulink-keyword">sim</span>(<span class="org-string">'nass_model'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">cascade_hac_lac = simout;
save(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="org-string">'cascade_hac_lac'</span>);
<pre class="src src-matlab"> cascade_hac_lac = simout;
save(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="org-string">'cascade_hac_lac'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org2943496" class="outline-2">
<h2 id="org2943496"><span class="section-number-2">6</span> Results</h2>
<div id="outline-container-org3e9cd70" class="outline-2">
<h2 id="org3e9cd70"><span class="section-number-2">6</span> Results</h2>
<div class="outline-text-2" id="text-6">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>);
load(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="org-string">'cascade_hac_lac'</span>);
<pre class="src src-matlab"> load(<span class="org-string">'./mat/experiment_tomography.mat'</span>, <span class="org-string">'tomo_align_dist'</span>);
load(<span class="org-string">'./mat/cascade_hac_lac.mat'</span>, <span class="org-string">'cascade_hac_lac'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">n_av = 4;
han_win = hanning(ceil(length(cascade_hac_lac.Em.En.Data(<span class="org-type">:</span>,1))<span class="org-type">/</span>n_av));
<pre class="src src-matlab"> n_av = 4;
han_win = hanning(ceil(length(cascade_hac_lac.Em.En.Data(<span class="org-type">:</span>,1))<span class="org-type">/</span>n_av));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">t = cascade_hac_lac.Em.En.Time;
Ts = t(2)<span class="org-type">-</span>t(1);
<pre class="src src-matlab"> t = cascade_hac_lac.Em.En.Time;
Ts = t(2)<span class="org-type">-</span>t(1);
[pxx_ol, f] = pwelch(tomo_align_dist.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
[pxx_ca, <span class="org-type">~</span>] = pwelch(cascade_hac_lac.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
[pxx_ol, f] = pwelch(tomo_align_dist.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
[pxx_ca, <span class="org-type">~</span>] = pwelch(cascade_hac_lac.Em.En.Data, han_win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
<div id="org11aa945" class="figure">
<div id="orgb068123" class="figure">
<p><img src="figs/cascade_hac_lac_tomography_psd.png" alt="cascade_hac_lac_tomography_psd.png" />
</p>
<p><span class="figure-number">Figure 9: </span>ASD of the position error (<a href="./figs/cascade_hac_lac_tomography_psd.png">png</a>, <a href="./figs/cascade_hac_lac_tomography_psd.pdf">pdf</a>)</p>
</div>
<div id="org845b982" class="figure">
<div id="orgb10044c" class="figure">
<p><img src="figs/cascade_hac_lac_tomography_cas.png" alt="cascade_hac_lac_tomography_cas.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Cumulative Amplitude Spectrum of the position error (<a href="./figs/cascade_hac_lac_tomography_cas.png">png</a>, <a href="./figs/cascade_hac_lac_tomography_cas.pdf">pdf</a>)</p>
</div>
<div id="org0151895" class="figure">
<div id="orgd639abb" class="figure">
<p><img src="figs/cascade_hac_lac_tomography.png" alt="cascade_hac_lac_tomography.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Results of the Tomography Experiment (<a href="./figs/cascade_hac_lac_tomography.png">png</a>, <a href="./figs/cascade_hac_lac_tomography.pdf">pdf</a>)</p>
@@ -492,7 +496,7 @@ Ts = t(2)<span class="org-type">-</span>t(1);
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-17 ven. 09:35</p>
<p class="date">Created: 2021-02-20 sam. 23:08</p>
</div>
</body>
</html>