75 votes

Trianguler exemple pour les iBeacons

Je suis à la recherche dans la possibilité d'utiliser plusieurs iBeacons pour faire un "rough" intérieur de la position de l'emplacement. L'application est une sorte de "musée", et il serait plus facile d'être en mesure de former une grille avec des emplacements pour les différents objets puis des balises (c'est peut-être pas impossible aussi).

Existe-il des exemples, des expériences, avec l'aide de plusieurs balises afin de trianguler en une sorte de lieu, ou d'un peu de logique pour m'aider sur la façon d'écrire moi-même?

74voto

Javier Chávarri Points 796

J'ai fait quelques expériences pour obtenir une position précise à l'aide de trois balises.

Résultats de trilatération

Malheureusement, les résultats ont été très décevants en termes de qualité. Il y avait principalement deux questions:

  1. En non-environnements contrôlés, où vous pouvez trouver des métaux et d'autres objets qui affectent le signal, la force du signal reçu de balises change tellement souvent qu'il semble impossible d'obtenir une marge d'erreur inférieure à 5 mètres.
  2. Selon la manière dont l'utilisateur est de la manipulation de l'appareil récepteur, les valeurs de mesure peuvent changer beaucoup de choses. Si l'utilisateur met sa main sur l'antenne bluetooth, puis l'algorithme ont de faibles signaux d'entrée, et donc les balises censé être très loin de l'appareil. Voir cette image pour voir l'emplacement précis de l'antenne Bluetooth.

Solutions possibles

Après avoir parlé avec une Pomme ingénieur qui a activement m'a découragé d'aller vers le bas de cette façon, l'option je me sens plus enclins à utiliser est la force brute. Essayez de mettre en place une balise tous les X mètres (X étant l'erreur maximale tolérée dans le système afin que nous puissions le suivre sur ce phares de la grille de la position d'un appareil donné par le calcul qui balise sur la grille la plus proche de l'appareil et en supposant que l'appareil est sur la même position.

Trilatération algorithme

Toutefois, par souci d'exhaustivité, je partage ci-dessous la fonction de base de la trilatération algorithme. Il est basé sur le paragraphe 3 ("Trois distances connues") de cet article.

- (CGPoint)getCoordinateWithBeaconA:(CGPoint)a beaconB:(CGPoint)b beaconC:(CGPoint)c distanceA:(CGFloat)dA distanceB:(CGFloat)dB distanceC:(CGFloat)dC {
    CGFloat W, Z, x, y, y2;
    W = dA*dA - dB*dB - a.x*a.x - a.y*a.y + b.x*b.x + b.y*b.y;
    Z = dB*dB - dC*dC - b.x*b.x - b.y*b.y + c.x*c.x + c.y*c.y;

    x = (W*(c.y-b.y) - Z*(b.y-a.y)) / (2 * ((b.x-a.x)*(c.y-b.y) - (c.x-b.x)*(b.y-a.y)));
    y = (W - 2*x*(b.x-a.x)) / (2*(b.y-a.y));
    //y2 is a second measure of y to mitigate errors
    y2 = (Z - 2*x*(c.x-b.x)) / (2*(c.y-b.y));

    y = (y + y2) / 2;
    return CGPointMake(x, y);
}

15voto

Duncan C Points 18661

J'ai regardé dans cette. Le terme que vous voulez qu'il trilatération. (Dans la triangulation vous avez angles à partir de 3 points connus. Dans trilatération vous avez de la distance à partir de 3 points connus) Si vous Google vous devriez trouver plusieurs articles dont un sur le Wiki. Il consiste à résoudre une série de 3 équations simultanées. Les documents que j'ai vus étaient pour la 3D trilatération - 2D est plus facile parce que vous pouvez simplement déposer le Z terme.

Ce que j'ai trouvé des mathématiques abstraites. Je n'ai pas pris le temps encore de carte à l'algorithme général dans le code spécifique, mais j'ai l'intention de s'attaquer à un certain point.

Notez que les résultats que vous obtiendrez seront TRÈS brut, en particulier dans quoi que ce soit, mais une pièce vide. Les signaux sont suffisamment faibles qu'une personne, une statue, ou tout ce qui bloque la ligne de vue permettra d'augmenter votre distance de lectures assez significativement. Vous pourriez même avoir des places dans un bâtiment où l'interférence constructive (principalement de l'murs) permet à certains endroits de lire autant plus proches qu'ils ne le sont réellement.

