web-dev-qa-db-de.com

WLAN-Triangulation

enter image description here

Ich muss verstehen, wie die WLAN-Triangulation grundsätzlich funktioniert. Die Szene ist wie im obigen Diagramm dargestellt. Um eine WLAN-Triangulation zu implementieren, benötige ich mindestens 3 WLAN-Hotspots und deren Positionen. Die Einrichtung: 
1. Der Einfachheit halber nehmen wir an, ich habe einen 1 qkm von 1 qkm -Bereich und ich habe 3 WLAN-Hotspots in diesem Bereich. Das Koordinatensystem ist wie folgt: 1 Ecke der quadratischen Fläche ist (0,0,0) und die diagonal am weitesten entfernte Ecke hat Koordinaten (1,1,1). Die gesamte Positionsbestimmung ist nur relativ zu diesem Koordinatensystem vorzunehmen (zur Vereinfachung möchte ich keine globalen xyz-Koordinaten). Ich habe 3 WLAN-Hotspots an (x1, y1, z1), (x2, y2, z2), (x3, y3, z3).
2. Wir haben eine Person mit einem Gerät, das in der Lage ist, WLAN-Signale zu empfangen und die Signalstärke an Position (x, y, z) zu berechnen. Das Gerät kann ein Telefon, ein Tablet usw. sein.
Das Problem: Berechnen Sie die Position (x, y, z) der Person dynamisch, während sich diese mit den folgenden Eingaben bewegt:
1. Signalstärke der Signale, die von jedem der WLAN-Hotspots empfangen werden
2. Koordinaten der zuvor in Variablen oder einer Datenbank gespeicherten WLAN-Hotspots.

Erste Frage: Wie berechne ich die Position aus den obigen Eingaben? Ich gehe davon aus, dass die Signalstärke direkt proportional zur Entfernung vom Router ist, aber wie lautet die genaue Beziehung? Wie macht Skyhook das so genau?
Zweite Frage: Ich glaube, die obigen Eingaben sind ausreichend. Gibt es noch etwas anderes?

Vielen Dank!

18
sanjeev mk

Das ist ziemlich einfach. Es ist nur ein paar grundlegende Mathematik. Zerlegen Sie es in 2 Teile:

1) Finden Sie Ihre horizontale Position (keine Höhe). 

Um Ihren Standort zu finden, benötigen Sie 3 Punkte, konzentrieren Sie sich aber nur für eine Sekunde auf 2 Punkte. Wenn Sie zwei Punkte verwenden, können Sie ein Dreieck mit sich selbst erstellen und Ihren Standort anhand Ihrer Signalstärke zwischen zwei Punkten ermitteln. Dadurch erfahren Sie, wo Sie sich zwischen zwei Routern befinden. Wenn Sie sich beispielsweise zwischen den Routern 3 und 4 befinden und Ihre Signalstärke im Vergleich zu 3 -89 und Ihre Signalstärke bei 4 -54 ist, wissen Sie, dass Sie näher an 3 sind als an 4. Wenn Sie die Entfernung in Abhängigkeit von der Signalstärke approximieren, können Sie ziemlich genau feststellen, wo Sie sich zwischen den Routern 3 und 4 befinden. Das Problem, das übrig bleibt, besteht darin, festzustellen, auf welcher Seite Sie sich zwischen 3 und 4 befinden , da Sie die gleichen Signalstärkewerte (-89, -54) entweder über oder unter den Routern haben könnten (siehe Diagramm)

           6

   You could be here

3--------------------------4

  You could also be here

            5

Dann suchen Sie einfach einen anderen Router und bemerken Sie Ihre Signalstärke. Sie sollten in der Lage sein zu bestimmen, auf welcher Seite Sie sich gerade befinden, indem Sie die Signalstärkeverhältnisse zwischen 5 und 6 Routern (im Diagramm) betrachten.

2) Sie können dasselbe mit der Höhe tun. 

Um dies alles zu tun, benötigen Sie wirklich nur eine Annäherung der Entfernung gegenüber der Signalstärke und der Entfernungen zwischen den Routern. Bei meinen Tests (ich habe meinen eigenen WiFi-Triangulationscode geschrieben) ist die Signalstärke auf mobilen Geräten ziemlich gleich, daher sollte ein Gerät die gleichen Ergebnisse wie das daneben liegende Gerät haben. 

