From e0d51fa0fff042716ebb49b064634a7f8360d8eb Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Thu, 3 Dec 2020 12:13:53 +0100 Subject: [PATCH] Few corrections --- figs/ex_general_plant_sim.pdf | Bin 78302 -> 78404 bytes figs/ex_general_plant_sim.png | Bin 25172 -> 25139 bytes figs/ex_general_plant_sim.svg | 170 ++++---- index.html | 750 +++++++++++++++++----------------- index.org | 62 +-- 5 files changed, 476 insertions(+), 506 deletions(-) diff --git a/figs/ex_general_plant_sim.pdf b/figs/ex_general_plant_sim.pdf index 91a888a6696708240deef8dec56c11458fbb1785..26422c532edf1f29cfdf3e3e62fcd8af295a23be 100644 GIT binary patch delta 8683 zcmai(Q&=T{qr|hV&9?1Mwr$(q+{w1xw$<5On|-pm)nmLUN{?!_WhV^%Y%-_%M3Ubg%JC$p?4ymm!ox9d>3W;utT4MIU5VDcA}uBb2dxEvJl*U@ zIo6u?YzO;yssneIiuuT{g8e`6qIh6KBXsoK+V4IP$Qg36=g-)gA*+mU$E1V?dV!nP z%8d(B3i!yyM3=huhXZK_Fs>76+uyheb^~8X1?k0kMYopbrV2>q8BCK>kBv{5EZZi# zGH;`Zw*+WLB=-su$m_kW))3^Aa*!m5qA%LJcjb@<;()~NF}514k*TCtGQRSeH}dzK zw30Fd-z-j~#U3Y0rB>o&a#lF^%@br0NBq}nB1{F$t<}6d?tf!t{V7?jK91goqmZOD zF(?T)NCLv)PDMa0mn&2DDg8Mz7Z^BV6yV|t7+Jy>+6wcbH2#ZFYI!ed=CjG8(4=+U z*C#>d{2e$PU=wm}vUC>E+FvzKgs*F5wvoos=};LKD!QRw=O>Lr64;AzrBn4+%bcg( zA+J3mpm(RWhEb@a?Wv(1X+^Z++vSvnDrbxs`?ftrX00K5H6;~}K3B#{!o-izbFw3) zSustJUu#RAKjl28y?yf{4ctR#1Ph~ixI|vo7#xs1Z0P8GFWJUYgtI+HxRbF22AAeg zFuK=B$7SLp&^5K_&_MxL$FUj|D@rw~y-YX_X^9BRh_`E%^Y$3Eo2eM&Ru$*UYpR_s z&ux~8YFD#Rt5@8RlP)V-NR-s51Q6N#|BQt)I}pV0WSB^EC@+!cgjen(0-fx>ojnxr zbpZ(*R<@cSwi3(uoE>W{;VBC@tec}3yY@KNxc;$UXwD@(TAU|5ow_OfL13XW@Kk$M zitfhj|Ixme5pvz4Lhu^O9?nVIM$7PIl(%=pYVGL9;}gUN4#{yuuFkAwX+V@SOW|D+ zNRbMZ3j)YwuFbmDG?Y~z05)STnQ9YBn1QIB_Jh3I(rImO*w>_7|Nc|!W;|@T4oxrN zxaVQIpTjY)_x%1ivQ#&ZnN7g^@J+SGXxih8JUoP;x56 z&D`3B?MDJZC)T%06hNQE!^f zvcPs%tMZQVqBAGBf(|$yJc_{LEa;tRAkR+_sDSg0d*U8%M$$~#q&#qzXa_l9&}Fr8 zS|!#lfq8AcW%TogRMs3{#U8mFCr>VWQ+yV4g6Wj-@hkl=staea-`b4&olfrb;q+GK zVqx*RFj|Osv@gH6vC=Q?QWIM5V_A$eOlY^$$TLJn5;WAC$n@`Mkw8CE3h?YUOq=Ys zohz45Wbb8%TC9@-pU``hx$Ql-`%xAXjhyTi`Zt^;D$9FuW81LYkGc@T-35FgqGt~2 zlKC2()af{#St~2cDhwb^ELGE8*;3~?jkEOEu$se&!WFE4sm!f z4j|HUMsl}7eY0iJ(&|6XY$BmGXzz_qum!2Jwd=Ak*}6^DT}+CmVCxpK{|^jkG0=B#QAW3iFiKlQZJ-aEfap5)cWbg`qr}E^lKeSOHJoa>Cz-TQ(mM8X_+O(rM?>tuK@qP2eVkGZzLXgr6G{Ipuc<5%2`Iy(_P)9V&}8 z=~AUGU{}pj7cNo)^cg$6xHP@#A!=rGzGH(HLiz@&=%dT`*hVB5b`5_4PrUJiKL9Ob zjJ1u=hwHo0fmM=J!!iVUD0_;+VAJSlm@=jW+&eTX1Z*x&=-FbE$;O*qEdNdAR@ zMZs7?Ii~tWgf9hCxS4)UMe-wb2RyPf*PLh|L`NqS5;Ky1LXN166oGYWCm0S#ym~E; z9;5yWi2}b z>;(hKTm;cLzpxSzMd$o{o=8%|GG)A}bwPfSs&z4rAwM5 zYl8FW|Ga?>1$v30LP$cU5X49}$hy);U&u6WV$h6I(pw>gNMqaWa0uf?m^2^|3ZlTA zXuih(5e)IPriJi$|qW*7))c9a$G;MflyBIO}$pxzhNSGKTfN}}Ovs1nUjMDWlx zH?lDH5dZFJXgeA8*Y%g3wGt9#NC=|_bRDQJ@)gtFwwM=++VR9;poxv|yU|%Te%VSN z29{hYB%uQl1%}1ZxBI#84ZoogWSN9KHDxouFcxGQ1sGBi`qRT8GC+7CAdPwE9Kte; z3=k~_Ff<|}88Vj$3kt&xD;F&j0tfB`KZHip{M`Ak3>1Q5>sfR;BDvF7tJfk##KJb7 z1}Y~9FrS_pNh}11ut9Kb9dPfhwD-OSH6B zHW5{VNNUpd5(!oICt~*%ByYObJITn-`*UJ%&)L(x$`BY8yLiP1Oz!Dje!AgaBzOli8GK*;N;RU)j~s zW|F(=2S=}jXr@J9`|`s#{WiGfxgBB0^Nvxlk5aa4=@$w4PuVx-r-anetKB_k3S@__ z1i>Ke&wpa^k;iv8{^aK;i+7eLZzc>W&PGL2rWuOd8xL0eLEZ<Zh zi+dH(JoJ@f9v!k3c93apeLHG<+t&Tj^Ga3FqqrGF1obpN?A(*g^xUDN0&litXosc~P2^*{HzUk*koiDJ8Fxk{Sy~@DiE$9R5c;QtrZtFCx zJo0^K+fU^63YRqx1@HfIOq(n;82YWH1C#+Gjcdj}!|N*zzJ0R?4=goju&Ly-w0dum3re!CEO>nyqfY3(nM3V{L^qc7%jq5EiR?u&4dtG%s z?)Oo>#f5uD1`ge+u{Q0-cI2KQ#CEir6zeKqMx6Gb$F+h0X@5EmO`DM9;1(OYe{q)#0@KRRc>d^`2Jho&(7!edc7nl|C4aaYcbo#!8Q}bkw@XP z+0saSLYrWAT8?C9m4YAq{M%u*Pbr0G1BwU3j`nXa09$sY;|GJ2(6&*ztY<&jlJ>5M zNa*BRPLpOrhI*jsG5)=+@U`sbIVaiFc2%{~)Z`@FJPz2l0t&4_h6ibU#iEU^G;6;l z`%bp1x5uF_;JAxz!bShdno3ceXOLjSm@*K>vEl~gC8b^ejp~uYCH{`gK*0}0M{IH) zyXvv$&&<59?DJYFs?z|qvk;ITnvpEn!55_&q`kF}1_IiGzh9;JBvz05>;g6y&~L6c zudW;Qw;plS^5$AjxvDD+X7)a9=T`|zSlC&#+9$B+7gEKTdxA%}msD2Hp6~8zDfV-9 z(Z{^cm@I7&miDo2d%bK*RIcefePpnQ(Xf|E=9&t~rv1q}F+^Bio6DJX90-pw34eBf zi`zV?y8+@#n=1BIbZC7O%B_|Px6L+{%in>vl=w9fu_*d-Kz@T60GW{kEB; ztK$=+dj<~v;hej{>&m+_WSTnsk#sM^-jkbiatzc_=h2i&3$V*1z?j|*JoE_30-egf z@$tkDutG`u-ioXRj!HLu7)3&TJ2?A8wQrbat@4DV!b8sLfQ?VGBi*yUM! zS?{&|2H2k=E1+Co7ts*yo2)tSs+wUI@qcf>x3;&)Ij^j@5h6=Mddg=3?50g?*p^M& z`2k^=^Q0Mj>v7kmRaLl=!&w;1h_W(lmVC}w;+9|ue-u7B^>ZD)-dhlPK4XoO&1`-? zS7igzntIC(UH&N9DYA-K9Lx;bPjlA`JP%|HAbU6H_k}N*(doW0krqX(=ltuv6)tXE zw8upicev&o)l5gSd@D5QPB5LB*u@>iDgrL6mJ9SMsXTEtue=6?h{-{6rOo=;PJrrT z?s6#yQ7P3eYqB08Iy&O6F{IUHgX=rZY8RgdG$r?DQ89hs=;@NisyF5mTP9=bRcvSj zeLVOr*}F>ZY_OPLZuw^oPqDuHY|V%?rgs3|XP&;p^Bp9Z&eZ>N?L4hlZgsrkHunLy~|Y8j~(Z4a5_POj@!b1u7yqhd4G>0PCJo;#lD5m& z5KX}Pb*iP%&m&5Hekl&`Ama3nM^4~8 z%eUd{7IP?RG)nm6^>f3`7PozRR7%C~M*f>)s-guKlLgqbfCvwvXMy|;_O4S0XrcSv zjv(8+2JBMTRR>>sVUjW)prk1|=E5KA5!|_P+=JOxY*w9^>ykeX&85#gNE5WH} z*p_*kYW?OBdPfJC9|N8bRYq^P=L7|iCX3S_XJgX>*-@vT&^34L1FK4H7Xl|kvD?Xh z$CEOOf$ZXX0Oh}#H^Z7Y8mYy+Z`f+Wx#&*Q;j@j&HAspbRh{O{is zP5QaC&QmWQ;{hsTP`~@j_xYLOltQcAoGa`eoqyg?)R$xF`{9 z7TxpD_vGL@|G8<;0iZ3dAum8soqfji@#3fOhm?Z!XzNmdCDU^2isBPEB`2w-pY#BW zMexabcVsk8m*HMppY#lO1(a}DJzMtXYe{t`s*tx``7?&YaERfv#B!O5vp)9wh2|H( z0wxQ73m+~>j@g z!2YAEuYSAfP;}MauK6T?Ais58{=}l0zvRQVaTGuf_gb5-;0r&5?k9NIPh+DvzzZ+K zQl_e$!Tf?3CnY%f>3-%lIiKvK)!2BG@8L(Sjr$XweX?`(%D$`tLBGPo7I3vTrOSKF zsBr9ckx09J4?NM|$?HI+gLg!a&^t!a?jm*57Cg({(kNd1Zs(Kb`&ipWb84?$`C1Gu zo1K*5Yop6YnJ(i?ABv`!jzaZ2kH;WzGT?GS7MnMAO@32aE5873*#;C*-Wqq2iI0Jk zJx3jXI+xSM?;Pd8h?H}3qLBInK0tbRo)dNZitXIF9k`qk-}ty@>lZ0m!F{iP9VUF^ zVB(nBxz>MR>3V-55DgO-Ij18`i1(MDiAA^Im8npo@xF^ciAv{Gr3(d5w_VDs6f4K} z>gDD8d2 zA4zh#4!AmIa&uC2fPSc(xK`bIJw3FgLa{Z(z62{5jRhzpmh6ID(9>nAtAD9((w!53 z^7NK`qoN^#{@HxEtdc6o;(B;#m<$+<$o!iKn0P#7#)-R2c{FwJDY`#c{HyKkdNDKc z6f@weZZI^4#GP%kqDSvRb3Bwi%ACx6dmB=E4CESLjSih*@cJE;T-<~7*_kyUlDfcn z<5Yh6cAF#IZlb}~Do?&=7Lw-Ju%Qv>6+1l`zwIcf)r(3MN0jHP`1&aQR}U|{7_f=F z{I3}9sr)ebR(}@#t(Dc>ySu?$>vbZVUF*F7db0?8`w|8lgQMV#*q0%!aj(>WLZ%W51o!K+wVsjrdy<}BI%5O-jJ#n9nU&oBKVny=V&7-f5Ubl50AFOU; z9{!gprNuwxJ5BdJ+JqT2-|fFOQXtWSyW+B0Z%_4T-0j)asl*G4{@JsqpX1@~flB46 zJvmBaqSbiP-!1|6u%X@@ilph11lEYC0wt#X0}U~X_v7QCvV!>}Tb_|?dz)NX;wD#a zWL}9f%oQw^QR7=%4@aj)9m!~0bc@>rfqz2Y_%2S+6tbkEOpLgvzk_xv*KgDdYmE&A z9Tpv_8AzL+G2SfN0r1oOOic9T^K`yru2W@=Qy7<=IcqXys`mOdS1TNtxZiimfS2!0 z>$Z~cM9M9a&{E7whhQ{;>CtEtQaZGLw4aA}JA(kS@gC%6?CQq=D~6RnvYWWaZgf`Z zLJ5qI{%ZDxoA9EAja|i&N~Q3*_$v>v3EECA08|7yWDov8a@!6E(O)@}ame{w$OL*z zm?`ZqM3$@wVK_4!ZilR@f{n{S=m;=LAzy;-YeEgL?V+F)Y?YI`|MZ0G`#_F~pr6mn~kzm!4K#@nGt3eIZ^-`)^>8HDn`-kS?LLxMVdWI4~V56X8S`L9b zn)UW{r0-DR66gMJXpO;q3oRLM5}gjSOSTW67S8!*7@=zHLe@MXuR(r1`l5nMZ_W4N zGgLn1pR#L9YPAN(T-UUWv#7GB!_+L#+D0>03bRAbY^hp5_ys328gU^#dM zc-XV?=^;t~R|?TX_M&sM|KATs&cV;a{og?4!oX0KXdEl}slH;=(`)GdgH}3K0t@OGl#4_J+lE}AMHm?DNb3mbp|D^=Q%Or znKML*#Q7@BKp&z?Xai;+F~Tq7tEFmS5q~e^?AxHC|3jQuoATxB;kq&`TTEMNzg=LU zW|21amiE_Kv9@g2I=Sq!HBgSOaZD3WgONlvH;5Zh%>7Y_nTEffi#Gf3(=O*%?&g8t z)F6^=;GCbXN<9SSDGY78g~9Zxs+}nqWP56{aKPm?eQ>n^>k+_B(ukfqhmj79vK*1R z#Sat}CMwir{uLuK_4SLHVGCGWy(>^?lo2j3{gMZ70=|qLyg4~BfB7e28*=9?9SMI2GQvVt?u{U*LNaTw$GA zjf!xp$|tc-*#3>et@^9nM57HLRC-$bmc?3xtc)VwcR9>i(OtW5`>jr%CSsqY-6TN$vnDx1`y!yA#;Us*)(QJg2+|SpcQQD`|9$X;uBh z6w4iQYI{d_JAr9%NxC6$?k=+b@}e*TBhEKYryNR!-+depvNra&TtT`m&>jRa=7;{g=={@uOn2u^KIbt`$%pW`k^qj5qD%LH+7$- zq06^t80H_^(hKk^O#P>6Oq70Q`s7!>i+9OPbLV&TPf{evnTLtM<*7oJkf+02=_azZ z>U59VuR5ppCH7whsSTXuA^pF>VPVOkEN*PVWAM2vKAJHJ!i164Jcz+=eP{G*Lq+00 z{Q*2Mwi!_m+`RhCzlSXQtpV1Jd@KRfoU;3?R?cUbzC34p>Z*luZOa|HHMe5_$is6^ zhTM7dOS4uNlHRC*R4o+E?%Y`%hUEr;ZmqI0u4w+r#IZ-Aao*WmDR*#k3WtgNlthyC z5z53Nv${Y4M!?Ln4Gh5f1=m(%-}3;bJVE%a`*aeI&x^f?hPV`cj9_zwmQ2ky>hUj= zj)-bpmIF-TIY{xcY4x7fnR>x9N#^Ip(p__Gl;q;|R0k0dEnG_m>Q@aLe1*^&{@mO& z&urjYWr|VqmUeoR`xl5bG5__xvU_Aql?>1ed|LnlNQpBZmQ0M%UTqazNVKyT#K#lD zZ?PVlQdefmJ&|F96m4}^&*^by_|myp3jm>a&VF|#|4dDm0*kh=g;|oF8AzRMe7U-b zwNAuG-Hn09UvV`jvD*d=jyM@cnU-~~Uszohro?fc>YGZh;qz*-CHV2NIdQIEE@~I| zC6oCoF@QRUiEl&McpL z4Wc!cU-`3No9k~ce?Mh^PHbB`-N+J7?A#!|87~JnF*aO6zGMl8Ts8!!(9lVGgBk2F}p2)3qzXkH_dp_ zzHaepWL4cT&qAd0qdXQ2M)4FVzdP!d%9`I8w+%#V%+v8HqZxYrptO-V+rGqDS6@axbUGWv z`ER*gO)r*+6a&D z6VWs5f_Jn%cVa%T*$9hoNZ1yb<~lCi$Q9~<@b`u)3rdYG5QAe$S)!u^7EnL$Wnzqn z>q3ix(Ku7%&6T-rKGzbMGr%)C2mFmM|CFfcQfqsfNIK$_d}dT?MC)1SKaH*h$puwS zqTPLK*A>(epGE!mVotW+Hd^%JBI$<}v@BR$hRX3{nB19=y_ue)gB~*~>E8A%%+kE#fNWc1D$^EihIUq@q{)7CHXlSHWWsv?0 Dz)a`2 delta 8575 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 FMhdYco8$lh diff --git a/figs/ex_general_plant_sim.png b/figs/ex_general_plant_sim.png index 923bf68e5fc540d2ea812032497a2fd6a59d7e90..a0a2ba64d9a7d97738484df7abcb73fe155e1477 100644 GIT binary patch literal 25139 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 literal 25172 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 Y$UlyrN;PlCH$#w&51CW*^;{$W4SzaPfdBvi diff --git a/figs/ex_general_plant_sim.svg b/figs/ex_general_plant_sim.svg index 6d4e868..7da9bc0 100644 --- a/figs/ex_general_plant_sim.svg +++ b/figs/ex_general_plant_sim.svg @@ -1,5 +1,5 @@ - + @@ -66,7 +66,7 @@ - + @@ -109,166 +109,166 @@ - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - - - + + + + - + - + - + - - - - - - + + + + + + - + - + - - + + - + - + - - + + - + - - - - + + + + - + - - + + - + - - + + - + diff --git a/index.html b/index.html index 55ffeaf..03aa2c2 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + A brief and practical introduction to \(\mathcal{H}_\infty\) Control @@ -30,58 +30,58 @@

