web-dev-qa-db-fra.com

Comprendre l'ibeacon distanciation

Essayez de saisir un concept de base sur le fonctionnement de la distanciation avec ibeacon (beacon/bluetooth-le/ble). Existe-t-il une vraie documentation sur la mesure dans laquelle un ibeacon peut mesurer exactement? Disons que je suis à 300 pieds ... est-il possible pour un ibeacon de détecter cela?

107
rambossa

L'estimation de distance fournie par iOS est basée sur le rapport entre l'intensité du signal iBeacon (rssi) et la puissance de l'émetteur étalonnée (txPower). Le txPower est l’intensité du signal mesurée connue en RSSI à un mètre de distance. Chaque iBeacon doit être étalonné avec cette valeur txPower pour permettre des estimations de distance précises.

Lors de la construction de bibliothèque iBeacon Android , nous devions créer notre propre algorithme indépendant, car le code source iOS CoreLocation n'était pas disponible. Nous avons mesuré une série de mesures RSSI à des distances connues, puis nous avons créé une courbe d’ajustement optimal correspondant à nos points de données. L'algorithme que nous avons créé est présenté ci-dessous par le code Java.

Notez que le terme "précision" désigne ici iOS pour une distance en mètres. Cette formule n'est pas parfaite, mais elle se rapproche approximativement de ce que fait 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;
  }
}   

Remarque: Les valeurs 0.89976, 7.7095 et 0.111 sont les trois constantes calculées lors de la résolution d'une courbe de meilleur ajustement à notre points de données mesurés. YMMV

215
davidgyoung

Je suis très en train d’examiner la question de la précision/rssi/proximité avec les iBeacons et je pense vraiment que toutes les ressources sur Internet (blogs, publications dans StackOverflow) se trompent.

davidgyoung (réponse acceptée,> 100 votes positifs) dit:

Notez que le terme "précision" désigne ici iOS pour une distance en mètres.

En fait, la plupart des gens disent cela, mais je ne sais pas pourquoi! La documentation montre très clairement que CLBeacon.proximity:

Indique la précision horizontale sigma en mètres. Utilisez cette propriété pour différencier les balises de même valeur de proximité. Ne l'utilisez pas pour identifier un emplacement précis pour la balise. Les valeurs de précision peuvent varier en raison d'interférences RF.

Permettez-moi de répéter: une précision sigma en mètres . Les 10 premières pages de Google sur le sujet contiennent le terme "un sigma" uniquement dans les citations de documents, mais aucune d’elles n’analyse le terme, ce qui est essentiel pour comprendre cela.

Il est très important d'expliquer ce qui est réellement une précision sigma . Après les URL pour commencer: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertainty

Dans le monde physique, lorsque vous effectuez une mesure, vous obtenez toujours des résultats différents (à cause du bruit, de la distorsion, etc.) et très souvent de la distribution gaussienne. Il y a deux paramètres principaux décrivant la courbe de Gauss:

  1. moyenne (ce qui est facile à comprendre, c’est la valeur pour laquelle le sommet de la courbe se produit).
  2. écart type, qui indique la largeur ou la largeur de la courbe. La courbe plus étroite, la meilleure précision, car tous les résultats sont proches les uns des autres. Si la courbe est large et pas raide, cela signifie que les mesures d'un même phénomène diffèrent beaucoup les unes des autres, de sorte que les mesures ont une mauvaise qualité.

Un sigma est un autre moyen de décrire l’ampleur de la courbe gaussienne.
On dit simplement que si la moyenne de mesure est X et que un sigma est σ, alors 68% de toutes les mesures seront comprises entre X - σ et X + σ.

Exemple. Nous mesurons la distance et obtenons une distribution gaussienne. La moyenne est de 10m. Si σ est 4m, cela signifie que 68% des mesures étaient comprises entre 6m et 14m.

Lorsque nous mesurons la distance avec des balises, nous obtenons RSSI et une valeur d'étalonnage d'un mètre, ce qui nous permet de mesurer la distance en mètres. Mais chaque mesure donne des valeurs différentes, qui forment une courbe gaussienne. Et un sigma (et la précision) est la précision de la mesure, pas la distance!

Cela peut être trompeur, car lorsque nous éloignons la balise, un sigma augmente en fait, car le signal est pire. Mais avec différents niveaux de puissance de balise, nous pouvons obtenir des valeurs de précision totalement différentes sans modifier réellement la distance. Plus la puissance est élevée, moins il y a d'erreur.

Il y a un article de blog qui analyse en détail le sujet: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

