Phi - Ein Roboter als Haustier und Gartenbewohner
http://parinor.pureplayaz.de/

OBEN RUNTER Zusammenfassung der Standortbestimmung


OBEN RUNTER HOCH Die Betrachtung der Ausgangssituation

Das Gebiet, in dem sich der Bot befindet, ist ein Garten. Trotz geringer Unebenheiten betrachte ich ihn der Einfachheit halber als eine Ebene, die durch ein zweidimensionales kartesisches Koordinatensystem dargestellt werden kann. Der Koordinatenursprung ist dabei so gewählt, daß er außerhalb des Gartens liegt und dieser sich vollständig im positiven Quadranten befindet. Dies ist schon für die Planung zur Rasterkarte relevant und wird dort betrachtet.
Ich habe für mich festgelegt, daß alle absoluten Winkel, also z.b. von Vektoren oder durch Motoransteuerung durchgeführte Drehungen, auf die y-Achse des Koordinatensystems bezogen sind und mit dem Uhrzeigersinn steigen. Dadurch entsteht eine Analogie zu den Himmelsrichtungen und der Kompassrose. Diese Betrachtung entspricht nicht den Konventionen bezüglich Polarkoordinaten. Tatsächlich habe ich überlegt, mit einem Polarkoordinatensystem zu arbeiten, dies aber dann verworfen, weil dann wieder die Umrechnung in Rasterkarten komplizierter wird.
An mehreren Orten sind Navigationsbaken (A, B, C, ...) aufgestellt. Sie sind vom φ unterscheid- und einzeln ansprechbar und er kennt ihre Positionen in der Ebene und ihre Höhen.

KARTESISCHER GARTEN


OBEN RUNTER HOCH Die Aufgabenstellung

Der Bot hat die nötige Sensorik, um mittels Laufzeitmessung den Abstand zu den Baken zu bestimmen. Ziel ist, einen Algorithmus zu entwickeln, der aus den Laufzeitmessungen die Roboterposition berechnen kann. Als Referenzen dienen die fixen Positionen der Baken im Raum.
Die Aufgabe ist gelöst, wenn der Bot einen Vektor VEKTOR PHI bestimmt hat, der vom Ursprung auf seine Position zeigt.
In der folgenden Grafik ist die Bake A als Referenz, sowie die unbekannte Botposition dargestellt.

AUFGABENSTELLUNG

Wäre der Vektor VEKTOR l_A bekannt, so könnte die Position des Roboters leicht berechnet werden:
PHI GLEICH A PLUS L
Ziel ist es nun, VEKTOR l_A zu berechnen.
Hierfür benötigt der Bot zu Beginn drei Abstandsmessungen.


OBEN RUNTER HOCH Die Auswahl dreier geeigneter Baken

Der Bot muss sich also drei sinnvolle Baken herauspicken, mit denen die Position bestimmt werden soll. Beginnt er von Null, ist dies ein Sprung ins kalte Wasser. Er hat keinerlei Annahmen über den Bereich, in dem er sich befindet. Deshalb beginnt er einen Rundumscan und sucht alle Baken, die er erreichen kann, und mißt deren Abstände. Hat er mehr als drei gefunden, muss er selektieren. Beim Scannen kann der Bot schon erste Tendenzen über die Richtungen erkennen, da seine Sensorik Richtcharakteristik hat. Es erhöht die Genauigkeit, wenn Baken, die in ähnlicher Richtung liegen, nicht gleichzeitig zu einer Berechnung herangezogen werden. Eine mittlere Entfernung verspricht ebenfalls höhere Genauigkeit. Hier muss dem Bot ein geeigneter Algorithmus mitgegeben werden, der allerdings an anderer Stelle diskutiert wird.
Informationen über geeignete Baken könnten auch in der Rasterkarte abgelegt sein, sodaß mein φ gezielter und schneller zu Abstandsdaten kommen könnte.
In der folgenden Betrachtung sei angenommen, der Bot habe sich bereits für die drei Baken A, B und C als sinnvolle Konstellation entschieden.


OBEN RUNTER HOCH Messung der Abstände zu drei Baken und Projektion dieser in die Ebene

Ich betrachte hier den Bot φ und eine Nav-Bake. Mittels Laufzeitmessung bestimmt der Bot zu der Bake die Entfernung L und projeziert den Abstand in die Ebene. Dies geschieht dank Pythagoras sehr einfach:

PYTHA PROJEKTION

Ich habe es hier augenscheinlich mit einem rechtwinkligen Dreieck zu tun, und da entspricht die gemessene Entfernung L der Hypothenuse und die Bakenhöhe h einer Kathete. Die gesuchte Strecke l ist die unbekannte Kathete und es gilt:
HYPO KATHETE
l ist der Ebenenabstand zwischen dem Bot und der Bake. Dieser ist aber ein Skalar und besitzt keine Richtungsinformation. Deshalb weiß der Bot auch nur, daß er sich irgendwo auf einem Kreis befindet, dessen Mittelpunkt die Bake ist und dessen Radius l entspricht.
KREIS UM BAKE

