Asuro, Odometriedaten auswerten
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...
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;
}
Gruß,
Lucas