118 votes

Précision de l'accéléromètre Android (navigation inertielle)

J'étais à la recherche dans la mise en œuvre d'un Système de Navigation Inertielle pour un téléphone Android, je me rends compte est difficile compte tenu de la précision de l'accéléromètre, et la fluctuation constante de lectures.

Pour commencer, j'ai mis le téléphone sur une surface plane et un échantillon de 1000 accéléromètre lectures dans les directions X et Y (parallèle à la table, donc pas de gravité agissant dans ces directions). J'ai ensuite la moyenne de ces lectures et utilisé cette valeur pour calibrer le téléphone (en soustrayant cette valeur de chaque lecture).

J'ai ensuite testé le système en le mettant sur la table et d'échantillonnage 5000 accéléromètre lectures dans les directions X et Y. Je dirais que, compte tenu de l'étalonnage, que ces accélérations devraient ajouter jusqu'à 0 (à peu près) dans chaque direction. Cependant, ce n'est pas le cas, et l'accélération totale de plus de 5000 itérations est nulle part près de 0 (en moyenne autour de 10 sur chaque axe).

Je me rends compte sans voir mon code ce sera peut-être difficile de répondre, mais dans un sens plus général...

Est-ce simplement un exemple de la façon inexacte l'accéléromètre de lectures sur un téléphone mobile (HTC Desire S), ou est-il plus probable que j'ai fait quelques erreurs dans mon codage?

Merci pour votre aide à l'avance.

139voto

Ali Points 18740

Vous obtenez la position par intégration de l'accélération linéaire à deux reprises, mais l'erreur est horrible. Il est inutile dans la pratique.

Voici une explication de pourquoi (Google de Parler de Technologie) à 23:20. Je recommande fortement cette vidéo.

Il n'est pas l'accéléromètre de bruit que provoque le problème, mais le gyro bruit blanc, voir le paragraphe 6.2.3 de Propagation des Erreurs. (En passant, vous aurez besoin de les gyroscopes).

Comme pour l'intérieur de positionnement, j'ai trouvé ces utiles:

Le RSSI à Base d'Intérieur de Localisation et de Suivi à l'Aide de Sigma-Point de Kalman Smoothers

Piétons Suivi avec Chaussure-Monté Capteurs Inertiels

L'amélioration de la Performance des Podomètres à l'Aide d'un Accéléromètre Unique

Je n'ai aucune idée de comment ces méthodes pourraient effectuer dans des applications réelles, ou comment transformer en une belle application Android.

Une question similaire est présent.

Mise à JOUR:

Apparemment, il y a une version plus récente que ci-dessus Oliver J. Woodman, "Une introduction à la navigation inertielle", sa thèse de Doctorat:

Piétonne de Localisation pour les Environnements Intérieurs

20voto

RyanJMcGowan Points 630

Je suis juste en pensant à voix haute, et je n'ai pas joué avec un android accéléromètre API pourtant, si nu avec moi.

Tout d'abord, traditionnellement, pour obtenir de navigation des accéléromètres vous auriez besoin d'un 6-axe de l'accéléromètre. Vous avez besoin d'accélérations selon les axes X, Y et Z, mais aussi des rotations Xr, Yr, et Zr. Sans la rotation de données, vous n'avez pas assez de données pour établir un vecteur, à moins que vous assumez l'appareil ne change jamais, c'est l'attitude, ce qui serait assez limitant. Personne ne lit les CGU de toute façon.

Oh, et vous savez que l'INS dérives avec la rotation de la terre, non? Donc il n'y a que trop. Une heure plus tard et vous êtes mystérieusement de l'escalade sur un 15° de pente dans l'espace. C'est en supposant que vous avez eu une INS capable de maintenir l'emplacement de long, dont un téléphone ne peut pas encore faire.

Une meilleure façon d'utiliser les accéléromètres -même avec un accéléromètre 3 axes - pour la navigation serait à égalité dans les GPS pour calibrer l'INS chaque fois que possible. Lorsque le GPS est insuffisante, INS compliments bien. Le GPS peut soudainement vous tirer hors de 3 pâtés de maisons parce que vous vous êtes trop près d'un arbre. INS n'est pas très grande, mais au moins il sait que vous n'étiez pas touché par un météore.

