Dear all,
I'm creating a MPC controller and I need to create the MPC object to insert in the Simulink model. Here is the code.
%%Parameters
load('parametri.mat')par.gyro.phid = 80;% Gyroscope
nGyros = par.gyro.nGyros; Ig = par.gyro.Is(1,1)*nGyros+par.gyro.Ig(2,2)*nGyros; % [kgm2]
Jg = par.gyro.Ig(1,1)*nGyros; % [kgm2]phid = par.gyro.phid; % [rad/s]
% Hull
Ih = par.hull.FDA.M(5,5); % [kgm2]Ainf = par.hull.FDA.Ainf(5,5); % [kgm2]Kw = par.hull.FDA.K(5,5); % [Nm/rad]
Ieq = Ih+Ainf+par.gyro.Is(1,1)*nGyros+par.gyro.Ig(2,2)*nGyros; % [kgm2]% Hydrodinamics - State Space Approximation
a11 = par.hull.TDM.ry.Ass(1,1);a12 = par.hull.TDM.ry.Ass(1,2);a13 = par.hull.TDM.ry.Ass(1,3);a14 = par.hull.TDM.ry.Ass(1,4);c1 = par.hull.TDM.ry.Css(1,1);c2 = par.hull.TDM.ry.Css(1,2);c3 = par.hull.TDM.ry.Css(1,3);c4 = par.hull.TDM.ry.Css(1,4);%%State Space Representation: - plant.struct
pl.Am = [ 0 0 -Jg*phid/Ig 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 Jg*phid/Ieq 0 0 -Kw/Ieq -c1/Ieq -c2/Ieq -c3/Ieq -c4/Ieq 0 1/Ieq 0 0 1 0 0 0 0 0 0 0 0 0 1 0 a11 a12 a13 a14 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 -1.5 -1 %-0.9139 -1.1424
0 0 0 0 0 0 1 0 1 0 ]; pl.Bm = [1/Ig 0 0 0 0 0 0 0 0 0 ]; mpc.delta_gain = 2;pl.Cm = [0 1 0 -mpc.delta_gain 0 0 0 0 0 0 ]';pl.Dm = zeros(1,1);Ts = 0.01; %sample time [s]
states = {'epsd' 'eps' 'deltad' 'delta' 'rfv1' 'rfv2' 'rfv3' 'rfv4' 'wfv1' 'wfv2'};inputs = {'Teps'};outputs = {'eps'};LinSys = ss(pl.Am,pl.Bm,pl.Cm,pl.Dm, Ts, 'statename',states,'inputname',inputs,'outputname',outputs);pl.poles_ol = eig(pl.Am); %%Building of the MPC controller
p = 4; %prediction time [s]
m = 4; %control time [s]
MPCobj = mpc(LinSys,Ts,p,m);
When I run the code, it appear the error
Function 'subsindex' is not defined for values of class 'ss'Error in MPC_MatrixBuilder_augModel (line 78)MPCobj = mpc(LinSys,Ts,p,m);
How can I fix it?
Thank you
Best Answer