Hallo,
ich hab ein kleines Programm geschrieben um Asuro einfach geradeaus fahren zu lassen. Ich würde gerne wissen ob es schon bessere Methoden gibt oder was ihr von meiner haltet...
Gruß,Code:#include "asuro.h" #include "print.c" int sign(int x) { // Gibt eine 1 mit Vorzeichen von x zurück if(x < 0) return -1; return 1; } int main(void) { Init(); // Geschwindigkeiten int speedL = 120; int speedR = 120; // Odometriedaten int od[2]; // alte Odometriedaten int odOld[2]; // Maximalwerte unsigned int maxL = 0; unsigned int maxR = 0; unsigned int minL = 1023; unsigned int minR = 1023; // Durchschnitte unsigned int medL; unsigned int medR; // 1/12-Umdrehungen unsigned int countL = 0; unsigned int countR = 0; // Initialisieren OdometrieData(odOld); // Losfahren MotorDir(FWD, FWD); while(1) { // Odometriedaten einlesen OdometrieData(od); // Maximalwerte anpassen if(od[0] > maxL) maxL = od[0]; if(od[1] > maxR) maxR = od[1]; if(od[0] < minL) minL = od[0]; if(od[1] < minR) minR = od[1]; // Durchschnitte anpassen medL = (minL + maxL) / 2; medR = (minR + maxR) / 2; if((sign(medL - od[0]) * sign(medL - odOld[0])) < 0) { // Wechsel über Mittelwert, 1/12-Umdrehung countL++; } if((sign(medR - od[1]) * sign(medR - odOld[1])) < 0) { // Wechsel über Mittelwert, 1/12-Umdrehung countR++; } if(countL >= 12 || countR >= 12) { // Geschwindigkeitsausgleich speedL+= countR - countL; speedR+= countL - countR; MotorSpeed(speedL, speedR); PrintInt(speedL); PrintStr(" "); PrintInt(speedR); PrintStr("\r\n"); countL = 0; countR = 0; } // Speichern der Odometriedaten odOld[0] = od[0]; odOld[1] = od[1]; } return 0; }
Lucas







Zitieren

Lesezeichen