Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Wifi triangulación de posición

Introduzca aquí la descripción de la imagen

Necesito entender cómo funciona la triangulación Wifi básicamente. La escena es como se muestra en el diagrama anterior. Para implementar la triangulación wifi, necesito un mínimo de 3 hotspots Wifi y sus posiciones. La puesta en marcha:
1. Para simplificar, supongamos que tengo un área de 1 kilómetro cuadrado por 1 kilómetro cuadrado , y tengo 3 hotspots de Wifi en esta área. El sistema de coordenadas es el siguiente: 1 esquina del área cuadrada es (0,0,0), y la esquina diagonal más alejada tendrá coordenadas (1,1,1). Toda la determinación de posición se debe hacer en relación con este sistema de coordenadas solo (por simplicidad, no quiero coordenadas xyz globales). Dentro de esto, tengo 3 hotspots 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 fuerza 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 de forma dinámica, ya que se mueven cuando ya tiene las siguientes entradas:
1. Intensidad de señal de las señales recibidas de cada uno de los hotspots wifi
2. Coordenadas de los hotspots wifi previamente almacenados en variables o una base de datos.

Primera pregunta: ¿Cómo calculo la posición de los insumos anteriores? Supongo 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 esto tan exactamente?
Segunda pregunta: Creo que los datos anteriores son suficientes. ¿Hay algo más requerido?

