Problema con la adquisición de imagenes
Publicado por Sergio (4 intervenciones) el 23/06/2015 17:59:43
Buenas tardes a todos, aver si podeis ayudarme en este tema porque nose que hacer ya..
estoy trabajando en una maqueta ball and plate y la estoy programando con Matlab, usando el control Fuzzy.
Tengo el problema en los siguientes sitios (adjunto codigo):
clear all
close all
clc
global t0;
global mitjanaLoc;
global loc;
global posDesitjada;
global radius;
global Kp;
global a;
Kp = 0.010;
totalTime = 40;
posDesitjada (1,1)=0;
posDesitjada(2,1) = 0;
a = arduino('COM3');
a.servoAttach(3);
a.servoAttach(9);
vid= videoinput('winvideo', 1, 'YUY2_640x480');
vid.ReturnedColorSpace='grayscale';
set(vid, 'FramesPerTrigger', 40);
set(vid, 'FramesAcquiredFcnCount', 1);
set (vid, 'FramesAcquiredFcn','ControlBola')
disp('Inici');
loc = [];
mitjanaLoc = [];
contador = 0;
start(vid);
t0=clock;
pause(totalTime);
stop(vid);
disp('Fet');
figure(2)
plot3 (loc(1,:), loc(2,:), loc(3,:))
hold on
plot([0 0], [0 0], [0 45],'k', 'LineWidth', 2)
title ('posició de l´objecte en funcio del temps')
xlabel('x')
ylabel('y')
zlabel('temps')
axis([-175 175, -175 175])
grid on
delete (vid)
clear vid
Me salta el siguiente Warning: ' Warning: The FramesAcquiredFcn callback is being disabled.
To enable the callback, set the FramesAcquiredFcn property'.
No tengo idea de como hablitar esta property, y sin esto mi codigo no funciona, ya que es el primer paso.. 'ControlBola' es un script aparte que llamo desde el codigo principal, adjunto codigo:
function ControlBola(obj, event)
global loc;
global contador;
global t0;
global kp;
global posDesitjada;
global a;
contador = contador+1;
im=peekdata(obj, 1);
[loc(1,contador) loc(2,contador)] =trobarPeca(im);
loc(3,contador)=etime(clock, t0);
figure(1)
plot(loc(1,contador),loc(2,contador),'*')
axis([-175 175, -175 175])
title('Posició de l´objecte')
xlabel('x(mm)')
ylabel('y(mm)')
grid on
if contador ==1
mitjLoc = loc(1:2, contador);
elseif contador == 2
mitjLoc=median(loc(1:2, contador-1:contador),2);
else
mitjLoc=median(loc(1:2,contador-2:contador),2);
end
kp = 0.010;
nouAngle=((posDesitjada(:,1)-mitjLoc(:,1)).* kp+pi/2)*360/(2*pi);
nouAngle=abs(round(nouAngle-180*fix(nouAngle./180)));
a.servoWrite(3, nouAngle(1));
a.servoWrite(9, nouAngle(2));
pause(0.05)
Muchas gracias de antemano!
estoy trabajando en una maqueta ball and plate y la estoy programando con Matlab, usando el control Fuzzy.
Tengo el problema en los siguientes sitios (adjunto codigo):
clear all
close all
clc
global t0;
global mitjanaLoc;
global loc;
global posDesitjada;
global radius;
global Kp;
global a;
Kp = 0.010;
totalTime = 40;
posDesitjada (1,1)=0;
posDesitjada(2,1) = 0;
a = arduino('COM3');
a.servoAttach(3);
a.servoAttach(9);
vid= videoinput('winvideo', 1, 'YUY2_640x480');
vid.ReturnedColorSpace='grayscale';
set(vid, 'FramesPerTrigger', 40);
set(vid, 'FramesAcquiredFcnCount', 1);
set (vid, 'FramesAcquiredFcn','ControlBola')
disp('Inici');
loc = [];
mitjanaLoc = [];
contador = 0;
start(vid);
t0=clock;
pause(totalTime);
stop(vid);
disp('Fet');
figure(2)
plot3 (loc(1,:), loc(2,:), loc(3,:))
hold on
plot([0 0], [0 0], [0 45],'k', 'LineWidth', 2)
title ('posició de l´objecte en funcio del temps')
xlabel('x')
ylabel('y')
zlabel('temps')
axis([-175 175, -175 175])
grid on
delete (vid)
clear vid
Me salta el siguiente Warning: ' Warning: The FramesAcquiredFcn callback is being disabled.
To enable the callback, set the FramesAcquiredFcn property'.
No tengo idea de como hablitar esta property, y sin esto mi codigo no funciona, ya que es el primer paso.. 'ControlBola' es un script aparte que llamo desde el codigo principal, adjunto codigo:
function ControlBola(obj, event)
global loc;
global contador;
global t0;
global kp;
global posDesitjada;
global a;
contador = contador+1;
im=peekdata(obj, 1);
[loc(1,contador) loc(2,contador)] =trobarPeca(im);
loc(3,contador)=etime(clock, t0);
figure(1)
plot(loc(1,contador),loc(2,contador),'*')
axis([-175 175, -175 175])
title('Posició de l´objecte')
xlabel('x(mm)')
ylabel('y(mm)')
grid on
if contador ==1
mitjLoc = loc(1:2, contador);
elseif contador == 2
mitjLoc=median(loc(1:2, contador-1:contador),2);
else
mitjLoc=median(loc(1:2,contador-2:contador),2);
end
kp = 0.010;
nouAngle=((posDesitjada(:,1)-mitjLoc(:,1)).* kp+pi/2)*360/(2*pi);
nouAngle=abs(round(nouAngle-180*fix(nouAngle./180)));
a.servoWrite(3, nouAngle(1));
a.servoWrite(9, nouAngle(2));
pause(0.05)
Muchas gracias de antemano!
Valora esta pregunta


0