L'auteur a une hypothèse selon laquelle la précision est en réalité la distance. Il affirme que les balises de Kontakt.io sont défectueuses car il a augmenté la puissance au maximum, la précision était très petite pour 1, 5 et même 15 mètres. Avant d'augmenter la puissance, la précision était assez proche des valeurs de distance. Personnellement, je pense que c'est correct, car plus le niveau de puissance est élevé, moins il y a d'interférences. Et il est étrange que les balises Estimote ne se comportent pas de cette façon.

Je ne dis pas que j'ai raison à 100%, mais en plus d'être développeur iOS, j'ai un diplôme en électronique sans fil et je pense que nous ne devrions pas ignorer le terme "un sigma" de docs et j'aimerais commencer à en discuter.

Il se peut que l'algorithme de précision d'Apple ne collecte que des mesures récentes et en analyse la distribution gaussienne. Et c'est comme ça que ça règle la précision. Je n’excluerais pas la possibilité qu’ils utilisent l’accéléromètre de formulaire d’information pour déterminer si l’utilisateur se déplace (et à quelle vitesse) afin de réinitialiser les valeurs de distance de distribution précédentes, car elles ont certainement changé.

72
r00dY

La puissance de sortie de l'iBeacon est mesurée (calibrée) à une distance de 1 mètre. Supposons qu'il s'agisse de -59 dBm (juste un exemple). L'iBeacon inclura ce numéro dans sa publicité LE.

L'appareil d'écoute (iPhone, etc.) mesurera le RSSI de l'appareil. Supposons, par exemple, qu'il s'agisse de -72 dBm.

Puisque ces nombres sont en dBm, le rapport de la puissance est en fait la différence en dB. Alors:

ratio_dB = txCalibratedPower - RSSI

Pour convertir cela en un rapport linéaire, nous utilisons la formule standard pour dB:

ratio_linear = 10 ^ (ratio_dB / 10)

Si nous supposons une conservation de l’énergie, alors la force du signal doit chuter de 1/2. Alors:

power = power_at_1_meter / r^2. En résolvant pour r, nous obtenons:

r = sqrt(ratio_linear)

En Javascript, le code ressemblerait à ceci:

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

Notez que si vous êtes à l'intérieur d'un bâtiment en acier, il y aura peut-être des réflexions internes qui ralentiront la décroissance du signal au-delà de 1/r ^ 2. Si le signal passe à travers un corps humain (eau), il sera alors atténué. Il est très probable que l’antenne n’ait pas le même gain dans toutes les directions. Les objets métalliques dans la pièce peuvent créer des interférences étranges. Etc, etc ... YMMV.

60
Mark Fassler

iBeacon utilise Bluetooth Low Energy (LE) pour se tenir au courant des emplacements. La distance/portée de Bluetooth LE est de 160 ft ( http://en.wikipedia.org/wiki/Bluetooth_low_energy ).

3
Jiaru

Les distances par rapport à la source des paquets de publicité au format iBeacon sont estimées à partir de l'atténuation du chemin du signal calculée en comparant l'intensité du signal reçu mesuré à la puissance d'émission déclarée que l'émetteur est censé encoder dans les données publicitaires.

Un tel schéma fondé sur la perte de trajectoire n’est qu’approximatif et est sujet à des variations telles que les angles d’antenne, les objets intermédiaires et vraisemblablement un environnement bruyant RF. En comparaison, les systèmes réellement conçus pour la mesure de distance (GPS, radar, etc.) reposent sur des mesures précises du temps de propagation, dans les mêmes cas, même en examinant la phase du signal.

Comme Jiaru le fait remarquer, 160 ft est probablement au-delà de la plage prévue, mais cela ne signifie pas nécessairement qu'un paquet ne passera jamais , mais celui-ci ne devrait pas s'attendre à ce qu'il fonctionne à cette distance.

3
Chris Stratton

C'est possible, mais cela dépend de la puissance de sortie de la balise que vous recevez, des autres sources RF proches, des obstacles et d'autres facteurs environnementaux. La meilleure chose à faire est de l'essayer dans l'environnement qui vous intéresse.

1
lara

Avec plusieurs téléphones et balises au même endroit, il sera difficile de mesurer la proximité avec un degré de précision élevé. Essayez d’utiliser l’application Android "b and l bluetooth le scanner" pour visualiser les variations de la force du signal (distance), pour plusieurs balises. Vous découvrirez rapidement que des algorithmes complexes et adaptatifs peuvent être nécessaires pour fournir toute forme de mesure de proximité cohérente.

Vous verrez de nombreuses solutions demandant simplement à l'utilisateur de "s'il vous plaît tenir votre téléphone ici", afin de réduire la frustration des clients.

1
BlueSpectrumz