880 lines
26 KiB
HTML
880 lines
26 KiB
HTML
<?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-11-27 ven. 18:20 -->
|
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
|
<title>Robust Control - \(\mathcal{H}_\infty\) Synthesis</title>
|
|
<meta name="generator" content="Org mode" />
|
|
<meta name="author" content="Dehaeze Thomas" />
|
|
<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 = {
|
|
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>
|
|
</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>
|
|
</div><div id="content">
|
|
<h1 class="title">Robust Control - \(\mathcal{H}_\infty\) Synthesis</h1>
|
|
<div id="table-of-contents">
|
|
<h2>Table of Contents</h2>
|
|
<div id="text-table-of-contents">
|
|
<ul>
|
|
<li><a href="#org482cee2">1. Introduction to the Control Methodology - Model Based Control</a>
|
|
<ul>
|
|
<li><a href="#org279a16f">1.1. Control Methodology</a></li>
|
|
<li><a href="#orgca6e3d9">1.2. Some Background: From Classical Control to Robust Control</a></li>
|
|
<li><a href="#orgc1a54dd">1.3. Example System</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org1336132">2. Classical Open Loop Shaping</a>
|
|
<ul>
|
|
<li><a href="#org1c9ddc9">2.1. Introduction ot Open Loop Shaping</a></li>
|
|
<li><a href="#org3cd2ec2">2.2. Example of Open Loop Shaping</a></li>
|
|
<li><a href="#orgafc190d">2.3. \(\mathcal{H}_\infty\) Loop Shaping Synthesis</a></li>
|
|
<li><a href="#org386c720">2.4. Example of the \(\mathcal{H}_\infty\) Loop Shaping Synthesis</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orgcf6b2a6">3. The \(\mathcal{H}_\infty\) Norm</a></li>
|
|
<li><a href="#org5bc80a8">4. \(\mathcal{H}_\infty\) Synthesis</a></li>
|
|
<li><a href="#org3a241a5">5. The Generalized Plant</a></li>
|
|
<li><a href="#org49fe7df">6. Problem Formulation</a></li>
|
|
<li><a href="#orgf671631">7. Classical feedback control and closed loop transfer functions</a></li>
|
|
<li><a href="#orgd118710">8. From a Classical Feedback Architecture to a Generalized Plant</a></li>
|
|
<li><a href="#orgdd1c5fa">9. Modern Interpretation of the Control Specifications</a>
|
|
<ul>
|
|
<li><a href="#org00cad5d">9.1. Introduction</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org0e07a10">10. Resources</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org482cee2" class="outline-2">
|
|
<h2 id="org482cee2"><span class="section-number-2">1</span> Introduction to the Control Methodology - Model Based Control</h2>
|
|
<div class="outline-text-2" id="text-1">
|
|
</div>
|
|
<div id="outline-container-org279a16f" class="outline-3">
|
|
<h3 id="org279a16f"><span class="section-number-3">1.1</span> Control Methodology</h3>
|
|
<div class="outline-text-3" id="text-1-1">
|
|
<p>
|
|
The typical methodology when applying Model Based Control to a plant is schematically shown in Figure <a href="#org3328399">1</a>.
|
|
It consists of three steps:
|
|
</p>
|
|
<ol class="org-ol">
|
|
<li><b>Identification or modeling</b>: \(\Longrightarrow\) mathematical model</li>
|
|
<li><b>Translate the specifications into mathematical criteria</b>:
|
|
<ul class="org-ul">
|
|
<li><span class="underline">Specifications</span>: Response Time, Noise Rejection, Maximum input amplitude, Robustness, …</li>
|
|
<li><span class="underline">Mathematical Criteria</span>: Cost Function, Shape of TF</li>
|
|
</ul></li>
|
|
<li><b>Synthesis</b>: research of \(K\) that satisfies the specifications for the model of the system</li>
|
|
</ol>
|
|
|
|
|
|
<div id="org3328399" class="figure">
|
|
<p><img src="figs/control-procedure.png" alt="control-procedure.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 1: </span>Typical Methodoly for Model Based Control</p>
|
|
</div>
|
|
|
|
<p>
|
|
In this document, we will mainly focus on steps 2 and 3.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgca6e3d9" class="outline-3">
|
|
<h3 id="orgca6e3d9"><span class="section-number-3">1.2</span> Some Background: From Classical Control to Robust Control</h3>
|
|
<div class="outline-text-3" id="text-1-2">
|
|
<p>
|
|
Classical Control (1930)
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>Tools:
|
|
<ul class="org-ul">
|
|
<li>TF (input-output)</li>
|
|
<li>Nyquist, Bode, Black, \ldots</li>
|
|
<li>P-PI-PID, Phase lead-lag, \ldots</li>
|
|
</ul></li>
|
|
<li>Advantages:
|
|
<ul class="org-ul">
|
|
<li>Stability</li>
|
|
<li>Performances</li>
|
|
<li>Robustness</li>
|
|
</ul></li>
|
|
<li>Disadvantages:
|
|
<ul class="org-ul">
|
|
<li>Manual Method</li>
|
|
<li>Only SISO</li>
|
|
</ul></li>
|
|
</ul>
|
|
|
|
<p>
|
|
Modern Control (1960)
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>Tools:
|
|
<ul class="org-ul">
|
|
<li>State Space</li>
|
|
<li>Optimal Command</li>
|
|
<li>LQR, LQG</li>
|
|
</ul></li>
|
|
<li>Advantages:
|
|
<ul class="org-ul">
|
|
<li>Automatic Synthesis</li>
|
|
<li>MIMO</li>
|
|
<li>Optimisation problem</li>
|
|
</ul></li>
|
|
<li>Disadvantages:
|
|
<ul class="org-ul">
|
|
<li>Robustness</li>
|
|
<li>Rejection of Perturbations</li>
|
|
</ul></li>
|
|
</ul>
|
|
|
|
<p>
|
|
Robust Control (1980)
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>Tools:
|
|
<ul class="org-ul">
|
|
<li>Disk Margin</li>
|
|
<li>Systems and Signals norms (\(\mathcal{H}_\infty\) and \(\mathcal{H}_2\) norms)</li>
|
|
<li>Closed Loop Transfer Functions</li>
|
|
<li>Loop Shaping</li>
|
|
</ul></li>
|
|
<li>Advantages:
|
|
<ul class="org-ul">
|
|
<li>Stability</li>
|
|
<li>Performances</li>
|
|
<li>Robustness</li>
|
|
<li>Automatic Synthesis</li>
|
|
<li>MIMO</li>
|
|
<li>Optimization Problem</li>
|
|
</ul></li>
|
|
<li>Disadvantages:
|
|
<ul class="org-ul">
|
|
<li>Requires the knowledge of specific tools</li>
|
|
<li>Need a reasonably good model of the system</li>
|
|
</ul></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div id="outline-container-orgc1a54dd" class="outline-3">
|
|
<h3 id="orgc1a54dd"><span class="section-number-3">1.3</span> Example System</h3>
|
|
<div class="outline-text-3" id="text-1-3">
|
|
<p>
|
|
Let’s consider the test-system shown in Figure <a href="#orgbec3f57">2</a>.
|
|
The notations used are listed in Table <a href="#orgf10115b">1</a>.
|
|
</p>
|
|
|
|
|
|
<div id="orgbec3f57" class="figure">
|
|
<p><img src="figs/mech_sys_1dof_inertial_contr.png" alt="mech_sys_1dof_inertial_contr.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 2: </span>Test System consisting of a payload with a mass \(m\) on top of an active system with a stiffness \(k\), damping \(c\) and an actuator.</p>
|
|
</div>
|
|
|
|
<table id="orgf10115b" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
<caption class="t-above"><span class="table-number">Table 1:</span> Example system variables</caption>
|
|
|
|
<colgroup>
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="org-left"><b>Notation</b></th>
|
|
<th scope="col" class="org-left"><b>Description</b></th>
|
|
<th scope="col" class="org-left"><b>Value</b></th>
|
|
<th scope="col" class="org-left"><b>Unit</b></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">\(m\)</td>
|
|
<td class="org-left">Payload’s mass to position / isolate</td>
|
|
<td class="org-left"> </td>
|
|
<td class="org-left">[kg]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(k\)</td>
|
|
<td class="org-left">Stiffness of the suspension system</td>
|
|
<td class="org-left"> </td>
|
|
<td class="org-left">[N/m]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(c\)</td>
|
|
<td class="org-left">Damping coefficient of the suspension system</td>
|
|
<td class="org-left"> </td>
|
|
<td class="org-left">[N/(m/s)]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(y\)</td>
|
|
<td class="org-left">Payload absolute displacement (measured by an inertial sensor)</td>
|
|
<td class="org-left"> </td>
|
|
<td class="org-left">[m]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(d\)</td>
|
|
<td class="org-left">Ground displacement, it acts as a disturbance</td>
|
|
<td class="org-left"> </td>
|
|
<td class="org-left">[m]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(u\)</td>
|
|
<td class="org-left">Actuator force</td>
|
|
<td class="org-left"> </td>
|
|
<td class="org-left">[N]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(r\)</td>
|
|
<td class="org-left">Wanted position of the mass (the reference)</td>
|
|
<td class="org-left"> </td>
|
|
<td class="org-left">[m]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(\epsilon = r - y\)</td>
|
|
<td class="org-left">Position error</td>
|
|
<td class="org-left"> </td>
|
|
<td class="org-left">[m]</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(K\)</td>
|
|
<td class="org-left">Feedback controller</td>
|
|
<td class="org-left">to be designed</td>
|
|
<td class="org-left">[N/m]</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<div class="exercice" id="org09b2f15">
|
|
<p>
|
|
Derive the following open-loop transfer functions:
|
|
</p>
|
|
\begin{align}
|
|
G(s) &= \frac{y}{u} \\
|
|
G_d(s) &= \frac{y}{d}
|
|
\end{align}
|
|
|
|
<p>
|
|
<b>Hint:</b> You can follow this generic procedure:
|
|
</p>
|
|
<ol class="org-ol">
|
|
<li>List all applied forces ot the mass: Actuator force, Stiffness force (Hooke’s law), …</li>
|
|
<li>Apply the Newton’s Second Law on the payload
|
|
\[ m \ddot{y} = \Sigma F \]</li>
|
|
<li>Transform the differential equations into the Laplace domain:
|
|
\[ \frac{d\ \cdot}{dt} \Leftrightarrow \cdot \times s \]</li>
|
|
<li>Write \(y(s)\) as a function of \(u(s)\) and \(w(s)\)</li>
|
|
</ol>
|
|
|
|
</div>
|
|
|
|
<p>
|
|
Having obtained \(G(s)\) and \(G_d(s)\), we can transform the system shown in Figure <a href="#orgbec3f57">2</a> into a classical feedback form as shown in Figure <a href="#orge09e85e">4</a>.
|
|
</p>
|
|
|
|
|
|
<div id="orge1cf983" class="figure">
|
|
<p><img src="figs/classical_feedback_test_system.png" alt="classical_feedback_test_system.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 3: </span>Block diagram corresponding to the example system</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org1336132" class="outline-2">
|
|
<h2 id="org1336132"><span class="section-number-2">2</span> Classical Open Loop Shaping</h2>
|
|
<div class="outline-text-2" id="text-2">
|
|
</div>
|
|
<div id="outline-container-org1c9ddc9" class="outline-3">
|
|
<h3 id="org1c9ddc9"><span class="section-number-3">2.1</span> Introduction ot Open Loop Shaping</h3>
|
|
<div class="outline-text-3" id="text-2-1">
|
|
<p>
|
|
Usually, the controller \(K(s)\) is designed such that the loop gain \(L(s)\) has desirable shape.
|
|
This technique is called <b>Open Loop Shaping</b>.
|
|
</p>
|
|
|
|
<div class="inlinetask">
|
|
<b>Explain why the Loop gain si an important “value”</b><br />
|
|
<p>
|
|
For instance example all the specifications can usually be explained in terms of the open loop gain.
|
|
</p>
|
|
</div>
|
|
|
|
|
|
|
|
<div id="orge09e85e" class="figure">
|
|
<p><img src="figs/open_loop_shaping.png" alt="open_loop_shaping.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 4: </span>Classical Feedback Architecture</p>
|
|
</div>
|
|
|
|
<p>
|
|
This is usually done manually has the loop gain \(L(s)\) depends linearly of \(K(s)\):
|
|
</p>
|
|
\begin{equation}
|
|
L(s) = G(s) K(s)
|
|
\end{equation}
|
|
<ul class="org-ul">
|
|
<li>where \(L(s)\) is called the <b>Loop Gain Transfer Function</b></li>
|
|
</ul>
|
|
|
|
<p>
|
|
\(K(s)\) then consists of a combination of leads, lags, notches, etc. such that its product with \(G(s)\) has wanted shape.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org3cd2ec2" class="outline-3">
|
|
<h3 id="org3cd2ec2"><span class="section-number-3">2.2</span> Example of Open Loop Shaping</h3>
|
|
<div class="outline-text-3" id="text-2-2">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">k = 1e<span class="org-type">-</span>6;
|
|
m = 10;
|
|
c = 10;
|
|
|
|
G =
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
|
|
<div id="org846352b" class="figure">
|
|
<p><img src="figs/bode_plot_example_afm.png" alt="bode_plot_example_afm.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 5: </span>Bode plot of the plant \(G(s)\)</p>
|
|
</div>
|
|
|
|
<p>
|
|
Specifications:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li><b>Performance</b>: Bandwidth of approximately 50Hz</li>
|
|
<li><b>Noise Attenuation</b>: Roll-off of -40dB/decade past 250Hz</li>
|
|
<li><b>Robustness</b>: Gain margin > 5dB and Phase margin > 40 deg</li>
|
|
</ul>
|
|
|
|
<div class="exercice" id="orge257cef">
|
|
<p>
|
|
Using <code>SISOTOOL</code>, design a controller that fulfill the specifications.
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">sisotool(G)
|
|
</pre>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<p>
|
|
In order to have the wanted Roll-off, two integrators are used, a lead is also added to have sufficient phase margin.
|
|
</p>
|
|
|
|
<p>
|
|
The obtained controller is shown below, and the bode plot of the Loop Gain is shown in Figure <a href="#orgd8a3cda">6</a>.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">K = 6e4 <span class="org-type">*</span> ...<span class="org-comment"> % Gain</span>
|
|
1<span class="org-type">/</span>(s<span class="org-type">^</span>2) <span class="org-type">*</span> ...<span class="org-comment"> % Double Integrator</span>
|
|
(1 <span class="org-type">+</span> s<span class="org-type">/</span>111)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>888); <span class="org-comment">% Lead</span>
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div id="orgd8a3cda" class="figure">
|
|
<p><img src="figs/loop_gain_manual_afm.png" alt="loop_gain_manual_afm.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 6: </span>Bode Plot of the obtained Loop Gain \(L(s) = G(s) K(s)\)</p>
|
|
</div>
|
|
|
|
<p>
|
|
And we can verify that we have the wanted stability margins:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">[Gm, Pm, <span class="org-type">~</span>, Wc] = margin(G<span class="org-type">*</span>K)
|
|
</pre>
|
|
</div>
|
|
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
|
|
|
|
<colgroup>
|
|
<col class="org-left" />
|
|
|
|
<col class="org-right" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="org-left"> </th>
|
|
<th scope="col" class="org-right">Value</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">Gain Margin [dB]</td>
|
|
<td class="org-right">7.2</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Phase Margin [deg]</td>
|
|
<td class="org-right">48.1</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Crossover [Hz]</td>
|
|
<td class="org-right">50.7</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgafc190d" class="outline-3">
|
|
<h3 id="orgafc190d"><span class="section-number-3">2.3</span> \(\mathcal{H}_\infty\) Loop Shaping Synthesis</h3>
|
|
<div class="outline-text-3" id="text-2-3">
|
|
<p>
|
|
The Open Loop Shaping synthesis can be performed using the \(\mathcal{H}_\infty\) Synthesis.
|
|
</p>
|
|
|
|
<p>
|
|
Even though we will not go into details, we will provide one example.
|
|
</p>
|
|
|
|
<p>
|
|
Using Matlab, the \(\mathcal{H}_\infty\) synthesis of a controller based on the wanted open loop shape can be performed using the <code>loopsyn</code> command:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">K = loopsyn(G, Gd);
|
|
</pre>
|
|
</div>
|
|
<p>
|
|
where:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li><code>G</code> is the (LTI) plant</li>
|
|
<li><code>Gd</code> is the wanted loop shape</li>
|
|
<li><code>K</code> is the synthesize controller</li>
|
|
</ul>
|
|
|
|
<div class="seealso" id="org3c008e3">
|
|
<p>
|
|
Matlab documentation of <code>loopsyn</code> (<a href="https://www.mathworks.com/help/robust/ref/loopsyn.html">link</a>).
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org386c720" class="outline-3">
|
|
<h3 id="org386c720"><span class="section-number-3">2.4</span> Example of the \(\mathcal{H}_\infty\) Loop Shaping Synthesis</h3>
|
|
<div class="outline-text-3" id="text-2-4">
|
|
<p>
|
|
Let’s re-use the previous plant.
|
|
</p>
|
|
|
|
<p>
|
|
Translate the specification into the wanted shape of the open loop gain.
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">G = tf(16,[1 0.16 16]);
|
|
|
|
Gd = 3.7e4<span class="org-type">*</span>1<span class="org-type">/</span>s<span class="org-type">*</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>20)<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>220)<span class="org-type">*</span>1<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>500);
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">[K,CL,GAM,INFO] = loopsyn(G, Gd);
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">bodeFig({K})
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgcf6b2a6" class="outline-2">
|
|
<h2 id="orgcf6b2a6"><span class="section-number-2">3</span> The \(\mathcal{H}_\infty\) Norm</h2>
|
|
<div class="outline-text-2" id="text-3">
|
|
<div class="definition" id="org86c267f">
|
|
<p>
|
|
The \(\mathcal{H}_\infty\) norm is defined as the peak of the maximum singular value of the frequency response
|
|
</p>
|
|
\begin{equation}
|
|
\|G(s)\|_\infty = \max_\omega \bar{\sigma}\big( G(j\omega) \big)
|
|
\end{equation}
|
|
|
|
<p>
|
|
For a SISO system \(G(s)\), it is simply the peak value of \(|G(j\omega)|\) as a function of frequency:
|
|
</p>
|
|
\begin{equation}
|
|
\|G(s)\|_\infty = \max_{\omega} |G(j\omega)| \label{eq:hinf_norm_siso}
|
|
\end{equation}
|
|
|
|
</div>
|
|
|
|
<div class="exampl" id="org9ae7fd2">
|
|
<p>
|
|
Let’s define a plant dynamics:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span>; k = 1e6; xi = 0.04;
|
|
|
|
G = 1<span class="org-type">/</span>k<span class="org-type">/</span>(s<span class="org-type">^</span>2<span class="org-type">/</span>w0<span class="org-type">^</span>2 <span class="org-type">+</span> 2<span class="org-type">*</span>xi<span class="org-type">*</span>s<span class="org-type">/</span>w0 <span class="org-type">+</span> 1);
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
And compute its \(\mathcal{H}_\infty\) norm using the <code>hinfnorm</code> function:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">hinfnorm(G)
|
|
</pre>
|
|
</div>
|
|
|
|
<pre class="example">
|
|
1.0013e-05
|
|
</pre>
|
|
|
|
|
|
<p>
|
|
The magnitude \(|G(j\omega)|\) of the plant \(G(s)\) as a function of frequency is shown in Figure <a href="#org220c414">7</a>.
|
|
The maximum value of the magnitude over all frequencies does correspond to the \(\mathcal{H}_\infty\) norm of \(G(s)\) as Equation \eqref{eq:hinf_norm_siso} implies.
|
|
</p>
|
|
|
|
|
|
<div id="org220c414" class="figure">
|
|
<p><img src="figs/hinfinity_norm_siso_bode.png" alt="hinfinity_norm_siso_bode.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 7: </span>Example of the \(\mathcal{H}_\infty\) norm of a SISO system</p>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org5bc80a8" class="outline-2">
|
|
<h2 id="org5bc80a8"><span class="section-number-2">4</span> \(\mathcal{H}_\infty\) Synthesis</h2>
|
|
<div class="outline-text-2" id="text-4">
|
|
<p>
|
|
<b>Optimization problem</b>:
|
|
\(\mathcal{H}_\infty\) synthesis is a method that uses an <b>algorithm</b> (LMI optimization, Riccati equation) to find a controller of the same order as the system so that the \(\mathcal{H}_\infty\) norms of defined transfer functions are minimized.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Engineer work</b>:
|
|
</p>
|
|
<ol class="org-ol">
|
|
<li>Write the problem as standard \(\mathcal{H}_\infty\) problem</li>
|
|
<li>Translate the specifications as \(\mathcal{H}_\infty\) norms</li>
|
|
<li>Make the synthesis and analyze the obtain controller</li>
|
|
<li>Reduce the order of the controller for implementation</li>
|
|
</ol>
|
|
|
|
<p>
|
|
<b>Many ways to use the \(\mathcal{H}_\infty\) Synthesis</b>:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>Traditional \(\mathcal{H}_\infty\) Synthesis</li>
|
|
<li>Mixed Sensitivity Loop Shaping</li>
|
|
<li>Fixed-Structure \(\mathcal{H}_\infty\) Synthesis</li>
|
|
<li>Signal Based \(\mathcal{H}_\infty\) Synthesis</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org3a241a5" class="outline-2">
|
|
<h2 id="org3a241a5"><span class="section-number-2">5</span> The Generalized Plant</h2>
|
|
<div class="outline-text-2" id="text-5">
|
|
|
|
<div id="orgf05141d" class="figure">
|
|
<p><img src="figs/general_plant.png" alt="general_plant.png" />
|
|
</p>
|
|
</div>
|
|
|
|
<table id="orgfb53780" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
<caption class="t-above"><span class="table-number">Table 2:</span> Notations for the general configuration</caption>
|
|
|
|
<colgroup>
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="org-left">Notation</th>
|
|
<th scope="col" class="org-left">Meaning</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">\(P\)</td>
|
|
<td class="org-left">Generalized plant model</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(w\)</td>
|
|
<td class="org-left">Exogenous inputs: commands, disturbances, noise</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(z\)</td>
|
|
<td class="org-left">Exogenous outputs: signals to be minimized</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(v\)</td>
|
|
<td class="org-left">Controller inputs: measurements</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(u\)</td>
|
|
<td class="org-left">Control signals</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
\begin{equation}
|
|
\begin{bmatrix} z \\ v \end{bmatrix} = P \begin{bmatrix} w \\ u \end{bmatrix} = \begin{bmatrix} P_{11} & P_{12} \\ P_{21} & P_{22} \end{bmatrix} \begin{bmatrix} w \\ u \end{bmatrix}
|
|
\end{equation}
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org49fe7df" class="outline-2">
|
|
<h2 id="org49fe7df"><span class="section-number-2">6</span> Problem Formulation</h2>
|
|
<div class="outline-text-2" id="text-6">
|
|
<div class="important" id="orgcec66b9">
|
|
<p>
|
|
The \(\mathcal{H}_\infty\) Synthesis objective is to find all stabilizing controllers \(K\) which minimize
|
|
</p>
|
|
\begin{equation}
|
|
\| F_l(P, K) \|_\infty = \max_{\omega} \overline{\sigma} \big( F_l(P, K)(j\omega) \big)
|
|
\end{equation}
|
|
|
|
</div>
|
|
|
|
|
|
<div id="org1e975ee" class="figure">
|
|
<p><img src="figs/general_control_names.png" alt="general_control_names.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 9: </span>General Control Configuration</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div id="outline-container-orgf671631" class="outline-2">
|
|
<h2 id="orgf671631"><span class="section-number-2">7</span> Classical feedback control and closed loop transfer functions</h2>
|
|
<div class="outline-text-2" id="text-7">
|
|
|
|
<div id="orgd59dc12" class="figure">
|
|
<p><img src="figs/classical_feedback.png" alt="classical_feedback.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 10: </span>Classical Feedback Architecture</p>
|
|
</div>
|
|
|
|
<table id="org111f2c5" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
<caption class="t-above"><span class="table-number">Table 3:</span> Notations for the Classical Feedback Architecture</caption>
|
|
|
|
<colgroup>
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="org-left">Notation</th>
|
|
<th scope="col" class="org-left">Meaning</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">\(G\)</td>
|
|
<td class="org-left">Plant model</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(K\)</td>
|
|
<td class="org-left">Controller</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(r\)</td>
|
|
<td class="org-left">Reference inputs</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(y\)</td>
|
|
<td class="org-left">Plant outputs</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(u\)</td>
|
|
<td class="org-left">Control signals</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(d\)</td>
|
|
<td class="org-left">Input Disturbance</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">\(\epsilon\)</td>
|
|
<td class="org-left">Tracking Error</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgd118710" class="outline-2">
|
|
<h2 id="orgd118710"><span class="section-number-2">8</span> From a Classical Feedback Architecture to a Generalized Plant</h2>
|
|
<div class="outline-text-2" id="text-8">
|
|
<p>
|
|
The procedure is:
|
|
</p>
|
|
<ol class="org-ol">
|
|
<li>define signals of the generalized plant</li>
|
|
<li>Remove \(K\) and rearrange the inputs and outputs</li>
|
|
</ol>
|
|
|
|
<div class="exampl" id="org211c0bc">
|
|
<p>
|
|
Let’s find the Generalized plant of corresponding to the tracking control architecture shown in Figure <a href="#orgbec59d7">11</a>
|
|
</p>
|
|
|
|
|
|
<div id="orgbec59d7" class="figure">
|
|
<p><img src="figs/classical_feedback_tracking.png" alt="classical_feedback_tracking.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 11: </span>Classical Feedback Control Architecture (Tracking)</p>
|
|
</div>
|
|
|
|
<p>
|
|
First, define the signals of the generalized plant:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>Exogenous inputs: \(w = r\)</li>
|
|
<li>Signals to be minimized: \(z_1 = \epsilon\), \(z_2 = u\)</li>
|
|
<li>Control signals: \(v = y\)</li>
|
|
<li>Control inputs: \(u\)</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Then, Remove \(K\) and rearrange the inputs and outputs.
|
|
We obtain the generalized plant shown in Figure <a href="#org64eccd4">12</a>.
|
|
</p>
|
|
|
|
|
|
<div id="org64eccd4" class="figure">
|
|
<p><img src="figs/mixed_sensitivity_ref_tracking.png" alt="mixed_sensitivity_ref_tracking.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 12: </span>Generalized plant of the Classical Feedback Control Architecture (Tracking)</p>
|
|
</div>
|
|
|
|
<p>
|
|
Using Matlab, the generalized plant can be defined as follows:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">P = [1 <span class="org-type">-</span>G;
|
|
0 1;
|
|
1 <span class="org-type">-</span>G]
|
|
</pre>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgdd1c5fa" class="outline-2">
|
|
<h2 id="orgdd1c5fa"><span class="section-number-2">9</span> Modern Interpretation of the Control Specifications</h2>
|
|
<div class="outline-text-2" id="text-9">
|
|
</div>
|
|
<div id="outline-container-org00cad5d" class="outline-3">
|
|
<h3 id="org00cad5d"><span class="section-number-3">9.1</span> Introduction</h3>
|
|
<div class="outline-text-3" id="text-9-1">
|
|
<ul class="org-ul">
|
|
<li><b>Reference tracking</b> Overshoot, Static error, Setling time
|
|
<ul class="org-ul">
|
|
<li>\(S(s) = T_{r \rightarrow \epsilon}\)</li>
|
|
</ul></li>
|
|
<li><b>Disturbances rejection</b>
|
|
<ul class="org-ul">
|
|
<li>\(G(s) S(s) = T_{d \rightarrow \epsilon}\)</li>
|
|
</ul></li>
|
|
<li><b>Measurement noise filtering</b>
|
|
<ul class="org-ul">
|
|
<li>\(T(s) = T_{n \rightarrow \epsilon}\)</li>
|
|
</ul></li>
|
|
<li><b>Small command amplitude</b>
|
|
<ul class="org-ul">
|
|
<li>\(K(s) S(s) = T_{r \rightarrow u}\)</li>
|
|
</ul></li>
|
|
<li><b>Stability</b>
|
|
<ul class="org-ul">
|
|
<li>\(S(s)\), \(T(s)\), \(K(s)S(s)\), \(G(s)S(s)\)</li>
|
|
</ul></li>
|
|
<li><b>Robustness to plant uncertainty</b> (stability margins)</li>
|
|
<li><b>Controller implementation</b></li>
|
|
</ul>
|
|
|
|
<p>
|
|
**
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org0e07a10" class="outline-2">
|
|
<h2 id="org0e07a10"><span class="section-number-2">10</span> Resources</h2>
|
|
<div class="outline-text-2" id="text-10">
|
|
<p>
|
|
<div class="yt"><iframe width="100%" height="100%" src="https://www.youtube.com/embed/?listType=playlist&list=PLn8PRpmsu08qFLMfgTEzR8DxOPE7fBiin" frameborder="0" allowfullscreen></iframe></div>
|
|
</p>
|
|
|
|
<p>
|
|
<div class="yt"><iframe width="100%" height="100%" src="https://www.youtube.com/embed/?listType=playlist&list=PLsjPUqcL7ZIFHCObUU_9xPUImZ203gB4o" frameborder="0" allowfullscreen></iframe></div>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="postamble" class="status">
|
|
<p class="author">Author: Dehaeze Thomas</p>
|
|
<p class="date">Created: 2020-11-27 ven. 18:20</p>
|
|
</div>
|
|
</body>
|
|
</html>
|