33 votes

Bluetooth LE RSSI pour la détection de proximité iOS

Je vais commencer par la question.

Est-ce que le RSSI BTLE est un bon moyen d'indiquer la proximité de deux appareils l'un de l'autre ou non? est-ce que cela ne fonctionne qu'avec de petits appareils comme les porte-clés, etc.?

Le Problème :

Je suis actuellement en train de travailler sur une application qui utilisera le BTLE et permettra des connexions basées sur la proximité. À cet égard, c'est très similaire à l'application de démonstration présentée par Apple lors de la session Keynote avancée sur le Core Bluetooth (Lorsque deux appareils sont presque en contact, ils se connectent ensuite).

D'après ce que je comprends, la proximité est déterminée en fonction de la valeur RSSI lorsque le central découvre le périphérique. Cependant, lorsque j'essaie ceci avec deux iPads, le signal semble trop fort pour cela, et il est également trop imprécis pour avoir une idée précise de la proximité car il ne montre pas beaucoup de corrélation avec la proximité des appareils.

J'ai essayé le code d'exemple d'Apple et c'est similaire en ce sens que les appareils n'ont pas besoin d'être proches du tout pour que les informations passent de l'un à l'autre.

Si seulement il y avait un moyen de réduire la puissance du signal de la publicité des appareils périphériques....

Merci d'avance pour toute aide.

21voto

Dirk-Willem van Gulik Points 3552

L'expérience de Matthew Griffin correspond à la mienne. Cependant - lorsque nous pouvons mesurer pendant une période suffisante, deux choses nous ont aidés à mieux calibrer cela.

Nous avons dû envelopper un simple filtre (Kalman) sur l'orientation de l'antenne et l'IMU pour obtenir un commentaire approximatif en temps réel - et ce n'est pas très léger en termes de CPU ou de batterie.

  • En utilisant l'IMU, vous avez une idée approximative de la distance/direction de déplacement - et si cela se fait sur une courte période de temps - nous supposons que l'autre 'côté' est stationnaire. Cela aide beaucoup à obtenir une valeur pour l'orientation 'actuelle' et à 'étalonner le bruit actuel de l'environnement'.
  • De même - faites de même pour les rotations/changements de position.

Nous avons constaté qu'en général, une réorientation de l'appareil est un meilleur moyen d'obtenir la direction ; et que la distance n'est fiable que pendant 30 à 600 secondes après un 'étalonnage' du mouvement, et seulement si l'appareil n'est pas trop tourné. Et en pratique, il faut environ 4 à 5 'autres' appareils ; idéalement pas trop mobiles, pour se calibrer dynamiquement.

Cependant, l'inverse est assez fiable - c'est-à-dire que nous savons quand ne pas mesurer. Et le résultat net est que l'on peut assez bien déterminer des choses comme 'au clavier' et 'déplacé/déplacé' à travers une porte/ouverture spécifique ou dans une direction. De même, mesurer un champ en dansant aléatoirement dans la pièce ; changeant souvent d'orientation - fonctionne bien une fois que les lobes de l'antenne réceptrice ont été quelque peu établis après une période stationnaire.

14voto

tdevoy Points 8133

Vous avez tout à fait raison concernant le RSSI qui saute de façon aléatoire. Vous devriez récupérer vos valeurs de RSSI toutes les deux secondes (plus souvent et vous obtiendrez une série d'erreurs). Rejetez les valeurs de RSSI qui sont supérieures à un pic de ~-40 décibels et utilisez une agrégation des valeurs passées avant de déclarer la plage approximative à l'utilisateur.

Quant à votre déclaration suivante, vous avez de la chance.

Si seulement il y avait un moyen de réduire la force du signal de la publicité des périphériques....

Le service que vous cherchez s'appelle le Service de Puissance de Transmission. Implémenter ce service sur votre périphérique vous permettra de réduire la puissance de transmission du périphérique. De cette façon, vous pouvez diminuer la portée à laquelle les données publicitaires sont visibles. Malheureusement, nous n'avons pas accès à ce service sur un appareil iOS. Mais si vous écrivez votre propre firmware pour un périphérique BLE, c'est le service que vous voulez.

11voto

Matthew Griffin Points 243

J'ai passé la dernière semaine à travailler strictement avec le RSSI, en essayant d'utiliser des capteurs Wifi et Bluetooth LE pour la triangulation de la localisation et pour la conversion de distance.

Malheureusement, ce que j'ai trouvé, c'est que le RSSI est tout simplement trop instable et peu fiable pour déterminer de manière cohérente la distance. En théorie, le RSSI et la distance se comportent selon la loi du carré inverse (doublez la distance, et le RSSI diminuera d'un nombre fixe de décibels), mais en pratique, le RSSI est affecté par des facteurs incontrôlables tels que la météo (le temps sec permet aux champs RF de mieux se propager) et les obstacles (tout objet métallique ou humain sur le chemin d'un capteur à un autre entraînera une atténuation, et tout objet métallique proche d'un des capteurs provoquera un gain dans la force du signal).

Il existe des moyens d'essayer de compenser cela. Ce document est l'un des meilleurs que j'ai lu sur la manière d'obtenir des résultats précis, mais en fin de compte, c'est une méthode peu fiable à moins que vous ne vouliez simplement avoir une idée générale de l'emplacement du dispositif.

2voto

allprog Points 9189

Si j'ai bien compris, vous essayez d'implémenter une fonctionnalité similaire à ce qui a été vu dans la démo de la WWDC et ce que des applications comme Bump implémentent. Pour cela, le RSSI sera adéquat. Testez les valeurs de seuil appropriées (par exemple, >-30) et vous serez sur la bonne voie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X