viene una ubicacion señal saber robado rastrear localizacion interiores geolocalizacion exacta donde como android ios algorithm wifi triangulation

android - una - localizacion wifi interiores



Triangulación de la posición wifi (3)

Necesito entender cómo funciona básicamente la triangulación wifi. La escena es como se muestra en el diagrama de arriba. A fin de implementar la triangulación wifi, necesito un mínimo de 3 puntos de conexión wifi y sus posiciones. La puesta en marcha:
1. Para simplificar, supongamos que tengo un área de 1 km2 por 1 km2 , y tengo 3 puntos de conexión wifi en esta área. El sistema de coordenadas es el siguiente: 1 esquina del área cuadrada es (0,0,0), y la esquina diagonalmente más alejada tendrá coordenadas (1,1,1). Toda la determinación de la posición se debe hacer en relación con este sistema de coordenadas solo (por simplicidad, no quiero coordenadas globales xyz). Dentro de esto, tengo 3 puntos de acceso wifi en (x1, y1, z1), (x2, y2, z2), (x3, y3, z3).
2. Tenemos una persona con un dispositivo capaz de recibir señales wifi y calcular la intensidad de la señal en la posición (x, y, z) . El dispositivo podría ser un teléfono, una tableta, etc.
El problema: Calcule la posición (x, y, z) de la persona dinámicamente, a medida que se mueven cuando ahora tiene las siguientes entradas:
1. Intensidad de la señal de las señales recibidas desde cada punto de acceso wifi
2. Coordenadas de los puntos de acceso wifi previamente almacenados en variables o en una base de datos.

Primera pregunta: ¿Cómo calculo la posición de las entradas anteriores? Asumo que la intensidad de la señal es directamente proporcional a la distancia del enrutador, pero ¿cuál es la relación exacta? ¿Cómo hace Skyhook hacer esto con tanta precisión?
Segunda pregunta: Creo que las entradas anteriores son suficientes. ¿Se requiere algo más?

¡Gracias!


Bueno, es una señal, por lo que su intensidad caerá del cuadrado de la distancia. Ver Ley de Cuadrado Inverso.

Android te va a dar fuerza de señal en dBm . No estoy familiarizado con esa unidad, pero si es algo como decibeles de audio, no es una escala lineal. Usted querrá tener en cuenta eso.

En un mundo perfecto, los campos serán lo suficientemente uniformes para que las mediciones puras te den distancia, pero si lo haces a través de cualquier metal, cualquier cosa puede ponerse fea. Además, la configuración interna de la radio wifi de su dispositivo puede hacerlo más sensible en ciertas direcciones. No soy un ingeniero ni nada, así que no sé hasta qué punto estas cosas afectarán el resultado final. Puede ser intrascendente.

Finalmente, para la ubicación tridimensional, creo que necesita cuatro puntos de referencia. Si todos los puntos de acceso wifi están a la misma altura, aún puede encontrar su posición horizontal. Si no lo están, encontrará su posición en el plano en el que se encuentran, lo que puede no ser lo suficientemente exacto para usted, según la inclinación del plano.


Esto es bastante fácil. Es sólo un poco de matemáticas básicas. Divídelo en 2 partes:

1) Encontrar su ubicación horizontal (sin altura).

Para encontrar su ubicación, necesita 3 puntos, pero solo concéntrese en 2 puntos por segundo. Al usar 2 puntos, puedes crear un triángulo contigo mismo y encontrar tu ubicación según la intensidad de la señal entre dos puntos. Esto descubrirá dónde se encuentra entre dos enrutadores. Por ejemplo, si se encuentra entre los enrutadores 3 y 4, y la intensidad de su señal en comparación con 3 es de -89 y la potencia de su señal de 4 es -54, sabe que está más cerca de 3 que de 4. Si realiza una aproximación de la intensidad de la señal frente a la distancia, puede llegar a una lectura bastante precisa de dónde se encuentra entre los enrutadores 3 y 4. El problema que queda entonces es determinar de qué lado está entre 3 y 4. , ya que podría tener los mismos valores de intensidad de señal (-89, -54) por encima o por debajo de los enrutadores (consulte el diagrama)

6 You could be here 3--------------------------4 You could also be here 5

Luego, busque otro enrutador y observe la intensidad de la señal. Debería poder determinar de qué lado se encuentra con facilidad simplemente observando las relaciones de intensidad de señal entre 5 y 6 enrutadores (en el diagrama).

2) Puedes hacer lo mismo con la altura.

Para hacer todo lo anterior, solo necesita una aproximación de la intensidad de la señal frente a la distancia, y las distancias entre los enrutadores. Desde mi prueba (escribí mi propio código de triangulación de WiFi), la intensidad de la señal es bastante uniforme en todos los dispositivos móviles, por lo que un dispositivo debería tener los mismos resultados que el dispositivo que está al lado.

Skyhook hace esto, creo, ya sea a través del posicionamiento GPS (podría estar codificado), o básicamente el mismo principio que este. Skyhook es el único servicio que está aprobado para Apple para esto, por lo que Apple básicamente hizo lo mismo y luego se aseguró de que otras aplicaciones no pudieran usarlo (cualquier aplicación de iPhone que use la biblioteca restringida 80211 que contiene las funciones para hacerlo) ser denegado desde la tienda de aplicaciones).