Table of Contents

@@ -105,33 +105,33 @@ When possible, Matlab scripts used for the example/exercises are provided such t The general structure of this document is as follows:

    -
  • A short introduction to model based control is given in Section 1
  • -
  • Classical open loop shaping method is presented in Section 2. +
  • A short introduction to model based control is given in Section 1
  • +
  • Classical open loop shaping method is presented in Section 2. It is also shown that \(\mathcal{H}_\infty\) synthesis can be used for open loop shaping
  • -
  • Important concepts indispensable for \(\mathcal{H}_\infty\) control such as the \(\mathcal{H}_\infty\) norm and the generalized plant are introduced in Section 3
  • -
  • A very important step in \(\mathcal{H}_\infty\) control is to express the control specifications (performances, robustness, etc.) as an \(\mathcal{H}_\infty\) optimization problem. Such procedure is described in Section 4
  • +
  • Important concepts indispensable for \(\mathcal{H}_\infty\) control such as the \(\mathcal{H}_\infty\) norm and the generalized plant are introduced in Section 3
  • +
  • A very important step in \(\mathcal{H}_\infty\) control is to express the control specifications (performances, robustness, etc.) as an \(\mathcal{H}_\infty\) optimization problem. Such procedure is described in Section 4
  • One of the most useful use of the \(\mathcal{H}_\infty\) control is the shaping of closed-loop transfer functions. -Such technique is presented in Section 5
  • -
  • Finally, complete examples of the use of \(\mathcal{H}_\infty\) Control for practical problems are provided in Section 6.
  • +Such technique is presented in Section 5 +
  • Finally, complete examples of the use of \(\mathcal{H}_\infty\) Control for practical problems are provided in Section 6.
-
-

1 Introduction to Model Based Control

+
+

1 Introduction to Model Based Control

- +

-
-

1.1 Model Based Control - Methodology

+
+

1.1 Model Based Control - Methodology

- +

-The typical methodology for Model Based Control techniques is schematically shown in Figure 1. +The typical methodology for Model Based Control techniques is schematically shown in Figure 1.