Ce que vous pourriez faire est de connecter les téléphones données d'accélérométrie de l', et beaucoup d'elle. Comme les semaines. Comparer avec des bon (je veux dire vraiment bon) données GPS et l'utilisation datamining d'établir une corrélation des tendances entre les données de l'accéléromètre et le GPS connue de données. (Pro tip: Vous aurez envie de vérifier l'almanach du GPS pour les jours avec une bonne géométrie et beaucoup de satellites. Certains jours, vous n'avez que 4 satellites et ça ne suffit pas) Ce que vous pourriez être en mesure de faire est de savoir que quand une personne marche avec leur téléphone dans leur poche, les données de l'accéléromètre journaux d'un modèle très particulier. Basé sur le datamining, vous établir un profil pour cet appareil, avec cet utilisateur, et ce genre de vitesse de ce modèle représente quand il avait données GPS pour aller avec elle. Vous devriez être en mesure de détecter les virages, monter les escaliers, assis (étalonnage à 0 vitesse de temps!) et diverses autres tâches. Comment le téléphone est détenu doivent être considérées comme des entrées de données entièrement. Je sens l'odeur d'un réseau de neurones utilisé pour faire de l'exploration de données. Quelque chose à l'aveugle à ce que les entrées, en d'autres termes. L'algorithme ne porterait que sur les tendances dans les habitudes, et pas vraiment attention aux dimensions réelles de l'INS. Tous qu'il serait de savoir est - historically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now. Et il serait passer au morceau en conséquence. Il est important qu'il soit complètement à l'aveugle, car il suffit de mettre un téléphone dans votre poche, vous pourriez être orienté dans une des 4 orientations différentes, et 8 si vous passez poches. Et il y a de nombreuses façons de tenir votre téléphone, ainsi. Nous parlons beaucoup de données ici.

Vous aurez évidemment encore beaucoup de dérive, mais je pense que vous auriez plus de chance de cette façon parce que le dispositif permettra de savoir quand vous avez arrêté de marcher, et la position de la dérive ne sera pas une perpétuation. Il sait que vous êtes debout, toujours basé sur des données historiques. Traditionnelle INS systèmes ne disposent pas de cette fonctionnalité. La dérive perpétue à toutes les futures mesures et les composés de façon exponentielle. Impies précision, ou d'avoir une barre de navigation secondaire de vérifier à intervalles réguliers, est absolument vital avec la traditionnelle INS.

Chaque appareil et chaque personne devrait avoir leur propre profil. C'est beaucoup de données et beaucoup de calculs. Tout le monde marche des vitesses différentes, avec différentes étapes, et met leurs téléphones dans différentes poches, etc. Sûrement à mettre en œuvre dans le monde réel nécessiterait arithmétique être géré côté serveur.

Si vous n'avez utiliser le GPS pour la ligne de base initiale, une partie du problème, il y a le GPS a tendance à avoir son propre migrations de plus de temps, mais ils sont non-perpétuer les erreurs. Asseyez-vous un récepteur à un emplacement pour enregistrer les données. Si il n'y a pas de corrections WAAS, vous pouvez facilement obtenir l'emplacement des correctifs à la dérive dans des directions aléatoires de 100 mètres autour de vous. Avec WAAS, peut-être jusqu'à 6 pieds. Vous pouvez en fait avoir plus de chance avec un sous-compteur RTK système sur un sac à dos d'obtenir au moins les ANN algorithme vers le bas.

Vous aurez toujours angulaire de la dérive avec l'INS à l'aide de ma méthode. C'est un problème. Mais, si vous êtes allé si loin pour construire une ANN de verser sur la valeur de semaines de GPS et INS de données entre les n utilisateurs, et en fait il travail à ce point, manifestement, vous n'avez pas l'esprit de big data jusqu'à présent. Continuez dans cette voie et l'utilisation de plus de données pour les aider à résoudre l'angle de dérive: les Gens sont des créatures d'habitude. Nous avons à peu près les mêmes choses comme marcher sur les trottoirs, à travers les portes, les escaliers, et ne pas faire des choses folles comme marcher à travers les autoroutes, à travers les murs, ou sur les balcons.

