PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zur Odometrie



scrawl
01.11.2009, 11:33
Da bin ich schon wieder, habe eine kurze Frage :arrow:

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.



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);
}

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?

Hubert.G
01.11.2009, 13:43
Nachdem die Übersetzung 5:1 ist sollten es bei der Scheibe mit den 6 Feldern eigentlich 60 Helligkeitswechsel sein.
Also hell/dunkel und dunkel/hell zusammengezählt.
Mit den 4 Feldern dann 40 Wechsel.
Wie du auf 42 kommst weiss ich nicht.
Die Auflösung wird so bei etwa 5° liegen.

In einem Thread habe ich gelesen das man bei Verwendung der Odometrie über die Diode/Transistor eine Abdeckung (schwarzes Papier?)machen sollte. Verringert Störungen durch Fremdlicht.

scrawl
01.11.2009, 14:01
Nachdem die Übersetzung 5:1 ist sollten es bei der Scheibe mit den 6 Feldern eigentlich 60 Helligkeitswechsel sein.
Also hell/dunkel und dunkel/hell zusammengezählt.
Mit den 4 Feldern dann 40 Wechsel.
Wie du auf 42 kommst weiss ich nicht.
Die Auflösung wird so bei etwa 5° liegen.

Bei mir hat die 1. Scheibe (die am Rad) 12 Felder, die zweite (am Odometrie-Teil) 8 Felder. D.h. bei einer Übersetzung von 5:1 wären das dann 12 * 5 * 8/12 = 40 Helligkeitswechsel pro Radumdrehung?

Hubert.G
01.11.2009, 16:23
Die Scheibe am Rad wird doch nicht erfasst, es sei denn du hast eine Sonderausführung.