@@ -148,7 +148,7 @@ It consists of three steps: -

+

control-procedure.png

Figure 1: Typical Methodoly for Model Based Control

@@ -160,20 +160,20 @@ In this document, we will suppose a model of the plant is available (step 1 alre

-In Section 2, steps 2 and 3 will be described for a control techniques called classical (open-)loop shaping. +In Section 2, steps 2 and 3 will be described for a control techniques called classical (open-)loop shaping.

-Then, steps 2 and 3 for the \(\mathcal{H}_\infty\) Loop Shaping of closed-loop transfer functions will be discussed in Sections 4, 5 and 6. +Then, steps 2 and 3 for the \(\mathcal{H}_\infty\) Loop Shaping of closed-loop transfer functions will be discussed in Sections 4, 5 and 6.

-
-

1.2 From Classical Control to Robust Control

+
+

1.2 From Classical Control to Robust Control

- +

@@ -205,14 +205,14 @@ This robust control theory is the subject of this document.

-The three presented control methods are compared in Table 1. +The three presented control methods are compared in Table 1.

Note that in parallel, there have been numerous other developments, including non-linear control, adaptive control, machine-learning control just to name a few.

- +
@@ -360,11 +360,11 @@ Note that in parallel, there have been numerous other developments, including no -
-

1.3 Example System

+
+

1.3 Example System

- +

@@ -373,24 +373,24 @@ Most of them will be applied on a physical system presented in this section.

-This system is shown in Figure 2. +This system is shown in Figure 2. It could represent an active suspension stage supporting a payload. The inertial motion of the payload is measured using an inertial sensor and this is feedback to a force actuator. Such system could be used to actively isolate the payload (disturbance rejection problem) or to make it follow a trajectory (tracking problem).

-The notations used on Figure 2 are listed and described in Table 2. +The notations used on Figure 2 are listed and described in Table 2.

-
+

mech_sys_1dof_inertial_contr.png

Figure 2: Test System consisting of a payload with a mass \(m\) on top of an active system with a stiffness \(k\), damping \(c\) and an actuator. A feedback controller \(K(s)\) is added to position / isolate the payload.

-
Table 1: Table summurazing the main differences between classical, modern and robust control
+
@@ -476,7 +476,7 @@ The notations used on Figure 2 are listed and describe
Table 2: Example system variables
-
+

Derive the following open-loop transfer functions:

@@ -509,14 +509,14 @@ You can follow this generic procedure:

-Having obtained \(G(s)\) and \(G_d(s)\), we can transform the system shown in Figure 2 into a classical feedback architecture as shown in Figure 6. +Having obtained \(G(s)\) and \(G_d(s)\), we can transform the system shown in Figure 2 into a classical feedback architecture as shown in Figure 6.

-
+

classical_feedback_test_system.png

-

Figure 3: Block diagram corresponding to the example system of Figure 2

+

Figure 3: Block diagram corresponding to the example system of Figure 2

@@ -540,18 +540,18 @@ And now the system dynamics \(G(s)\) and \(G_d(s)\).

-The Bode plots of \(G(s)\) and \(G_d(s)\) are shown in Figures 4 and 5. +The Bode plots of \(G(s)\) and \(G_d(s)\) are shown in Figures 4 and 5.

-
+

bode_plot_example_afm.png

Figure 4: Bode plot of the plant \(G(s)\)

-
+

bode_plot_example_Gd.png

Figure 5: Magnitude of the disturbance transfer function \(G_d(s)\)

@@ -560,40 +560,40 @@ The Bode plots of \(G(s)\) and \(G_d(s)\) are shown in Figures -

2 Classical Open Loop Shaping

+
+

2 Classical Open Loop Shaping

- +

-After an introduction to classical Loop Shaping in Section 2.1, a practical example is given in Section 2.2. +After an introduction to classical Loop Shaping in Section 2.1, a practical example is given in Section 2.2. Such Loop Shaping is usually performed manually with tools coming from the classical control theory.

However, the \(\mathcal{H}_\infty\) synthesis can be used to automate the Loop Shaping process. -This is presented in Section 2.3 and applied on the same example in Section 2.4. +This is presented in Section 2.3 and applied on the same example in Section 2.4.

-
-

2.1 Introduction to Loop Shaping

+
+

2.1 Introduction to Loop Shaping

- +

-
+

Loop Shaping refers to a control design procedure that involves explicitly shaping the magnitude of the Loop Transfer Function \(L(s)\).

-
+

-The Loop Gain (or Loop transfer function) \(L(s)\) usually refers to as the product of the controller and the plant (see Figure 6): +The Loop Gain (or Loop transfer function) \(L(s)\) usually refers to as the product of the controller and the plant (see Figure 6):

\begin{equation} L(s) = G(s) \cdot K(s) \label{eq:loop_gain} @@ -604,7 +604,7 @@ Its name comes from the fact that this is actually the “gain around the lo

-
+

open_loop_shaping.png

Figure 6: Classical Feedback Architecture

@@ -628,12 +628,12 @@ It is widely used and generally successful as many characteristics of the closed

The shaping of the Loop Gain is done manually by combining several leads, lags, notches… This process is very much simplified by the fact that the loop gain \(L(s)\) depends linearly on \(K(s)\) \eqref{eq:loop_gain}. -A typical wanted Loop Shape is shown in Figure 7. +A typical wanted Loop Shape is shown in Figure 7. Another interesting Loop shape called “Bode Step” is described in [1].

-
+

open_loop_shaping_shape.png

Figure 7: Typical Wanted Shape for the Loop Gain \(L(s)\)

@@ -642,21 +642,21 @@ Another interesting Loop shape called “Bode Step” is described in The shaping of closed-loop transfer functions is obviously not as simple as they don’t depend linearly on \(K(s)\). But this is were the \(\mathcal{H}_\infty\) Synthesis will be useful! -More details on that in Sections 4 and 5. +More details on that in Sections 4 and 5.

-
-

2.2 Example of Manual Open Loop Shaping

+
+

2.2 Example of Manual Open Loop Shaping

- +

-
+

-Let’s take our example system described in Section 1.3 and design a controller using the Open-Loop shaping synthesis approach. +Let’s take our example system described in Section 1.3 and design a controller using the Open-Loop shaping synthesis approach. The specifications are:

    @@ -668,7 +668,7 @@ The specifications are:
-
+

Using SISOTOOL, design a controller that fulfills the specifications.

@@ -707,7 +707,7 @@ Let’s say we came up with the following controller.

-The bode plot of the Loop Gain is shown in Figure 8 and we can verify that we have the wanted stability margins using the margin command: +The bode plot of the Loop Gain is shown in Figure 8 and we can verify that we have the wanted stability margins using the margin command:

[Gm, Pm, ~, Wc] = margin(G*K)
@@ -747,7 +747,7 @@ The bode plot of the Loop Gain is shown in Figure 8 an
 
 
 
-
+

loop_gain_manual_afm.png

Figure 8: Bode Plot of the obtained Loop Gain \(L(s) = G(s) K(s)\)

@@ -755,11 +755,11 @@ The bode plot of the Loop Gain is shown in Figure 8 an
-
-

2.3 \(\mathcal{H}_\infty\) Loop Shaping Synthesis

+
+

2.3 \(\mathcal{H}_\infty\) Loop Shaping Synthesis

- +

@@ -782,7 +782,7 @@ where:

  • K is the synthesize controller
  • -
    +

    Matlab documentation of loopsyn (link).

    @@ -799,23 +799,23 @@ Even though we will not go into details and explain how such synthesis is workin
    -
    -

    2.4 Example of the \(\mathcal{H}_\infty\) Loop Shaping Synthesis

    +
    +

    2.4 Example of the \(\mathcal{H}_\infty\) Loop Shaping Synthesis

    - +

    To apply the \(\mathcal{H}_\infty\) Loop Shaping Synthesis, the wanted shape of the loop gain should be determined from the specifications. -This is summarized in Table 3. +This is summarized in Table 3.

    -Such shape corresponds to the typical wanted Loop gain Shape shown in Figure 7. +Such shape corresponds to the typical wanted Loop gain Shape shown in Figure 7.

    - +
    @@ -884,18 +884,18 @@ The \(\mathcal{H}_\infty\) open loop shaping synthesis is then performed using t

    -The obtained Loop Gain is shown in Figure 9 and matches the specified one by a factor \(\gamma \approx 2\). +The obtained Loop Gain is shown in Figure 9 and matches the specified one by a factor \(\gamma \approx 2\).

    -
    +

    open_loop_shaping_hinf_L.png

    Figure 9: Obtained Open Loop Gain \(L(s) = G(s) K(s)\) and comparison with the wanted Loop gain \(L_w\)

    -
    +

    When using the \(\mathcal{H}_\infty\) Synthesis, it is usually recommended to analyze the obtained controller.

    @@ -907,7 +907,7 @@ This is usually done by breaking down the controller into simple elements such a

    -Let’s briefly analyze the obtained controller which bode plot is shown in Figure 10: +Let’s briefly analyze the obtained controller which bode plot is shown in Figure 10:

    • two integrators are used at low frequency to have the wanted low frequency high gain
    • @@ -916,7 +916,7 @@ Let’s briefly analyze the obtained controller which bode plot is shown in
    -
    +

    open_loop_shaping_hinf_K.png

    Figure 10: Obtained controller \(K\) using the open-loop \(\mathcal{H}_\infty\) shaping

    @@ -924,10 +924,10 @@ Let’s briefly analyze the obtained controller which bode plot is shown in

    -Let’s finally compare the obtained stability margins of the \(\mathcal{H}_\infty\) controller and of the manually developed controller in Table 4. +Let’s finally compare the obtained stability margins of the \(\mathcal{H}_\infty\) controller and of the manually developed controller in Table 4.

    -
    Table 3: Wanted Loop Shape corresponding to each specification
    +
    @@ -968,38 +968,38 @@ Let’s finally compare the obtained stability margins of the \(\mathcal{H}_ -
    -

    3 A first Step into the \(\mathcal{H}_\infty\) world

    +
    +

    3 A first Step into the \(\mathcal{H}_\infty\) world

    - +

    In this section, the \(\mathcal{H}_\infty\) Synthesis method, which is based on the optimization of the \(\mathcal{H}_\infty\) norm of transfer functions, is introduced.

    -After the \(\mathcal{H}_\infty\) norm is defined in Section 3.1, the \(\mathcal{H}_\infty\) synthesis procedure is described in Section 3.2 . +After the \(\mathcal{H}_\infty\) norm is defined in Section 3.1, the \(\mathcal{H}_\infty\) synthesis procedure is described in Section 3.2 .

    -The generalized plant, a very useful tool to describe a control problem, is presented in Section 3.3. -The \(\mathcal{H}_\infty\) is then applied to this generalized plant in Section 3.4. +The generalized plant, a very useful tool to describe a control problem, is presented in Section 3.3. +The \(\mathcal{H}_\infty\) is then applied to this generalized plant in Section 3.4.

    -Finally, an example showing how to convert a typical feedback control architecture into a generalized plant is given in Section 3.5. +Finally, an example showing how to convert a typical feedback control architecture into a generalized plant is given in Section 3.5.

    -
    -

    3.1 The \(\mathcal{H}_\infty\) Norm

    +
    +

    3.1 The \(\mathcal{H}_\infty\) Norm

    - +

    -
    +

    The \(\mathcal{H}_\infty\) norm of a multi-input multi-output system \(G(s)\) is defined as the peak of the maximum singular value of its frequency response

    @@ -1016,7 +1016,7 @@ For a single-input single-output system \(G(s)\), it is simply the peak value of
    -
    +

    Let’s compute the \(\mathcal{H}_\infty\) norm of our test plant \(G(s)\) using the hinfnorm function:

    @@ -1031,11 +1031,11 @@ Let’s compute the \(\mathcal{H}_\infty\) norm of our test plant \(G(s)\) u

    -We can see in Figure 11 that indeed, the \(\mathcal{H}_\infty\) norm of \(G(s)\) does corresponds to the peak value of \(|G(j\omega)|\). +We can see in Figure 11 that indeed, the \(\mathcal{H}_\infty\) norm of \(G(s)\) does corresponds to the peak value of \(|G(j\omega)|\).

    -
    +

    hinfinity_norm_siso_bode.png

    Figure 11: Example of the \(\mathcal{H}_\infty\) norm of a SISO system

    @@ -1045,14 +1045,14 @@ We can see in Figure 11 that indeed, the \(\mathcal{H}
    -
    -

    3.2 \(\mathcal{H}_\infty\) Synthesis

    +
    +

    3.2 \(\mathcal{H}_\infty\) Synthesis

    - +

    -
    +

    The \(\mathcal{H}_\infty\) synthesis is a method that uses an algorithm (LMI optimization, Riccati equation) to find a controller that stabilizes the system and that minimizes the \(\mathcal{H}_\infty\) norms of defined transfer functions.

    @@ -1060,16 +1060,16 @@ The \(\mathcal{H}_\infty\) synthesis is a method that uses an algorithm (

    -Why optimizing the \(\mathcal{H}_\infty\) norm of transfer functions is a pertinent choice will become clear when we will translate the typical control specifications into the \(\mathcal{H}_\infty\) norm of transfer functions in Section 4. +Why optimizing the \(\mathcal{H}_\infty\) norm of transfer functions is a pertinent choice will become clear when we will translate the typical control specifications into the \(\mathcal{H}_\infty\) norm of transfer functions in Section 4.

    -
    +

    Then applying the \(\mathcal{H}_\infty\) synthesis to a plant, the engineer work usually consists of the following steps:

    1. Write the problem as standard \(\mathcal{H}_\infty\) problem using the generalized plant (described in the next section)
    2. -
    3. Translate the specifications as \(\mathcal{H}_\infty\) norms of transfer functions (Section 4)
    4. +
    5. Translate the specifications as \(\mathcal{H}_\infty\) norms of transfer functions (Section 4)
    6. Make the synthesis and analyze the obtained controller
    @@ -1092,11 +1092,11 @@ Note that there are many ways to use the \(\mathcal{H}_\infty\) Synthesis:
    -
    -

    3.3 The Generalized Plant

    +
    +

    3.3 The Generalized Plant

    - +

    @@ -1105,7 +1105,7 @@ This consist of deriving the Generalized Plant for the current problem.

    -The generalized plant, usually noted \(P(s)\), is shown in Figure 12. +The generalized plant, usually noted \(P(s)\), is shown in Figure 12. It has two sets of inputs \([w,\,u]\) and two sets of outputs \([z\,v]\) such that:

    \begin{equation} @@ -1113,22 +1113,22 @@ It has two sets of inputs \([w,\,u]\) and two sets of outputs \([z \end{equation}

    -The meaning of these inputs and outputs are summarized in Table 5. +The meaning of these inputs and outputs are summarized in Table 5.

    -A practical example about how to derive the generalized plant for a classical control problem is given in Section 3.5. +A practical example about how to derive the generalized plant for a classical control problem is given in Section 3.5.

    -
    +
    -
    +

    general_plant.png

    Figure 12: Inputs and Outputs of the generalized Plant

    -
    Table 4: Comparison of the characteristics obtained with the two methods
    +
    @@ -1174,18 +1174,18 @@ A practical example about how to derive the generalized plant for a classical co -
    -

    3.4 The \(\mathcal{H}_\infty\) Synthesis applied on the Generalized plant

    +
    +

    3.4 The \(\mathcal{H}_\infty\) Synthesis applied on the Generalized plant

    - +

    Once the generalized plant is obtained, the \(\mathcal{H}_\infty\) synthesis problem can be stated as follows:

    -
    +
    \(\mathcal{H}_\infty\) Synthesis applied on the generalized plant
    @@ -1198,11 +1198,11 @@ After \(K\) is found, the system is robustified by adjusting the response

    -The obtained controller \(K\) and the generalized plant are connected as shown in Figure 13. +The obtained controller \(K\) and the generalized plant are connected as shown in Figure 13.

    -
    +

    general_control_names.png

    Figure 13: General Control Configuration

    @@ -1228,29 +1228,29 @@ where:

    -Note that the general control configure of Figure 13, as its name implies, is quite general and can represent feedback control as well as feedforward control architectures. +Note that the general control configure of Figure 13, as its name implies, is quite general and can represent feedback control as well as feedforward control architectures.

    -
    -

    3.5 From a Classical Feedback Architecture to a Generalized Plant

    +
    +

    3.5 From a Classical Feedback Architecture to a Generalized Plant

    - +

    -The procedure to convert a typical control architecture as the one shown in Figure 14 to a generalized Plant is as follows: +The procedure to convert a typical control architecture as the one shown in Figure 14 to a generalized Plant is as follows:

    1. Define signals of the generalized plant: \(w\), \(z\), \(u\) and \(v\)
    2. -
    3. Remove \(K\) and rearrange the inputs and outputs to match the generalized configuration shown in Figure 12
    4. +
    5. Remove \(K\) and rearrange the inputs and outputs to match the generalized configuration shown in Figure 12
    -
    +

    -Consider the feedback control architecture shown in Figure 14. +Consider the feedback control architecture shown in Figure 14. Suppose we want to design \(K\) using the general \(\mathcal{H}_\infty\) synthesis, and suppose the signals to be minimized are the control input \(u\) and the tracking error \(\epsilon\).

      @@ -1259,7 +1259,7 @@ Suppose we want to design \(K\) using the general \(\mathcal{H}_\infty\) synthes
    -
    +

    classical_feedback_tracking.png

    Figure 14: Classical Feedback Control Architecture (Tracking)

    @@ -1278,17 +1278,17 @@ Usually, we want to minimize the tracking errors \(\epsilon\) and the control si

    -Then, Remove \(K\) and rearrange the inputs and outputs as in Figure 12. +Then, Remove \(K\) and rearrange the inputs and outputs as in Figure 12.

    Answer

    -The obtained generalized plant shown in Figure 15. +The obtained generalized plant shown in Figure 15.

    -
    +

    mixed_sensitivity_ref_tracking.png

    Figure 15: Generalized plant of the Classical Feedback Control Architecture (Tracking)

    @@ -1312,14 +1312,14 @@ P.OutputName = {'e', 'u
    -
    -

    4 Modern Interpretation of Control Specifications

    +
    +

    4 Modern Interpretation of Control Specifications

    - +

    -As shown in Section 2, the loop gain \(L(s) = G(s) K(s)\) is a useful and easy tool when manually designing controllers. +As shown in Section 2, the loop gain \(L(s) = G(s) K(s)\) is a useful and easy tool when manually designing controllers. This is mainly due to the fact that \(L(s)\) is very easy to shape as it depends linearly on \(K(s)\). Moreover, important quantities such as the stability margins and the control bandwidth can be estimated from the shape/phase of \(L(s)\).

    @@ -1327,40 +1327,40 @@ Moreover, important quantities such as the stability margins and the control ban

    However, the loop gain \(L(s)\) does not directly give the performances of the closed-loop system. As a matter of fact, the behavior of the closed-loop system by the closed-loop transfer functions. -These are derived of a typical feedback architecture functions in Section 4.1. +These are derived of a typical feedback architecture functions in Section 4.1.

    The modern interpretation of control specifications then consists of determining the required shape of the closed-loop transfer functions such that the system behavior corresponds to the requirements. Once this is done, the \(\mathcal{H}_\infty\) synthesis can be used to generate a controller that will shape the closed-loop transfer function as specified.. -This method is presented in Section 5. +This method is presented in Section 5.

    One of the most important closed-loop transfer function is called the sensitivity function. -Its link with the closed-loop behavior of the feedback system is studied in Section 4.2. +Its link with the closed-loop behavior of the feedback system is studied in Section 4.2.

    -The robustness (stability margins) of the system can also be linked to the shape of the sensitivity function with the use of the module margin (Section 4.3). +The robustness (stability margins) of the system can also be linked to the shape of the sensitivity function with the use of the module margin (Section 4.3).

    -Links between typical control specifications and shapes of the closed-loop transfer functions are summarized in Section 4.4. +Links between typical control specifications and shapes of the closed-loop transfer functions are summarized in Section 4.4.

    -
    -

    4.1 Closed Loop Transfer Functions and the Gang of Four

    +
    +

    4.1 Closed Loop Transfer Functions and the Gang of Four

    - +

    -Consider the typical feedback system shown in Figure 16. +Consider the typical feedback system shown in Figure 16.

    @@ -1369,17 +1369,17 @@ The behavior (performances) of this feedback system is determined by the closed-

    Depending on the specification, different closed-loop transfer functions do matter. -These are summarized in Table 6. +These are summarized in Table 6.

    -
    +

    gang_of_four_feedback.png

    Figure 16: Simple Feedback Architecture with \(r\) the reference signal, \(\epsilon\) the tracking error, \(d\) a disturbance acting at the plant input \(u\), \(y\) is the output signal and \(n\) the measurement noise

    -
    Table 5: Notations for the general configuration
    +
    @@ -1421,14 +1421,14 @@ These are summarized in Table 6. - +
    Table 6: Typical Specification and associated closed-loop transfer function
    Robustness (stability margins)Module margin (see Section 4.3)Module margin (see Section 4.3)
    -
    +

    -For the feedback system in Figure 16, 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 16, write the output signals \([\epsilon, u, y]\) as a function of the systems \(K(s), G(s)\) and the input signals \([r, d, n]\).

    Hint @@ -1465,9 +1465,9 @@ The following equations should be obtained:
    -
    +

    -We can see that they are 4 different closed-loop transfer functions describing the behavior of the feedback system in Figure 16. +We can see that they are 4 different closed-loop transfer functions describing the behavior of the feedback system in Figure 16. These called the Gang of Four:

    \begin{align} @@ -1479,7 +1479,7 @@ These called the Gang of Four:
    -
    +

    If a feedforward controller is included, a Gang of Six transfer functions can be defined. More on that in this short video. @@ -1488,7 +1488,7 @@ More on that in this short

    -The behavior of the feedback system in Figure 16 is fully described by the following set of equations: +The behavior of the feedback system in Figure 16 is fully described by the following set of equations:

    \begin{align} \epsilon &= S r - GS d - GS n \\ @@ -1503,11 +1503,11 @@ Similarly, to reduce the effect of measurement noise \(n\) on the output \(y\),
    -
    -

    4.2 The Sensitivity Function

    +
    +

    4.2 The Sensitivity Function

    - +

    @@ -1518,14 +1518,14 @@ In this section, we will see how the shape of the sensitivity function will impa

    Suppose we have developed a “reference” controller \(K_r(s)\) and made three small changes to obtained three controllers \(K_1(s)\), \(K_2(s)\) and \(K_3(s)\). -The obtained sensitivity functions for these four controllers are shown in Figure 17 and the corresponding step responses are shown in Figure 18. +The obtained sensitivity functions for these four controllers are shown in Figure 17 and the corresponding step responses are shown in Figure 18.

    -The comparison of the sensitivity functions shapes and their effect on the step response is summarized in Table 7. +The comparison of the sensitivity functions shapes and their effect on the step response is summarized in Table 7.

    - +
    @@ -1564,20 +1564,20 @@ The comparison of the sensitivity functions shapes and their effect on the step
    Table 7: Comparison of the sensitivity function shape and the corresponding step response for the three controller variations
    -
    +

    sensitivity_shape_effect.png

    Figure 17: Sensitivity function magnitude \(|S(j\omega)|\) corresponding to the reference controller \(K_r(s)\) and the three modified controllers \(K_i(s)\)

    -
    +

    sensitivity_shape_effect_step.png

    Figure 18: Step response (response from \(r\) to \(y\)) for the different controllers

    -
    +
    Closed-Loop Bandwidth

    The closed-loop bandwidth \(\omega_b\) is the frequency where \(|S(j\omega)|\) first crosses \(1/\sqrt{2} = -3dB\) from below. @@ -1590,9 +1590,9 @@ In general, a large bandwidth corresponds to a faster rise time.

    -
    +

    -From the simple analysis above, we can draw a first estimation of the wanted shape for the sensitivity function (Figure 19): +From the simple analysis above, we can draw a first estimation of the wanted shape for the sensitivity function (Figure 19):

    • A small magnitude at low frequency to make the static errors small
    • @@ -1603,7 +1603,7 @@ This will become clear in the next section about the module margin.
    -
    +

    h-infinity-spec-S.png

    Figure 19: Typical wanted shape of the Sensitivity transfer function

    @@ -1613,11 +1613,11 @@ This will become clear in the next section about the module margin.
    -
    -

    4.3 Robustness: Module Margin

    +
    +

    4.3 Robustness: Module Margin

    - +

    @@ -1625,7 +1625,7 @@ Let’s start this section by an example demonstrating why the phase and gai Will follow a discussion about the module margin, a robustness indicator that can be linked to the \(\mathcal{H}_\infty\) norm of \(S\) and that will prove to be very useful.

    -
    +

    Consider the following plant \(G_t(s)\):

    @@ -1639,7 +1639,7 @@ Gt = 1/k*(s

    -Let’s say we have designed a controller \(K_t(s)\) that gives the loop gain shown in Figure 20. +Let’s say we have designed a controller \(K_t(s)\) that gives the loop gain shown in Figure 20.

    @@ -1648,7 +1648,7 @@ Let’s say we have designed a controller \(K_t(s)\) that gives the loop gai

    -The following characteristics can be determined from the Loop gain in Figure 20: +The following characteristics can be determined from the Loop gain in Figure 20:

    • Control bandwidth of \(\approx 10\, \text{Hz}\)
    • @@ -1662,7 +1662,7 @@ Or does it? Let’s find out.

      -
      +

      phase_gain_margin_model_plant.png

      Figure 20: Bode plot of the obtained Loop Gain \(L(s)\)

      @@ -1678,7 +1678,7 @@ Now let’s suppose the controller is implemented in practice, and the &ldqu

      -The obtained “real” loop gain is shown in Figure 21. +The obtained “real” loop gain is shown in Figure 21. At a frequency little bit above 100Hz, the phase of the loop gain reaches -180 degrees while its magnitude is more than one which indicates instability.

      @@ -1696,7 +1696,7 @@ It is confirmed by checking the stability of the closed loop system: -
      +

      phase_gain_margin_real_plant.png

      Figure 21: Bode plots of \(L(s)\) (loop gain corresponding the nominal plant) and \(L_r(s)\) (loop gain corresponding to the real plant)

      @@ -1716,7 +1716,7 @@ This is due to the fact that the gain and phase margin are robustness indicators Let’s now determine a new robustness indicator based on the Nyquist Stability Criteria.

      -
      +
      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.
      @@ -1725,7 +1725,7 @@ Let’s now determine a new robustness indicator based on the Nyquist Stabil
      -
      +

      For more information about the general Nyquist Stability Criteria, you may want to look at this video.

      @@ -1737,21 +1737,21 @@ From the Nyquist stability criteria, it is clear that we want \(L(j\omega)\) to This minimum distance is called the module margin.

      -
      +
      Module Margin
      The Module Margin \(\Delta M\) is defined as the minimum distance between the point \(-1\) and the loop gain \(L(j\omega)\) in the complex plane.
      -
      +

      -A typical Nyquist plot is shown in Figure 22. +A typical Nyquist plot is shown in Figure 22. The gain, phase and module margins are graphically shown to have an idea of what they represent.

      -
      +

      module_margin_example.png

      Figure 22: Nyquist plot with visual indication of the Gain margin \(\Delta G\), Phase margin \(\Delta \phi\) and Module margin \(\Delta M\)

      @@ -1760,7 +1760,7 @@ The gain, phase and module margins are graphically shown to have an idea of what

      -As expected from Figure 22, there is a close relationship between the module margin and the gain and phase margins. +As expected from Figure 22, there is a close relationship between the module margin and the gain and phase margins. We can indeed show that for a given value of the module margin \(\Delta M\), we have:

      \begin{equation} @@ -1786,7 +1786,7 @@ Therefore, for a given \(\mathcal{H}_\infty\) norm of \(S\) (\(\|S\|_\infty = M_ \Delta G \ge \frac{M_S}{M_S - 1}; \quad \Delta \phi \ge \frac{1}{M_S} \end{equation} -
      +

      The \(\mathcal{H}_\infty\) norm of the sensitivity function \(\|S\|_\infty\) is a measure of the Module margin \(\Delta M\) and therefore an indicator of the system robustness.

      @@ -1806,14 +1806,14 @@ Note that this is why large peak value of \(|S(j\omega)|\) usually indicate robu And we now understand why setting an upper bound on the magnitude of \(S\) is generally a good idea.

      -
      +

      Typical, we require \(\|S\|_\infty < 2 (6dB)\) which implies \(\Delta G \ge 2\) and \(\Delta \phi \ge 29^o\)

      -
      +

      To learn more about module/disk margin, you can check out this video.

      @@ -1822,27 +1822,14 @@ To learn more about module/disk margin, you can check out -

      4.4 Summary of

      +
      +

      4.4 Summary of typical specification and associated wanted shaping

      - +

      - -

      -Noise Attenuation: typical wanted shape for \(T\) -

      - -

      -\(S\) can be used to set a lower bound on the bandwidth -\(T\) can be used to set a higher bound on the bandwidth -\(T\) is used to make the system more robust to high frequency model uncertainties -

      - - - - +
      @@ -1895,11 +1882,11 @@ Noise Attenuation: typical wanted shape for \(T\) -
      -

      5 \(\mathcal{H}_\infty\) Shaping of closed-loop transfer functions

      +
      +

      5 \(\mathcal{H}_\infty\) Shaping of closed-loop transfer functions

      - +

      In the previous sections, we have seen that the performances of the system depends on the shape of the closed-loop transfer function. @@ -1910,33 +1897,33 @@ But don’t worry, the \(\mathcal{H}_\infty\) synthesis will do this job for

      To do so, weighting functions are included in the generalized plant and the \(\mathcal{H}_\infty\) synthesis applied on the weighted generalized plant. -Such procedure is presented in Section 5.1. +Such procedure is presented in Section 5.1.

      -Some advice on the design of weighting functions are given in Section 5.2. +Some advice on the design of weighting functions are given in Section 5.2.

      -An example of the \(\mathcal{H}_\infty\) shaping of the sensitivity function is studied in Section 5.3. +An example of the \(\mathcal{H}_\infty\) shaping of the sensitivity function is studied in Section 5.3.

      Multiple closed-loop transfer functions can be shaped at the same time. Such synthesis is usually called Mixed-sensitivity Loop Shaping and is one of the most powerful tool of the robust control theory. -Some insight on the use and limitations of such techniques are given in Section 5.4. +Some insight on the use and limitations of such techniques are given in Section 5.4.

      -
      -

      5.1 How to Shape closed-loop transfer function? Using Weighting Functions!

      +
      +

      5.1 How to Shape closed-loop transfer function? Using Weighting Functions!

      - +

      -Suppose we apply the \(\mathcal{H}_\infty\) synthesis on the generalized plant \(P(s)\) shown in Figure 23. +Suppose we apply the \(\mathcal{H}_\infty\) synthesis on the generalized plant \(P(s)\) shown in Figure 23. It will generate a controller \(K(s)\) such that the \(\mathcal{H}_\infty\) norm of closed-loop transfer function from \(r\) to \(\epsilon\) is minimized which is equal to the sensitivity function \(S\). Therefore, the synthesis objective is to minimize the \(\mathcal{H}_\infty\) norm of the sensitivity function: \(\|S\|_\infty\).

      @@ -1947,16 +1934,16 @@ Clearly this does not allow to shape the norm of \(S(j\omega)\) over all

      -
      +

      loop_shaping_S_without_W.png

      Figure 23: Generalized Plant

      -
      +

      -The trick is to include a weighting function \(W_S(s)\) in the generalized plant as shown in Figure 24. +The trick is to include a weighting function \(W_S(s)\) in the generalized plant as shown in Figure 24.

      @@ -1974,7 +1961,7 @@ Let’s now show how this is equivalent as shaping the sensitivity fu \Leftrightarrow & \left| S(j\omega) \right| < \frac{1}{\left| W_s(j\omega) \right|} \quad \forall \omega \label{eq:sensitivity_shaping} \end{align} -

      +

      As shown in Equation \eqref{eq:sensitivity_shaping}, the objective of the \(\mathcal{H}_\infty\) synthesis applied on the weighted plant is to make the norm sensitivity function smaller than the inverse of the norm of the weighting function, and that at all frequencies.

      @@ -1986,15 +1973,15 @@ Therefore, the choice of the weighting function \(W_s(s)\) is very important: it
      -
      +

      loop_shaping_S_with_W.png

      Figure 24: Weighted Generalized Plant

      -
      +

      -Using matlab, compute the weighted generalized plant shown in Figure 25 as a function of \(G(s)\) and \(W_S(s)\). +Using matlab, compute the weighted generalized plant shown in Figure 25 as a function of \(G(s)\) and \(W_S(s)\).

      Hint @@ -2034,18 +2021,18 @@ Pw = blkdiag(Ws, 1)*P;
      -
      -

      5.2 Design of Weighting Functions

      +
      +

      5.2 Design of Weighting Functions

      - +

      Weighting function included in the generalized plant must be proper, stable and minimum phase transfer functions.

      -
      +
      proper
      more poles than zeros, this implies \(\lim_{\omega \to \infty} |W(j\omega)| < \infty\)
      stable
      no poles in the right half plane
      @@ -2074,9 +2061,9 @@ with:
    • hfgain: high frequency gain
    • -
      +

      -The Matlab code below produces a weighting function with the following characteristics (Figure 25): +The Matlab code below produces a weighting function with the following characteristics (Figure 25):

      • Low frequency gain of 100
      • @@ -2090,7 +2077,7 @@ The Matlab code below produces a weighting function with the following character
      -
      +

      first_order_weight.png

      Figure 25: Obtained Magnitude of the Weighting Function

      @@ -2098,7 +2085,7 @@ The Matlab code below produces a weighting function with the following character
      -
      +

      Quite often, higher orders weights are required.

      @@ -2130,7 +2117,7 @@ A Matlab function implementing Equation \eqref{eq:weight_formula_advanced} is sh

      -
      function [W] = generateWeight(args)
      +
      function [W] = generateWeight(args)
           arguments
               args.G0 (1,1) double {mustBeNumeric, mustBePositive} = 0.1
               args.G1 (1,1) double {mustBeNumeric, mustBePositive} = 10
      @@ -2165,11 +2152,11 @@ W3 = generateWeight('G0', 1e2, 26.
      +The obtained shapes are shown in Figure 26.
       

      -
      +

      high_order_weight.png

      Figure 26: Higher order weights using Equation \eqref{eq:weight_formula_advanced}

      @@ -2179,11 +2166,11 @@ The obtained shapes are shown in Figure 26.
      -
      -

      5.3 Shaping the Sensitivity Function

      +
      +

      5.3 Shaping the Sensitivity Function

      - +

      @@ -2196,17 +2183,17 @@ Let’s design a controller using the \(\mathcal{H}_\infty\) shaping of the

      -As usual, the plant used is the one presented in Section 1.3. +As usual, the plant used is the one presented in Section 1.3.

      -
      +

      Translate the requirements as upper bounds on the Sensitivity function and design the corresponding weighting functions using Matlab.

      Hint

      -The typical wanted upper bound of the sensitivity function is shown in Figure 27. +The typical wanted upper bound of the sensitivity function is shown in Figure 27.

      @@ -2224,7 +2211,7 @@ Remember that the wanted upper bound of the sensitivity function is defined by t

      -
      +

      h-infinity-spec-S.png

      Figure 27: Typical wanted shape of the Sensitivity transfer function

      @@ -2292,7 +2279,7 @@ And the \(\mathcal{H}_\infty\) synthesis is performed on the weighted gen
      -
      +
       Test bounds:  0.5 <=  gamma  <=  0.51
       
        gamma        X>=0        Y>=0       rho(XY)<1    p/f
      @@ -2313,10 +2300,10 @@ Best performance (actual): 0.503
       \end{aligned}
       
       

      -This is indeed what we can see by comparing \(|S|\) and \(|W_S|\) in Figure 28. +This is indeed what we can see by comparing \(|S|\) and \(|W_S|\) in Figure 28.

      -
      +

      Obtaining \(\gamma < 1\) means that the \(\mathcal{H}_\infty\) synthesis found a controller such that the specified closed-loop transfer functions are bellow the specified upper bounds.

      @@ -2329,7 +2316,7 @@ It just means that at some frequency, one of the closed-loop transfer functions
      -
      +

      results_sensitivity_hinf.png

      Figure 28: Weighting function and obtained closed-loop sensitivity

      @@ -2337,24 +2324,24 @@ It just means that at some frequency, one of the closed-loop transfer functions
      -
      -

      5.4 Shaping multiple closed-loop transfer functions - Limitations

      +
      +

      5.4 Shaping multiple closed-loop transfer functions - Limitations

      - +

      -As was shown in Section 4, each of the four main closed-loop transfer functions (called the gang of four) will impact different characteristics of the closed-loop system. -This is summarized in Table 9. +As was shown in Section 4, each of the four main closed-loop transfer functions (called the gang of four) will impact different characteristics of the closed-loop system. +This is summarized in Table 9.

      Therefore, we might want to shape multiple closed-loop transfer functions at the same time. For instance \(S\) could be shape to have good step responses, \(KS\) to limit the input usage and \(T\) to filter measurement noise. -When multiple closed-loop transfer function are shaped at the same time, it is refereed to as Mixed-Sensitivity \(\mathcal{H}_\infty\) Control and is the subject of Section 6. +When multiple closed-loop transfer function are shaped at the same time, it is refereed to as Mixed-Sensitivity \(\mathcal{H}_\infty\) Control and is the subject of Section 6.

      -
      Table 8: Typical Specifications and corresponding wanted norms of open and closed loop tansfer functions
      +
      @@ -2461,7 +2448,7 @@ Some of them are described below for reference, it is a good exercise to try to

      Shaping of S and KS -
      +

      general_conf_shaping_S_KS.png

      Figure 29: Generalized Plant to shape \(S\) and \(KS\)

      @@ -2476,7 +2463,7 @@ Weighting functions:
      -
      P = [W1 -G*W1
      +
      P = [W1 -G*W1
            0   W2
            1  -G];
       
      @@ -2484,7 +2471,7 @@ Weighting functions:
      Shaping of S and T -
      +

      general_conf_shaping_S_T.png

      Figure 30: Generalized Plant to shape \(S\) and \(T\)

      @@ -2499,7 +2486,7 @@ Weighting functions:
      -
      P = [W1 -G*W1
      +
      P = [W1 -G*W1
            0   G*W2
            1   -G];
       
      @@ -2507,7 +2494,7 @@ Weighting functions:
      Shaping of S and GS -
      +

      general_conf_shaping_S_GS.png

      Figure 31: Generalized Plant to shape \(S\) and \(GS\)

      @@ -2522,7 +2509,7 @@ Weighting functions:
      -
      P = [W1   -W1
      +
      P = [W1   -W1
            G*W2 -G*W2
            G    -G];
       
      @@ -2530,7 +2517,7 @@ Weighting functions:
      Shaping of S, T and KS -
      +

      general_conf_shaping_S_T_KS.png

      Figure 32: Generalized Plant to shape \(S\), \(T\) and \(KS\)

      @@ -2546,7 +2533,7 @@ Weighting functions:
      -
      P = [W1 -G*W1
      +
      P = [W1 -G*W1
            0   W2
            0   G*W3
            1   -G];
      @@ -2555,7 +2542,7 @@ Weighting functions:
       
      Shaping of S, T and GS -
      +

      general_conf_shaping_S_T_GS.png

      Figure 33: Generalized Plant to shape \(S\), \(T\) and \(GS\)

      @@ -2571,7 +2558,7 @@ Weighting functions:
      -
      P = [W1   -W1
      +
      P = [W1   -W1
            G*W2 -G*W2
            0     W3
            G    -G];
      @@ -2580,7 +2567,7 @@ Weighting functions:
       
      Shaping of S, T, KS and GS -
      +

      general_conf_shaping_S_T_KS_GS.png

      Figure 34: Generalized Plant to shape \(S\), \(T\), \(KS\) and \(GS\)

      @@ -2597,13 +2584,13 @@ Weighting functions:
      -
      P = [ W1  -W1*G*W3 -G*W1
      +
      P = [ W1  -W1*G*W3 -G*W1
             0    0        W2
             1   -G*W3    -G];
       
      -
      +

      When shaping multiple closed-loop transfer functions, one should be very careful about the three following points that are further discussed:

      @@ -2615,7 +2602,7 @@ When shaping multiple closed-loop transfer functions, one should be very careful
      -
      +

      Mathematical relations are linking the closed-loop transfer functions. For instance, the sensitivity function \(S(s)\) and the complementary sensitivity function \(T(s)\) are linked by the following well known relation: @@ -2654,7 +2641,7 @@ This means that the Sensitivity function cannot be shaped at frequencies where t 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\)).

      @@ -2672,7 +2659,7 @@ You can follows this procedure for \(T\), \(KS\) and \(GS\):
      Answer

      -The obtained constrains are shown in Figure 35. +The obtained constrains are shown in Figure 35.

      @@ -2685,17 +2672,17 @@ However, in some frequency band, the norms do not depend on the controller and t

      Therefore the weighting functions should only focus on certainty frequency range depending on the transfer function being shaped. -These regions are summarized in Figure 35. +These regions are summarized in Figure 35.

      -
      +

      h-infinity-4-blocs-constrains.png

      Figure 35: Shaping the Gang of Four. Blue regions indicate that the transfer function can be shaped using \(K\). Red regions indicate this is not the case

      -
      +

      The order (e.g. number of state) of the controller given by the \(\mathcal{H}_\infty\) synthesis is equal to the order (e.g. number of state) of the weighted generalized plant. It is thus equal to the sum of the number of state of the non-weighted generalized plant and the number of state of all the weighting functions. @@ -2715,56 +2702,56 @@ Two approaches can be used to obtain controllers with reasonable order:

      -
      -

      6 Mixed-Sensitivity \(\mathcal{H}_\infty\) Control - Example

      +
      +

      6 Mixed-Sensitivity \(\mathcal{H}_\infty\) Control - Example

      - +

      Let’s now apply the \(\mathcal{H}_\infty\) Shaping control procedure on a practical example.

      -In Section 6.1 the control problem is presented. -The design procedure used for the \(\matcal{H}_\infty\) Mixed Sensitivity synthesis is described in Section 6.2. +In Section 6.1 the control problem is presented. +The design procedure used to apply the \(\mathcal{H}_\infty\) Mixed Sensitivity synthesis is described in Section 6.2.

      -The important step of interpreting the specifications is performed in Section 6.3. +The important step of interpreting the specifications as wanted shape of closed-loop transfer functions is performed in Section 6.3.

      -Then, the shaping of closed-loop transfer functions is performed in Sections 6.4, 6.5 and 6.6. +Finally, the shaping of closed-loop transfer functions is performed in Sections 6.4, 6.5 and 6.6.

      -
      -

      6.1 Control Problem

      +
      +

      6.1 Control Problem

      - +

      -Let’s take out usual test system shown in Figure 36. +Let’s consider our usual test system shown in Figure 36.

      -
      +

      ex_test_system.png

      Figure 36: Test System consisting of a payload with a mass \(m\) on top of an active system with a stiffness \(k\), damping \(c\) and an actuator. A feedback controller \(K(s)\) is added to position / isolate the payload.

      -
      +

      The control specifications are:

      • The displacement \(y\) should follow reference inputs \(r\) with negligible static error after 0.1s
      • Reject disturbances \(d\) in less than 0.1s
      • -
      • Limit the effect of measurement noise \(n\) on both the control input \(u\) and on the output displacement \(y\)
      • +
      • Limit the effect of measurement noise \(n\) on the output displacement \(y\)
      • Obtain a Robust System with good stability margins
      @@ -2781,11 +2768,11 @@ The considered inputs are:
      -
      -

      6.2 Control Design Procedure

      +
      +

      6.2 Control Design Procedure

      - +

      @@ -2793,17 +2780,18 @@ Here is the general design procedure that will be followed:

      1. Compute the model of the plant
      2. +
      3. Write the control system as a general control problem
      4. Translate the specifications into the wanted shape of closed-loop transfer functions
      5. -
      6. Write the system as a general control configuration
      7. +
      8. Chose the suitable weighted general plant to shape the wanted quantities
      9. Shape sequentially the chosen closed-loop transfer functions

      -Let’s first convert the system of Figure 36 into the classical feedback architecture of Figure 3. +Let’s first convert the system of Figure 36 into the classical feedback architecture of Figure 3.

      -
      +

      ex_test_system_feedback.png

      Figure 37: Block diagram corresponding to the example system

      @@ -2826,7 +2814,7 @@ The two transfer functions present in the system are derived and defined below:

      We also define the inputs signals that will be used for time domain simulations. -They are graphically shown in Figure 38. +They are graphically shown in Figure 38.

       9: % Time Vector
      @@ -2850,24 +2838,24 @@ They are graphically shown in Figure 38.
       
      -
      +

      ex_inputs_signals.png

      Figure 38: Time domain inputs signals

      -We also define the generalized plant corresponding to the system and that will be used for time domain simulations (Figure 39). +We also define the generalized plant corresponding to the system and that will be used for time domain simulations (Figure 39).

      -
      +

      ex_general_plant_sim.png

      Figure 39: Generalized plant that will be used for simulations

      -The Generalized plant of Figure 39 is defined on Matlab as follows: +The Generalized plant of Figure 39 is defined on Matlab as follows:

      26: Psim = [0  0  Gd  G
      @@ -2896,14 +2884,14 @@ Time domain simulations will be performed by first computing the closed-loop sys
       
      -
      -

      6.3 Modern Interpretation of control specifications

      +
      +

      6.3 Modern Interpretation of control specifications

      - +

      -
      +
      1. Translate the control specifications into wanted shape of closed-loop transfer functions
      2. Conclude and the closed-loop transfer functions to be shaped
      3. @@ -2913,24 +2901,24 @@ Time domain simulations will be performed by first computing the closed-loop sys
        Hint
          -
        1. Make use of Table 9
        2. -
        3. Make use of Table 9
        4. -
        5. See Section 5.4
        6. -
        7. See Section 5.4
        8. +
        9. Make use of Table 9
        10. +
        11. Make use of Table 9
        12. +
        13. See Section 5.4
        14. +
        15. See Section 5.4

      -After converting the control specifications into wanted shape of closed-loop transfer functions, we might come up with the Table 10. +After converting the control specifications into wanted shape of closed-loop transfer functions, we might come up with the Table 10.

      In such case, we want to shape \(S\), \(GS\) and \(T\).

      -
      Table 9: Typical specifications and corresponding shaping of the Gang of four
      +
      @@ -2975,7 +2963,7 @@ In such case, we want to shape \(S\), \(GS\) and \(T\).
      Table 10: Control Specifications and associated wanted shape of the closed-loop transfer functions

      -To do so, we use to generalized plant shown in Figure 40 for the synthesis where the three closed-loop tranfert functions from \(w\) to \([z_1\,,z_2\,,z_3]\) are respectively \(S\), \(GS\) and \(T\). +To do so, we use to generalized plant shown in Figure 40 for the synthesis where the three closed-loop tranfert functions from \(w\) to \([z_1\,,z_2\,,z_3]\) are respectively \(S\), \(GS\) and \(T\).

      @@ -2990,7 +2978,7 @@ This generalized plant is defined on Matlab as follows:

      -
      +

      ex_general_plant.png

      Figure 40: Generalized plant chosen for the shaping of \(S\), \(GS\) \(T\)

      @@ -2998,7 +2986,7 @@ This generalized plant is defined on Matlab as follows:

      However, to performed the \(\mathcal{H}_\infty\) loop shaping, we have to include weighting function to the Generalized plant. -We obtain the weighted generalized plant in Figure 41, and that is computed using Matlab as follows: +We obtain the weighted generalized plant in Figure 41, and that is computed using Matlab as follows:

      44: Pw = blkdiag(W1, W2, W3, 1)*P;
      @@ -3006,7 +2994,7 @@ We obtain the weighted generalized plant in Figure 
       
      - -
      -

      6.4 Step 1 - Shaping of \(S\)

      +
      +

      6.4 Step 1 - Shaping of \(S\)

      - +

      @@ -3069,7 +3057,7 @@ To not constrain \(GS\) and \(T\) for the shaping of \(S\), \(W_2\) and \(W_3\)

      -The \(\mathcal{H}_\infty\) synthesis is performed and the obtained closed-loop transfer functions \(S\), \(GS\), and \(T\) and compared with the upper bounds set by the weighting functions in Figure 42. +The \(\mathcal{H}_\infty\) synthesis is performed and the obtained closed-loop transfer functions \(S\), \(GS\), and \(T\) and compared with the upper bounds set by the weighting functions in Figure 42.

      @@ -3078,7 +3066,7 @@ K1 = hinfsyn(Pw, 1, 1, 'Display', +
       Test bounds:  0.5 <=  gamma  <=  0.51
       
        gamma        X>=0        Y>=0       rho(XY)<1    p/f
      @@ -3090,14 +3078,14 @@ Best performance (actual): 0.502
       
      -
      +

      ex_results_1.png

      Figure 42: Obtained Shape Closed-Loop transfer functions (dashed black lines indicate inverse magnitude of the weighting functions)

      -Time domain simulation is then performed and the obtained output displacement and control inputs are shown in Figure 43. +Time domain simulation is then performed and the obtained output displacement and control inputs are shown in Figure 43.

      @@ -3105,19 +3093,19 @@ We can see:

      • we are not able to follow the ramp input. This have to be solved by modifying the weighting function \(W_1(s)\)
      • -
      • we have poor rejection of disturbances. This we be solve by shaping \(GS\) in Section 6.5
      • -
      • we have quite large effect of the measurement noise. This will be solved by shaping \(T\) in Section 6.6
      • +
      • we have poor rejection of disturbances. This we be solve by shaping \(GS\) in Section 6.5
      • +
      • we have quite large effect of the measurement noise. This will be solved by shaping \(T\) in Section 6.6
      -
      +

      ex_time_domain_1.png

      Figure 43: Time domain simulation results

      -Remember that in order to follow ramp inputs, the sensitivity function should have a slope of +40dB/dec at low frequency (Table 9). +Remember that in order to follow ramp inputs, the sensitivity function should have a slope of +40dB/dec at low frequency (Table 9).

      @@ -3133,22 +3121,22 @@ This can simple be done by using a second order weight:

      -The \(\mathcal{H}_\infty\) synthesis is performed using the new weights and the obtained closed-loop shaped are shown in figure 44. +The \(\mathcal{H}_\infty\) synthesis is performed using the new weights and the obtained closed-loop shaped are shown in figure 44.

      -The time domain signals are shown in Figure 45 and it is confirmed that the ramps are now follows without static errors. +The time domain signals are shown in Figure 45 and it is confirmed that the ramps are now follows without static errors.

      -
      +

      ex_results_1b.png

      Figure 44: Obtained Shape Closed-Loop transfer functions

      -
      +

      ex_time_domain_1b.png

      Figure 45: Time domain simulation results

      @@ -3156,16 +3144,16 @@ The time domain signals are shown in Figure 45 and it
      -
      -

      6.5 Step 2 - Shaping of \(GS\)

      +
      +

      6.5 Step 2 - Shaping of \(GS\)

      - +

      -Looking at Figure 46, it is clear that the rejection of disturbances is not satisfactory. -This can also be seen by the large peak of \(GS\) in Figure 44. +Looking at Figure 46, it is clear that the rejection of disturbances is not satisfactory. +This can also be seen by the large peak of \(GS\) in Figure 44.

      @@ -3183,22 +3171,22 @@ Let’s take \(W_2\) as a simple constant gain:

      -The \(\mathcal{H}_\infty\) Synthesis is performed and the obtained closed-loop transfer functions are shown in Figure 46. +The \(\mathcal{H}_\infty\) Synthesis is performed and the obtained closed-loop transfer functions are shown in Figure 46.

      -
      +

      ex_results_2.png

      Figure 46: Obtained Shape Closed-Loop transfer functions

      -Time domain simulation results are shown in Figure 47. +Time domain simulation results are shown in Figure 47. If is shown that indeed, the disturbance rejection performance are much better and only very small oscillation is obtained.

      -
      +

      ex_time_domain_2.png

      Figure 47: Time domain simulation results

      @@ -3206,11 +3194,11 @@ If is shown that indeed, the disturbance rejection performance are much better a
      -
      -

      6.6 Step 3 - Shaping of \(T\)

      +
      +

      6.6 Step 3 - Shaping of \(T\)

      - +

      @@ -3238,7 +3226,7 @@ The final weighting function \(W_3\) is defined as follows:

      The \(\mathcal{H}_\infty\) synthesis is performed and \(\gamma\) is closed to one. -The obtained closed-loop transfer functions are shown in Figure 48 and we can obverse that: +The obtained closed-loop transfer functions are shown in Figure 48 and we can obverse that:

      • The high frequency gain of \(T\) is indeed reduced
      • @@ -3247,28 +3235,28 @@ This means we will probably have slightly less good disturbance rejection and tr
      -
      +

      ex_results_3.png

      Figure 48: Obtained Shape Closed-Loop transfer functions

      -The time domain simulation signals are shown in Figure 49. +The time domain simulation signals are shown in Figure 49. We can indeed see a slightly less good disturbance rejection. However, the vibrations induced by the sensor noise is well reduced. -This can be seen when zooming on the output signal in Figure 50. +This can be seen when zooming on the output signal in Figure 50.

      -
      +

      ex_time_domain_3.png

      Figure 49: Time domain simulation results

      -
      +

      ex_time_domaim_3_zoom.png

      Figure 50: Zoom on the output signal

      @@ -3276,8 +3264,8 @@ This can be seen when zooming on the output signal in Figure -

      6.7 Conclusion and Discussion

      +
      +

      6.7 Conclusion and Discussion

      Hopefully this practical example will help you apply the \(\mathcal{H}_\infty\) Shaping synthesis on other control problems. @@ -3294,11 +3282,11 @@ If the large input usage is considered to be not acceptable, the shaping of \(KS

      -
      -

      7 Conclusion

      +
      +

      7 Conclusion

      - +

      @@ -3309,12 +3297,12 @@ If you want to know more about the “\(\mathcal{H}_\infty\) and robust cont

      -
      -

      Resources

      -
      +
      +

      Resources

      +

      -For a complete treatment of multivariable robust control, I would highly recommend this book [3] -If you want to nice reference in French, look at [4]. +For a complete treatment of multivariable robust control, I would highly recommend this book [3]. +If you want to nice reference book in French, look at [4].

      @@ -3349,7 +3337,7 @@ You can also look at the very good lectures below.

      Author: Dehaeze Thomas

      -

      Created: 2020-12-03 jeu. 11:50

      +

      Created: 2020-12-03 jeu. 11:58

      diff --git a/index.org b/index.org index b6addb2..0f42ec9 100644 --- a/index.org +++ b/index.org @@ -60,7 +60,7 @@ The general structure of this document is as follows: - A very important step in $\mathcal{H}_\infty$ control is to express the control specifications (performances, robustness, etc.) as an $\mathcal{H}_\infty$ optimization problem. Such procedure is described in Section [[sec:modern_interpretation_specification]] - One of the most useful use of the $\mathcal{H}_\infty$ control is the shaping of closed-loop transfer functions. Such technique is presented in Section [[sec:closed-loop-shaping]] -- Finally, complete examples of the use of $\mathcal{H}_\infty$ Control for practical problems are provided in Section [[sec:h_infinity_mixed_sensitivity]]. +- Finally, complete examples of the use of $\mathcal{H}_\infty$ Control for practical problems are provided in Section [[sec:h_infinity_mixed_sensitivity]] * Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -1637,29 +1637,9 @@ And we now understand why setting an upper bound on the magnitude of $S$ is gene To learn more about module/disk margin, you can check out [[https://www.youtube.com/watch?v=XazdN6eZF80][this]] video. #+end_seealso -** TODO Summary of +** Summary of typical specification and associated wanted shaping <> -# Interpretation of the $\mathcal{H}_\infty$ norm of systems: -# - frequency by frequency attenuation / amplification - -# Let's note $G_t(s)$ the closed-loop transfer function from $w$ to $z$. - -# Consider an input sinusoidal signal $w(t) = \sin\left( \omega_0 t \right)$, then the output signal $z(t)$ will be equal to: -# \[ z(t) = A \sin\left( \omega_0 t + \phi \right) \] -# with: -# - $A = |G_t(j\omega_0)|$ is the magnitude of $G_t(s)$ at $\omega_0$ -# - $\phi = \angle G_t(j\omega_0)$ is the phase of $G_t(s)$ at $\omega_0$ - - -Noise Attenuation: typical wanted shape for $T$ - -$S$ can be used to set a lower bound on the bandwidth -$T$ can be used to set a higher bound on the bandwidth -$T$ is used to make the system more robust to high frequency model uncertainties - - - #+name: tab:specification_modern #+caption: Typical Specifications and corresponding wanted norms of open and closed loop tansfer functions | | Open-Loop Shaping | Closed-Loop Shaping | @@ -2088,8 +2068,8 @@ When multiple closed-loop transfer function are shaped at the same time, it is r |--------------------------------------+--------------+-----------------------------------------------------------| | Fast Reference Tracking | $S$ | Set lower bound on the bandwidth | | Small Steady State Errors | $S$ | Small low frequency gain | -| Follow Step ref. inputs | $S$ | +20dB/dec slope at low frequency | -| Follow Ramp ref. inputs | $S$ | +40db/dec slope 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 Sinusoidal ref. inputs | $S$ | Small magnitude centered on the sin. frequency | |--------------------------------------+--------------+-----------------------------------------------------------| | Output Disturbance Rejection | $S$ | Small gain in the disturbance bandwidth | @@ -2595,16 +2575,16 @@ These regions are summarized in Figure [[fig:h-infinity-4-blocs-constrains]]. Let's now apply the $\mathcal{H}_\infty$ Shaping control procedure on a practical example. In Section [[sec:ex_control_problem]] the control problem is presented. -The design procedure used for the $\matcal{H}_\infty$ Mixed Sensitivity synthesis is described in Section [[sec:ex_control_procedure]]. +The design procedure used to apply the $\mathcal{H}_\infty$ Mixed Sensitivity synthesis is described in Section [[sec:ex_control_procedure]]. -The important step of interpreting the specifications is performed in Section [[sec:ex_specification_interpretation]]. +The important step of interpreting the specifications as wanted shape of closed-loop transfer functions is performed in Section [[sec:ex_specification_interpretation]]. -Then, the shaping of closed-loop transfer functions is performed in Sections [[sec:ex_shaping_S]], [[sec:ex_shaping_GS]] and [[sec:ex_shaping_T]]. +Finally, the shaping of closed-loop transfer functions is performed in Sections [[sec:ex_shaping_S]], [[sec:ex_shaping_GS]] and [[sec:ex_shaping_T]]. ** Control Problem <> -Let's take out usual /test system/ shown in Figure [[fig:ex_test_system]]. +Let's consider our usual /test system/ shown in Figure [[fig:ex_test_system]]. #+begin_src latex :file ex_test_system.png \begin{tikzpicture} @@ -2652,7 +2632,7 @@ Let's take out usual /test system/ shown in Figure [[fig:ex_test_system]]. The control specifications are: - The displacement $y$ should follow reference inputs $r$ with negligible static error after 0.1s - Reject disturbances $d$ in less than 0.1s -- Limit the effect of measurement noise $n$ on both the control input $u$ and on the output displacement $y$ +- Limit the effect of measurement noise $n$ on the output displacement $y$ - Obtain a Robust System with good stability margins #+end_important @@ -2666,9 +2646,10 @@ The considered inputs are: Here is the general design procedure that will be followed: 1. Compute the model of the plant -2. Translate the specifications into the wanted shape of closed-loop transfer functions -3. Write the system as a general control configuration -4. Shape sequentially the chosen closed-loop transfer functions +2. Write the control system as a general control problem +3. Translate the specifications into the wanted shape of closed-loop transfer functions +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]]. @@ -2785,7 +2766,7 @@ We also define the generalized plant corresponding to the system and that will b \draw[->] (addw.east) -- (addn.west); \draw[->] (addn.east) -- (addr.west); \draw[->] (uin) |- (u) node[above left](z2){$u$}; - \draw[->] (addr.east) -- (addw-|z1) |- node[near start, right]{$v$} (K.east); + \draw[->] (addr.east) -- (addw-|z1) |- node[near start, right]{$\epsilon$} (K.east); \draw[->] (K.west) -| node[near end, left]{$u$} (G-|d) -- (G.west); \draw[->] (Gd.east) -| (addw.north); @@ -2834,7 +2815,7 @@ Time domain simulations will be performed by first computing the closed-loop sys #+begin_exercice 1. Translate the control specifications into wanted shape of closed-loop transfer functions 2. Conclude and the closed-loop transfer functions to be shaped -3. Chose a general configuration architecture that allows to shape the wanted closed-loop transfer function +3. Chose a general configuration architecture that allows to shape these transfer function 4. Using Matlab, define the generalized plant #+HTML:
      Hint @@ -2958,12 +2939,13 @@ We obtain the *weighted generalized plant* in Figure [[fig:ex_general_weighted_p #+RESULTS: [[file:figs/ex_general_weighted_plant.png]] -Finlay, performing the $\mathcal{H}_infty$ Shaping of $S$, $GS$ and $T$ can be done using the =hinfsyn= command: +Finlay, performing the $\mathcal{H}_\infty$ Shaping of $S$, $GS$ and $T$ is as simple as ruining the =hinfsyn= command: #+begin_src matlab +n :eval no :tangle no K = hinfsyn(Pw, 1, 1); #+end_src -Now the closed-loop transfer functions are shaped sequentially: + +Now let's shape the three closed-loop transfer functions sequentially: - $S$ is shaped in Section [[sec:ex_shaping_S]] - $GS$ is shaped in Section [[sec:ex_shaping_GS]] - $T$ is shaped in Section [[sec:ex_shaping_T]] @@ -2993,7 +2975,7 @@ To not constrain $GS$ and $T$ for the shaping of $S$, $W_2$ and $W_3$ are first The $\mathcal{H}_\infty$ synthesis is performed and the obtained closed-loop transfer functions $S$, $GS$, and $T$ and compared with the upper bounds set by the weighting functions in Figure [[fig:ex_results_1]]. -#+begin_src matlab :results output replace +#+begin_src matlab +n :results output replace Pw = blkdiag(W1, W2, W3, 1)*P; K1 = hinfsyn(Pw, 1, 1, 'Display', 'on'); #+end_src @@ -3104,7 +3086,7 @@ Remember that in order to follow ramp inputs, the sensitivity function should ha To do so, let's modify $W_1$ to impose a slope of +40dB/dec at low frequency. This can simple be done by using a second order weight: -#+begin_src matlab +#+begin_src matlab +n W1 = generateWeight('G0', 1e3, ... 'G1', 1/2, ... 'Gc', sqrt(2), 'wc', 2*pi*15, ... @@ -3219,7 +3201,7 @@ This poor rejection of disturbances is actually due to the fact that the obtain To overcome this issue, we can simply increase the magnitude of $W_2$ to limit the peak magnitude of $GS$ Let's take $W_2$ as a simple constant gain: -#+begin_src matlab +#+begin_src matlab +n W2 = tf(4e5); #+end_src @@ -3335,7 +3317,7 @@ To do so, $T$ is shaped such that its high frequency gain is reduced. This is done by increasing the high frequency gain of the weighting function $W_3$ until the $\mathcal{H}_\infty$ synthesis gives $\gamma \approx 1$. The final weighting function $W_3$ is defined as follows: -#+begin_src matlab +#+begin_src matlab +n W3 = generateWeight('G0', 1e-1, ... 'G1', 1e4, ... 'Gc', 1, 'wc', 2*pi*70, ...