Export to PDF!

This commit is contained in:
Thomas Dehaeze 2020-12-04 23:38:01 +01:00
parent 5888f6a2a0
commit aedb62c0e6
8 changed files with 3142 additions and 569 deletions

262
.gitignore vendored Normal file
View File

@ -0,0 +1,262 @@
.auctex-auto/
.log/
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Comment the next line if you want to keep your tikz graphics files
*.tikz
*-tikzDictionary
# listings
*.lol
# makeidx
*.idx
*.ilg
*.ind
*.ist
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices
*.xyc
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# KBibTeX
*~[0-9]*
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta

File diff suppressed because it is too large Load Diff

382
index.org
View File

@ -11,9 +11,15 @@
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/> #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script> #+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
#+HTML_MATHJAX: align: center tagside: right font: TeX #+HTML_MATHJAX: align: center tagside: right font: TeX
#+BIND: org-latex-image-default-option "scale=1"
#+BIND: org-latex-image-default-width ""
#+LaTeX_CLASS: scrreprt
#+LaTeX_CLASS_OPTIONS: [a4paper, 10pt, DIV=12]
#+LaTeX_HEADER_EXTRA: \input{preamble.tex}
#+CSL_STYLE: ieee.csl #+CSL_STYLE: ieee.csl
#+PROPERTY: header-args:matlab :session *MATLAB* #+PROPERTY: header-args:matlab :session *MATLAB*
@ -41,7 +47,160 @@
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png") #+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
:END: :END:
* Introduction :ignore: * LaTeX Config :noexport:
#+begin_src emacs-lisp :tangle no
(setq org-latex-default-table-environment "tabular")
(setq org-latex-tables-booktabs nil)
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{float}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{caption,tabularx,booktabs}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{biblatex}
\addbibresource{ref.bib}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{fontawesome}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{caption}
\usepackage{subcaption}
\captionsetup[figure]{labelfont=bf}
\captionsetup[subfigure]{labelfont=bf}
\captionsetup[listing]{labelfont=bf}
\captionsetup[table]{labelfont=bf}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{xcolor}
\definecolor{my-blue}{HTML}{6b7adb}
\definecolor{my-pale-blue}{HTML}{e6e9f9}
\definecolor{my-red}{HTML}{db6b6b}
\definecolor{my-pale-red}{HTML}{f9e6e6}
\definecolor{my-green}{HTML}{6bdbb6}
\definecolor{my-pale-green}{HTML}{e6f9f3}
\definecolor{my-yellow}{HTML}{dbd26b}
\definecolor{my-pale-yellow}{HTML}{f9f7e6}
\definecolor{my-orange}{HTML}{dba76b}
\definecolor{my-pale-orange}{HTML}{f9f0e6}
\definecolor{my-grey}{HTML}{a3a3a3}
\definecolor{my-pale-grey}{HTML}{f0f0f0}
\definecolor{my-turq}{HTML}{6bc7db}
\definecolor{my-pale-turq}{HTML}{e6f6f9}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{inconsolata}
\usepackage[newfloat=true, chapter]{minted}
\usemintedstyle{autumn}
\setminted{frame=lines,breaklines=true,tabsize=4,fontsize=\scriptsize,autogobble=true,labelposition=topline,bgcolor=my-pale-grey}
\setminted[matlab]{label=Matlab}
\setminted[latex]{label=LaTeX}
\setminted[bash]{label=Bash}
\setminted[python]{label=Python}
\setminted[text]{label=Results}
\setmintedinline{fontsize=\normalsize,bgcolor=my-pale-grey}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage[most]{tcolorbox}
\tcbuselibrary{minted}
\newtcolorbox{seealso}[1][]{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=See Also,#1}
\newtcolorbox{hint}[1][]{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=Hint,#1}
\newtcolorbox{definition}[1][]{enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Definition,#1}
\newtcolorbox{important}[1][]{ enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Important,#1}
\newtcolorbox{exampl}[1][]{ enhanced,breakable,colback=my-pale-green,colframe=my-green,fonttitle=\bfseries,title=Example,#1}
\newtcolorbox{exercice}[1][]{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Exercice,#1}
\newtcolorbox{question}[1][]{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Question,#1}
\newtcolorbox{answer}[1][]{ enhanced,breakable,colback=my-pale-turq,colframe=my-turq,fonttitle=\bfseries,title=Answer,#1}
\newtcolorbox{summary}[1][]{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Summary,#1}
\newtcolorbox{caution}[1][]{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Caution,#1}
\newtcolorbox{warning}[1][]{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Warning,#1}
#+end_src
#+begin_src latex :tangle preamble.tex
\newtcolorbox{my-quote}[1]{%
colback=my-pale-grey,
grow to right by=-10mm,
grow to left by=-10mm,
boxrule=0pt,
boxsep=0pt,
breakable,
enhanced jigsaw,
borderline west={4pt}{0pt}{my-grey}}
\renewenvironment{quote}{\begin{my-quote}}{\end{my-quote}}
#+end_src
#+begin_src latex :tangle preamble.tex
\newtcolorbox{my-verse}[1]{%
colback=my-pale-grey,
grow to right by=-10mm,
grow to left by=-10mm,
boxrule=0pt,
boxsep=0pt,
breakable,
enhanced jigsaw,
borderline west={4pt}{0pt}{my-grey}}
\renewenvironment{verse}{\begin{my-verse}}{\end{my-verse}}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{environ}% http://ctan.org/pkg/environ
\NewEnviron{aside}{%
\marginpar{\BODY}
}
#+end_src
#+begin_src latex :tangle preamble.tex
\renewenvironment{verbatim}{\VerbatimEnvironment\begin{minted}[]{text}}{\end{minted}}
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{soul}
\sethlcolor{my-pale-grey}
\let\OldTexttt\texttt
\renewcommand{\texttt}[1]{{\ttfamily\hl{\mbox{\,#1\,}}}}
#+end_src
#+begin_src latex :tangle preamble.tex
\makeatletter
\preto\Gin@extensions{png,}
\DeclareGraphicsRule{.png}{pdf}{.pdf}{\noexpand\Gin@base.pdf}
\makeatother
#+end_src
#+begin_src latex :tangle preamble.tex
\usepackage{hyperref}
\hypersetup{
colorlinks = true,
allcolors = my-blue
}
\usepackage{hypcap}
#+end_src
* Introduction
:PROPERTIES:
:UNNUMBERED: t
:END:
The purpose of this document is to give a /practical introduction/ to the wonderful world of $\mathcal{H}_\infty$ Control. The purpose of this document is to give a /practical introduction/ to the wonderful world of $\mathcal{H}_\infty$ Control.
@ -78,12 +237,6 @@ The general structure of this document is as follows:
* Introduction to Model Based Control * Introduction to Model Based Control
<<sec:model_based_control>> <<sec:model_based_control>>
** Introduction :ignore:
# - Section [[sec:model_based_control_methodology]]
# - Section [[sec:comp_classical_modern_robust_control]]
# - Section [[sec:example_system]]
** Model Based Control - Methodology ** Model Based Control - Methodology
<<sec:model_based_control_methodology>> <<sec:model_based_control_methodology>>
@ -160,32 +313,32 @@ The three presented control methods are compared in Table [[tab:comparison_contr
Note that in parallel, there have been numerous other developments, including non-linear control, adaptive control, machine-learning control just to name a few. Note that in parallel, there have been numerous other developments, including non-linear control, adaptive control, machine-learning control just to name a few.
#+name: tab:comparison_control_methods #+name: tab:comparison_control_methods
#+caption: Table summurazing the main differences between classical, modern and robust control #+caption: Table summurazing the main differences between classical, modern and robust control
#+attr_latex: :environment tabularx :booktabs t :width \linewidth :align lccc
| <l> | <c> | <c> | <c> | | <l> | <c> | <c> | <c> |
| | *Classical Control* | *Modern Control* | *Robust Control* | | | *Classical Control* | *Modern Control* | *Robust Control* |
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------| |---------------+---------------------+--------------------------+-------------------------------|
| *Date* | 1930- | 1960- | 1980- | | *Date* | 1930- | 1960- | 1980- |
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------| |---------------+---------------------+--------------------------+-------------------------------|
| *Tools* | Transfer Functions | State Space formulation | Systems and Signals Norms | | *Tools* | Transfer Functions | State Space formulation | Systems/Signal Norms |
| | Nyquist, Bode Plots | Riccati Equations | Closed Loop Transfer Functions | | | Nyquist, Bode Plots | Riccati Equations | Closed Loop TF |
| | Root Locus | | Closed Loop Shaping | | | Root Locus | Kalman Filters | Closed Loop Shaping |
| | Phase and Gain margins | | Weighting Functions | | | Phase/Gain margins | | Weighting Functions |
| | Open Loop Shaping | | Disk margin | | | Open Loop Shaping | | Disk margin |
| | | | Singular Value Decomposition | |---------------+---------------------+--------------------------+-------------------------------|
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------| | *Controllers* | P, PI, PID | Full State Feedback | General Control Conf. |
| *Control Architectures* | Proportional, Integral, Derivative | Full State Feedback, LQR | General Control Configuration | | | Leads, Lags | LQG, LQR | |
| | Leads, Lags | Kalman Filters, LQG | Generalized Plant | |---------------+---------------------+--------------------------+-------------------------------|
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------|
| *Advantages* | Study Stability | Automatic Synthesis | Automatic Synthesis | | *Advantages* | Study Stability | Automatic Synthesis | Automatic Synthesis |
| | Simple | MIMO | MIMO | | | Simple | MIMO | MIMO |
| | Natural | Optimization Problem | Optimization Problem | | | Natural | Optimization Problem | Optimization Problem |
| | | | Guaranteed Robustness | | | | | Guaranteed Robustness |
| | | | Easy specification of performances | |---------------+---------------------+--------------------------+-------------------------------|
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------| | *Disadvant.* | Manual Method | No Guaranteed Robustness | Requires knowledge of tools |
| *Disadvantages* | Manual Method | No Guaranteed Robustness | Required knowledge of specific tools | | | Only SISO | Rejection of Pert. | Need good model of the system |
| | Only SISO | Difficult Rejection of Perturbations | Need a reasonably good model of the system | | | No input usage lim. | | |
| | No clear way to limit input usage | | |
#+begin_src latex :file robustness_performance.pdf #+begin_src latex :file robustness_performance.pdf
\begin{tikzpicture} \begin{tikzpicture}
@ -315,6 +468,7 @@ The notations used on Figure [[fig:mech_sys_1dof_inertial_contr]] are listed and
#+name: tab:example_notations #+name: tab:example_notations
#+caption: Example system variables #+caption: Example system variables
#+attr_latex: :environment tabularx :booktabs t :width \linewidth :align cXcc
| *Notation* | *Description* | *Value* | *Unit* | | *Notation* | *Description* | *Value* | *Unit* |
|--------------------+----------------------------------------------------------------+----------------+-----------| |--------------------+----------------------------------------------------------------+----------------+-----------|
| $m$ | Payload's mass to position / isolate | $10$ | [kg] | | $m$ | Payload's mass to position / isolate | $10$ | [kg] |
@ -335,6 +489,7 @@ Derive the following open-loop transfer functions:
\end{align} \end{align}
#+HTML: <details><summary>Hint</summary> #+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
You can follow this generic procedure: You can follow this generic procedure:
1. List all applied forces ot the mass: Actuator force, Stiffness force (Hooke's law), ... 1. List all applied forces ot the mass: Actuator force, Stiffness force (Hooke's law), ...
2. Apply the Newton's Second Law on the payload 2. Apply the Newton's Second Law on the payload
@ -345,6 +500,7 @@ You can follow this generic procedure:
#+HTML: </details> #+HTML: </details>
#+HTML: <details><summary>Results</summary> #+HTML: <details><summary>Results</summary>
#+LATEX: \tcbsubtitle{Results}
\begin{align} \begin{align}
G(s) &= \frac{1}{m s^2 + cs + k} \\ G(s) &= \frac{1}{m s^2 + cs + k} \\
G_d(s) &= \frac{cs + k}{m s^2 + cs + k} G_d(s) &= \frac{cs + k}{m s^2 + cs + k}
@ -501,6 +657,7 @@ Its name comes from the fact that this is actually the "gain around the loop".
#+name: fig:open_loop_shaping #+name: fig:open_loop_shaping
#+caption: Classical Feedback Architecture #+caption: Classical Feedback Architecture
#+attr_latex: :float nil
[[file:figs/open_loop_shaping.png]] [[file:figs/open_loop_shaping.png]]
#+end_definition #+end_definition
@ -584,6 +741,7 @@ Using =SISOTOOL=, design a controller that fulfills the specifications.
#+end_src #+end_src
#+HTML: <details><summary>Hint</summary> #+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
You can follow this procedure: You can follow this procedure:
1. In order to have good disturbance rejection at low frequency, add a simple or double *integrator* 1. In order to have good disturbance rejection at low frequency, add a simple or double *integrator*
2. In terms of the loop gain, the *bandwidth* can be defined at the frequency $\omega_c$ where $|l(j\omega_c)|$ first crosses 1 from above. 2. In terms of the loop gain, the *bandwidth* can be defined at the frequency $\omega_c$ where $|l(j\omega_c)|$ first crosses 1 from above.
@ -687,12 +845,13 @@ Such shape corresponds to the typical wanted Loop gain Shape shown in Figure [[f
#+name: tab:open_loop_shaping_specifications #+name: tab:open_loop_shaping_specifications
#+caption: Wanted Loop Shape corresponding to each specification #+caption: Wanted Loop Shape corresponding to each specification
| | Specification | Corresponding Loop Shape | #+attr_latex: :environment tabularx :booktabs t :width \linewidth :align lXX
|-------------------------+---------------------------------------------+-----------------------------------------------------------------| | | *Specification* | *Corresponding Loop Shape* |
| *Disturbance Rejection* | Highest possible rejection below 1Hz | Slope of -40dB/decade at low frequency to have a high loop gain | |--------------+----------------------------------------+------------------------------------------|
| *Positioning Speed* | Bandwidth of approximately 10Hz | $L$ crosses 1 at 10Hz: $\vert L_w(j2 \pi 10)\vert = 1$ | | *Dist. Rej.* | Highest possible rejection below 1Hz | Slope of -40dB/dec at low frequency |
| *Noise Attenuation* | Roll-off of -40dB/decade past 30Hz | Roll-off of -40dB/decade past 30Hz | | *Pos. Speed* | Bandwidth of approximately 10Hz | $L$ crosses 1 at 10Hz |
| *Robustness* | Gain margin > 3dB and Phase margin > 30 deg | Slope of -20dB/decade near the crossover | | *Noise Att.* | Roll-off of -40dB/decade past 30Hz | Roll-off of -40dB/decade past 30Hz |
| *Robustness* | $\Delta G > 3dB$, $\Delta \phi > 30^o$ | Slope of -20dB/decade near the crossover |
Then, a (stable, minimum phase) transfer function $L_w(s)$ should be created that has the same gain as the wanted shape of the Loop gain. Then, a (stable, minimum phase) transfer function $L_w(s)$ should be created that has the same gain as the wanted shape of the Loop gain.
For this example, a double integrator and a lead centered on 10Hz are used. For this example, a double integrator and a lead centered on 10Hz are used.
@ -808,9 +967,10 @@ Let's finally compare the obtained stability margins of the $\mathcal{H}_\infty$
#+name: tab:open_loop_shaping_compare #+name: tab:open_loop_shaping_compare
#+caption: Comparison of the characteristics obtained with the two methods #+caption: Comparison of the characteristics obtained with the two methods
#+attr_latex: :environment tabularx :booktabs t :width \linewidth :align Xcc
#+RESULTS: #+RESULTS:
| Specifications | Manual Method | $\mathcal{H}_\infty$ Method | | *Specifications* | *Manual Method* | *$\mathcal{H}_\infty$ Method* |
|-----------------------------+---------------+-----------------------------| |-----------------------------+-----------------+-------------------------------|
| Gain Margin $> 3$ [dB] | 3.1 | 31.7 | | Gain Margin $> 3$ [dB] | 3.1 | 31.7 |
| Phase Margin $> 30$ [deg] | 35.4 | 54.7 | | Phase Margin $> 30$ [deg] | 35.4 | 54.7 |
| Crossover $\approx 10$ [Hz] | 10.1 | 9.9 | | Crossover $\approx 10$ [Hz] | 10.1 | 9.9 |
@ -873,6 +1033,7 @@ We can see in Figure [[fig:hinfinity_norm_siso_bode]] that indeed, the $\mathcal
#+name: fig:hinfinity_norm_siso_bode #+name: fig:hinfinity_norm_siso_bode
#+caption: Example of the $\mathcal{H}_\infty$ norm of a SISO system #+caption: Example of the $\mathcal{H}_\infty$ norm of a SISO system
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/hinfinity_norm_siso_bode.png]] [[file:figs/hinfinity_norm_siso_bode.png]]
#+end_exampl #+end_exampl
@ -941,13 +1102,15 @@ A practical example about how to derive the generalized plant for a classical co
#+begin_important #+begin_important
#+name: fig:general_plant #+name: fig:general_plant
#+caption: Inputs and Outputs of the generalized Plant #+caption: Inputs and Outputs of the generalized Plant
#+ATTR_LATEX: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/general_plant.png]] [[file:figs/general_plant.png]]
#+name: tab:notation_general #+name: tab:notation_general
#+caption: Notations for the general configuration #+caption: Notations for the general configuration
| Notation | Meaning | #+attr_latex: :environment tabularx :booktabs t :width 0.8\linewidth :align cX :float nil
|----------+----------------------------------------------------| | *Notation* | *Meaning* |
|------------+----------------------------------------------------|
| $P$ | Generalized plant model | | $P$ | Generalized plant model |
| $w$ | Exogenous inputs: references, disturbances, noises | | $w$ | Exogenous inputs: references, disturbances, noises |
| $z$ | Exogenous outputs: signals to be minimized | | $z$ | Exogenous outputs: signals to be minimized |
@ -992,6 +1155,7 @@ Once the generalized plant is obtained, the $\mathcal{H}_\infty$ synthesis probl
#+name: fig:general_control_names #+name: fig:general_control_names
#+caption: General Control Configuration #+caption: General Control Configuration
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/general_control_names.png]] [[file:figs/general_control_names.png]]
#+end_important #+end_important
@ -1067,24 +1231,28 @@ The procedure to convert a typical control architecture as the one shown in Figu
#+name: fig:classical_feedback_tracking #+name: fig:classical_feedback_tracking
#+caption: Classical Feedback Control Architecture (Tracking) #+caption: Classical Feedback Control Architecture (Tracking)
#+attr_latex: :float nil
[[file:figs/classical_feedback_tracking.png]] [[file:figs/classical_feedback_tracking.png]]
#+HTML: <details><summary>Hint</summary> #+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
First, define the signals of the generalized plant: First, define the signals of the generalized plant:
- Exogenous inputs: $w = r$ - Exogenous inputs: $w = r$
- Signals to be minimized: - Signals to be minimized:
Usually, we want to minimize the tracking errors $\epsilon$ and the control signal $u$: $z = [\epsilon,\ u]$ Usually, we want to minimize the tracking errors $\epsilon$ and the control signal $u$: $z = [\epsilon,\ u]$
- Controller inputs: this is the signal at the input of the controller: $v = \epsilon$ - Controller inputs: this is the signal at the input of the controller: $v = \epsilon$
- Control inputs: signal generated by the controller: $u$ - Controller outputs: signal generated by the controller: $u$
Then, Remove $K$ and rearrange the inputs and outputs as in Figure [[fig:general_plant]]. Then, Remove $K$ and rearrange the inputs and outputs as in Figure [[fig:general_plant]].
#+HTML: </details> #+HTML: </details>
#+HTML: <details><summary>Answer</summary> #+HTML: <details><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Anwser}
The obtained generalized plant shown in Figure [[fig:mixed_sensitivity_ref_tracking]]. The obtained generalized plant shown in Figure [[fig:mixed_sensitivity_ref_tracking]].
#+name: fig:mixed_sensitivity_ref_tracking #+name: fig:mixed_sensitivity_ref_tracking
#+caption: Generalized plant of the Classical Feedback Control Architecture (Tracking) #+caption: Generalized plant of the Classical Feedback Control Architecture (Tracking)
#+attr_latex: :float nil
[[file:figs/mixed_sensitivity_ref_tracking.png]] [[file:figs/mixed_sensitivity_ref_tracking.png]]
Using Matlab, the generalized plant can be defined as follows: Using Matlab, the generalized plant can be defined as follows:
@ -1161,7 +1329,8 @@ These are summarized in Table [[tab:spec_closed_loop_tf]].
#+name: tab:spec_closed_loop_tf #+name: tab:spec_closed_loop_tf
#+caption: Typical Specification and associated closed-loop transfer function #+caption: Typical Specification and associated closed-loop transfer function
| Specification | Closed-Loop Transfer Function | #+attr_latex: :environment tabularx :booktabs t :width 0.8\linewidth :align Xl
| *Specification* | *CL Transfer Function* |
|--------------------------------+-----------------------------------------------| |--------------------------------+-----------------------------------------------|
| Reference Tracking | From $r$ to $\epsilon$ | | Reference Tracking | From $r$ to $\epsilon$ |
| Disturbance Rejection | From $d$ to $y$ | | Disturbance Rejection | From $d$ to $y$ |
@ -1174,13 +1343,14 @@ These are summarized in Table [[tab:spec_closed_loop_tf]].
For the feedback system in Figure [[fig:gang_of_four_feedback]], write the output signals $[\epsilon, u, y]$ as a function of the systems $K(s), G(s)$ and the input signals $[r, d, n]$. For the feedback system in Figure [[fig:gang_of_four_feedback]], write the output signals $[\epsilon, u, y]$ as a function of the systems $K(s), G(s)$ and the input signals $[r, d, n]$.
#+HTML: <details><summary>Hint</summary> #+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
Take one of the output (e.g. $y$), and write it as a function of the inputs $[d, r, n]$ going step by step around the loop: Take one of the output (e.g. $y$), and write it as a function of the inputs $[d, r, n]$ going step by step around the loop:
\begin{aligned} \begin{align*}
y &= G u \\ y &= G u \\
&= G (d + K \epsilon) \\ &= G (d + K \epsilon) \\
&= G \big(d + K (r - n - y) \big) \\ &= G \big(d + K (r - n - y) \big) \\
&= G d + GK r - GK n - GK y &= G d + GK r - GK n - GK y
\end{aligned} \end{align*}
Isolate $y$ at the right hand side, and finally obtain: Isolate $y$ at the right hand side, and finally obtain:
\[ y = \frac{GK}{1+ GK} r + \frac{G}{1 + GK} d - \frac{GK}{1 + GK} n \] \[ y = \frac{GK}{1+ GK} r + \frac{G}{1 + GK} d - \frac{GK}{1 + GK} n \]
@ -1189,6 +1359,7 @@ Do the same procedure for $u$ and $\epsilon$
#+HTML: </details> #+HTML: </details>
#+HTML: <details><summary>Answer</summary> #+HTML: <details><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Answer}
The following equations should be obtained: The following equations should be obtained:
\begin{align} \begin{align}
y &= \frac{GK}{1 + GK} r + \frac{G}{1 + GK} d - \frac{GK}{1 + GK} n \\ y &= \frac{GK}{1 + GK} r + \frac{G}{1 + GK} d - \frac{GK}{1 + GK} n \\
@ -1238,8 +1409,9 @@ The comparison of the sensitivity functions shapes and their effect on the step
#+name: tab:compare_sensitivity_shapes #+name: tab:compare_sensitivity_shapes
#+caption: Comparison of the sensitivity function shape and the corresponding step response for the three controller variations #+caption: Comparison of the sensitivity function shape and the corresponding step response for the three controller variations
| Controller | Sensitivity Function Shape | Change of the Step Response | #+attr_latex: :environment tabularx :booktabs t :width 0.9\linewidth :align lXX
|------------+----------------------------------------------------+----------------------------------| | *Controller* | *Sensitivity Function Shape* | *Change of the Step Response* |
|--------------+----------------------------------------------------+----------------------------------|
| $K_1(s)$ | Larger bandwidth $\omega_b$ | Faster rise time | | $K_1(s)$ | Larger bandwidth $\omega_b$ | Faster rise time |
| $K_2(s)$ | Larger peak value $\Vert S\Vert_\infty$ | Large overshoot and oscillations | | $K_2(s)$ | Larger peak value $\Vert S\Vert_\infty$ | Large overshoot and oscillations |
| $K_3(s)$ | Larger low frequency gain $\vert S(j\cdot 0)\vert$ | Larger static error | | $K_3(s)$ | Larger low frequency gain $\vert S(j\cdot 0)\vert$ | Larger static error |
@ -1379,6 +1551,7 @@ From the simple analysis above, we can draw a first estimation of the wanted sha
#+name: fig:h-infinity-spec-S #+name: fig:h-infinity-spec-S
#+caption: Typical wanted shape of the Sensitivity transfer function #+caption: Typical wanted shape of the Sensitivity transfer function
#+attr_latex: :float nil
[[file:figs/h-infinity-spec-S.png]] [[file:figs/h-infinity-spec-S.png]]
#+end_important #+end_important
@ -1445,10 +1618,10 @@ Or does it? Let's find out.
#+name: fig:phase_gain_margin_model_plant #+name: fig:phase_gain_margin_model_plant
#+caption: Bode plot of the obtained Loop Gain $L(s)$ #+caption: Bode plot of the obtained Loop Gain $L(s)$
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/phase_gain_margin_model_plant.png]] [[file:figs/phase_gain_margin_model_plant.png]]
Now let's suppose the controller is implemented in practice, and the "real" plant $G_r(s)$ as a slightly lower damping factor than the one estimated for the model: Now let's suppose the controller is implemented in practice, and the "real" plant $G_r(s)$ as a slightly lower damping factor than the one estimated for the model:
#+begin_src matlab #+begin_src matlab
xi = 0.03; xi = 0.03;
@ -1504,6 +1677,7 @@ It is confirmed by checking the stability of the closed loop system:
#+name: fig:phase_gain_margin_real_plant #+name: fig:phase_gain_margin_real_plant
#+caption: Bode plots of $L(s)$ (loop gain corresponding the nominal plant) and $L_r(s)$ (loop gain corresponding to the real plant) #+caption: Bode plots of $L(s)$ (loop gain corresponding the nominal plant) and $L_r(s)$ (loop gain corresponding to the real plant)
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/phase_gain_margin_real_plant.png]] [[file:figs/phase_gain_margin_real_plant.png]]
@ -1516,7 +1690,7 @@ Let's now determine a new robustness indicator based on the Nyquist Stability Cr
#+begin_definition #+begin_definition
- Nyquist Stability Criteria (for stable systems) :: - Nyquist Stability Criteria (for stable systems) ::
If the open-loop transfer function $L(s)$ is stable, then the closed-loop system will be unstable for any encirclement of the point $1$ on the Nyquist plot. If the open-loop transfer function $L(s)$ is stable, then the closed-loop system will be unstable for any encirclement of the point $-1$ on the Nyquist plot.
- Nyquist Plot :: - Nyquist Plot ::
The Nyquist plot shows the evolution of $L(j\omega)$ in the complex plane from $\omega = 0 \to \infty$. The Nyquist plot shows the evolution of $L(j\omega)$ in the complex plane from $\omega = 0 \to \infty$.
@ -1591,6 +1765,7 @@ The gain, phase and module margins are graphically shown to have an idea of what
#+name: fig:module_margin_example #+name: fig:module_margin_example
#+caption: Nyquist plot with visual indication of the Gain margin $\Delta G$, Phase margin $\Delta \phi$ and Module margin $\Delta M$ #+caption: Nyquist plot with visual indication of the Gain margin $\Delta G$, Phase margin $\Delta \phi$ and Module margin $\Delta M$
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/module_margin_example.png]] [[file:figs/module_margin_example.png]]
#+end_exampl #+end_exampl
@ -1642,8 +1817,9 @@ And we now understand why setting an upper bound on the magnitude of $S$ is gene
#+name: tab:specification_modern #+name: tab:specification_modern
#+caption: Typical Specifications and corresponding wanted norms of open and closed loop tansfer functions #+caption: Typical Specifications and corresponding wanted norms of open and closed loop tansfer functions
| | Open-Loop Shaping | Closed-Loop Shaping | #+attr_latex: :environment tabularx :booktabs t :width 0.9\linewidth :align lXX
|-----------------------------+--------------------+--------------------------------------------| | | *Open-Loop Shaping* | *Closed-Loop Shaping* |
|-----------------------------+---------------------+--------------------------------------------|
| Reference Tracking | $L$ large | $S$ small | | Reference Tracking | $L$ large | $S$ small |
| Disturbance Rejection | $L$ large | $GS$ small | | Disturbance Rejection | $L$ large | $GS$ small |
| Measurement Noise Filtering | $L$ small | $T$ small | | Measurement Noise Filtering | $L$ small | $T$ small |
@ -1769,12 +1945,14 @@ Let's now show how this is equivalent as *shaping* the sensitivity function:
Using matlab, compute the weighted generalized plant shown in Figure [[fig:first_order_weight]] as a function of $G(s)$ and $W_S(s)$. Using matlab, compute the weighted generalized plant shown in Figure [[fig:first_order_weight]] as a function of $G(s)$ and $W_S(s)$.
#+HTML: <details><summary>Hint</summary> #+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
The weighted generalized plant can be defined in Matlab using two techniques: The weighted generalized plant can be defined in Matlab using two techniques:
- by writing manually the 4 transfer functions from $[w, u]$ to $[\tilde{\epsilon}, v]$ - by writing manually the 4 transfer functions from $[w, u]$ to $[\tilde{\epsilon}, v]$
- by pre-multiplying the (non-weighted) generalized plant by a block-diagonal transfer function matrix containing the weights for the outputs $z$ and =1= for the outputs $v$ - by pre-multiplying the (non-weighted) generalized plant by a block-diagonal transfer function matrix containing the weights for the outputs $z$ and =1= for the outputs $v$
#+HTML: </details> #+HTML: </details>
#+HTML: <details><summary>Answer</summary> #+HTML: <details><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Answer}
The two solutions below can be used. The two solutions below can be used.
#+begin_src matlab :tangle no :eval no #+begin_src matlab :tangle no :eval no
@ -1823,7 +2001,7 @@ The Matlab code below produces a weighting function with the following character
- Gain of 1 at 10Hz - Gain of 1 at 10Hz
- High frequency gain of 0.5 - High frequency gain of 0.5
#+begin_src matlab #+begin_src matlab :float nil
Ws = makeweight(1e2, [2*pi*10, 1], 1/2); Ws = makeweight(1e2, [2*pi*10, 1], 1/2);
#+end_src #+end_src
@ -1845,6 +2023,7 @@ The Matlab code below produces a weighting function with the following character
#+name: fig:first_order_weight #+name: fig:first_order_weight
#+caption: Obtained Magnitude of the Weighting Function #+caption: Obtained Magnitude of the Weighting Function
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/first_order_weight.png]] [[file:figs/first_order_weight.png]]
#+end_exampl #+end_exampl
@ -1870,8 +2049,6 @@ The parameters permit to specify:
A Matlab function implementing Equation eqref:eq:weight_formula_advanced is shown below: A Matlab function implementing Equation eqref:eq:weight_formula_advanced is shown below:
#+name: lst:generateWeight
#+caption: Matlab Function that can be used to generate Weighting functions
#+begin_src matlab :tangle matlab/generateWeight.m :comments none :eval no #+begin_src matlab :tangle matlab/generateWeight.m :comments none :eval no
function [W] = generateWeight(args) function [W] = generateWeight(args)
arguments arguments
@ -1928,6 +2105,7 @@ The obtained shapes are shown in Figure [[fig:high_order_weight]].
#+name: fig:high_order_weight #+name: fig:high_order_weight
#+caption: Higher order weights using Equation eqref:eq:weight_formula_advanced #+caption: Higher order weights using Equation eqref:eq:weight_formula_advanced
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/high_order_weight.png]] [[file:figs/high_order_weight.png]]
#+end_seealso #+end_seealso
@ -1946,6 +2124,7 @@ As usual, the plant used is the one presented in Section [[sec:example_system]].
Translate the requirements as upper bounds on the Sensitivity function and design the corresponding weighting functions using Matlab. Translate the requirements as upper bounds on the Sensitivity function and design the corresponding weighting functions using Matlab.
#+HTML: <details><summary>Hint</summary> #+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
The typical wanted upper bound of the sensitivity function is shown in Figure [[fig:h-infinity-spec-S-bis]]. The typical wanted upper bound of the sensitivity function is shown in Figure [[fig:h-infinity-spec-S-bis]].
More precisely: More precisely:
@ -1958,10 +2137,12 @@ Remember that the wanted upper bound of the sensitivity function is defined by t
#+name: fig:h-infinity-spec-S-bis #+name: fig:h-infinity-spec-S-bis
#+caption: Typical wanted shape of the Sensitivity transfer function #+caption: Typical wanted shape of the Sensitivity transfer function
#+attr_latex: :float nil
[[file:figs/h-infinity-spec-S.png]] [[file:figs/h-infinity-spec-S.png]]
#+HTML: </details> #+HTML: </details>
#+HTML: <details><summary>Answer</summary> #+HTML: <details><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Answer}
We want to design the weighting function $W_s(s)$ such that: We want to design the weighting function $W_s(s)$ such that:
1. $|W_s(j \cdot 2 \pi 10)| = \sqrt{2}$ 1. $|W_s(j \cdot 2 \pi 10)| = \sqrt{2}$
2. $|W_s(j \cdot 0)| = 10^3$ 2. $|W_s(j \cdot 0)| = 10^3$
@ -2016,10 +2197,10 @@ And the $\mathcal{H}_\infty$ synthesis is performed on the /weighted/ generalize
#+end_example #+end_example
$\gamma \approx 0.5$ means that the $\mathcal{H}_\infty$ synthesis generated a controller $K(s)$ that stabilizes the closed-loop system, and such that the $\mathcal{H}_\infty$ norm of the closed-loop transfer function from $w$ to $z$ is less than $\gamma$: $\gamma \approx 0.5$ means that the $\mathcal{H}_\infty$ synthesis generated a controller $K(s)$ that stabilizes the closed-loop system, and such that the $\mathcal{H}_\infty$ norm of the closed-loop transfer function from $w$ to $z$ is less than $\gamma$:
\begin{aligned} \begin{align*}
& \| W_s(s) S(s) \|_\infty \approx 0.5 \\ & \| W_s(s) S(s) \|_\infty \approx 0.5 \\
& \Leftrightarrow |S(j\omega)| < \frac{0.5}{|W_s(j\omega)|} \quad \forall \omega & \Leftrightarrow |S(j\omega)| < \frac{0.5}{|W_s(j\omega)|} \quad \forall \omega
\end{aligned} \end{align*}
This is indeed what we can see by comparing $|S|$ and $|W_S|$ in Figure [[fig:results_sensitivity_hinf]]. This is indeed what we can see by comparing $|S|$ and $|W_S|$ in Figure [[fig:results_sensitivity_hinf]].
@ -2063,31 +2244,33 @@ When multiple closed-loop transfer function are shaped at the same time, it is r
#+name: tab:usual_shaping_gang_four #+name: tab:usual_shaping_gang_four
#+caption: Typical specifications and corresponding shaping of the /Gang of four/ #+caption: Typical specifications and corresponding shaping of the /Gang of four/
#+attr_latex: :environment tabularx :booktabs t :width 0.9\linewidth :align llX
| <l> | <c> | <l> | | <l> | <c> | <l> |
| Specification | Gang of Four | Wanted shape | | *Specifications* | *TF* | *Wanted shape* |
|--------------------------------------+--------------+-----------------------------------------------------------| |-------------------------------+------+------------------------------------------------|
| Fast Reference Tracking | $S$ | Set lower bound on the bandwidth | | Fast Reference Tracking | $S$ | Set lower bound on the bandwidth |
| Small Steady State Errors | $S$ | Small low frequency gain | | Small Steady State Errors | $S$ | Small low frequency gain |
| Follow Step ref. inputs | $S$ | Slope of +20dB/dec at low frequency | | Follow Step ref. inputs | $S$ | Slope of +20dB/dec at low frequency |
| Follow Ramp ref. inputs | $S$ | Slope of +40dB/dec at low frequency | | Follow Ramp ref. inputs | $S$ | Slope of +40dB/dec at low frequency |
| Follow Sinusoidal ref. inputs | $S$ | Small magnitude centered on the sin. frequency | | Follow Sin. ref. inputs | $S$ | Small magnitude centered on the sin. frequency |
|--------------------------------------+--------------+-----------------------------------------------------------| |-------------------------------+------+------------------------------------------------|
| Output Disturbance Rejection | $S$ | Small gain in the disturbance bandwidth | | Output Disturbance Rejection | $S$ | Small gain in the disturbance bandwidth |
| Input Disturbance Rejection | $GS$ | Small gain in the disturbance bandwidth | | Input Disturbance Rejection | $GS$ | Small gain in the disturbance bandwidth |
| Prevent inversion of resonant plants | $GS$ | Limit gain around resonance | | Prevent notching resonances | $GS$ | Limit gain around resonance |
|--------------------------------------+--------------+-----------------------------------------------------------| |-------------------------------+------+------------------------------------------------|
| Small Command Amplitude | $KS$ | Small at high frequency | | Small Command Amplitude | $KS$ | Small at high frequency |
| Limitation of the Control Bandwidth | $T$ | Set an upper bound on the bandwidth | | Limitation of the Bandwidth | $T$ | Set an upper bound on the bandwidth |
| Measurement Noise Filtering | $T$ | Small high frequency gain | | Measurement Noise Filtering | $T$ | Small high frequency gain |
|--------------------------------------+--------------+-----------------------------------------------------------| |-------------------------------+------+------------------------------------------------|
| Stability margins | $S$ | Module margin: $\Vert S\Vert_\infty$ small | | Stability margins | $S$ | Module margin: $\Vert S\Vert_\infty$ small |
| Robustness to un-modelled dynamics | $T$ | Small at frequencies where the plant uncertainty is large | | Robust to unmodelled dynamics | $T$ | Small at freq. where uncertainty is large |
Depending on which closed-loop transfer function are to be shaped, different weighted generalized plant can be used. Depending on which closed-loop transfer function are to be shaped, different weighted generalized plant can be used.
Some of them are described below for reference, it is a good exercise to try to re-design such weighted generalized plants. Some of them are described below for reference, it is a good exercise to try to re-design such weighted generalized plants.
*** S KS :ignore: *** S KS :ignore:
#+HTML: <details><summary>Shaping of S and KS</summary> #+HTML: <details><summary>Shaping of S and KS</summary>
#+latex: \begin{exampl}[after title={~- Shape $S$ and $KS$}]
#+begin_src latex :file general_conf_shaping_S_KS.pdf #+begin_src latex :file general_conf_shaping_S_KS.pdf
\begin{tikzpicture} \begin{tikzpicture}
% Blocs % Blocs
@ -2126,6 +2309,7 @@ Some of them are described below for reference, it is a good exercise to try to
#+name: fig:general_conf_shaping_S_KS #+name: fig:general_conf_shaping_S_KS
#+caption: Generalized Plant to shape $S$ and $KS$ #+caption: Generalized Plant to shape $S$ and $KS$
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/general_conf_shaping_S_KS.png]] [[file:figs/general_conf_shaping_S_KS.png]]
@ -2133,17 +2317,18 @@ Weighting functions:
- $W_1(s)$ is used to shape $S$ - $W_1(s)$ is used to shape $S$
- $W_2(s)$ is used to shape $KS$ - $W_2(s)$ is used to shape $KS$
#+name: lst:general_plant_S_KS
#+caption: General Plant definition corresponding to Figure [[fig:general_conf_shaping_S_KS]]
#+begin_src matlab :eval no :tangle no #+begin_src matlab :eval no :tangle no
P = [W1 -G*W1 P = [1 -G
0 W2 0 1
1 -G]; 1 -G];
Pw = blkdiag(W1, W2, 1)*P;
#+end_src #+end_src
#+latex: \end{exampl}
#+HTML: </details> #+HTML: </details>
*** S T :ignore: *** S T :ignore:
#+HTML: <details><summary>Shaping of S and T</summary> #+HTML: <details><summary>Shaping of S and T</summary>
#+latex: \begin{exampl}[after title={~- Shape $S$ and $T$}]
#+begin_src latex :file general_conf_shaping_S_T.pdf #+begin_src latex :file general_conf_shaping_S_T.pdf
\begin{tikzpicture} \begin{tikzpicture}
% Blocs % Blocs
@ -2180,6 +2365,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_T #+name: fig:general_conf_shaping_S_T
#+caption: Generalized Plant to shape $S$ and $T$ #+caption: Generalized Plant to shape $S$ and $T$
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/general_conf_shaping_S_T.png]] [[file:figs/general_conf_shaping_S_T.png]]
@ -2187,17 +2373,18 @@ Weighting functions:
- $W_1$ is used to shape $S$ - $W_1$ is used to shape $S$
- $W_2$ is used to shape $T$ - $W_2$ is used to shape $T$
#+name: lst:general_plant_S_T
#+caption: General Plant definition corresponding to Figure [[fig:general_conf_shaping_S_T]]
#+begin_src matlab :eval no :tangle no #+begin_src matlab :eval no :tangle no
P = [W1 -G*W1 P = [1 -G
0 G*W2 0 G
1 -G]; 1 -G];
Pw = blkdiag(W1, W2, 1)*P;
#+end_src #+end_src
#+latex: \end{exampl}
#+HTML: </details> #+HTML: </details>
*** S GS :ignore: *** S GS :ignore:
#+HTML: <details><summary>Shaping of S and GS</summary> #+HTML: <details><summary>Shaping of S and GS</summary>
#+latex: \begin{exampl}[after title={~- Shape $S$ and $GS$}]
#+begin_src latex :file general_conf_shaping_S_GS.pdf #+begin_src latex :file general_conf_shaping_S_GS.pdf
\begin{tikzpicture} \begin{tikzpicture}
% Blocs % Blocs
@ -2234,6 +2421,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_GS #+name: fig:general_conf_shaping_S_GS
#+caption: Generalized Plant to shape $S$ and $GS$ #+caption: Generalized Plant to shape $S$ and $GS$
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/general_conf_shaping_S_GS.png]] [[file:figs/general_conf_shaping_S_GS.png]]
@ -2241,17 +2429,18 @@ Weighting functions:
- $W_1$ is used to shape $S$ - $W_1$ is used to shape $S$
- $W_2$ is used to shape $GS$ - $W_2$ is used to shape $GS$
#+name: lst:general_plant_S_GS
#+caption: General Plant definition corresponding to Figure [[fig:general_conf_shaping_S_GS]]
#+begin_src matlab :eval no :tangle no #+begin_src matlab :eval no :tangle no
P = [W1 -W1 P = [1 -1
G*W2 -G*W2 G -G
G -G]; G -G];
Pw = blkdiag(W1, W2, 1)*P;
#+end_src #+end_src
#+latex: \end{exampl}
#+HTML: </details> #+HTML: </details>
*** S T KS :ignore: *** S T KS :ignore:
#+HTML: <details><summary>Shaping of S, T and KS</summary> #+HTML: <details><summary>Shaping of S, T and KS</summary>
#+latex: \begin{exampl}[after title={~- Shape $S$, $T$ and $KS$}]
#+begin_src latex :file general_conf_shaping_S_T_KS.pdf #+begin_src latex :file general_conf_shaping_S_T_KS.pdf
\begin{tikzpicture} \begin{tikzpicture}
% Blocs % Blocs
@ -2293,6 +2482,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_T_KS #+name: fig:general_conf_shaping_S_T_KS
#+caption: Generalized Plant to shape $S$, $T$ and $KS$ #+caption: Generalized Plant to shape $S$, $T$ and $KS$
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/general_conf_shaping_S_T_KS.png]] [[file:figs/general_conf_shaping_S_T_KS.png]]
@ -2301,18 +2491,19 @@ Weighting functions:
- $W_2$ is used to shape $KS$ - $W_2$ is used to shape $KS$
- $W_3$ is used to shape $T$ - $W_3$ is used to shape $T$
#+name: lst:general_plant_S_T_KS
#+caption: General Plant definition corresponding to Figure [[fig:general_conf_shaping_S_T_KS]]
#+begin_src matlab :eval no :tangle no #+begin_src matlab :eval no :tangle no
P = [W1 -G*W1 P = [1 -G
0 W2 0 1
0 G*W3 0 G
1 -G]; 1 -G];
Pw = blkdiag(W1, W2, W3, 1)*P;
#+end_src #+end_src
#+latex: \end{exampl}
#+HTML: </details> #+HTML: </details>
*** S T GS :ignore: *** S T GS :ignore:
#+HTML: <details><summary>Shaping of S, T and GS</summary> #+HTML: <details><summary>Shaping of S, T and GS</summary>
#+latex: \begin{exampl}[after title={~- Shape $S$, $T$ and $GS$}]
#+begin_src latex :file general_conf_shaping_S_T_GS.pdf #+begin_src latex :file general_conf_shaping_S_T_GS.pdf
\begin{tikzpicture} \begin{tikzpicture}
% Blocs % Blocs
@ -2354,6 +2545,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_T_GS #+name: fig:general_conf_shaping_S_T_GS
#+caption: Generalized Plant to shape $S$, $T$ and $GS$ #+caption: Generalized Plant to shape $S$, $T$ and $GS$
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/general_conf_shaping_S_T_GS.png]] [[file:figs/general_conf_shaping_S_T_GS.png]]
@ -2362,18 +2554,19 @@ Weighting functions:
- $W_2$ is used to shape $GS$ - $W_2$ is used to shape $GS$
- $W_3$ is used to shape $T$ - $W_3$ is used to shape $T$
#+name: lst:general_plant_S_T_GS
#+caption: General Plant definition corresponding to Figure [[fig:general_conf_shaping_S_T_GS]]
#+begin_src matlab :eval no :tangle no #+begin_src matlab :eval no :tangle no
P = [W1 -W1 P = [1 -1
G*W2 -G*W2 G -G
0 W3 0 1
G -G]; G -G];
Pw = blkdiag(W1, W2, W3, 1)*P;
#+end_src #+end_src
#+latex: \end{exampl}
#+HTML: </details> #+HTML: </details>
*** S T KS GS :ignore: *** S T KS GS :ignore:
#+HTML: <details><summary>Shaping of S, T, KS and GS</summary> #+HTML: <details><summary>Shaping of S, T, KS and GS</summary>
#+latex: \begin{exampl}[after title={~- Shape $S$, $T$, $KS$ and $GS$}]
#+begin_src latex :file general_conf_shaping_S_T_KS_GS.pdf #+begin_src latex :file general_conf_shaping_S_T_KS_GS.pdf
\begin{tikzpicture} \begin{tikzpicture}
% Blocs % Blocs
@ -2419,6 +2612,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_T_KS_GS #+name: fig:general_conf_shaping_S_T_KS_GS
#+caption: Generalized Plant to shape $S$, $T$, $KS$ and $GS$ #+caption: Generalized Plant to shape $S$, $T$, $KS$ and $GS$
#+attr_latex: :float nil
#+RESULTS: #+RESULTS:
[[file:figs/general_conf_shaping_S_T_KS_GS.png]] [[file:figs/general_conf_shaping_S_T_KS_GS.png]]
@ -2428,13 +2622,13 @@ Weighting functions:
- $W_1W_3$ is used to shape $GS$ - $W_1W_3$ is used to shape $GS$
- $W_2W_3$ is used to shape $T$ - $W_2W_3$ is used to shape $T$
#+name: lst:general_plant_S_T_KS_GS
#+caption: General Plant definition corresponding to Figure [[fig:general_conf_shaping_S_T_KS_GS]]
#+begin_src matlab :eval no :tangle no #+begin_src matlab :eval no :tangle no
P = [ W1 -W1*G*W3 -G*W1 P = [ 1 -G -G
0 0 W2 0 0 1
1 -G*W3 -G]; 1 -G -G];
Pw = blkdiag(W1, W2, 1)*P*blkdiag(1, W3, 1);
#+end_src #+end_src
#+latex: \end{exampl}
#+HTML: </details> #+HTML: </details>
*** Limitation :ignore: *** Limitation :ignore:
@ -2476,6 +2670,7 @@ Similar relationship can be found for $T$, $KS$ and $GS$.
Determine the approximate norms of $T$, $KS$ and $GS$ for large loop gains ($|G(j\omega) K(j\omega)| \gg 1$) and small loop gains ($|G(j\omega) K(j\omega)| \ll 1$). Determine the approximate norms of $T$, $KS$ and $GS$ for large loop gains ($|G(j\omega) K(j\omega)| \gg 1$) and small loop gains ($|G(j\omega) K(j\omega)| \ll 1$).
#+HTML: <details><summary>Hint</summary> #+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
You can follows this procedure for $T$, $KS$ and $GS$: You can follows this procedure for $T$, $KS$ and $GS$:
1. Write the closed-loop transfer function as a function of $K(s)$ and $G(s)$ 1. Write the closed-loop transfer function as a function of $K(s)$ and $G(s)$
2. Take $|K(j\omega)G(j\omega)| \gg 1$ and conclude on the norm of the closed-loop transfer function 2. Take $|K(j\omega)G(j\omega)| \gg 1$ and conclude on the norm of the closed-loop transfer function
@ -2483,6 +2678,7 @@ You can follows this procedure for $T$, $KS$ and $GS$:
#+HTML: </details> #+HTML: </details>
#+HTML: <details><summary>Answer</summary> #+HTML: <details><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Answer}
The obtained constrains are shown in Figure [[fig:h-infinity-4-blocs-constrains]]. The obtained constrains are shown in Figure [[fig:h-infinity-4-blocs-constrains]].
#+HTML: </details> #+HTML: </details>
#+end_exercice #+end_exercice
@ -2651,7 +2847,7 @@ Here is the general design procedure that will be followed:
4. Chose the suitable weighted general plant to shape the wanted quantities 4. Chose the suitable weighted general plant to shape the wanted quantities
5. Shape sequentially the chosen closed-loop transfer functions 5. Shape sequentially the chosen closed-loop transfer functions
Let's first convert the system of Figure [[fig:ex_test_system]] into the classical feedback architecture of Figure [[fig:classical_feedback_test_system]]. Let's first convert the system of Figure [[fig:ex_test_system]] into the classical feedback architecture of Figure [[fig:classical_feedback_test_system_bis]].
#+begin_src latex :file ex_test_system_feedback.pdf #+begin_src latex :file ex_test_system_feedback.pdf
\begin{tikzpicture} \begin{tikzpicture}
@ -2675,7 +2871,7 @@ Let's first convert the system of Figure [[fig:ex_test_system]] into the classic
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:classical_feedback_test_system #+name: fig:classical_feedback_test_system_bis
#+caption: Block diagram corresponding to the example system #+caption: Block diagram corresponding to the example system
#+RESULTS: #+RESULTS:
[[file:figs/ex_test_system_feedback.png]] [[file:figs/ex_test_system_feedback.png]]
@ -2819,6 +3015,7 @@ Time domain simulations will be performed by first computing the closed-loop sys
4. Using Matlab, define the generalized plant 4. Using Matlab, define the generalized plant
#+HTML: <details><summary>Hint</summary> #+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
1. Make use of Table [[tab:usual_shaping_gang_four]] 1. Make use of Table [[tab:usual_shaping_gang_four]]
2. Make use of Table [[tab:usual_shaping_gang_four]] 2. Make use of Table [[tab:usual_shaping_gang_four]]
3. See Section [[sec:shaping_multiple_tf]] 3. See Section [[sec:shaping_multiple_tf]]
@ -2832,9 +3029,10 @@ In such case, we want to shape $S$, $GS$ and $T$.
#+name: tab:ex_specification_shapes #+name: tab:ex_specification_shapes
#+caption: Control Specifications and associated wanted shape of the closed-loop transfer functions #+caption: Control Specifications and associated wanted shape of the closed-loop transfer functions
#+attr_latex: :environment tabularx :booktabs t :width 0.7\linewidth :align llX
| <l> | <c> | <l> | | <l> | <c> | <l> |
| Specification | Corresponding Transfer Function | Wanted Shape | | *Specification* | *TF* | *Wanted Shape* |
|--------------------------+---------------------------------+------------------------------------| |--------------------------+-----------+------------------------------------|
| Follow Step Reference | $S$ | +40dB of slope at low frequency | | Follow Step Reference | $S$ | +40dB of slope at low frequency |
| Reject Disturbances | $S$, $GS$ | Small gain | | Reject Disturbances | $S$, $GS$ | Small gain |
| Reject measurement noise | $T$ | Small high frequency (>100Hz) gain | | Reject measurement noise | $T$ | Small high frequency (>100Hz) gain |
@ -3504,6 +3702,8 @@ If you want to nice reference book in French, look at cite:duc99_comman_h.
You can also look at the very good lectures below. You can also look at the very good lectures below.
yt:?listType=playlist&list=PLn8PRpmsu08qFLMfgTEzR8DxOPE7fBiin [[yt:?listType=playlist&list=PLn8PRpmsu08qFLMfgTEzR8DxOPE7fBiin][Robust Control - Brian Douglas]]
yt:?listType=playlist&list=PLsjPUqcL7ZIFHCObUU_9xPUImZ203gB4o [[yt:?listType=playlist&list=PLsjPUqcL7ZIFHCObUU_9xPUImZ203gB4o][Control Bootcamp - Steve Brunton]]
#+latex: \printbibliography