skyhook macht dies entweder durch GPS-Positionierung (es könnte hart codiert sein) oder grundsätzlich das gleiche Prinzip. Skyhook ist der einzige Dienst, der von Apple dafür zugelassen wurde. Daher hat Apple im Grunde dasselbe getan und dann sichergestellt, dass andere Apps ihn nicht verwenden konnten (jede iPhone-App, die die eingeschränkte 80211-Bibliothek verwendet, die die dazu erforderlichen Funktionen enthält) aus dem App Store abgelehnt werden). 

Bearbeiten: So finden Sie die Entfernung:

Sie müssen einige einfache Annäherungen vornehmen. Diese Annäherungen sind je nach Ihrer Umgebung nicht gleich. Daher können bei -89 Fuß 3 Meter vom Router 3 entfernt sein, aber -89 von Router 4 könnten 13 Fuß entfernt sein. Egal, was Sie tun, das wird nicht zu 100 Prozent genau sein, aber das ist in Ordnung, denn Sie können sicher in einem Umkreis von 5 Fuß sein. 

sie finden also eine Reihe von Punkten, an denen Sie einen Wert von -89 von Router 3 ablesen und sich notieren, wie groß Ihre Entfernung war. Dann nehmen Sie einen Durchschnitt und verwenden diesen Durchschnitt in Ihrer Datenbank (was bedeutet, wenn Sie -89 vom Router 3 entfernt sind und 15 Fuß entfernt sind). Sie tun dies dann für andere Werte, wie -50 oder was auch immer, und Sie notieren Ihre Werte und finden einen Durchschnitt. Wenn -89 bedeutet, dass Sie 15 Fuß entfernt sind und -50 bedeutet, dass Sie 25 Fuß entfernt sind (nur ein Beispiel), müssen Sie Ihre Entfernung ungefähr ermitteln, wenn Sie -75 vom Router 3 entfernt sind eine Annäherung von Hand für -75. Für Tonnen von Werten wäre dies mühsam, aber Sie müssen experimentieren, um zu sehen, wie genau Sie mit so wenig Datenpunkten wie möglich sein können. Sie können sich zwischen zwei Signalstärkedurchschnittswerten annähern, indem Sie erkennen, dass die Signalstärke logarithmisch ist. Sie können also abschätzen, dass -75 15 Fuß beträgt Richtung Basis 10) um einen Faktor 14/100 weiter als -89. 

Edit: Nach Code fragen

Ich habe den Code irgendwo, aber er war vor ein paar Jahren, also musste ich eine Menge Sachen durchforsten, um ihn zu finden. Ich denke, konzeptionell sollte es leicht sein, ohne Code zu replizieren. Ich brauchte ungefähr 50 Zeilen Java-Code für die Android-Geräte, die ich testete.

Im Wesentlichen nahm ich ein Android-Handy und entwickelte eine Anwendung, mit der ich jederzeit die aktuelle ID des angeschlossenen WLAN-Geräts, seine Signalstärke, andere WLAN-IDs in der Nähe und deren Signalstärke sowie den GPS-Standort anzeigen kann. Dies ist alles über Android-API erreichbar. Ich denke, Sie benötigen ein Android-Gerät mit API 4 oder höher oder etwas anderes. Das war wie vor 3 oder 4 Jahren, also werfe ich das einfach aus dem, woran ich mich erinnere.Der GPS-Standortteil diente dazu, die Zuordnung zwischen physischer und WLAN-Stärke zu vereinfachen. Anstatt eine Blaupause-Karte meiner Einrichtung auf eine andere Weise erstellen zu müssen, könnte ich einfach Google Maps zur gleichen Zeit für mich verwenden, da ich überlagern kann ihre Karte und die GPS-Koordinaten im Wesentlichen, während die Entfernungskarte erstellt wird. Sie benötigen jedoch immer noch eine Tiefenkarte, um die Bodenebenen zu kartieren, was wir ganz leicht von Hand tun können, indem Sie herausfinden, ob Sie sich in der Mitte von zwei Routern befinden. Wir wissen, dass die Signalstärke für Wi-Fi-Hubs auf derselben Etage am stärksten ist. Sie können dies auch überprüfen, indem Sie sicherstellen, dass Sie schwächere Signale für Wi-Fi-Hubs auf verschiedenen Etagen haben. Diese Tiefenkarte ist im Wesentlichen eine Liste der WLAN-Hubs und ihrer jeweiligen Etagen. Wir brauchen ihre Positionen nicht, da wir die Signalstärke am besten an die GPS-Positionen anpassen können, die wir beim Durchlaufen der Anlage und beim Erfassen der Signalstärke für bestimmte Hubs ergriffen haben. Dies ist einige einfache Berechnungen. Für die 2D-Ebenenposition haben wir von oben eine Reihe von Objekten wie diesen:.

