Bluetooth LE RSSI para detección de proximidad iOS


Empezaré con la pregunta.

¿Es el BTLE RSSI una buena manera de indicar la proximidad de dos dispositivos entre sí o no? ¿solo funciona con dispositivos pequeños como fobs, etc.?

La cuestión:

Actualmente estoy buscando hacer una aplicación que use BTLE y permita conexiones basadas en la proximidad. En este sentido, es muy similar a la aplicación de demostración que Apple muestra en el Advanced Core Bluetooth keynote (Cuando dos dispositivos están casi tocando, entonces conectar).

Según lo entiendo, la proximidad se determina en función del valor de RSSI cuando el central descubre el periférico. Sin embargo, cuando intento esto con dos iPads, la señal parece demasiado fuerte para esto, también es demasiado inconsistente para tener una puñalada precisa en la proximidad, ya que no muestra mucha correlación con la proximidad de los dispositivos.

He probado el código de ejemplo de Apple y eso es similar en que los dispositivos no tienen que estar cerca en absoluto para que la información pase de de uno a otro.

Si solo hubiera una manera de reducir la intensidad de la señal de los dispositivos periféricos anuncio....

Gracias de antemano por cualquier ayuda.

Author: Tom Bates, 2013-03-28

4 answers

La experiencia de Matthew Griffin coincide con la mía. Sin embargo, cuando podemos medir durante un período de tiempo justo, dos cosas nos han ayudado a calibrar esto mejor.

Tuvimos que envolver un filtro simple (kalman) en la orientación de la antena y el IMU para obtener un comentario de ejecución aproximada, sin embargo, y esto no es muy ligero de CPU o batería.

  • Usando el IMU se obtiene una idea justa de la distancia / dirección de viaje - y si esto es durante un corto período de tiempo - asumimos el otro 'lado' está estacionario. Esto ayuda mucho a obtener un valor para la orientación "actual" y el ruido del entorno "callibrate current".
  • Del mismo modo - haga lo mismo para las rotaciones/cambios de posición.

Hemos encontrado que, en general, una reorientación del dispositivo es una mejor manera de obtener dirección; y que la distancia solo es confiable algunos hasta unos 30 a 600 segundos después de una calibración de 'movimiento' y solo si el dispositivo no está demasiado girado. Y en la práctica una vez necesita algunos 4-5' otros ' dispositivos; idealmente no demasiado móvil, para mantenerse dinámicamente calibrado.

Sin embargo, lo contrario es bastante confiable, es decir, sabemos cuándo no medir. Y el resultado neto es que uno puede bastante bien determinar cosas como 'en el teclado 'y'reubicado' / se alejó a través de una puerta/apertura o dirección específica. Del mismo modo la medición de un campo mediante el baile al azar a través de la habitación; cambio de orientación mucho - funciona bien una vez que los lóbulos de la antena del receptor consiguió algo trabajado después de un estacionario periodo.

 21
Author: Dirk-Willem van Gulik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-10 10:22:51

Tienes toda la razón sobre el salto RSSI salvaje y aleatoriamente. Debe recuperar sus valores RSSI cada dos segundos (más rápido y obtiene un montón de errores). Deseche los valores de RSSI que son más que un pico de ~-40 decibelios y use un agregado de los valores pasados antes de declarar su rango aproximado al usuario.

En cuanto a su siguiente declaración, está de suerte.

Si solo hubiera una manera de reducir la intensidad de la señal de la dispositivos periféricos anuncio....

El servicio que está buscando se llama TX Power Service. La implementación de este servicio en su periférico le permitirá disminuir la potencia de transmisión del dispositivo. De esa manera, puede reducir el rango desde el que se pueden ver los datos de publicidad. Desafortunadamente, sin embargo, no tenemos acceso a este servicio en un dispositivo iOS. Pero si está escribiendo su propio firmware para un periférico BLE, este es el servicio que desea.

 14
Author: Tommy Devoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-04 23:54:45

He pasado la última semana tratando estrictamente con RSSI, tratando de usar sensores LE Wifi y Bluetooth para la triangulación de ubicación y para la conversión de distancia.

Desafortunadamente, lo que he encontrado es que RSSI es demasiado meticuloso y poco confiable para usarlo consistentemente para determinar la distancia. En teoría, el RSSI y la distancia se comportan de acuerdo con la ley del cuadrado inverso (el doble de la distancia, y el RSSI bajará un número fijo de decibelios), pero en la práctica el RSSI se ve afectado por factores incontrolables como el clima (el clima seco permite que los campos de RF viajen mejor) y obstáculos (cualquier objeto metálico o humano en el camino de un sensor a otro causará atenuación, y cualquier objeto metálico colocado de cerca por uno de los sensores causará ganancia en la intensidad de la señal).

Hay maneras de tratar de compensar esto. Este documento es uno de los mejores documentos que he leído sobre cómo obtener resultados precisos, pero la conclusión es que es un método poco fiable a menos que solo quieres una idea general de dónde está el dispositivo.

 11
Author: Matthew Griffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-02 09:39:01

Si entiendo bien, está tratando de implementar una funcionalidad similar a la que se ve en la demostración WWDC y lo que implementan aplicaciones como Bump. Para eso RSSI será suficiente. Pruebe los valores de umbral appopriate (por ejemplo, >-30) y estará bien.

 2
Author: allprog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-10 14:56:22