Hallo Leute,
ich sitze momentan an der Umsetzung der Odometrie meines Roboters und habe folgendes Problem:
Testen tu ich die Odometrie wie folgt:
Winkelberechnung:
- 3 volle umdrehungen nach rechts oder links drehen und dann den berechneten Winkel mit dem reellen Winkel vergleichen.
Dabei komme ich auf eine Abweichung von etwa einem Grad (recht konstant)
Koordinatenberechnung:
- 4 Meter geradeaus fahren und dann den real zurück gelegten Weg nach messen. Dabei komme ich auf eine Abweichung von 0-2,5 cm.
Also alles in allem könnte man ja sagen, dass die Odometrie recht genau ist.
Mein Problem ist aber:
Wenn ich den Bot normal geradeaus fahren lasse, dann läuft mir der Winkel weg. Nach 2 Metern verfahrweg bin ich teils schon bei knapp 40 Grad Abweichung.
Nun habe ich überall schon gelesen, dass eine Odometrie recht ungenau ist. Aber leider steht nirgens was man unter "recht ungenau" versteht.
Desshalb mal meine Frage:
Ist ein Fehler von 40 Grad auf 2 Metern ein "normaler" Odometrie-Typischer Fehler oder liegt das vielleicht doch an was anderem noch?
Mal ein paar Daten:
Mein Radumfang: 21,5 cm
Auflösung: 256 Incremente pro Radumdrehung
Radabstand: 28cm
Berechnet wird immer, sobald ein Rad 20 Incremente erreicht hat (nach der Vorherigen Messung), der Counter wird dann für beide Räder wieder auf 0 gesetzt.
Berechnung tu ich alles als Single (32 Bit Gleitkommazahl)
Und für die die es noch interessiert, bzw. die vielleicht was damit anfangen können, meine Formel zur Berechnung:
Wäre toll wenn mir irgendwer, der sich damit auskennt, vielleicht einen Tipp geben könnte.Code:Sub Refresh_koordinaten Statusbit.calc_koordinaten = 0 Tmp_winkel = Winkel 'Wenn Rückwärts gefahren wird: If Raddrehung.rechts_zuruck = 1 And Raddrehung.links_zuruck = 1 Then Tmp_winkel = Winkel + 180 A = Links Links = Rechts Rechts = A End If If Tmp_winkel < 0 Then Tmp_winkel = 360 + Tmp_winkel If Tmp_winkel > 360 Then Tmp_winkel = Tmp_winkel - 360 Tmp_single = Links + Rechts Tmp_single = Tmp_single / 2 'Mittelwert Tmp_single = Tmp_single * 0.898 'Umrechnung Incr. in Millimeter 'neue X-Koordinate berechnen: Tmp_single2 = Deg2rad(tmp_winkel) Tmp_single2 = Tmp_single * Sin(tmp_single2) X = X + Tmp_single2 'neue Y-Koordinate berechnen: Tmp_single2 = Deg2rad(tmp_winkel) Tmp_single2 = Tmp_single * Cos(tmp_single2) Y = Y + Tmp_single2 'neuen Winkel berechnen: If Links > Rechts Then Tmp_single = Links - Rechts Tmp_single = Tmp_single * 0.898 'Umrechnung Incr. in Millimeter Tmp_single2 = 360 / 1583.3626974 '1583,... ist der Wendekreis des Bots Tmp_single2 = Tmp_single2 * Tmp_single Tmp_winkel = Tmp_winkel + Tmp_single2 Else Tmp_single = Rechts - Links Tmp_single = Tmp_single * 0.898 Tmp_single2 = 360 / 1583.3626974 Tmp_single2 = Tmp_single2 * Tmp_single Tmp_winkel = Tmp_winkel - Tmp_single2 End If Winkel = Tmp_winkel If Raddrehung.rechts_zuruck = 1 And Raddrehung.links_zuruck = 1 Then Winkel = Tmp_winkel - 180 End If If Winkel < 0 Then Winkel = 360 + Winkel If Winkel > 360 Then Winkel = Winkel - 360 Return End Sub
danke und Gruß Robodriver








Zitieren

Lesezeichen