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:
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
Wäre toll wenn mir irgendwer, der sich damit auskennt, vielleicht einen Tipp geben könnte.

danke und Gruß Robodriver