2013-05-10 4 views
16

enter image description hereWifi Position Triangulation

Ich muss verstehen, wie Wifi Triangulation im Grunde funktioniert. Die Szene ist wie in obigem Diagramm dargestellt. Um WiFi Triangulation zu implementieren, brauche ich mindestens 3 Wifi Hotspots und deren Positionen. Das Setup:
1. Der Einfachheit halber angenommen, ich habe eine 1 sq-Km von 1 sq-Km Bereich, und ich habe 3 Wifi Hotspots in diesem Bereich. Das Koordinatensystem ist wie folgt: 1 Ecke des quadratischen Bereichs ist (0,0,0), und die diagonalste Ecke wird Koordinaten (1,1,1) haben. Alle Positionsbestimmungen müssen nur relativ zu diesem Koordinatensystem durchgeführt werden (der Einfachheit halber möchte ich keine globalen xyz-Koordinaten). Innerhalb dieser habe ich 3 WiFi-Hotspots bei (x1, y1, z1), (x2, y2, z2), (x3, y3, z3).
2. Wir haben eine Person mit einem Gerät, das WLAN-Signale empfangen und die Stärke des Signals an Position (x, y, z) berechnen kann. Das Gerät könnte ein Telefon, ein Tablet usw. sein.
Das Problem: Berechnen Position (x, y, z) der Person dynamisch, wie sie sich bewegen, wenn Sie jetzt folgende Eingaben haben:
1. Signalstärke der empfangenen Signale von jedem der WLAN-Hotspots
2. Koordinaten der WLAN-Hotspots zuvor in Variablen oder einer Datenbank gespeichert.

Erste Frage: Wie berechne ich Position von den oben genannten Eingaben? Ich nehme an, Signalstärke ist direkt proportional zur Entfernung vom Router, aber was ist die genaue Beziehung? Wie macht Skyhook das so genau?
Zweite Frage: Ich glaube, die obigen Eingaben sind ausreichend. Ist noch etwas erforderlich?

Danke!

+1

Ermitteln Sie anhand der Signalstärke die Entfernung vom Hotspot zum Benutzer. Dies ist der Radius eines Kreises, der am Hotspot zentriert ist. Wo sich alle drei Kreise schneiden, ist der Standort des Benutzers. –

Antwort

18

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, aber konzentrieren Sie sich nur auf 2 Punkte für eine Sekunde. Mit 2 Punkten können Sie ein Dreieck mit sich selbst erstellen und Ihren Standort anhand Ihrer Signalstärke zwischen zwei Punkten finden. Dies wird herausfinden, wo Sie sich zwischen zwei Routern befinden. Wenn Sie beispielsweise zwischen Router 3 und 4 sind und Ihre Signalstärke im Vergleich zu 3 -89 und Ihre Signalstärke zu 4 -54 ist, wissen Sie, dass Sie näher an 3 als an 4 sind. Wenn Sie eine Annäherung der Entfernung gegen Signalstärke machen, können Sie ziemlich genau herausfinden, wo Sie sich zwischen Router 3 und 4 befinden. Das Problem, das übrig bleibt, ist zu bestimmen, auf welcher Seite Sie zwischen 3 und 4 sind da Sie die gleichen Signalstärkewerte haben könnten (-89, -54) entweder oberhalb oder unterhalb dem Router (bei Diagramm sehen)

  6 

    You could be here 

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

    You could also be here 

      5 

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

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

Um all das oben zu tun, brauchen Sie nur eine Annäherung der Entfernung gegen Signalstärke und die Abstände zwischen den Routern. Nach meinen Tests (ich habe meinen eigenen WiFi-Triangulationscode geschrieben) ist die Signalstärke auf mobilen Geräten ziemlich einheitlich, so dass ein Gerät die gleichen Ergebnisse wie das Gerät daneben haben sollte.

Skyhook tut dies, denke ich entweder durch GPS-Positionierung (es könnte fest codiert sein), oder im Grunde das gleiche Prinzip wie dieses. Skyhook ist der einzige Dienst, der Apple dafür genehmigt hat, also hat Apple im Prinzip dasselbe gemacht und dann sichergestellt, dass andere Apps es nicht benutzen können (jede iPhone App, die die eingeschränkte 80211 Bibliothek verwendet, die die Funktionen enthält, um dies zu tun) aus dem App Store abgelehnt werden).

Edit: Wie Abstand zu finden:

Sie müssen einige einfache Annäherungen zu tun. Diese Näherungswerte sind in Abhängigkeit von Ihrer Umgebung nicht gleich, so dass -89 Fuß bedeuten könnten, dass Sie 15 Fuß von Router 3 entfernt sind, aber -89 von Router 4 bedeutet, dass Sie 13 Fuß entfernt sind. Egal, was du tust, das wird nicht hundertprozentig genau sein, aber das ist in Ordnung, denn du kannst sicher innerhalb von 5 Fuß kommen.