Analog werden die anderen beiden Ebenenabstände berechnet.
Die Länge des Vektors VEKTOR l_A kann nun berechnet werden, jetzt fehlt nur noch die Winkelinformation.


OBEN RUNTER HOCH Die Konstruktion eines Hilfsdreiecks

Über die Konstruktion eines Dreiecks aus drei Seitenlängen können dessen Winkel mit Hilfe des Kosinussatzes bestimmt werden.
In der folgenden Abbildung habe ich bereits ein Hilfsdreieck aus den beiden Baken A und B, sowie der unbekannten Botposition φ gezeichnet. Mein φ kennt hier bisher aber nur die Ortsvektoren VEKTOR A und VEKTOR B sowie die Abstände l_A und L_B zu den Baken.
Die Seite AB muss erst noch bestimmt werden.

DREIECK A B PHI

Aus der Grafik ist ersichtlich, daß AB auch über den Vektor
VEKTOR AB = VEKTOR B - VEKTOR A
vollständig beschrieben ist, und deshalb kann AB wie folgt berechnet werden.
STRECKE AB
Jetzt sind alle drei Seitenlängen ermittelt und ich kann über den Kosinussatz den Winkel δ berechnen.


OBEN RUNTER HOCH Das Problem der zwei Lösungen für die Winkelbestimmung

Nach dem Kosinussatz gilt für den Winkel δ:
KOSINUSSATZ
Leider lassen sich jedoch zwei Dreiecke aus den Seitenlängen AB, l_A und L_B konstruieren.

ZWEI LOESUNGEN A B PHI

Somit habe ich aber zwei Winkel DELTA_1 und DELTA_2, für die offensichtlich gilt:
DELTA_1 GLEICH - DELTA_2
Für den Roboter bedeutet dies, daß er über den Kosinussatz nur BETRAG VON DELTA errechnen kann.
Da sich δ auf den Vektor VEKTOR AB bezieht, muss auch dessen Winkelinformation bestimmt werden. Diese errechne ich über das Skalarprodukt von VEKTOR AB und dem Einheitsvektor VEKTOR E_Y.
SKALARPRODUKT AB E_Y

KAPPA_AB ist dabei der Winkel zwischen VEKTOR AB und der y-Achse.
SKALARPRODUKT AB E_Y
Bei dem Skalarprodukt darf eines nicht vergessen werden: Es wird immer der eingeschlossene Winkel berechnet, dieser ist immer ≤ 180°.
360-SKALARPRODUKT

In der Grafik ist das der Winkel GAMMA_AB, benötigt wird allerdings KAPPA_AB. Deshalb gilt: Ist die x-Komponente des Vektors VEKTOR AB negativ, wird mit dem Skalarprodukt der kleinere Winkel GAMMA_AB berechnet. Um Fehler auszuschließen, muss an dieser Stelle eine Fallunterscheidung gemacht werden. Wenn x_AB KLEINER 0 ist, wird KAPPA_AB nach der folgenden Formel berechnet:
360-SKALARPRODUKT
Aus den beiden Winkeln δ und KAPPA_AB können nun zwei Lösungen für den absoluten Winkel KAPPA_A berechnet werden.
KAPPA_A_1 KAPPA_A_2
In der folgenden Grafik sind diese beiden Lösungen eingezeichnet. Sie sind offensichtlich spiegelsymetrisch zum Vektor VEKTOR AB.
SPIEGELSYMETRIE

Analog zur Koordinatentransformation von Polarkoordinaten in kartesische Koordinaten kann ich nun trigonometrisch die Vektoren POLARKOORDINATEN l_A_1 und POLARKOORDINATEN l_A_2 in kartesische Koordinaten überführen.
GRAFIK ZUR KOORDINATENTRANSFORMATION

KOORDINATENTRANSFORMATION
Diese Koordinatenpaare beziehen sich auf den Anfangspunkt (0; 0). Erst die Summen dieser jeweils mit VEKTOR A, ergeben die zwei möglichen Lösungen für den Ortsvektor VEKTOR PHI des Bots.
ORTSVEKTOREN PHI


OBEN RUNTER HOCH Die Berechnung eines zweiten Lösungspaares

Um die nicht mögliche Lösung auszuschließen, wird das Verfahren über ein weiteres Bakenpaar wiederholt, wobei es keine Rolle spielt, ob A oder B in diesem Paar enthalten sind. Deswegen reichen auch insgesamt drei Baken als Referenzen aus.
Der Einfachheit halber sei das zweite Hilfsdreieck über das Bakenpaar BC konstruiert:

EINDEUTIGE POSITION DURCH ZWEITES HILFSDREIECK

Über BETRAG DELTA und das Skalarprodukt aus VEKTOR BC und VEKTOR{E_Y} erhalte ich wieder die zwei Vektoren VEKTOR L_B_1 und VEKTOR L_B_2, sodaß sich nach der Transformation dann zwei weitere Lösungen für die Botposition ergeben und er nun vier mathematisch korrekte Ortsvektoren VEKTOR PHI_A_1, VEKTOR PHI_A_2, VEKTOR PHI_B_1 und VEKTOR PHI_B_2 kennt.
Anschaulich logisch, daß der Ortsvektor, der über beide Bakenpaare gebildet wurde, der richtige sein muss.
Berechnen kann der Bot das wie folgt:


