Place command provided gain matrix which commands inputs to be too large

16 views (last 30 days)
When using the place command on a MIMO system I recieve a gain matrix.
When testing this gain matrix output at an operating point where the output should be near zero, the output is far greater (30s).
[A,B,C,D] = linmod('LIN_F16Block_Modded', xeval, ueval);
[K,prec,message] = place(A,B,pp)
I checked that the poles of the closed look system were indeed where I had placed them with:
eig(A-B*K)
The inputs that I expect from:
u = -K*xeval
are an order of magnitude or more lower than the ones I recieve.
I considered this might be due to passing a large A matrix to the place command (18x18), so I reduced it to a 4x4 but the commands provided were still similarly an order of magnitude or more greater than expected.
Am I using the place command wrong? Is the place algorithm ill suited for MIMO systems?
  10 Comments
John Viljoen
John Viljoen on 13 Apr 2021
Apologies for the slow response:
I agree that the way the system will evolve will of course be different, however at T=0 the closed loop system should be attempting to keep the system at the position it is intialised at, resulting in zero change to the inputs to the plant from the controller. However this is not the case.
To give a more complete explanation if you have knowledge of aircraft: the aircraft is trimmed at an operating point, the trim conditions and trim inputs are found, the system is linearised at this aforementioned trim condition of states and inputs, the poles are placed using this linearised system, the gain matrix is implemented at the trim operating point and instantaneously provides incorrect inputs to the plant.
Things I have discovered on this adventure that may be of use:
  • When all poles are 'placed' at exactly the same positions that they are already at, large gains are selected, when a zero gain matrix would do the same thing. This implies the algorithm for placing poles may be forcing certain poles to other poles desired positions, resulting in higher than expected gains and unexpected behaviour,
  • I can get a rough controller functioning just by slapping a bunch of pid's together instead (what I have resorted to for now) (provides expected outputs)
  • That the algorithm for placing poles is quite clever and I dont understand it well enough for me to use it in a critical use case currently haha.
Thanks again for you guys trying to solve my problem!
Paul
Paul on 13 Apr 2021
Two comments:
Regarding this statement: " ... at T=0 the closed loop system should be attempting to keep the system at the position it is intialised at ..." I'm not sure about this based on how this problem is described. The pair (xeval, ueval) defines a trim condition. But at T=0 in your closed loop simulation the initial state/input are (xeval/ -K*xeval), which is (likely) not a trim condition. Note that, in general, -K*xeval ~= ueval, so I don't think it is true that at T=0 there should be "zero change to the inputs." From initialization the closed loop dynamics wlll evolve and, if the closed loop is stable, come to steady state at a new trim condition (xfinal, -K*xfinal). Is that not what happens?
Regarding this statement: "When all poles are 'placed' at exactly the same positions that they are already at, ..." I assume this means that the requested closed loop poles are the same as the open loop poles. If so, then it's true that this could be achieved with K = 0. But I suspect that the system in question has more than one control input, so the selection of K is not, in general, unique for a desired set of closed loop poles. Some other restriction has to be applied and the doc page says the algorithm tries to pick K to meet some robustness goals. I don't know whether or not that algorithm typically resutls in "high gain" feedback. The high gain might also just be a consequece of the selection of the closed loop poles relative to the open loop poles.

Sign in to comment.

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!