BIN
index.pdf Normal file

Binary file not shown.

1973
index.tex Normal file

File diff suppressed because it is too large Load Diff

113
preamble.tex Normal file
View File

@ -0,0 +1,113 @@
\usepackage{float}
\usepackage{caption,tabularx,booktabs}
\usepackage{biblatex}
\addbibresource{ref.bib}
\usepackage{fontawesome}
\usepackage{caption}
\usepackage{subcaption}
\captionsetup[figure]{labelfont=bf}
\captionsetup[subfigure]{labelfont=bf}
\captionsetup[listing]{labelfont=bf}
\captionsetup[table]{labelfont=bf}
\usepackage{xcolor}
\definecolor{my-blue}{HTML}{6b7adb}
\definecolor{my-pale-blue}{HTML}{e6e9f9}
\definecolor{my-red}{HTML}{db6b6b}
\definecolor{my-pale-red}{HTML}{f9e6e6}
\definecolor{my-green}{HTML}{6bdbb6}
\definecolor{my-pale-green}{HTML}{e6f9f3}
\definecolor{my-yellow}{HTML}{dbd26b}
\definecolor{my-pale-yellow}{HTML}{f9f7e6}
\definecolor{my-orange}{HTML}{dba76b}
\definecolor{my-pale-orange}{HTML}{f9f0e6}
\definecolor{my-grey}{HTML}{a3a3a3}
\definecolor{my-pale-grey}{HTML}{f0f0f0}
\definecolor{my-turq}{HTML}{6bc7db}
\definecolor{my-pale-turq}{HTML}{e6f6f9}
\usepackage{inconsolata}
\usepackage[newfloat=true, chapter]{minted}
\usemintedstyle{autumn}
\setminted{frame=lines,breaklines=true,tabsize=4,fontsize=\scriptsize,autogobble=true,labelposition=topline,bgcolor=my-pale-grey}
\setminted[matlab]{label=Matlab}
\setminted[latex]{label=LaTeX}
\setminted[bash]{label=Bash}
\setminted[python]{label=Python}
\setminted[text]{label=Results}
\setmintedinline{fontsize=\normalsize,bgcolor=my-pale-grey}
\usepackage[most]{tcolorbox}
\tcbuselibrary{minted}
\newtcolorbox{seealso}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=See Also}
\newtcolorbox{hint}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=Hint}
\newtcolorbox{definition}{enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Definition}
\newtcolorbox{important}{ enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Important}
\newtcolorbox{exampl}[1][]{ enhanced,breakable,colback=my-pale-green,colframe=my-green,fonttitle=\bfseries,title=Example,#1}
\newtcolorbox{exercice}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Exercice}
\newtcolorbox{question}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Question}
\newtcolorbox{answer}{ enhanced,breakable,colback=my-pale-turq,colframe=my-turq,fonttitle=\bfseries,title=Answer}
\newtcolorbox{summary}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Summary}
\newtcolorbox{caution}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Caution}
\newtcolorbox{warning}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Warning}
\newtcolorbox{my-quote}[1]{%
colback=my-pale-grey,
grow to right by=-10mm,
grow to left by=-10mm,
boxrule=0pt,
boxsep=0pt,
breakable,
enhanced jigsaw,
borderline west={4pt}{0pt}{my-grey}}
\renewenvironment{quote}{\begin{my-quote}}{\end{my-quote}}
\newtcolorbox{my-verse}[1]{%
colback=my-pale-grey,
grow to right by=-10mm,
grow to left by=-10mm,
boxrule=0pt,
boxsep=0pt,
breakable,
enhanced jigsaw,
borderline west={4pt}{0pt}{my-grey}}
\renewenvironment{verse}{\begin{my-verse}}{\end{my-verse}}
\usepackage{environ}% http://ctan.org/pkg/environ
\NewEnviron{aside}{%
\marginpar{\BODY}
}
\renewenvironment{verbatim}{\VerbatimEnvironment\begin{minted}[]{text}}{\end{minted}}
\usepackage{soul}
\sethlcolor{my-pale-grey}
\let\OldTexttt\texttt
\renewcommand{\texttt}[1]{{\ttfamily\hl{\mbox{\,#1\,}}}}
\makeatletter
\preto\Gin@extensions{png,}
\DeclareGraphicsRule{.png}{pdf}{.pdf}{\noexpand\Gin@base.pdf}
\makeatother
\usepackage{hyperref}
\hypersetup{
colorlinks = true,
allcolors = my-blue
}
\usepackage{hypcap}

33
ref.bib Normal file
View File

@ -0,0 +1,33 @@
@article{lurie02_system_archit_trades_using_bode,
author = {Boris J. Lurie and Ali Ghavimi and Fred Y. Hadaegh and Edward Mettler},
title = {System Architecture Trades Using Bode-Step Control Design},
journal = {Journal of Guidance, Control, and Dynamics},
volume = {25},
number = {2},
pages = {309-315},
year = {2002},
doi = {10.2514/2.4883},
url = {https://doi.org/10.2514/2.4883},
}
@techreport{bibel92_guidel_h,
author = {Bibel, John E and Malyevac, D Stephen},
institution = {NAVAL SURFACE WARFARE CENTER DAHLGREN DIV VA},
keywords = {robust control},
title = {Guidelines for the selection of weighting functions for H-infinity control},
year = {1992},
}
@book{skogestad07_multiv_feedb_contr,
author = {Skogestad, Sigurd and Postlethwaite, Ian},
title = {Multivariable Feedback Control: Analysis and Design},
year = {2007},
publisher = {John Wiley},
isbn = {9780470011683},
keywords = {favorite},
}
@book{duc99_comman_h,
author = {Duc, G and Font, S},
title = {Commande H infinie et mu-analyse-des outils pour la robustesse},
year = {1999},
publisher = {Lavoisier},
journal = {Hermes., Paris: Hermes},
}