Clear Filters
Clear Filters

Problem of Eigenvalue allocation using connect

3 views (last 30 days)
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:

Answers (1)

Ganesh
Ganesh on 28 May 2024
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!

Categories

Find more on Robust Control Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!