LQR for nonlinear system is running but not tracking

4 visualizzazioni (ultimi 30 giorni)
Hello, please I need advice on what could be the possible solution to this LQR control system attached below. I have designed the LQR to be tracking reference by adding an extra state as shown in the simulink attached. However, i noticed that my system blows up even with small duration of like 10 seconds, the system output runs into more than 500,000x1 double. Also it does not track, no matter how i change the paramters including the weight on the error, or Q the weight on the states or R the weight on the control. I have tried all i could but it does not change. all i kep seeing is figure with input refernec of 1 and output 2 attached and it does not change no matter what I do. An opinoin on how to reoslve this would be appreciated. I have attached the matlab script as well to be run before running the simulink.
thank you

Risposta accettata

Sam Chak
Sam Chak il 17 Feb 2024
I wanted to bring to your attention that the controllability matrix does not meet the requirement of full row rank. It is crucial to ensure that the controllability matrix has full rank, as this indicates that the system is controllable. It is important to address this issue before proceeding with any controller design.
run ss_LQR.m
if_xe_linear = logical
1
if_xe_linear = logical
0
C = 1x14
1 0 0 0 0 0 0 0 0 0 0 0 0 0
%% Size of Matrix A
szA = size(A)
szA = 1x2
14 14
%% Size of Matrix B
szB = size(B)
szB = 1x2
14 2
%% Rank of the Controllability Matrix
rk = rank(ctrb(A, B))
rk = 2
  3 Commenti
Sam Chak
Sam Chak il 18 Feb 2024
Applying LQR is a possible approach, but it's worth noting that out of the 14 states, only 2 states are controllable. To achieve controllability, you may need to consider augmenting the system dynamics or introducing additional control inputs, or perhaps a combination of both.
run ss_LQR.m
if_xe_linear = logical
1
if_xe_linear = logical
0
C = 1x14
1 0 0 0 0 0 0 0 0 0 0 0 0 0
%% full rank
frk = length(A)
frk = 14
%% rank of Co
Co = ctrb(A, B);
rk = rank(Co)
rk = 2
%% number of uncontrollable states
unco = frk - rank(Co)
unco = 12
Kamal
Kamal il 27 Feb 2024
@Sam Chak Thank you so much. I really appreciate this.

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by