ich versuche eine "Ball on Plate" Apparatur zu programmieren. Also eine Plattform die mit zwei Motoren gesteuert wird und einen Ball in der Mitte balancieren soll. Die Koordinatenerfassung läuft über eine Kamera oberhalb der Platte.
Momentan fliegt der Ball immer runter. Die Platte lenkt den Ball immer Richtung Mitte aber fängt ihn nicht rechtzeitig wieder ab, sodass der Ball nach 4-5 mal hin und her rollen von der Platte geschaukelt wird.
Meine Vermutung ist, dass der PID - Regler in meiner Schleife (siehe code unten) nicht richtig "eingebaut" ist. In jedem neuen Schleifendurchgang werden die alten Regelungswerte einfach durch die neuen ersetzt anstatt sich auf zusummieren. Ich hoffe ich konnte das einigermaßen verständlich erklären.
Code:
%%Dimensionierung des PID Reglers%%
C=pid(0.32,0.25,0.25);
%%Motor Koordinaten um die Plattform grade zu stellen%%
z1=2020; %%Motorstellwerte sind0-4095%%
z2=2030; %%Exakt Senkrecht stehen die Motoren bei 2042/2043. Mechanische Einflüsse sorgen für die Verschiebung%%
%%Anzahl der Schleifenwiederholung%%
n=20000;
%%Kamera laden%%
h=webcam;
%%Verbindungsaufbau zu den Motoren "MX64(port,Baudrate)"%%
Dynamixel=MX64(4,57600);
%%Beginn der Schleife%%
while n>1
n=n-1;
a=h.snapshot; %%Kameraschnappschuss laden%%
b=a(:,:,2)<60; %%Farbanteile filtern%%
x=mean(sum(b,2)); %%Berechnung der Koordinaten des Balls%%
y=mean(sum(b,1));
[y,x]=find(b);
cxm=mean(x); %%X-Koordinate des Balls%%
cym=mean(y); %%Y-Koordinate des Balls%%
cx=cxm-320; %%X-Koordinate bezogen auf die Plattformmitte%%
cy=cym-240; %%Y-Koordinate bezogen auf die Plattformmitte%%
dx= feedback(cx,C); %%Regelungsfunktion in X-Richtung%%
dy= feedback(cy,C); %%Regelungsfunktion in Y-Richtung%%
ex = dx.Denominator{1,1}; %%Addition der Kp, Ki und Kd Regelungsgrößen%%
fx = ex(1)+ex(2)+ex(3);
ey = dy.Denominator{1,1};
fy = ey(1)+ey(2)+ey(3);
gx=fx*0.5; %%Mathematische Umrechnungen von Regelungsgrößen auf Motorstellgrößen%%
gy=fy;
h1=gy-gx;
h2=gx+gy;
i1=h1*(-1);
i2=h2*1;
j1 = i1 + z1;
j2 = i2 + z2;
if(isnan(j1)) %%Wenn kein Objekt erkannt wird, stellen die Motoren die Plattform grade&&
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.