Da bin ich schon wieder, habe eine kurze Frage![]()
Bin gerade dabei, mit den Odometrie-Sensoren eine exakte Drehung auf der Stelle zu Programmieren: void Drehe(int grad)
Leider ist das ganze irgendwie ziemlich ungenau, bei Drehe(180); liegt die Fehlertoleranz schon so zwischen 20-30 Grad. Daher meine erste Frage: Kann ich das noch irgendwie optimieren? Habe schon probiert, die Helligkeitswechsel für beide Motoren zu berechnen, was aber auch nichts gebracht hat.
Meine zweite Frage: Die Helligkeitswechsel, die für eine Radumdrehung gebraucht werden, hab ich nur durch ausprobieren rausgekriegt (42). Gibts da einen exakteren Wert bzw. kann ich den auch irgendwie ausrechnen?Code:void Drehe(int grad) { // berechnen, welche Strecke jedes Rad fahren muss, um die Drehung zu erzeugen // wir haben es mit einem Kreis mit dem Radius 1/2 RAD_ABSTAND zu tun // die zu fahrende Strecke ist 1/2 des Umfangs // Ergebnis in Millimeter float benoetigte_strecke = (float) ((float) grad / (float) 360) * (M_PI * RAD_ABSTAND); // berechnen, wieviele Helligkeitswechsel für die Strecke gebraucht werden // Bei 42 Helligkeitswechseln gab es eine Umdrehung float benoetigte_wechsel = (float) benoetigte_strecke * (float) ( (float) 42 / (float) RAD_UMFANG); /* ** Laufvariablen */ // wieviele Hell/Dunkel Wechsel gab es (wird zur Berechnung der Strecke benötigt) unsigned int wechsel = 0; // vorheriger Wert hell oder dunkel? 0 = hell, 1 = dunkel int helligkeit_alt = 0; // momentaner Wert hell oder dunkel? 0 = hell, 1 = dunkel int helligkeit; /* ** Los fahren, solange bis die benötigte Drehzahl erreicht ist */ MotorDir(FWD, RWD); Geschwindigkeit(120, 120); unsigned int data[2]; while (wechsel < benoetigte_wechsel) { OdometrieData(data); if (data[0] > 500) helligkeit = 1; else helligkeit = 0; if (helligkeit_alt != helligkeit) wechsel += 1; helligkeit_alt = helligkeit; } Geschwindigkeit(0, 0); MotorDir(FWD, FWD); }







Zitieren

Lesezeichen