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

Je vais commencer par la question.

Le RSSI BTLE est-il un bon moyen d'indiquer ou non la proximité de deux appareils? Est-ce que cela fonctionne seulement avec de petits appareils comme des breloques, etc?

Le problème:

Je cherche actuellement à faire une application qui utilisera BTLE et permettra des connections basées sur la proximité. À cet égard, il ressemble beaucoup à l'application de démonstration que Apple show dans le keynote Advanced Core Bluetooth (Lorsque deux appareils sont presque toucher, ils se connectent).

Si je comprends bien, la proximité est déterminée sur la base de la valeur RSSI lorsque le central découvre le périphérique. Quand j'essaye ceci cependant avec deux iPads le signal semble trop fort pour cela il est aussi trop incohérent pour avoir un coup précis à 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 semblable en ce que les dispositifs ne doivent pas être fermés du tout pour que l'information passe de l'un à l'autre.

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

Merci d'avance pour votre aide.

L'expérience de Matthew Griffin correspond à la mienne. Cependant – quand nous pouvons mesurer pendant une période de time juste, deux choses nous ont aidé à mieux calibrer cela.

Nous avons dû envelopper un filter simple (kalman) sur l'orientation de l'antenne et l'IMU pour get un commentaire brouillon bien que – et ce n'est pas très CPU ou la lumière de la batterie.

  • En utilisant l'IMU, vous obtenez une bonne idée de la distance / direction du voyage – et si c'est sur une courte période de time – nous supposons que l'autre 'côté' est stationnaire. Cela aide beaucoup à get une valeur pour l'orientation 'actuelle' et 'callibrer le bruit de l'environnement actuel.
  • 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'get une direction; et cette distance n'est fiable que jusqu'à 30 à 600 secondes après un calibrage «déplacement» et seulement si l'appareil n'est pas trop tourné. Et en pratique une fois besoin de 4-5 'autres' périphériques; idéalement pas trop mobile, pour se caler dynamicment.

Cependant, l'inverse est assez fiable – c'est-à-dire que nous soaps quand ne pas mesurer. Et le résultat net est que l'on peut assez bien constater des choses comme «au keyboard» et «relocalisé» / s'éloigner à travers une porte / ouverture ou direction spécifique. De même, mesurer un champ en dansant au hasard dans la pièce; changer beaucoup d'orientation – fonctionne bien une fois que les lobes de l'antenne du récepteur ont quelque peu évolué après une période stationnaire.

Vous avez entièrement raison à propos de RSSI sautant sauvagement et au hasard. Vous devriez récupérer vos valeurs RSSI toutes les deux secondes (plus vite et vous obtenez un tas d'erreurs). Jetez les valeurs RSSI qui dépassent un pic de ~ -40 décibels et utilisez un agrégat des valeurs passées avant de déclarer votre plage approximative à l'user.

En ce qui concerne 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é périphériques périphériques ….

Le service que vous searchz s'appelle TX Power Service . L'implémentation de ce service sur votre périphérique vous permettra de diminuer la puissance d'émission de l'appareil. De cette façon, vous pouvez limiter la plage de visibilité des données de publicité. Malheureusement, nous n'avons pas access à 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.

J'ai passé la dernière semaine à traiter ssortingctement avec RSSI, essayant d'utiliser les capteurs Wifi et Bluetooth LE pour la sortingangulation de localization et pour la conversion de distance.

Malheureusement, ce que j'ai trouvé est que RSSI est juste trop finicky et peu fiable pour utiliser systématiquement pour déterminer la distance. En théorie, le RSSI et la distance se comportent selon la loi inverse (double la distance, et le RSSI descendra un nombre fixe de décibels), mais en pratique le RSSI est affecté par des facteurs incontrôlables comme le time (le time sec permet aux RF les champs pour mieux se déplacer) et les obstacles (tout object métallique ou humain sur le trajet d'un capteur à un autre provoquera une atténuation, et tout object métallique positionné de près par l'un des capteurs provoquera un gain dans la puissance du signal).

Il y a des moyens d'essayer de compenser cela. Ce document est l'un des meilleurs articles que j'ai lus sur la façon d'get des résultats précis, mais l'essentiel est que c'est une méthode peu fiable, sauf si vous voulez juste une idée générale de l'endroit où se trouve l'appareil.

Si je comprends bien, vous essayez d'implémenter des fonctionnalités similaires à ce que l'on voit dans la démo WWDC et quelles applications comme Bump mettre en œuvre. Pour cela, RSSI sera adéquat. Testez les valeurs de seuil appropriées (par exemple> -30) et tout ira bien.