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: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
#+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
#+PROPERTY: header-args:matlab :session *MATLAB*
@ -41,7 +47,160 @@
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
: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.
@ -78,12 +237,6 @@ The general structure of this document is as follows:
* Introduction to 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
<<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.
#+name: tab:comparison_control_methods
#+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> |
| | *Classical Control* | *Modern Control* | *Robust Control* |
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------|
|---------------+---------------------+--------------------------+-------------------------------|
| *Date* | 1930- | 1960- | 1980- |
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------|
| *Tools* | Transfer Functions | State Space formulation | Systems and Signals Norms |
| | Nyquist, Bode Plots | Riccati Equations | Closed Loop Transfer Functions |
| | Root Locus | | Closed Loop Shaping |
| | Phase and Gain margins | | Weighting Functions |
|---------------+---------------------+--------------------------+-------------------------------|
| *Tools* | Transfer Functions | State Space formulation | Systems/Signal Norms |
| | Nyquist, Bode Plots | Riccati Equations | Closed Loop TF |
| | Root Locus | Kalman Filters | Closed Loop Shaping |
| | Phase/Gain margins | | Weighting Functions |
| | Open Loop Shaping | | Disk margin |
| | | | Singular Value Decomposition |
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------|
| *Control Architectures* | Proportional, Integral, Derivative | Full State Feedback, LQR | General Control Configuration |
| | Leads, Lags | Kalman Filters, LQG | Generalized Plant |
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------|
|---------------+---------------------+--------------------------+-------------------------------|
| *Controllers* | P, PI, PID | Full State Feedback | General Control Conf. |
| | Leads, Lags | LQG, LQR | |
|---------------+---------------------+--------------------------+-------------------------------|
| *Advantages* | Study Stability | Automatic Synthesis | Automatic Synthesis |
| | Simple | MIMO | MIMO |
| | Natural | Optimization Problem | Optimization Problem |
| | | | Guaranteed Robustness |
| | | | Easy specification of performances |
|-------------------------+------------------------------------+--------------------------------------+--------------------------------------------|
| *Disadvantages* | Manual Method | No Guaranteed Robustness | Required knowledge of specific tools |
| | Only SISO | Difficult Rejection of Perturbations | Need a reasonably good model of the system |
| | No clear way to limit input usage | | |
|---------------+---------------------+--------------------------+-------------------------------|
| *Disadvant.* | Manual Method | No Guaranteed Robustness | Requires knowledge of tools |
| | Only SISO | Rejection of Pert. | Need good model of the system |
| | No input usage lim. | | |
#+begin_src latex :file robustness_performance.pdf
\begin{tikzpicture}
@ -315,6 +468,7 @@ The notations used on Figure [[fig:mech_sys_1dof_inertial_contr]] are listed and
#+name: tab:example_notations
#+caption: Example system variables
#+attr_latex: :environment tabularx :booktabs t :width \linewidth :align cXcc
| *Notation* | *Description* | *Value* | *Unit* |
|--------------------+----------------------------------------------------------------+----------------+-----------|
| $m$ | Payload's mass to position / isolate | $10$ | [kg] |
@ -335,6 +489,7 @@ Derive the following open-loop transfer functions:
\end{align}
#+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
You can follow this generic procedure:
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
@ -345,6 +500,7 @@ You can follow this generic procedure:
#+HTML: </details>
#+HTML: <details><summary>Results</summary>
#+LATEX: \tcbsubtitle{Results}
\begin{align}
G(s) &= \frac{1}{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
#+caption: Classical Feedback Architecture
#+attr_latex: :float nil
[[file:figs/open_loop_shaping.png]]
#+end_definition
@ -584,6 +741,7 @@ Using =SISOTOOL=, design a controller that fulfills the specifications.
#+end_src
#+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
You can follow this procedure:
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.
@ -687,12 +845,13 @@ Such shape corresponds to the typical wanted Loop gain Shape shown in Figure [[f
#+name: tab:open_loop_shaping_specifications
#+caption: Wanted Loop Shape corresponding to each specification
| | 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$ |
| *Noise Attenuation* | Roll-off of -40dB/decade past 30Hz | Roll-off of -40dB/decade past 30Hz |
| *Robustness* | Gain margin > 3dB and Phase margin > 30 deg | Slope of -20dB/decade near the crossover |
#+attr_latex: :environment tabularx :booktabs t :width \linewidth :align lXX
| | *Specification* | *Corresponding Loop Shape* |
|--------------+----------------------------------------+------------------------------------------|
| *Dist. Rej.* | Highest possible rejection below 1Hz | Slope of -40dB/dec at low frequency |
| *Pos. Speed* | Bandwidth of approximately 10Hz | $L$ crosses 1 at 10Hz |
| *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.
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
#+caption: Comparison of the characteristics obtained with the two methods
#+attr_latex: :environment tabularx :booktabs t :width \linewidth :align Xcc
#+RESULTS:
| Specifications | Manual Method | $\mathcal{H}_\infty$ Method |
|-----------------------------+---------------+-----------------------------|
| *Specifications* | *Manual Method* | *$\mathcal{H}_\infty$ Method* |
|-----------------------------+-----------------+-------------------------------|
| Gain Margin $> 3$ [dB] | 3.1 | 31.7 |
| Phase Margin $> 30$ [deg] | 35.4 | 54.7 |
| 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
#+caption: Example of the $\mathcal{H}_\infty$ norm of a SISO system
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/hinfinity_norm_siso_bode.png]]
#+end_exampl
@ -941,13 +1102,15 @@ A practical example about how to derive the generalized plant for a classical co
#+begin_important
#+name: fig:general_plant
#+caption: Inputs and Outputs of the generalized Plant
#+ATTR_LATEX: :float nil
#+RESULTS:
[[file:figs/general_plant.png]]
#+name: tab:notation_general
#+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 |
| $w$ | Exogenous inputs: references, disturbances, noises |
| $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
#+caption: General Control Configuration
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/general_control_names.png]]
#+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
#+caption: Classical Feedback Control Architecture (Tracking)
#+attr_latex: :float nil
[[file:figs/classical_feedback_tracking.png]]
#+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
First, define the signals of the generalized plant:
- Exogenous inputs: $w = r$
- Signals to be minimized:
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$
- 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]].
#+HTML: </details>
#+HTML: <details><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Anwser}
The obtained generalized plant shown in Figure [[fig:mixed_sensitivity_ref_tracking]].
#+name: fig:mixed_sensitivity_ref_tracking
#+caption: Generalized plant of the Classical Feedback Control Architecture (Tracking)
#+attr_latex: :float nil
[[file:figs/mixed_sensitivity_ref_tracking.png]]
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
#+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$ |
| 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]$.
#+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:
\begin{aligned}
\begin{align*}
y &= G u \\
&= G (d + K \epsilon) \\
&= G \big(d + K (r - n - y) \big) \\
&= G d + GK r - GK n - GK y
\end{aligned}
\end{align*}
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 \]
@ -1189,6 +1359,7 @@ Do the same procedure for $u$ and $\epsilon$
#+HTML: </details>
#+HTML: <details><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Answer}
The following equations should be obtained:
\begin{align}
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
#+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_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 |
@ -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
#+caption: Typical wanted shape of the Sensitivity transfer function
#+attr_latex: :float nil
[[file:figs/h-infinity-spec-S.png]]
#+end_important
@ -1445,10 +1618,10 @@ Or does it? Let's find out.
#+name: fig:phase_gain_margin_model_plant
#+caption: Bode plot of the obtained Loop Gain $L(s)$
#+attr_latex: :float nil
#+RESULTS:
[[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:
#+begin_src matlab
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
#+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:
[[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
- 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 ::
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
#+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:
[[file:figs/module_margin_example.png]]
#+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
#+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 |
| Disturbance Rejection | $L$ large | $GS$ 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)$.
#+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
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 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><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Answer}
The two solutions below can be used.
#+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
- High frequency gain of 0.5
#+begin_src matlab
#+begin_src matlab :float nil
Ws = makeweight(1e2, [2*pi*10, 1], 1/2);
#+end_src
@ -1845,6 +2023,7 @@ The Matlab code below produces a weighting function with the following character
#+name: fig:first_order_weight
#+caption: Obtained Magnitude of the Weighting Function
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/first_order_weight.png]]
#+end_exampl
@ -1870,8 +2049,6 @@ The parameters permit to specify:
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
function [W] = generateWeight(args)
arguments
@ -1928,6 +2105,7 @@ The obtained shapes are shown in Figure [[fig:high_order_weight]].
#+name: fig:high_order_weight
#+caption: Higher order weights using Equation eqref:eq:weight_formula_advanced
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/high_order_weight.png]]
#+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.
#+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]].
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
#+caption: Typical wanted shape of the Sensitivity transfer function
#+attr_latex: :float nil
[[file:figs/h-infinity-spec-S.png]]
#+HTML: </details>
#+HTML: <details><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Answer}
We want to design the weighting function $W_s(s)$ such that:
1. $|W_s(j \cdot 2 \pi 10)| = \sqrt{2}$
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
$\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 \\
& \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]].
@ -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
#+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> |
| Specification | Gang of Four | Wanted shape |
|--------------------------------------+--------------+-----------------------------------------------------------|
| *Specifications* | *TF* | *Wanted shape* |
|-------------------------------+------+------------------------------------------------|
| Fast Reference Tracking | $S$ | Set lower bound on the bandwidth |
| Small Steady State Errors | $S$ | Small low frequency gain |
| 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 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 |
| 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 |
| 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 |
|--------------------------------------+--------------+-----------------------------------------------------------|
|-------------------------------+------+------------------------------------------------|
| 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.
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:
#+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{tikzpicture}
% 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
#+caption: Generalized Plant to shape $S$ and $KS$
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/general_conf_shaping_S_KS.png]]
@ -2133,17 +2317,18 @@ Weighting functions:
- $W_1(s)$ is used to shape $S$
- $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
P = [W1 -G*W1
0 W2
P = [1 -G
0 1
1 -G];
Pw = blkdiag(W1, W2, 1)*P;
#+end_src
#+latex: \end{exampl}
#+HTML: </details>
*** S T :ignore:
#+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{tikzpicture}
% Blocs
@ -2180,6 +2365,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_T
#+caption: Generalized Plant to shape $S$ and $T$
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/general_conf_shaping_S_T.png]]
@ -2187,17 +2373,18 @@ Weighting functions:
- $W_1$ is used to shape $S$
- $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
P = [W1 -G*W1
0 G*W2
P = [1 -G
0 G
1 -G];
Pw = blkdiag(W1, W2, 1)*P;
#+end_src
#+latex: \end{exampl}
#+HTML: </details>
*** S GS :ignore:
#+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{tikzpicture}
% Blocs
@ -2234,6 +2421,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_GS
#+caption: Generalized Plant to shape $S$ and $GS$
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/general_conf_shaping_S_GS.png]]
@ -2241,17 +2429,18 @@ Weighting functions:
- $W_1$ is used to shape $S$
- $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
P = [W1 -W1
G*W2 -G*W2
P = [1 -1
G -G
G -G];
Pw = blkdiag(W1, W2, 1)*P;
#+end_src
#+latex: \end{exampl}
#+HTML: </details>
*** S T KS :ignore:
#+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{tikzpicture}
% Blocs
@ -2293,6 +2482,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_T_KS
#+caption: Generalized Plant to shape $S$, $T$ and $KS$
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/general_conf_shaping_S_T_KS.png]]
@ -2301,18 +2491,19 @@ Weighting functions:
- $W_2$ is used to shape $KS$
- $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
P = [W1 -G*W1
0 W2
0 G*W3
P = [1 -G
0 1
0 G
1 -G];
Pw = blkdiag(W1, W2, W3, 1)*P;
#+end_src
#+latex: \end{exampl}
#+HTML: </details>
*** S T GS :ignore:
#+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{tikzpicture}
% Blocs
@ -2354,6 +2545,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_T_GS
#+caption: Generalized Plant to shape $S$, $T$ and $GS$
#+attr_latex: :float nil
#+RESULTS:
[[file:figs/general_conf_shaping_S_T_GS.png]]
@ -2362,18 +2554,19 @@ Weighting functions:
- $W_2$ is used to shape $GS$
- $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
P = [W1 -W1
G*W2 -G*W2
0 W3
P = [1 -1
G -G
0 1
G -G];
Pw = blkdiag(W1, W2, W3, 1)*P;
#+end_src
#+latex: \end{exampl}
#+HTML: </details>
*** S T KS GS :ignore:
#+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{tikzpicture}
% Blocs
@ -2419,6 +2612,7 @@ Weighting functions:
#+name: fig:general_conf_shaping_S_T_KS_GS
#+caption: Generalized Plant to shape $S$, $T$, $KS$ and $GS$
#+attr_latex: :float nil
#+RESULTS:
[[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_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
P = [ W1 -W1*G*W3 -G*W1
0 0 W2
1 -G*W3 -G];
P = [ 1 -G -G
0 0 1
1 -G -G];
Pw = blkdiag(W1, W2, 1)*P*blkdiag(1, W3, 1);
#+end_src
#+latex: \end{exampl}
#+HTML: </details>
*** 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$).
#+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
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)$
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><summary>Answer</summary>
#+LATEX: \tcbsubtitle{Answer}
The obtained constrains are shown in Figure [[fig:h-infinity-4-blocs-constrains]].
#+HTML: </details>
#+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
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{tikzpicture}
@ -2675,7 +2871,7 @@ Let's first convert the system of Figure [[fig:ex_test_system]] into the classic
\end{tikzpicture}
#+end_src
#+name: fig:classical_feedback_test_system
#+name: fig:classical_feedback_test_system_bis
#+caption: Block diagram corresponding to the example system
#+RESULTS:
[[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
#+HTML: <details><summary>Hint</summary>
#+LATEX: \tcbsubtitle{Hint}
1. 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]]
@ -2832,9 +3029,10 @@ In such case, we want to shape $S$, $GS$ and $T$.
#+name: tab:ex_specification_shapes
#+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> |
| Specification | Corresponding Transfer Function | Wanted Shape |
|--------------------------+---------------------------------+------------------------------------|
| *Specification* | *TF* | *Wanted Shape* |
|--------------------------+-----------+------------------------------------|
| Follow Step Reference | $S$ | +40dB of slope at low frequency |
| Reject Disturbances | $S$, $GS$ | Small 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.
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},
}