Unter Odometrie versteht man die Bestimmung der Position und Orientierung unter Zuhilfenahme des Antriebes.
Man nutzt also das Wissen über den Radabstand, Radumfänge und Motorumdrehungen um zu berechnen, um wie viel Grad sich der Roboter seit der letzten Bewegungsänderung gedreht hat und welche Strecke dabei gefahren wurde.
Ihr könnt hier gern euer mathematisches Wissen anwenden und euch ein eigenes Modell erarbeiten.
Während der PID-Controller die Steuerung der Motoren übernimmt, kann man die Änderungen der Motorpositionen auslesen.
Die gefahrene Gesamtstrecke wird damit in Intervalle zerlegt, für die jeweils die Motorpositionen bekannt sind.
Berechnet man nun die Änderung des Blickwinkels sowie die gefahrenen Strecken der einzelnen Intervalle und summiert diese korrekt, kann man seine Position ziemlich präzise bestimmen.
Sind die Intervalle hinreichend klein, so lässt sich die Bewegung des Roboters auf einem Intervall als Kreisbogen approximieren.
Unter dieser Annahme kann man die Winkel und Stecken berechnen.
Mit anderen Ansätzen und Annahmen lassen sich andere Modelle erzeugen, die ebenso ein Ergebnis liefern.
Die Wahl des Verfahrens welches ihr verwenden wollt ist euch überlassen.
Da die Berechnung während des Fahrens unnötig Leistung verbrauchen würde, ist es sinnvoller, während des Fahrens die Motorpositionen für jedes Intervall zu speichern und diese Liste auszuwerten, wenn der Roboter einen Punkt erreicht hat.
Damit die Odometrie reibungslos funktioniert, müssen zwei Werte gemessen werden.
Zum einen braucht man die distance_per_tick, eine Konstante, mit der man Motorpositionen in zurückgelegte Entfernung umrechnen kann, zum anderen braucht man den Radabstand .
Es erwies sich in der Vergangenheit als sinnvoller, die distance_per_tick zuerst zu messen, da sich der Wert nie verändern sollte, und danach den Radabstand zu kalibrieren.
Sollten die Werte einen leichten Fehler enthalten, muss im Normalfall der Radabstand neu kalibriert werden.
Die Nomenklatur mag dem Leser an dieser Stelle etwas seltsam erscheinen, ergibt jedoch im Kontext der Herleitung später Sinn.
Für zwei Kreisbögen und mit dem Radius bzw. über einem Winkel gilt:
oder auch ,
Für einen Kreisbogen mit dem Radius über gilt:
oder auch
Daraus folgt:
Analog gilt für einen Kreisbogen mit :
Sei der Durchschnitt aus und . Sei der Kreisbogen mit Radius über . Es gilt:
Die Sehne unter einem Kreisbogen mit dem Radius über hat die Länge:
Falls das nicht selbstverständlich für euch ist, sei an dieser Stelle die Empfehlung ausgesprochen, diese einmal kurz mit minimaler Trigonometrie herzuleiten.
Für einen Beweisansatz, sowie einen Verweis auf die historische Bedeutung: Sehne_(Geometrie)
Bekannt ist der Radabstand , sowie die vom linken bzw. rechten Rad im betrachtetem Intervall zurück gelegten Strecken und .
Gesucht ist die zurück gelegte Strecke unter dem gefahrenen Kreisbogen , sowie die Änderung des Blickwinkels . \
Nachdem ihr die in Lemma 1 bis 3 erklärten Konzepte verstanden habt, ist die Herleitung recht einfach.
Ihr könnt hier eure mathematischen Fähigkeiten testen und erst einmal selber versuchen die Herleitung zu finden.
Man beobachte:
Mit Lemma 1 folgt:
Falls , so hat der Roboter eine Rechtsdrehung durchgeführt und wird automatisch negativ.
ist der Durchschnitt aus und mit dem dazugehörigen Kreisbogen über . Aus Lemma 2 folgt direkt:
bzw.
Mit Lemma 3 folgt:
Man beachte, der Fall bzw. muss extra behandelt werden. Dies ist jedoch trivial und euch überlassen.
Kennt man nun , , sowie die Ausgangs-Blickrichtung für alle Intervalle, so ist der nächste Schritt daraus die Positionsänderung und die Änderung der Blickrichtung auszurechnen.
Dies entspricht der Berechnung eines gerichteten Vektors für jedes Intervall.
Die Summe der Vektoren ergibt die Positionsänderung auf der gesamten Strecke.
Da am Ende nur die Gesamtänderung relevant ist, kann man auch gleich die Summe bilden, während man durch alle Intervalle durchgeht.
Dabei ist zu beachten, dass der Winkel mathematisch positiven Drehsinn verwendet, die Himmelsrichtungen des Mutterschiffs jedoch nicht.
Des Weiteren messt ihr die Distanzen zur Kalibrierung vermutlich in cm wohingegen das Mutterschiff Koordinaten als Einheit verwendet.
An welcher Stelle ihr von einem System ins andere umrechnet, ist euch überlassen.