Also, was Sie tun, finden Sie eine Reihe von Punkten, wo Sie eine Lesung von -89 von Router 3 erhalten, und Sie notieren, was Ihre Entfernung war. Dann nehmen Sie einen Durchschnitt, und Sie verwenden diesen Durchschnitt, um in Ihrer Datenbank niederzulegen (das sagt, wenn Sie -89 von Router 3 sind, sind Sie 15 Fuß). Sie tun dies dann für andere Werte, wie -50 oder was auch immer, und notieren Sie Ihre Werte und finden Sie einen Durchschnitt. Nun, wenn -89 bedeutet, dass du 15 Fuß entfernt bist, und -50 bedeutet, dass du 25 Fuß entfernt bist (nur ein Beispiel), musst du deine Entfernung annähern, wenn du -75 von Router 3 bist, außer du willst gehen eine Annäherung von Hand für -75. Dies wäre für Tonnen von Werten umständlich, aber Sie müssen experimentieren, um zu sehen, wie genau Sie mit so wenig Datenpunkten wie möglich arbeiten können. Sie können zwischen zwei Signalstärkedurchschnitten approximieren, indem Sie erkennen, dass die Signalstärke logarithmisch ist, also können Sie schätzen, dass -89 15 Fuß ist, dann -75 logarithmisch wäre (Basis 10 oder Basis 2, ich kann mich nicht erinnern, aber ich bin) in Richtung Basis 10) weiter weg als -89 um den Faktor 14/100.

bearbeiten: Eingestellte Code

ich den Code irgendwo haben, aber es war vor ein paar Jahren so würde ich durch eine Menge Sachen zu graben, um es zu finden. Ich denke konzeptionell sollte es ohne Code einfach zu replizieren sein. Ich brauchte etwa 50 Zeilen Java-Code für die Android-Geräte, die ich getestet habe.

Im Wesentlichen nahm ich ein Android-Handy und erstellt eine Anwendung, die mir jederzeit die aktuelle ID des verbundenen Wifi-Gerät, seine Signalstärke, andere in der Nähe Wifi IDs und ihre Signalstärke und dann GPS-Standort anzeigen kann. Dies ist alles über Android API zugänglich. Ich denke, Sie brauchen ein Android-Gerät auf API 4 oder höher oder so. Das war vor 3 oder 4 Jahren, also werfe ich das nur aus dem heraus, woran ich mich erinnere.

Der GPS-Ortsteil sollte das Mapping zwischen physischer und WLAN-Stärke einfacher machen, als eine Blaupause-Karte meiner Einrichtung auf eine andere Art erstellen zu müssen. Ich könnte Google Maps es gleichzeitig für mich machen lassen da ich ihre Karte und die GPS-Koordinaten im Wesentlichen überlagern kann, während ich die Entfernungskarte erstelle. Sie benötigen jedoch immer noch eine Tiefenkarte, um Etagenebenen zu mappen, was wir ziemlich einfach 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 WLAN-Hubs auf der gleichen Etage am stärksten ist, und können dann überprüfen, ob Sie schwächere Signale für WLAN-Hubs auf verschiedenen Etagen haben. Diese Tiefenkarte ist im Wesentlichen eine Liste von WLAN-Hubs und ihren jeweiligen Etagen. Wir brauchen ihre Positionen nicht, da wir die Signalstärke am besten an die GPS-Positionen anpassen können, die wir beim Gehen durch die Anlage gegriffen haben, und die Signalstärke zu bestimmten Hubs erfassen. Das ist eine einfache Mathematik.Also für 2D-Ebene Position, nach unten von oben, haben wir ein Bündel Gegenstände wie solche:

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 
} 

Und dann, wenn wir das Client-Gerät pingen und wollen am besten passen, es gibt ein Objekt wie folgt aus:

Dann können wir unsere ClientPosition einfach an die 2D-Karte anpassen, die wir mit den beiden obigen Objekten erstellt haben.

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

Im Idealfall möchten Sie versuchen, ein paar verschiedene Geräte zu treffen, die ein paar verschiedene Wireless-Technologien umfassen (einige Geräte, einige b-Geräte, n, g usw.), um genauere Ergebnisse zu erhalten. Was ich jedoch fand, war, dass Genauigkeit nicht so groß ist, und Sie werden innerhalb von 5 Fuß oder so sein. Das war genau genug für meine Bedürfnisse. Idealerweise sind alle WiFi-Hubs das gleiche Modell, und sie sind normalerweise in großen Einrichtungen/Unternehmen, aber selbst dann ist es nicht so groß von einem Deal. Die Variabilität ist so klein, und wenn Sie keine verrückte Genauigkeit benötigen, ist es egal.

