Problem of Eigenvalue allocation using connect

조회 수: 2 (최근 30일)
Dario Di Francesco
Dario Di Francesco 2022년 3월 9일
답변: Ganesh 2024년 5월 28일
Hello evryone i have a problem with my script Matlab.
In my script i I tried to controll a MIMO system in particular a drone or a quadcopter and i use to controll it the eigenvalue allocation but my script generate an warning. These warning create a sistem insensitive to a pole allocation, infact i you print the sysitem before and after the the application of new poles the output don't change.
These is my script:
close all
clear all
clc
m = 0.75;
g = 9.81;
u_bar= m*g/4;
d= 0.2;
Ix= 0.005;
Iy= 0.005;
Iz= 0.01;
c=0.1;
A = [0 1 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 0; ...
0 0 0 1 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 0;...
0 0 0 0 0 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 0; ...
0 0 0 0 0 0 0 1 0 0 0 0; 0 0 ((4*u_bar)/m) 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 1 0 0; ((4*u_bar)/m) 0 0 0 0 0 0 0 0 0 0 0;...
0 0 0 0 0 0 0 0 0 0 0 1; 0 0 0 0 0 0 0 0 0 0 0 0;]
B= [ zeros(1,4); 0 (d/Ix) 0 -(d/Ix);...
zeros(1,4); (d/Iy) 0 -(d/Iy) 0;...
zeros(1,4); -(c/Iz) (c/Iz) (c/Iz) (c/Iz);...
zeros(5 ,4); ...
(1/m) 1/m 1/m 1/m]
C = [zeros(1,4) 1 zeros(1,7); zeros(1,6) 1 zeros(1,5); zeros(1,8) 1 zeros(1,3); zeros(1,10) 1 0;]
D = zeros(4,4)
sysDrone=ss(A,B,C,D)
sysDrone.InputName='Propulsione'
sysDrone.OutputName={'Imbardata', 'PosizioneX', 'PosizioneY', 'PosizioneZ'}
figure(1)
step(sysDrone)
eig(sysDrone)
%[ABAR,BBAR,CBAR,T,K] = ctrbf(A,B,C)
Ctr = ctrb(A,B)
rho_c = rank(Ctr)
Obs = obsv(A,C)
rho_o = rank(Obs)
T_sett=2
PO=4
zita=abs(log(PO/100))/(sqrt(pi^(2)+log(PO/100)^(2)))
wn=4/(zita*T_sett)
p1= -wn*zita + 1j*wn*sqrt(1-zita^(2))
p2 = 10*real(p1)
p_star = [ p1 p1' p2 p2-1 p2-3 p2-4 p2-5 p2-6 p2-7 p2-8 p2-9 p2-10]
K1=place(A,B,p_star)
eig(A-B*K1)
Ksys=ss([], [], [], K1)
Ksys.InputName={'ang_PHI','vel_PHI','ang_THETA','vel_THETA','ang_PSI','vel_PSI','pos_X','vel_X','pos_Y','vel_Y','pos_Z','vel_Z'}
Ksys.OutputName='sf_Action'
Sum = sumblk('Propulsione = reference - sf_Action',4)
SYS=connect(sysDrone,Ksys,Sum,'reference',{'Imbardata'; 'PosizioneX'; 'PosizioneY'; 'PosizioneZ';'Propulsione'})
figure(2)
step(SYS)
zpk(SYS)
G=1/dcgain(SYS(1));
SYSC=series(G,SYS);
figure(3)
step(SYSC)
These is the output:
These is a pdf with the print of my Comand Window:

답변 (1개)

Ganesh
Ganesh 2024년 5월 28일
The warning you are facing is occuring due to the inconsistency between the connected systems "sysDrone", "Ksys" and "Sum". To resolve the warning, you may follow the following steps:
  1. Ensure that the input names specified in Ksys.InputName match exactly with the output names of sysDrone and the output of Sum. Any discrepancy in names could lead to inputs being considered unused.
  2. The external inputs and outputs you specified in the connect call are 'reference' and outputs such as 'Imbardata', 'PosizioneX', 'PosizioneY', 'PosizioneZ', and 'Propulsione'. Ensure that the he 'reference' signal is correctly used by the interconnected system and all specified external outputs are correctly mapped to the internal signals of sysDrone, Ksys, or Sum.
The error you are facing is due to incorrect usage of indexing. To fix the issue use the correct indexing for MIMO models by referring to the following documentation:
For more information on the "connect" function, refer to the following documentation:
Hope this helps!

Community Treasure Hunt

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

Start Hunting!

Translated by