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:
Kann mir bitte jemand zu erst einmal erklären, was es mit dem isum auf sich hat?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
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







Zitieren
Lesezeichen