¡Gracias!

  • Portal cautivo con hotspot android configurado mediante programación
  • UDP Multicasting desde el móvil a la PC
  • Android - No puede eliminar la red Wifi de forma programática El método removeNetwork (int) en el tipo WifiManager no es aplicable a los argumentos (String)
  • Cree un punto de acceso con el Nexus 7
  • Android WIFI Cómo detectar cuándo está disponible una conexión WIFI específica
  • Comprobar WiFi y GPS isConnected o no en Android?
  • Forzar Android a usar 3G cuando en el área local wifi sin acceso a la red
  • Impresión Bluetooth y WIFI para Android
  • 3 Solutions collect form web for “Wifi triangulación de posición”

    Esto es bastante fácil. Son sólo algunas matemáticas básicas. Divídalo en 2 partes:

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

    Para encontrar su ubicación, necesita 3 puntos, pero sólo se centran en 2 puntos por un segundo. Usando 2 puntos, puede crear un triángulo consigo mismo, y encontrar su ubicación en función de la intensidad de la señal entre dos puntos. Esto averiguará dónde se encuentra entre dos routers. Por ejemplo, si usted está entre los routers 3 y 4, y su intensidad de señal en comparación con 3 es -89 y su fuerza de señal a 4 es -54, usted sabe que usted está más cerca de 3 que usted está a 4. Si haces una aproximación entre la distancia y la intensidad de la señal, puedes llegar a una lectura bastante precisa de dónde estás entre los routers 3 y 4. El problema que queda es determinar en qué lado estás 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 

    A continuación, sólo busque otro enrutador y observe la intensidad de su señal. Usted debe ser capaz de determinar qué lado está en bastante fácilmente con sólo echar un vistazo a las relaciones de fuerza de señal entre 5 y 6 routers (en el diagrama).

    2) Puedes hacer lo mismo con la altura.

    Para hacer todo lo anterior, realmente sólo necesita una aproximación de distancia vs fuerza de la señal, y las distancias entre los routers. Desde mi prueba (escribí mi propio código de triangulación WiFi), la intensidad de la señal es bastante uniforme en los dispositivos móviles, por lo que un dispositivo debe tener los mismos resultados que el dispositivo junto a él.

    Skyhook hace esto pienso ya sea a través de posicionamiento GPS (podría ser difícil de codificar en), o básicamente el mismo principio que esto. Skyhook es el único servicio que está aprobado por 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 iPhone que use la biblioteca 80211 restringida que contiene las funciones para hacer esto Ser negado de la tienda de aplicaciones).

    Editar: Cómo encontrar distancia:

    Necesitas hacer algunas aproximaciones simples. Estas aproximaciones no serán todas iguales dependiendo de su ambiente, así que -89 pies podría significar que está a 15 pies del Router 3, pero -89 del router 4 podría significar que está a 13 pies de distancia. No importa lo que hagas, esto no va a ser 100 por ciento exacto, pero eso está bien, porque usted puede conseguir dentro de 5 pies con seguridad.

    Así que lo que haces es encontrar un montón de puntos donde obtienes una lectura de -89 desde el enrutador 3, y anotas cuál es tu distancia. Entonces, usted toma un promedio, y usted utiliza este promedio para poner abajo en su base de datos (que dice cuando usted es -89 del ranurador 3, usted es 15 pies). A continuación, hacer esto para otros valores, como -50 o lo que sea, y anotar sus valores y encontrar 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 (sólo un ejemplo), tienes que aproximar tu distancia cuando estás -75 desde el enrutador 3 a menos que quieras ir Una aproximación a mano para -75. Esto sería engorroso para toneladas de valores, pero tendrás que experimentar para ver lo exacto que puedes estar con los pocos puntos de datos que puedas obtener. Puede aproximar entre dos medias de intensidad de señal al darse cuenta de que la intensidad de la señal es logarítmica, por lo que puede estimar que -89 es 15 pies, entonces -75 sería logarítmicamente (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: Pedir código

    Tengo el código en algún lugar, pero fue hace un par de años, así que tendría que cavar a través de un montón de cosas para encontrarlo. Creo que conceptualmente, debe ser fácil de replicar sin código. Me tomó alrededor de 50 líneas de código java para los dispositivos de Android que estaba probando.

    En esencia tomé un teléfono android y creé una aplicación que me permite mostrar en cualquier momento la identificación actual del dispositivo wifi conectado, su intensidad de señal, otros IDs wifi cercanos y su intensidad de señal, y luego la ubicación GPS. Todo esto es accesible a través del api de android. Creo que necesita un dispositivo Android en API 4 o superior o algo. Esto fue como hace 3 o 4 años, así que estoy tirando esto de lo que recuerdo.

    La parte de localización GPS era hacer el mapeo entre la fuerza física y wifi más fácil, en lugar de tener que crear un mapa de plano de mi instalación de alguna otra manera, sólo podría tener google maps hacerlo por mí al mismo tiempo ya que puedo superponer Su mapa y las coordenadas GPS esencialmente, mientras que la creación de la distancia mapa. Todavía necesitaría un mapa de profundidad para mapear los niveles de piso, lo cual podemos hacer a mano muy fácilmente encontrando si usted está en medio de dos routers. Sabemos que la intensidad de la señal es más fuerte para los concentradores wifi en el mismo piso, y luego puede comprobar de nuevo, asegurándose de que tiene señales más débiles a los hubs wifi en diferentes plantas. Este mapa de profundidad es esencialmente una lista de hubs wifi, y sus respectivos pisos. No necesitamos sus posiciones, ya que podemos encajar mejor la fuerza de la señal con las ubicaciones GPS que agarramos al caminar por la instalación y agarrando la fuerza de la señal a ciertos hubs. Esta es una simple matemática. Así que para la posición del plano 2D, mirando hacia abajo desde la parte superior, tenemos un montón de objetos como tales:

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

    Entonces podemos fácilmente ajustar mejor nuestra ClientPosition al mapa 2D que creamos con los dos objetos anteriores.

    Lo anterior es bastante simple, y el mapa de profundidad es aún más simple En mi opinión.

    Idealmente, usted querría probar y golpear un par de dispositivos diferentes que abarcan un par de tecnologías inalámbricas diferentes (algunos dispositivos, algunos dispositivos b, n, g etc) sólo para obtener resultados más precisos. Lo que encontré, sin embargo, fue que la precisión no es tan grande de un acuerdo, y usted estará dentro de 5 pies o menos. Eso era lo suficientemente preciso para mis necesidades. Idealmente, todos los hubs wifi son del mismo modelo, y por lo general están en grandes instalaciones / empresas, pero incluso entonces, no es tan grande de un acuerdo. La variabilidad es tan pequeña, y si no necesitas precisión loca, no importará.

    Bueno, es una señal, por lo que su intensidad caerá del cuadrado de la distancia. Vea la ley del cuadrado inverso

    Android va a darle la fuerza de la señal en dBm . No estoy familiarizado con esa unidad, pero si es algo así como decibelios de audio, no es una escala lineal. Usted querrá factor que en.

    En un mundo perfecto, los campos serán lo suficientemente uniformes para las mediciones puras para darle distancia, pero si usted está haciendo esto a través de cualquier metal cualquier cosa puede ponerse feo. Además, la configuración interna de la radio wifi de su dispositivo puede hacerla 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 inconsecuente.

    Finalmente, para la localización tridimensional, creo que usted necesita cuatro puntos de referencia. Si todos los hotspots wifi están a la misma altura, todavía puede encontrar su posición horizontal. Si no lo son, encontrarás tu posición en el avión en el que se encuentran, lo que puede no ser lo suficientemente exacto para ti, dependiendo de cuán abrupto sea ese avión.

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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.