BestFitObject{ Tuple<long, long> GPSLocation; List<Tuple<WifiDevice, signedInt>> WifiReadings; //WifiDeviceName(through UUID or some other way), tupled with the signalStrength when that bestFit reading was taken } WifiDevice{ UUID ID; //Think a string should work fine, might be an internal type that encompasses UUID which woudl be better. int floorNumber; Tuple<long, long> GPSLocation; //Not entirely necessary, could provide better accuracy though }  

ClientPosition{
   List<Tuple<UUID, signedIt> NearbySignals; //Tuple of the UUID of the wifi device and the signal strength taken during the time of the ping.  
}

Das obige ist ziemlich einfach und die Tiefenkarte ist meiner Meinung nach noch einfacher.

Idealerweise sollten Sie ein paar verschiedene Geräte ausprobieren, die mehrere Wireless-Techs umfassen (einige Geräte, einige b-Geräte, n, g usw.), um genauere Ergebnisse zu erhalten. Was ich jedoch herausfand, war, dass Genauigkeit keine große Sache ist, und Sie sind im Umkreis von 5 Fuß oder so. Das war genau genug für meine Bedürfnisse. Im Idealfall sind alle WLAN-Hubs das gleiche Modell, und sie befinden sich normalerweise in großen Einrichtungen/Unternehmen, aber selbst dann ist es nicht so groß. Die Variabilität ist so gering, und wenn Sie keine verrückte Genauigkeit benötigen, spielt es keine Rolle. 

Ideally, you'd want to try and hit a couple different devices that encompass a couple different wireless techs (some a devices, some b devices, n, g etc) just to get more accurate results. What I found though, was that accuracy isn't that big of a deal, and you'll be within 5 feet or so. That was accurate enough for my needs. Ideally, all the wifi hubs are the same model, and they usually are in large facilities/companies, but even then, its not that big of a deal. The variability is so small, and if you don't need crazy accuracy, it won't matter.

18
Magn3s1um

Nun, es ist ein Signal, also fällt seine Intensität vom Quadrat der Entfernung ab. Siehe umgekehrtes Quadrat

Android gibt Ihnen die Signalstärke in dBm . Ich bin mit diesem Gerät nicht vertraut, aber wenn es etwas wie Audiodebibel ist, ist es keine lineare Skala. Sie wollen das einbeziehen.

In einer perfekten Welt sind die Felder für reine Messungen gleichförmig genug, um Ihnen Abstand zu geben, aber wenn Sie dies durch irgendein Metall tun, können die Dinge hässlich werden. Darüber hinaus kann die interne Konfiguration des WLAN-Geräts Ihres Geräts in bestimmten Richtungen empfindlicher sein. Ich bin kein Ingenieur oder irgendetwas, daher weiß ich nicht, inwieweit diese Dinge das Endergebnis beeinflussen werden. Es kann unbedeutend sein.

Ich glaube, dass Sie für dreidimensionale Positionen vier Bezugspunkte benötigen. Wenn sich alle WLAN-Hotspots auf der gleichen Höhe befinden, können Sie immer noch Ihre horizontale Position finden. Wenn dies nicht der Fall ist, werden Sie Ihre Position auf der Ebene, auf der sie sich befinden, finden. Dies ist möglicherweise nicht genau genug für Sie, je nachdem, wie steil die Ebene ist.

6
Chris Bode

Machen Sie sich nicht einmal Gedanken, den DBm in eine Entfernung umzuwandeln. Funksignale bewegen sich (fast) mit Lichtgeschwindigkeit, um die Umgebungsbedingungen zu verringern. Wenn Sie also das Gerät "pingen" können, erhalten Sie eine allgemeine Vorstellung von der Entfernung. Bei einer omnidirektionalen Antenne eines bekannten Standorts können Sie dann die Zeit verwenden, die zum Empfangen der Antwort benötigt wird, um einen Radius zu zeichnen und einen Kreis zu zeichnen. Wenn Sie dies von mehreren Geräten aus tun, schneiden sich die Kreise, was Ihnen die Richtung geben sollte. Das ist natürlich alles 2d. Sie könnten dasselbe in 3D tun, aber Sie würden stattdessen Kugeln zeichnen. Je mehr Geräte Sie haben, desto genauer kann der Standort sein.

0
Wjdavis5