OBEN RUNTER HOCH Ausschluss der 'falschen' Lösungen

Ich weiß, daß zwei Vektoren VEKTOR P, VEKTOR Q gleich sind, wenn ihre Differenz den Nullvektor VEKTOR 0 ergibt.
0 GLEICH P - Q
Demnach existieren theoretisch eine Gleichung und drei Ungleichungen, in diesem Fall:
VIER GLEICHUNGEN
Daraus folgt unmittelbar
PHI GLEICH A_1 GLEICH B_1
und damit wäre theoretisch die vektorielle Standortbestimmung eindeutig und abgeschlossen.

Praktisch wird es in annährend allen Fällen vier Ungleichungen geben. Dies resultiert aus kleinen, jedoch unvermeidbaren Fehlern bei den Abstandsmessungen und dem begrenzt genauen Algorithmus, der die anschließenden Berechnungen durchführt. Deshalb wird der Bot beim Subtrahieren der Lösungspaare vier Differenzvektoren Z_1, Z_2, Z_3 und Z_4 erhalten, die anschließend interpretiert werden müssen.

GRAFIK DIFFERENZVEKTOREN

Was bedeuten die Differenzvektoren eigentlich? Sie zeigen von den Lösungen des zweiten Bakenpaars BC auf die Lösungen des ersten Bakenpaars AB, und damit sind ihre Beträge die Abstände zwischen den Lösungen.
Offenbar gilt, je kleiner BETRAG Z_I desto näher sind zwei Lösungen und desto wahrscheinlicher ist die Richtigkeit dieser. Das heißt wiederum, der Bot vergleicht nur noch die Beträge der Differenzvektoren, sucht sich den kleinsten Betrag heraus und nimmt einen der beiden zugehörigen Ortsvektoren als hinreichend genau an. In der Praxis sollte der Differenzvektor der richtigen Lösung klein genug sein, um vernachlässigt zu werden.
Somit ist der kleinste Wert BETRAG Z_MIN eine Aussage über die Güte der Messung. Ggf. kann der Bot auch BETRAG Z_MIN mit einer Konstante S_PHI vergleichen und wenn gilt:
BETRAG Z_MIN > S
die Standortbestimmung als zu ungenau verwerfen und mit zwei günstigeren Bakenpaaren erneut den Standort berechnen, oder ggf. odometrisch eine bessere Position aufsuchen.
Übrigens kann man aus der Grafik ableiten, daß die vier Berechnungen, die die Differenzvektoren ergeben, ausreichen und sich die Vektoren bei Vertauschen der Baken zwar umkehren, ihre Beträge sich aber nicht verändern. Geometrisch bedeutet dies eine Punktspiegelung am Ursprung.


OBEN RUNTER HOCH Grafische Aufbereitung der Herleitung

Bekannt sind die Daten dreier Navigationsbaken und der Schwellwert, ab dem Messungen verworfen werden (blau umrahmt):


Gemessen werden die drei Abstände zu den Baken (grün markiert):

Zu berechnender Standort:

Die folgende Darstellung gibt einen Überblick über die notwendigen Berechnungen. Diese sind bereits vereinfacht und allgemein gehalten. Die neu eingeführten Variablen i, j verallgemeinern die Nav-Baken, m, n die Differenzvektoren.
FORMELDIAGRAMM OBEN
FORMELDIAGRAMM MITTE
FORMELDIAGRAMM UNTEN


OBEN HOCH Eine Beispielrechnung

Die folgenden Anfangswerte sind durch eine Skizze abgeglichen worden, um eine geometrische Überprüfung machen zu können, und es hat gut funktioniert. Die hier gezeigten Ergebnisse sind gerundete Werte, die Berechnungen waren im Taschenrechner genauer.


Zuerst werden die Ebenenabstände, Vebindungsvektoren der Bakenpaare, sowie die Bakenabstände berechnet.
L
BAKENPAARE
BETRAG BAKENPAARE
Dann werden die Winkel bestimmt. Für KAPPA_BC tritt auch gleich der Fall ein, daß über den Winkel GAMMA_BC gerechnet werden muss.
KAPPA
DELTA
KAPPA 4
Die Überführung in kartesische Koordinaten läßt schon erkennen, was die richtige Lösung ist.
PHI
Gerundet ist es eindeutig, im Taschenrechner gibt es einige Stellen nach dem Komma Unterschiede, sodaß die Differenzvektoren es hier zwar nicht erkennen lassen, tatsächlich hat der Differenzvektor BETRAG Z_3 aber einen Wert von ≈ 0,02.
Z
Da 0,02 < S_PHI, wäre dies eine gute Positionsbestimmung, und der Bot wüßte jetzt, daß er hier steht:
ERGEBNIS
Geometrisch überprüft, ist diese Lösung richtig. Die Standortbestimmung ist hiermit eindeutig und abgeschlossen. Jetzt muss das nur noch der Roboter können.

OBEN Letzte Änderung: 21. Januar 2013 - © Per Petersen