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.