+1

Danke dafür. Aber könnten Sie die Entfernung vom Router mit der Signalstärke berechnen? Ich bin mir über diesen Teil der Mathematik hier nicht im Klaren. –

+0

Ja, bitte auch, um db/dbM zu Metern von einem einzelnen Router zu erklären. – Yoda

+0

Nun, Sie müssten es in der Umgebung testen, in der Sie sich befinden. Wie genau Sie korrelieren möchten, wie genau Sie in der Lage sind, ihren Standort zu bestimmen. Mit semi-genauen Messungen von einem Router sollten Sie in der Lage sein, innerhalb von 5 Fuß von jemandes tatsächlicher Position zu lokalisieren, ohne zu viel Mühe. – Magn3s1um

6

Nun, es ist ein Signal, also wird seine Intensität vom Quadrat der Entfernung fallen. See Inverse-Square Law

Android gibt Ihnen Signalstärke in dBm. Ich bin mit dieser Einheit nicht vertraut, aber wenn es etwas wie Audio-Dezibel ist, ist es keine lineare Skala. Du wirst das einbeziehen wollen.

In einer perfekten Welt sind die Felder einheitlich genug für reine Messungen, um dir Distanz zu geben, aber wenn du das durch irgendein Metall machst, werden die Dinge vielleicht hässlich. Darüber hinaus kann die interne Konfiguration des WLAN-Radios Ihres Geräts es in bestimmte Richtungen empfindlicher machen. Ich bin kein Ingenieur oder irgendetwas, also weiß ich nicht, in welchem ​​Maße diese Dinge das Endergebnis beeinflussen werden. Es kann belanglos sein.

Schließlich, für die dreidimensionale Lage, glaube ich, dass Sie vier Referenzpunkte benötigen. Wenn alle WLAN-Hotspots auf gleicher Höhe sind, können Sie Ihre horizontale Position immer noch finden. Wenn dies nicht der Fall ist, werden Sie Ihre Position in dem Flugzeug, auf dem sie sich befinden, finden, was für Sie möglicherweise nicht genau genug ist, je nachdem, wie steil das Flugzeug ist.

0

Machen Sie sich keine Gedanken darüber, wie Sie das DBm in die Entfernung konvertieren. Funksignale bewegen sich (fast) mit Lichtgeschwindigkeit, abgesehen von einer gewissen Dämpfung aufgrund von Umweltfaktoren. Wenn Sie also das Gerät "anpingen" können, können Sie sich einen Überblick über seine Entfernung verschaffen. Bei einer omnidirektionalen Antenne an einem bekannten Ort können Sie dann die Zeit verwenden, die benötigt wird, um die Antwort zu erhalten, um einen Radius zu zeichnen und einen Kreis zu zeichnen. Nun, wenn Sie dies von mehreren Geräten aus tun, schneiden sich die Kreise, was Ihnen eine Richtung geben sollte. Natürlich ist das alles 2d. Du könntest dasselbe tun, in 3D, aber du würdest statt dessen Kugeln zeichnen. Je mehr Geräte Sie haben, desto genauer kann der Standort sein.

+0

Licht bewegt sich in 10^-9s mit einer Genauigkeit von etwa 30 cm und hat eine Genauigkeit bis zu dieser Höhe. Es ist teuer und nicht vom Verbraucher. Auch bei dieser Art von Zeitrahmen muss die Geschwindigkeit der Elektronen in der Schaltung berücksichtigt werden. Wenn Sie diesen Weg gehen würden, würde ich eine Antennenanordnung empfehlen, die zu einem Richtungsausgang aufgelöst wird, so dass die Schaltungen als eine Einheit kalibriert werden können. Dann haben Sie 2+ dieser Arrays, um eine 3D-Position zu erhalten. - https://en.wikipedia.org/wiki/Angle_of_arrival – Sam

+0

Sie können nicht eine Entfernung zwischen Telefon und Router mit einem Ping über Wifi-Netzwerk berechnen, weil Ihre Wifi-Übertragungszeiten unzuverlässig sind, hat Ihr Handy kein RealTimeOS, Ihr WLAN Router Timings sind unzuverlässig, und die Entfernung von max wifi Reichweite (ca. 100 Meter) Licht reist in ((3 * 10^8m/s)/100m), die eine Zeit wie ein Zyklus in 3 GHz Prozessor ist, können Sie einfach nicht messen Zeit mit solcher Präzision mit normalen Smartphone und auch wenn Sie Smartphone mit einem 300-GHz-Prozessor haben könnte, gibt es immer noch ein Problem der Unzuverlässigkeit der WLAN-Übertragungszeiten Ihres Telefons und Routers –