7voto

xiaobai Points 2004

Précis à l'intérieur de positionnement avec iBeacon sera difficile pour les raisons suivantes:

  1. Comme indiqué dans de précédents commentaires, iBeacon signal ont tendance à fluctuer. La raison pour inclure multipath effet, la dynamique de l'objet d'obstacle entre le téléphone et iBeacon lorsque la personne est en mouvement, d'autres 2.4 GHz interférences, et plus encore. Donc, idéalement, vous ne voulez pas faire confiance à 1 seul paquet de données et au lieu de faire une sorte de moyenne pour plusieurs paquets de la même balise. Qui obligerait le téléphone phare de la distance ne change pas trop entre ceux de plusieurs paquets. Pour le général BLE paquets (comme les phares de StickNFind) peut facilement être mis à 10Hz balisage taux. Cependant, pour iBeacon, qui va être difficile, parce que
  2. iBeacon est de balisage de la fréquence ne peut probablement pas être supérieure à 1 hz. Je serai heureux si quelqu'un peut pointer vers une source qui dit le contraire, mais toutes les informations que j'ai vu jusqu'à présent, confirme cette assertion. Qui fait sens puisque la plupart des iBeacons sera alimenté par une pile à haute fréquence et haute un impact significatif sur la vie de la batterie. Considérant les gens de la vitesse de marche moyenne est de 5,3 km (~1.5 m/s), de sorte que même si vous utilisez seulement un modeste 3 beacon paquets pour faire le calcul de la moyenne, vous aurez du mal à s' ~5m de précision.

D'autre part, si vous pourriez augmenter iBeacon fréquence supérieure à 10 hz (ce dont je doute), alors c'est possible d'avoir 5m ou plus de précision au moyen de la méthode de traitement. Tout d'abord trivial des solutions basées sur la Loi du Carré Inverse, comme trilatération, est souvent ne fonctionne pas bien parce que, dans la pratique, la distance/RSSI relation pour les différentes balises sont souvent loin de l'Inverse-Unification de la Loi pour la raison 1 ci-dessus. Mais tant que le RSSI est relativement stable pour une certaine balise dans un certain endroit (ce qui est généralement le cas), vous pouvez utiliser une approche dite de prise d'empreintes pour obtenir plus de précision. Une méthode couramment utilisée pour l'empreinte digitale est kNN (k-plus Proche Voisin).

Mise à jour 2014-04-24

Certains iBeacons peut diffuser plus de 1Hz, comme Estimote utilisation 5Hz en tant que par défaut. Toutefois, selon ce lien: "C'est Apple restriction. IOS retourne balises de mise à jour à chaque seconde, peu importe la fréquence de l'appareil est de la publicité.". Il y a un autre commentaire, il y a (probablement à partir de la Estimote vendeur) en disant:"Nos balises peuvent diffuser beaucoup plus rapide et il peut améliorer les résultats et de mesure". Donc, si supérieur iBeacon fréquence est bénéfique n'est pas clair.

6voto

TomTasche Points 2268

Si vous êtes comme moi et n'aime pas les maths, vous pouvez faire une recherche rapide pour l'intérieur, le positionnement sdk". Il ya beaucoup de compagnies offrant à l'intérieur de positionnement en tant que service.

Plug sans vergogne: je travaille pour indoo.rs et peut vous recommander ce service. Il comprend également de routage et de ces sur le dessus de la "juste" à l'intérieur de positionnement.

4voto

Shawn Points 79

J'ai mis en place un système très simple d'Empreintes digitales de l'algorithme pour android 4.4, testé dans un relatif "mauvais" de l'environnement:

  • près de 10 wifi AP à proximité.
  • plusieurs autres signaux Bluetooth à proximité.

la précision semble de 5 à 8 mètres et dépend de la façon dont j'ai mis que 3 Ibeacon diffuseur. L'algorithme est assez simple et je pense que vous pouvez en œuvre un par vous-même, les étapes sont les suivantes:

  1. charge à l'intérieur de la carte.
  2. échantillonnage à l'aide de la carte pour tous dans l'attente de positionnement point.
  3. l'enregistrement de toutes les données d'échantillonnage, les données devraient inclure: carte de coordonner, de signaux de position et de leur RSSI.

ainsi, lorsque vous démarrez le positionnement, c'est juste un revers de la procédure suit.

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