tutorial setup programming how google eddystone beacons beacon ios objective-c bluetooth bluetooth-lowenergy ibeacon

ios - programming - how to setup beacon



Comprender el distanciamiento de ibeacon (7)

Con múltiples teléfonos y balizas en la misma ubicación, será difícil medir la proximidad con un alto grado de precisión. Intente utilizar la aplicación Android "b y l bluetooth le scanner" para visualizar las variaciones de intensidad de la señal (distancia), para múltiples balizas, y descubrirá rápidamente que se requieren algoritmos complejos y adaptables para proporcionar cualquier forma de medición de proximidad constante .

Vas a ver muchas soluciones simplemente instruyendo al usuario "por favor, mantenga su teléfono aquí" para reducir la frustración de los clientes.

Intentando captar un concepto básico de cómo el distanciamiento con ibeacon (beacon / bluetooth-le / ble) puede funcionar. ¿Existe alguna documentación verdadera sobre qué tan exactamente puede medir un ibeacon? Digamos que estoy a 300 pies de distancia ... ¿es posible que un ibeacon detecte esto?


Es posible, pero depende de la potencia de salida de la baliza que está recibiendo, otras fuentes cercanas, obstáculos y otros factores ambientales. Lo mejor que puedes hacer es probarlo en el entorno que te interesa.


Estoy investigando a fondo la cuestión de precisión / rssi / proximidad con iBeacons y realmente creo que todos los recursos en Internet (blogs, publicaciones en ) se equivocan.

davidgyoung (respuesta aceptada,> 100 upvotes) dice:

Tenga en cuenta que el término "precisión" aquí es iOS para la distancia en metros.

En realidad, la mayoría de la gente dice esto, ¡pero no tengo idea de por qué! La documentación deja muy claro que CLBeacon.proximity:

Indica la precisión horizontal sigma en metros. Utilice esta propiedad para diferenciar balizas con el mismo valor de proximidad. No lo use para identificar una ubicación precisa para la baliza. Los valores de precisión pueden fluctuar debido a la interferencia de RF.

Permíteme repetir: una precisión sigma en metros . Las 10 páginas principales en google sobre el tema tienen el término "una sigma" solo en la cita de documentos, pero ninguna de ellas analiza el término, que es fundamental para entender esto.

Muy importante es explicar qué es realmente una precisión sigma . Siguiendo las URL para comenzar: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertainty

En el mundo físico, cuando haces alguna medición, siempre obtienes resultados diferentes (debido al ruido, la distorsión, etc.) y muy a menudo los resultados forman una distribución gaussiana. Hay dos parámetros principales que describen la curva gaussiana:

  1. mean (que es fácil de entender, es el valor por el que se produce el pico de la curva).
  2. desviación estándar, que indica qué tan ancha o estrecha es la curva. La curva más estrecha, la mejor precisión, porque todos los resultados están cerca el uno del otro. Si la curva es ancha y no empinada, significa que las mediciones del mismo fenómeno difieren mucho entre sí, por lo que la medición tiene una mala calidad.

Una sigma es otra forma de describir qué tan estrecha / ancha es la curva gaussiana.
Simplemente dice que si la media de medición es X, y una sigma es σ, entonces el 68% de todas las mediciones estarán entre X - σ y X + σ .

Ejemplo. Medimos la distancia y obtenemos una distribución gaussiana como resultado. La media es 10m. Si σ es 4m, significa que el 68% de las mediciones estuvieron entre 6m y 14m.

Cuando medimos la distancia con balizas, obtenemos RSSI y un valor de calibración de 1 metro, lo que nos permite medir la distancia en metros. Pero cada medida da valores diferentes, que forman la curva gaussiana. Y una sigma (y precisión) es la precisión de la medición, ¡no la distancia!

Puede ser engañoso, porque cuando movemos la baliza más lejos, una sigma en realidad aumenta porque la señal es peor. Pero con diferentes niveles de potencia de baliza podemos obtener valores de precisión totalmente diferentes sin cambiar la distancia. Cuanto mayor sea la potencia, menor será el error.

Hay una publicación en el blog que analiza detenidamente el asunto: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

El autor tiene una hipótesis de que la precisión es en realidad la distancia. Afirma que las balizas de Kontakt.io son defectuosas porque cuando aumentó la potencia al valor máximo, el valor de precisión fue muy pequeño para 1, 5 e incluso 15 metros. Antes de aumentar la potencia, la precisión era bastante cercana a los valores de distancia. Personalmente creo que es correcto, porque a mayor nivel de potencia, menor impacto de interferencia. Y es extraño por qué las balizas Estimote no se comportan de esta manera.