Edición: Cómo encontrar la distancia:

Necesitas hacer algunas aproximaciones simples. Estas aproximaciones no serán todas iguales según su entorno, por lo que -89 pies puede significar que está a 15 pies de distancia del Enrutador 3, pero -89 desde el enrutador 4 puede significar que está a 13 pies de distancia. No importa lo que hagas, esto no será 100% exacto, pero está bien, porque puedes estar a 5 pies de distancia.

Entonces, lo que hace es encontrar un montón de puntos en los que obtiene una lectura de -89 desde el enrutador 3 y anota cuál fue su distancia. Luego, toma un promedio y usa este promedio para anotar en su base de datos (que dice que cuando está en -89 desde el enrutador 3, tiene 15 pies). Luego hace esto para otros valores, como -50 o lo que sea, y anota sus valores y encuentra un promedio. Ahora, si -89 significa que estás a 15 pies de distancia, y -50 significa que estás a 25 pies de distancia (solo un ejemplo), debes aproximar tu distancia cuando estés a -75 del enrutador 3 a menos que quieras ir a buscar Una aproximación a mano para -75. Esto sería complicado para toneladas de valores, pero tendrá que experimentar para ver qué tan preciso puede ser con la menor cantidad de puntos de datos que pueda obtener. Puede aproximar entre dos promedios de intensidad de señal si se da cuenta de que la intensidad de la señal es logarítmica, por lo que puede estimar que, dado que -89 es 15 pies, entonces -75 sería logarítmico (base 10 o base 2, no puedo recordar pero estoy inclinándose hacia la base 10) más lejos que -89 por un factor de 14/100.

Editar: pidiendo código

Tengo el código en algún lugar, pero fue hace un par de años, así que tendría que buscar en muchas cosas para encontrarlo. Creo que conceptualmente, debería ser fácil de replicar sin código. Me tomó cerca de 50 líneas de código Java para los dispositivos Android que estaba probando.

Básicamente, tomé un teléfono Android y creé una aplicación que me permite mostrar en todo momento la ID actual del dispositivo wifi conectado, su potencia de señal, otras ID de wifi cercanas y su intensidad de señal, y luego la ubicación del GPS. Todo esto es accesible a través de la API de Android. Creo que necesitas un dispositivo Android en API 4 o superior o algo así. Esto fue hace 3 o 4 años, así que solo estoy tirando esto de lo que recuerdo.

La parte de la ubicación del GPS era hacer que el mapeo entre la fuerza física y wifi fuera más fácil, en lugar de tener que crear un mapa de planos de mis instalaciones de alguna otra manera, podría hacer que Google Maps lo haga por mí al mismo tiempo ya que puedo superponer su mapa y las coordenadas GPS esencialmente, mientras crean el mapa de distancia. Sin embargo, aún necesitaría un mapa de profundidad para asignar niveles de piso, lo que podemos hacer a mano con bastante facilidad si nos encontramos en medio de dos enrutadores. Sabemos que la intensidad de la señal es más fuerte para los hubs wifi en el mismo piso, y luego podemos volver a verificar si nos aseguramos de tener señales más débiles para los hubs wifi en diferentes pisos. Este mapa de profundidad es esencialmente una lista de hubs wifi y sus respectivos pisos. No necesitamos sus posiciones, ya que podemos adaptar mejor la intensidad de la señal a las ubicaciones de GPS que tomamos cuando caminamos por las instalaciones y la intensidad de la señal a ciertos concentradores. Esta es una matemática simple. Así que para la posición del plano 2D, mirando hacia abajo desde la parte superior, tenemos un montón de objetos como los siguientes:

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 }

Y luego, cuando hacemos ping al dispositivo cliente y queremos ajustarlo mejor, devuelve un objeto como este:

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

Luego, podemos adaptar fácilmente nuestra Posición de cliente al mapa 2D que creamos con los dos objetos anteriores.

Lo anterior es bastante simple, y el mapa de profundidad es incluso más simple en mi opinión.

Idealmente, querría intentar golpear un par de dispositivos diferentes que abarquen un par de diferentes tecnologías inalámbricas (algunos dispositivos, algunos dispositivos b, n, g, etc.) solo para obtener resultados más precisos. Sin embargo, lo que descubrí fue que la precisión no es tan importante, y estarás dentro de 5 pies o menos. Eso fue lo suficientemente preciso para mis necesidades. Idealmente, todos los hubs wifi son del mismo modelo, y generalmente están en grandes instalaciones / compañías, pero incluso en ese caso, no es tan importante. La variabilidad es muy pequeña, y si no necesitas una precisión loca, no importará.


Ni siquiera te preocupes por convertir el DBm a distancia. Las señales de radio viajan a la velocidad de la luz (casi), salvo por alguna atenuación debida a factores ambientales. Por lo tanto, si puede hacer "ping" al dispositivo, puede obtener una idea general de su distancia. Dada una antena omnidireccional de una ubicación conocida, puede usar el tiempo que se tarda en recibir la respuesta para trazar un radio y dibujar un círculo. Ahora, si haces esto desde múltiples dispositivos, los círculos se intersectarán, lo que te proporcionará una dirección. Por supuesto esto es todo 2d. Podrías hacer lo mismo, cosa en 3d pero estarías trazando esferas en su lugar. Cuantos más dispositivos tengas, más precisa será la ubicación.