Algorithmus zur Lokalisation auf einem Fussballfeld gesucht
Hallo zusammen,
ich suche einen (mikrocontrollertauglichen) Algorithmus, um mich auf einem Tisch mit hohem Rand mit Hilfe von Abstandsensoren lokalisieren zu können. Der Tisch hat zum Beispiel Abmaße von 2mx1m ich verwende 3 Laser Abstandssensoren im Winkel von 120 Grad. Der eine spuckt mir einen Wert von 50, der zweite von 70 und der dritte von 120 Zentimetern zum Rand aus. Frage: Wo bin steht der Robby auf dem Tisch?
Bislang habe ich es so gemacht, dass ich über meinen Tisch ein Netz mit einer Auflösung von 2 cm gelegt habe und dann für alle Punkte markiert habe die 50cm und weniger von einer Wand entfernt sind. Dann eine zweite Matrix mit allen Punkten die 70 cm und weniger von der Wand entfernt sind und eine dritte ... Dann habe ich die 3 Matrizen übereinander gelegt und geschaut ob es Punkte gibt, die in allen 3 Matrizen enthalten sind. Meist waren das wegen der Ungenauigkeit der Sensoren mehrere.
Das Problem ist nur ... das Verfahren ist zu aufwendig für meinen 8bit Controller :-( Kann man das Ganze nicht irgendwie analytisch lösen. So was muss doch schon mal irgendwer effektiver gelöst haben.
Freue mich auf Eure Anmerkungen, Links, Hinweise
Sebastian
Lokalisation auf dem Fussballfeld
Hallo zusammen,
Ihr habt natürlich recht, die gängigen Verfahren beruhen auf einer deutlich größeren Menge von Punkten, die zum Beispiel mit Laserscannern erzeugt und aus einem Kamerabild gefiltert wurden.
Ich habe am Wochenende beim RoboCub aber auch die Liga für Kinder angeschaut, deren größtes Problem darin bestand festzustellen wo man sich befindet. Nun habe ich die oben beschriebene, sehr aufwendige Lösung gehackt ... für Mikrocontroller aber völlig unbrauchbar.
Nun versuche ich das ganze in ein Gleichungssystem zu drücken und dabei den Rechenaufwand möglichst gering zu halten.
... in dem Paper von @RoboNull nutzt man einen anderen Ansatz, da werden die Roboter von einem stationären Kamerasystem getrackt, ich möchte das ganze aber gern auf dem Roboter laufen lassen.
Na vielleicht fällt noch jemandem was ein ...
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,
vielen Dank für Eure Beiträge! Ich würde mich freuen, wenn wir die Diskussion in dieser Intensität fortsetzen !!!
Ich habe mich nun auch an die analytische Lösung gemacht. Wie schon @mare_crisium deutlich machte, kann man mithilfe einiger trigonometrischer Gleichungen die Position bestimmen. Schwierig ist das Ganze nur wegen der verschiedenen Fälle, die es zu beachten gilt: Der Rechenweg unterscheidet sich zum Beispiel für die Fälle dass:
- * jeder Sensor eine andere Wand erfassen
* 2 Sensoren zu einer gemeinsamen Wand messen
Wenn man nun überlegt, dass es 4 Wände (A,B,C,D) gibt, dann kann man für 3 Sensoren (m1,m2,m3) eine Tabelle aufstellen, die die Fälle die @mare_crisium im Edit zu seinem Post andeutet, zu erschlagen
Code:
Fall m1 m2 m3
1 A B C
2 A A B
3 A B B
usw
Wie viele gültige Kombinationen es gibt muss ich mir noch überlegen. Im Prinzip muss ein Programm nun in allen Fällen nach einer Lösung oder einem Lösungsraum suchen.
Für den Fall (1) aus obiger Tabelle möchte ich einen Berechnungsweg zur Diskussion stellen, der auf die anderen (3 Sensoren sehen 3 Wände) Fälle übertragbar ist. Für Fall (1) kann es anders als bei (2) nur eine eindeutige Lösung geben kann. Es geht also darum, die bekannten Faktoren so zu kombinieren, dass entweder eine wahre Aussage entsteht oder ein Widerspruch produziert wird.
Ich habe mich auf die Winkelsumme von alpha, beta, gamma und phi konzentriert, die ja 180 Grad ergeben müsste. Dafür habe ich voneinander unabhängige Gleichungen dafür aufgestellt. Ich werde es dann gleich mal in einem Skript testen ... aber vielleicht findet ja jemand von Euch einen Weg der 2 oder 3 Rechenschritte weniger braucht :-)
Grüße und ein schönes Wochenende
Sebastian
PS: Die Idee von @XBert habe ich leider nicht verstanden, vielleicht kannst Du sie mit einer Skizze verdeutlichen. Danke.
PSS: Natürlich hat @damfino mit seiner Überlegung recht, dass sich Mehrdeutigkeiten und schlimmstenfalls Lösungsräume ergeben. Die möchte ich damit abfangen, dass ich den Roboter in seiner Bewegung ausgehend von einer bekannten Inertialposition anhand einer Odometrie tracke und die Positionsschätzung der Sensoren zur Korrektur gegenüber dem Absolutsystem verwende.
Liste der Anhänge anzeigen (Anzahl: 3)
Ein bisschen ausprobiert
Hallo zusammen,
ok, da habe ich wieder losgebastelt ohne vorher zu überlegen. Bisher war ich völlig auf 3 gleichverteilte Sensoren am Roboter eingeschossen, dass man mit denen unter Umständen gar keine (auch mit Richtungswissen) Aussage zur Position treffen kann, ist mir erst anhand der Kartoffelscheiben Darstellung von @mare_crisium klar geworden.
Also habe ich mich jetzt erst mal damit beschäftigt herauszufinden, wie viele Sensoren ich eigentlich am Roboter brauche, um mich in allen Position auf dem Tisch zu recht zu finden. Klar, wenn ich nur Sensoren mit einer geringen Reichweite habe, nützt der mir in der Mitte des Tisches nichts, kann am Rand aber noch ganz brauchbare Ergebnisse liefern.
Ich habe einen Simulator geschrieben und für bis zu 10 Sensoren mit einer Reichweite von 1cm bis zur Tischdiagonalen die Frage testet - Siehe Gesamtübersicht.pdf . Ich untersuche für jeden Eintrag in der Matrix (1 cm als Auflösung) jede Orientierung des Roboters darauf, ob eine hinreichende Zahl von Messwerten besteht um eine Lokalisierung auszuführen.
Interessant ist, dass man offenbar mindestens 6 Sensoren braucht um sich bei dieser Tischkonfiguration (122 x 188) zurecht zu finden.
Um das Ganze etwas zu illustrieren zwei Bilder unterschiedlicher Reichweiten mit 3 und 6 Sensoren ... wobei die Reichweite (85cm) auch für 6 Sensoren noch nicht ganz ausreicht, um sich auf dem ganzen Tisch lokalisieren zu können. (0 bedeutet, dass in keiner Richtung eine korrekte Positionierung möglich ist, 1 sagt hier funktioniert die Lokalisierung in allen Richtungen)
Soweit so gut ... Was meint Ihr, ist die gleichverteilte Anordnung der Sensoren zu nicht zu toppen oder bekommt man mit unsymetrischer Verteilung unter Umständen eine Positionierung mit geringerer Reichweite hin? Das Problem ist die Performance meiner Simulation. Um alle in 8 Sensorkonfigurationen aus der Gesamtdarstellung durchzuspielen hat mein Rechner über eine Stunde gebraucht :-(
Grüße und einen schönen Sonntag noch
Sebastian