No digo que esté 100% en lo cierto, pero aparte de ser desarrollador de iOS, tengo un título en electrónica inalámbrica y creo que no deberíamos ignorar el término "un sigma" de los documentos y me gustaría comenzar la discusión al respecto.

Es posible que el algoritmo de precisión de Apple solo recopile mediciones recientes y analice la distribución gaussiana de ellas. Y así es como establece la precisión. No excluiría la posibilidad de que utilicen el acelerómetro de información para detectar si el usuario se está moviendo (y qué tan rápido) para restablecer los valores de distancia de distribución anteriores porque ciertamente han cambiado.


La estimación de distancia proporcionada por iOS se basa en la relación entre la potencia de la señal iBeacon (rssi) y la potencia del transmisor calibrado (txPower). El txPower es la intensidad de señal medida conocida en rssi a 1 metro de distancia. Cada iBeacon debe calibrarse con este valor de txPower para permitir estimaciones de distancia precisas.

Cuando estábamos construyendo la biblioteca Android iBeacon , tuvimos que idear nuestro propio algoritmo independiente porque el código fuente iOS CoreLocation no está disponible. Medimos un grupo de mediciones de rssi a distancias conocidas, luego hicimos una curva de mejor ajuste para unir nuestros puntos de datos. El algoritmo que encontramos se muestra a continuación como código Java.

Tenga en cuenta que el término "precisión" aquí es iOS para la distancia en metros. Esta fórmula no es perfecta, pero se aproxima a lo que hace iOS.

protected static double calculateAccuracy(int txPower, double rssi) { if (rssi == 0) { return -1.0; // if we cannot determine accuracy, return -1. } double ratio = rssi*1.0/txPower; if (ratio < 1.0) { return Math.pow(ratio,10); } else { double accuracy = (0.89976)*Math.pow(ratio,7.7095) + 0.111; return accuracy; } }

Nota: Los valores 0.89976, 7.7095 y 0.111 son las tres constantes calculadas al resolver una mejor curva de ajuste para nuestros puntos de datos medidos. YMMV


La potencia de salida de iBeacon se mide (calibra) a una distancia de 1 metro. Supongamos que esto es -59 dBm (solo un ejemplo). El iBeacon incluirá este número como parte de su anuncio LE.

El dispositivo de escucha (iPhone, etc.) medirá el RSSI del dispositivo. Supongamos, por ejemplo, que esto es, por ejemplo, -72 dBm.

Dado que estos números están en dBm, la relación de la potencia es en realidad la diferencia en dB. Asi que:

ratio_dB = txCalibratedPower - RSSI

Para convertir eso en una relación lineal, usamos la fórmula estándar para dB:

ratio_linear = 10 ^ (ratio_dB / 10)

Si asumimos la conservación de la energía, entonces la fuerza de la señal debe caerse como 1 / r ^ 2. Asi que:

power = power_at_1_meter / r^2 . Resolviendo por r, obtenemos:

r = sqrt(ratio_linear)

En Javascript, el código se vería así:

function getRange(txCalibratedPower, rssi) { var ratio_db = txCalibratedPower - rssi; var ratio_linear = Math.pow(10, ratio_db / 10); var r = Math.sqrt(ratio_linear); return r; }

Tenga en cuenta que, si se encuentra dentro de un edificio de acero, quizás haya reflejos internos que harán que la señal disminuya más lentamente que 1 / r ^ 2. Si la señal pasa a través de un cuerpo humano (agua), entonces la señal se atenuará. Es muy probable que la antena no tenga la misma ganancia en todas las direcciones. Los objetos de metal en la habitación pueden crear patrones de interferencia extraños. Etc, etc ... YMMV.


Las distancias a la fuente de los paquetes publicitarios formateados iBeacon se estiman a partir de la atenuación de la trayectoria de la señal calculada comparando la intensidad de la señal recibida medida con la potencia de transmisión reclamada que el transmisor debe codificar en los datos publicitarios.

Un esquema basado en la pérdida de ruta como este es solo aproximado y está sujeto a variaciones con elementos como ángulos de antena, objetos intermedios y, presumiblemente, un entorno de RF ruidoso. En comparación, los sistemas realmente diseñados para la medición de distancia (GPS, radar, etc.) se basan en mediciones precisas del tiempo de propagación, en los mismos casos, incluso al examinar la fase de la señal.

Como señala Jiaru, 160 pies probablemente esté más allá del rango previsto, pero eso no significa necesariamente que un paquete nunca llegue, solo que uno no debería esperar que funcione a esa distancia.