il programma è un blocchetto simulink che rappresenta un laserscanner. ho già settato tutti i paramentri al'interno del m file ma quando mando il run mi da un errore sull'uscita, dicendomi che l'uscita deve essere un vettore di lunghezza 181. io non so di che lungezza è il mio vettore di uscita!!!!
cmq ecco m-file:
function [sys,x0,str,ts] = ViewerPoseScanToMap(t,x,u,flag,Ns,Dmax,ScanAngle)
%-------------------------------------------------------------------------%
%-------------------------------------------------------------------------%
%-------------------------------------------------------------------------%
%Pseudo-code
% Viewer
%
%-------------------------------------------------------------------------%
%-------------------------------------------------------------------------%
%-------------------------------------------------------------------------%
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
x0 = zeros(1,181);
str = [];
ts = [0 0];
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 181;
sizes.NumOutputs = 181;
sizes.NumInputs = 0;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
flag='0';
flag='2';
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(Ns);
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,
sys=MdlUpdate(x,u,Ns,Dmax,ScanAngle);
end
%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes(Ns)
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 3+Ns;
sizes.NumOutputs = 181;
sizes.NumInputs = 3+Ns;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
fig1 = figure('Units','normalized',...
'Color', [0.8, 0.8, 0.8],...
'MenuBar', 'none',...
'Name', 'Viewer',...
'NumberTitle', 'off',...
'Position', [0.2, 0.1, 0.6, 0.8],...
'DoubleBuffer', 'on',...
'Resize', 'off');
ax1 = axes;
set(fig1, 'UserData', [ax1]);
x0 = zeros(1,3+Ns);
str = [];
ts = [-1 0];
%
%=============================================================================
% mdlUpdate
% Handle discrete state updates, sample time hits, and major time step
% requirements.
%=============================================================================
%
function sys=MdlUpdate(x,u,Ns,Dmax,ScanAngle)
u=u/1000;
ud1 = get(gcf, 'Userdata');
j = 0;
for i = 1 : Ns
if(u(i+3)<Dmax)
theta = u(3)+((i/Ns-1)*ScanAngle)+(ScanAngle/2);
xwall(j+1)= u(1) + u(i+3)*cos(theta);
ywall(j+1)= u(2) + u(i+3)*sin(theta);
j=j+1;
else
if(j>0)
plot(ud1(1),xwall, ywall,'.k');
set(ud1(1),'xlimmode', 'manual',...
'xlim', [-40, 40],...
'ylimmode', 'manual',...
'ylim', [-40, 40],...
'NextPlot', 'Add');
xwall=[];
ywall=[];
j=0;
end;
end;
end;
if(j>0)
plot(ud1(1),xwall, ywall,'.k');
set(ud1(1),'xlimmode', 'manual',...
'xlim', [-20, 20],...
'ylimmode', 'manual',...
'ylim', [-20, 20],...
'NextPlot', 'Add');
end;
pose=[x(1),x(2),x(3)];
Robot = Vehicle(pose);
plot(ud1(1), Robot.x, Robot.y, 'r');
set(ud1(1),'xlimmode', 'manual',...
'xlim', [-20, 20],...
'ylimmode', 'manual',...
'ylim', [-20, 20],...
'NextPlot', 'replacechildren');
sys=u;