Donc, disons que vous prenez une page de Grand Frère et commencez à stocker des données sur l'endroit où les gens vont. Vous pouvez commencer à cartographier où les gens seraient attendus à pied. C'est un pari assez sûr que si l'utilisateur commence à monter les escaliers, elle est à la base de l'escalier que la personne avant sa marchait. Après 1000 itérations et certains des moindres carrés ajustements, votre base de données assez bien sait où les escaliers sont avec la plus grande exactitude. Maintenant, vous pouvez corriger angulaire de la dérive et de l'emplacement de la personne commence à marcher. Quand elle frappe les escaliers, ou tourne en bas de cette salle, ou se déplace le long d'un trottoir, de toute dérive peut être corrigé. Votre base de données devrait contenir des secteurs qui sont pondérées par la probabilité qu'une personne s'y rendre à pied, ou que cet utilisateur a marché dans le passé. Des bases de données spatiales sont optimisés pour cela, utilisez divide and conquer seulement allouer des secteurs qui sont significatives. Ce serait un peu comme ceux du MIT projets où le laser équipé robot commence avec une image noire, et les peintures du labyrinthe dans la mémoire en prenant à chaque tour, illuminant où tous les murs sont.

Les zones de grand trafic serait d'obtenir un poids plus élevé, et des régions où il n'a jamais été d'obtenir 0 poids. Les zones à circulation élevée ont une résolution plus élevée. Vous serait essentiellement jusqu'à la fin avec une carte de partout, personne n'a été et de l'utiliser comme un modèle de prédiction.

Je ne serais pas surpris si vous pouviez déterminer ce siège une personne a pris dans un théâtre à l'aide de cette méthode. Étant donné un nombre suffisant d'utilisateurs aller au théâtre, et une résolution suffisante, vous auriez des données de la cartographie de chaque ligne de la le théâtre, et la largeur de chaque ligne est. Plus les gens la visite des lieux, le plus élevé de la fidélité avec laquelle vous pouvez prédire que cette personne se trouve.

Aussi, je vous recommande fortement d'obtenir une (gratuit) abonnement GPS le Monde magazine, si vous êtes intéressé dans la recherche actuelle dans ce genre de choses. Chaque mois, je geek.

9voto

Trevor Johns Points 9310

Je ne suis pas sûr de savoir comment grand votre décalage est, parce que vous avez oublié d'inclure les unités. ("Autour de 10 sur chaque axe" ne veut pas dire grand-chose. :P) cela dit, il est encore probablement due à un défaut dans le matériel.

L'accéléromètre est très bien pour des choses comme la détermination de l'orientation du téléphone par rapport à la gravité, ou la détection de mouvements (en secouant ou en cognant le téléphone, etc.)

Cependant, en essayant de faire de dead reckoning l'aide de l'accéléromètre va vous exposer à un grand nombre de composés d'erreur. L'accéléromètre aurait besoin d'être incroyablement précise le contraire, et ce n'est pas une commune de cas d'utilisation, donc je doute que les fabricants de matériel sont optimiser pour cela.

8voto

Alex Stone Points 8138

Android accéléromètre numérique, il échantillons de l'accélération en utilisant le même nombre de "seaux", permet de dire qu'il y a 256 seaux et de l'accéléromètre est capable de détecter à partir de -2 à +2g. Cela signifie que votre produit sera quantifiée en termes de ces "compartiments" et serait sauter autour d'un ensemble de valeurs.

Pour calibrer un android accéléromètre, vous avez besoin d'un échantillon d'un lot de plus de 1000 points et de trouver la "mode", autour de laquelle l'accéléromètre est fluctuante. Ensuite, trouver le nombre de digital points par combien la sortie fluctue et l'utiliser pour votre filtrage.

Je recommande filtrage de Kalman une fois que vous obtenez la mode et +/- variation.

7voto

Simon O'Hanlon Points 27680

Je sais que c'est assez vieux, mais la question n'est pas abordée dans AUCUNE des réponses fournies.

Ce que vous voyez est l'accélération linéaire de l'appareil, y compris l'effet de la gravité. Si vous posez le téléphone sur une surface plane, le capteur de rapport de l'accélération due à la gravité, qui est d'environ 9.80665 m/s2, en lui donnant le 10, vous voyez. Les capteurs sont inexactes, mais ils ne sont pas inexacts! Voir ici pour quelques liens utiles et des informations sur le capteur que vous peut-être après.

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