I'm learning how to control a double integrator with $H_\infty$.

my model is simply

$ \dot{r} = v $

$ \dot{v} = F/m $

$ r(t_0) = 0$ m, $v(t_0) = 0 $ m/s, $m = 1000 $ kg

so I want to be able to track a step command. I have noise on measurements of position, velocity and force, assumed with a noise having a std of 0.02 m, 0.01 m/s and 0.2 N.

I want to have closed-loop bandwith equal to 0.2 Hz with a steady-state error of 0.1 m, and a sensitivity peak at $f_{p} = 1$.

The scheme I implemented is the following:

enter image description here

The weigthing functions are the following. Since I want to track low-frequency changing signals, I imposed

$W_{ref,r} = \frac{1}{s/\omega_{lpt} +1 }$, with the low-pass tracking function $f_{lpt}$ equal to $2\pi f_{lpt}$, and $f_{lpt}$ equal to 0.2.

The noise weighting functions are constants corresponding to the values mentioned above, while there is no feedforward contribution, so $W_{ref_F}$ is equal to 1, and so does $W_{ctrl_inn}$ (perfect inner dynamics). If I understand the theory correctly, the functions $W_{p_r}$ and $W_u$ play a similar role as the matrices $Q$ and $R$ in LQR, except that we can shape them frequency-wise, and that we are minimizing the $\infty$ norm instead of the Euclidean one. So, as recommended by Skogestad in his wonderful book I specified

$W_{p_r} = \frac{s/M+2\pi f_{p}}{1+2\pi f_{p} A}$ with $A = 0.1$, $f_p = 1$, and the peak for the sensitivity transfer function M equal to 2.

The transfer function for control performance is a high-pass filter needed to penalize high-frequencies such that the controller does not waste efforts in trying to control high-frequency dynamics (in my case > 10 Hz)

$W_u = \frac{3+ 2 \pi f_{hpf}/2}{1+2 \pi f_{hpf}}$, with the high pass frequency $f_{hpf}$ equal to 10 Hz.

I get this bode plot of the inverses of $W_{p_r}$ and $W_u$, so at small frequency the sensitivity tf $S$ is small, and at large frequency $KS$ is small, that is, no big control efforts.

enter image description here

If I synthesize the Hinf with matlab I get a $\gamma$ equal to 10. I would expect a small value because we want to make the z output small for the expected exogenous inputs. Can someone tell me what I'm doing wrong?


P.S. I'm getting the generalized plant by using linmod on the above specified Simulink model to get A,B,C,D and I transform it into P by doing

P = ss(A,B,C,D) P = minreal(P)

P.P.S. The step response also diverges. enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.