Das ist ja mal sehr interessant, vielen Dank!!!
Ich hab mich jetz mal mit einigen Internetseiten und zusätzlich mit dem C++"Büchlein" das ich hier liegen habe beschäftigt.
Zur Geschwindigkeit des Asuros hab ich mir auch Interrupts angesehen. Das Grundprinzip und die Funktion verstehe ich, aber die Umsetzung erfordert wohl doch ein bisschen mehr Informatikwissen.
Die Linienverfolgung von "waste" (erwähnter Link) zu verstehen, scheint mir allerdings ein erreichbares Ziel zu sein.
Ausschnitt:
Code:
unsigned char speed;
int speedLeft,speedRight;
unsigned int lineData[2];
int x, xalt, don, doff, kp, kd, ki, yp, yd, yi, drest, y, y2, isum;
void FollowLine (void)
{
unsigned char leftDir = FWD, rightDir = FWD;
FrontLED(OFF);
LineData(lineData); // Messung mit LED OFF
doff = (lineData[0] - lineData[1]); // zur Kompensation des Umgebungslicht
FrontLED(ON);
LineData(lineData); // Messung mit LED ON
don = (lineData[0] - lineData[1]);
x = don - doff; // Regelabweichung
isum += x;
if (isum > 16000) isum =16000; //Begrenzung um Überlauf zu vermeiden
if (isum < -16000) isum =-16000;
yi = isum/625 * ki; //I-Anteil berechnen
yd = (x - xalt)*kd; // D-Anteil berechnen und mit
yd += drest; // nicht berücksichtigtem Rest addieren
if (yd > 255) drest = yd - 255; // merke Rest
else if (yd < -255) drest = yd + 255;
else drest = 0;
if (isum > 15000) BackLED(OFF,ON); // nur zur Diagnostik
else if (isum < -15000) BackLED(ON,OFF);
else BackLED(OFF,OFF);
yp = x*kp; // P-Anteil berechnen
y = yp + yi + yd; // Gesamtkorrektur
y2 = y/2; // Aufteilung auf beide Motoren
xalt = x; // x merken
Kann mir bitte jemand zu erst einmal erklären, was es mit dem isum auf sich hat?
Wenn ich mich jetzt nicht irre bedeutet "isum += x" das selbe wie "isum= isum+x" oder? Jetzt kommt vielleicht eine dumme Frage, aber was ist isum denn dann letztendlich? Da ich mir das nicht erklären kann, ist der Rest auch schwerer nachvollziehbar.
Liebe Grüße E-lois
Lesezeichen