Engineering Asked by venom on January 23, 2021
I’m learning how to control a double integrator with $H_infty$.
my model is simply
$$begin{gather}
dot{r} = v
dot{v} = F/m
r(t_0) = 0text{ m}, $v(t_0) = 0text{ m/s}, m = 1000text{ kg}
end{gather}$$
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 bandwidth 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:
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 $2pi 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+2pi f_{p}}{1+2pi 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.
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)
Where's the rest of your block diagram?
It looks like you have a polarity problem - You give a step of +1 and your pos_meas_Hinf
goes down instead of up.
Nothing you've shown in your diagram looks like a controller. You have a position reference that doesn't appear to go anywhere, except to a position error block, and you have a force reference that just feeds directly into an actuator model.
Where is your controller in that diagram?
Typically a feedback controller uses reference - feedback
as the error signal to drive the controller, but it looks like you're adding your control force
with the ref_F
. But again, I don't see where you're actually doing any control. You make a position error signal... do you actually use it? How are you using it? How does that signal get back to... ref_F
?
What is control force
, if you're using ref_F
to control? Why would a control force be an input to an actuator? Wouldn't the force be the output of the actuator?
In re-reading the question, it's not even clear to me what you're stepping. You have two things labeled as references in your block diagram - ref_Pos
and ref_F
. Your step response just has command
, which is a pretty meaningless label. Are you stepping position reference or force reference?
What are the state space matrices you're using?
Answered by Chuck on January 23, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP