Triangulacja pozycji Wifi

Tutaj wpisz opis obrazka

Muszę zrozumieć, jak działa triangulacja Wifi. Scena jest przedstawiona na powyższym diagramie. Aby wdrożyć triangulację wifi, potrzebuję minimum 3 hotspotów Wifi i ich pozycji. Konfiguracja:
1. Dla uproszczenia, Załóżmy, że mam obszar 1 km kw na 1 km kw i mam 3 hotspoty Wifi w tym obszarze. Układ współrzędnych jest następujący: 1 narożnik kwadratu jest (0,0,0), a po przekątnej najdalszy narożnik będzie miał współrzędne (1,1,1). Wszystkie określenia położenia należy dokonać w stosunku do samego układu współrzędnych (dla uproszczenia nie chcę globalnych współrzędnych xyz). W ramach tego mam 3 hotspoty wifi na (x1, y1,z1), (x2, y2,z2), (x3, y3,z3).
2. Mamy osobę z urządzeniem zdolnym do odbierania sygnałów wifi i obliczania siły sygnału w pozycji (x,y,z). Urządzeniem może być telefon, tablet itp.
problem: Oblicz pozycję (x,y,z) osoby dynamicznie, jak poruszają się, gdy masz teraz następujące dane wejściowe:
1. Siła sygnału odbieranego z każdego z hotspotów wifi
2. Współrzędne hotspotów Wi-Fi wcześniej przechowywanych w zmiennych lub bazie danych.

pierwsze pytanie: Jak obliczyć pozycję z powyższych wejść? Zakładam, że siła sygnału jest wprost proporcjonalna do odległości od routera, ale jaka jest dokładna zależność? Jak Skyhook robi to tak dokładnie?
drugi Pytanie: [[6]} uważam, że powyższe dane wejściowe są wystarczające. Czy jest coś jeszcze potrzebne?

dzięki!

Author: PM 77-1, 2013-05-10

3 answers

To całkiem proste. To tylko podstawy matematyki. Podziel go na 2 części:

1) znajdowanie położenia poziomego (bez wysokości).

Aby znaleźć swoją lokalizację, potrzebujesz 3 punktów, ale skup się na 2 punktach przez sekundę. korzystając z 2 punktów, możesz utworzyć ze sobą trójkąt i znaleźć swoją lokalizację na podstawie siły sygnału między dwoma punktami. Dzięki temu dowiesz się, gdzie jesteś pomiędzy dwoma routerami. Na przykład, jeśli jesteś pomiędzy routerami 3 i 4, A siła sygnału w porównaniu do 3 wynosi -89, a siła sygnału do 4 wynosi -54, wiesz, że jesteś bliżej 3 niż jesteś do 4. Jeśli zrobisz przybliżenie odległości vs siły sygnału, możesz wymyślić dość dokładny odczyt, gdzie jesteś między routerami 3 i 4. Problem pozostał, to określenie, po której stronie jesteś między 3 A 4, ponieważ możesz mieć te same wartości siły sygnału (-89, -54) albo powyżej lub poniżej routerów (spójrz na diagram)

           6

   You could be here

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

  You could also be here

            5

Potem znajdź inny router i zwróć uwagę na siłę sygnału. Powinieneś być w stanie określić, po której stronie jesteś dość łatwo, wystarczy spojrzeć na relacje siły sygnału między routerami 5 i 6 (na schemacie).

2) możesz zrobić to samo z wysokością.

Aby wykonać wszystkie powyższe czynności, naprawdę potrzebujesz tylko przybliżenia odległości w stosunku do siły sygnału i odległości między routerami. Z moich testów (napisałem własne WiFi triangulation code), siła sygnału jest dość jednolita na urządzeniach mobilnych, więc jedno urządzenie powinno mieć takie same wyniki jak urządzenie obok.

Skyhook robi to, myślę, że albo poprzez pozycjonowanie GPS (może być ciężko zakodowane), albo zasadniczo na tej samej zasadzie. Skyhook to jedyna usługa, która jest zatwierdzona przez apple, więc Apple zasadniczo zrobił to samo, a następnie upewnił się, że inne aplikacje nie mogą z niego korzystać (każda aplikacja na iPhone ' a, która korzysta z ograniczonej biblioteki 80211, która zawiera funkcje w tym celu zostaną odrzucone z app store).

Edit: jak znaleźć odległość:

Musisz zrobić kilka prostych przybliżeń. Te przybliżenia nie będą takie same w zależności od środowiska, więc -89 stóp może oznaczać, że jesteś 15 stóp od routera 3, ale -89 od routera 4 może oznaczać, że jesteś 13 stóp od hotelu. Bez względu na to, co zrobisz, to nie będzie w 100 procentach dokładne, ale to jest w porządku, ponieważ możesz dostać się w promieniu 5 stóp na pewno. Więc znajdujesz kilka punktów, w których dostajesz odczyt z -89 z routera 3 i zapisujesz odległość. Następnie bierzesz średnią i używasz tej średniej, aby umieścić w bazie danych(która mówi, że gdy jesteś -89 z routera 3, Masz 15 stóp). Następnie robisz to dla innych wartości, takich jak -50 czy coś, i zapisujesz swoje wartości i znajdujesz średnią. Jeśli -89 oznacza, że jesteś 15 stóp od siebie, a -50 oznacza, że jesteś 25 stóp od siebie (tylko przykład), masz aby zbliżyć odległość, gdy jesteś -75 od routera 3, chyba że chcesz uzyskać przybliżenie ręcznie dla -75. Byłoby to uciążliwe dla ton wartości, ale będziesz musiał eksperymentować, aby zobaczyć, jak dokładne możesz być z jak najmniejszą liczbą punktów danych. Można przybliżyć dwie średnie siły sygnału, zdając sobie sprawę, że siła sygnału jest logarytmiczna, więc można oszacować, że skoro -89 wynosi 15 stóp, to -75 będzie logarytmicznie (baza 10 lub Baza 2, nie pamiętam, ale Skłaniam się ku bazie 10) dalej niż -89 o współczynnik 14/100.

Edit: Prośba o kod

Mam gdzieś kod, ale to było kilka lat temu, więc musiałbym przekopać się przez wiele rzeczy, aby go znaleźć. Myślę, że koncepcyjnie, to powinno być łatwe do replikacji bez kodu. Zajęło mi to około 50 linijek kodu Javy dla urządzeń z Androidem, które testowałem.

Zasadniczo wziąłem telefon z Androidem i stworzyłem aplikację, która pozwala mi w każdej chwili wyświetlić aktualny identyfikator podłączonego urządzenia wifi, jego siła sygnału, inne pobliskie identyfikatory wifi i ich siła sygnału, a następnie lokalizacja GPS. Wszystko to jest dostępne za pośrednictwem API Androida. Myślę, że potrzebujesz urządzenia z Androidem NA API 4 lub wyższym, czy coś. To było jakieś 3-4 lata temu, więc wyrzucam to z tego, co pamiętam.

Część lokalizacji GPS miała ułatwić mapowanie pomiędzy siłą fizyczną a siłą Wi-Fi, zamiast tworzyć mapę mojego obiektu w w inny sposób, mogę po prostu google maps zrobić to dla mnie w tym samym czasie, ponieważ mogę nakładać ich mapę i współrzędne GPS zasadniczo, tworząc mapę odległości. Nadal potrzebujesz mapy głębi, aby odwzorować poziomy podłogi, co możemy zrobić ręcznie dość łatwo, znajdując, jeśli jesteś w środku dwóch routerów. Wiemy, że siła sygnału jest najsilniejsza dla centrów Wi-Fi na tym samym piętrze, a następnie można dwukrotnie sprawdzić, upewniając się, że masz słabsze sygnały do centrów Wi-Fi na różnych piętrach. Ta mapa głębokości jest zasadniczo listą węzłów Wi-Fi i ich poszczególnych pięter. Nie potrzebujemy ich pozycji, ponieważ możemy najlepiej dopasować siłę sygnału do lokalizacji GPS, które chwyciliśmy podczas chodzenia po obiekcie i chwytania siły sygnału do niektórych węzłów. To prosta matematyka. Tak więc dla pozycji płaszczyzny 2D, patrząc od góry, mamy kilka obiektów takich jak:

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
}

I kiedy ping urządzenia klienckiego i chcemy go jak najlepiej dopasować, zwraca obiekt taki jak to:

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.  
}

Wtedy możemy łatwo najlepiej dopasować naszą klientelę do mapy 2D, którą stworzyliśmy z powyższych dwóch obiektów.

Powyższe jest dość proste, a Mapa głębokości jest jeszcze prostsza moim zdaniem.

Najlepiej byłoby spróbować trafić kilka różnych urządzeń, które obejmują kilka różnych technologii bezprzewodowych (niektóre urządzenia a, niektóre urządzenia b, n, g itp.), Aby uzyskać dokładniejsze wyniki. Znalazłem jednak, że dokładność nie jest taka wielka, a Ty będziesz bądź w promieniu 1,5 metra. To było wystarczająco dokładne dla moich potrzeb. Idealnie, wszystkie węzły wifi są tego samego modelu, i zwykle są w dużych obiektów/firm, ale nawet wtedy, to nie jest tak wielka sprawa. Zmienność jest tak mała, a jeśli nie potrzebujesz szalonej dokładności, nie będzie to miało znaczenia.

 18
Author: Magn3s1um,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-22 14:34:57

Cóż, to sygnał, więc jego intensywność spadnie z kwadratu odległości. Zobacz Odwrotne Prawo Kwadratowe

Android da ci siłę sygnału w dBm . Nie znam tego urządzenia, ale jeśli jest to coś w rodzaju decybeli audio, to nie jest to skala liniowa. Musisz to uwzględnić.

W idealnym świecie, pola będą wystarczająco jednolite, aby czyste pomiary dały ci odległość, ale jeśli robisz to za pomocą jakiegokolwiek metalu, rzeczy może być paskudnie. Dodatkowo wewnętrzna konfiguracja radia Wi-Fi urządzenia może sprawić, że będzie ono bardziej czułe w niektórych kierunkach. Nie jestem inżynierem, więc nie wiem, w jakim stopniu te rzeczy wpłyną na ostateczny wynik. To może być nieistotne.

Wreszcie, dla trójwymiarowej lokalizacji, uważam, że potrzebujesz czterech punktów odniesienia. Jeśli wszystkie hotspoty wifi znajdują się na tej samej wysokości, nadal możesz znaleźć swoją pozycję poziomą. Jeśli nie, znajdziesz swoje położenie na samolocie, na którym się znajdują, co może nie być wystarczająco dokładne, w zależności od tego, jak stroma jest ta płaszczyzna.

 6
Author: Chris Bode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 22:17:41

Nie martw się nawet o konwersję DBm na odległość. Sygnały radiowe poruszają się z prędkością światła (prawie), z wyjątkiem pewnego tłumienia spowodowanego czynnikami środowiskowymi. Tak więc, jeśli możesz "ping" urządzenie można uzyskać ogólne wyobrażenie o jego odległości. Biorąc pod uwagę antenę dookólną znanej lokalizacji, możesz wykorzystać czas potrzebny na otrzymanie odpowiedzi, aby narysować Promień i narysować okrąg. Teraz, jeśli zrobisz to z wielu urządzeń, okręgi będą się przecinać, co powinno zapewnić Ci kierunek. Oczywiście to wszystko jest 2d. można zrobić to samo, coś w 3d, ale zamiast tego planujesz sfery. Im więcej urządzeń masz, tym dokładniejsza może być lokalizacja.

 0
Author: Wjdavis5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-15 05:07:21