La boussole me donne des données folles, un calibrage est-il nécessaire ou c'est le capteur cassé ?

StackOverflow https://stackoverflow.com/questions/9462346

Question

Je travaille avec les données des capteurs Android.Utilisation de mon application

SensorManager.getRotationMatrixFromVector(
            mRotationMatrix , event.values);

et cela a bien fonctionné jusqu'à ce matin, lorsque la matrice de rotation a commencé à envoyer beaucoup de données de bruit (Changer N en W en une seconde).

Ce n'est pas un problème avec mon code, car vendredi fonctionnait et aucune modification n'a été effectuée.J'ai utilisé une application de boussole du marché et la boussole donne des données aléatoires.

J'ai testé mon application sur une autre tablette et elle fonctionne bien.

Est-ce que quelqu'un sait pourquoi cela se produit ?Un problème avec le capteur ?Est-ce qu'il faut un calibrage ?

Était-ce utile?

La solution

J'ai beaucoup travaillé avec ces boussoles électroniques sur téléphones portables et il est fort possible qu'il n'y ait rien de mal avec votre code ou votre capteur.

Au lieu de cela, il pourrait très bien s’agir d’un problème lié à votre environnement.Il existe en permanence des champs magnétiques qui interfèrent avec les champs magnétiques terrestres.Des interférences avec les équipements électriques à la structure métallique qui soutient un bâtiment.En fin de compte, une boussole n’est qu’un aimant.Si vous vous tenez à côté d’un gros morceau de métal, la boussole sera attirée par lui et pointée vers lui plutôt que vers le pôle nord magnétique.

Essaye ça:Installer Statut GPSpuis désactivez tous les filtrages (paramètres...GPS et capteurs... filtrage des capteurs...pas de filtrage).Faites l'étalonnage (figure de 8 éléments ondulés), puis déplacez le téléphone autour de votre bureau.à proximité de moniteurs, de câbles, etc.Vous verrez, ça deviendra fou.Les informations sont totalement peu fiables.J'ai découvert par le passé que déplacer le téléphone de quelques centimètres vers la droite modifiait complètement sa lecture.La même chose se produit avec une vraie boussole.Il n’y a pas de « problème » à proprement parler.La boussole de l'appareil s'attribue le champ magnétique le plus puissant.Même le contenu magnétique des roches voisines peut interférer avec la boussole.

Comme test supplémentaire, je viens de placer une vraie boussole (d'orientation) sur mon téléphone sur laquelle une application de boussole est installée.La véritable boussole pointe désormais partout sauf vers le nord magnétique.Les deux appareils interfèrent l'un avec l'autre.

Donc mon conseil est...allez quelque part à l'air libre, comme un parc ou un champ, loin de toute interférence potentielle et des lignes électriques (si vous en avez une, apportez une vraie boussole pour vérifier que le GPS status l'application pointe dans la bonne direction) et voyez si votre boussole fonctionne comme prévu.

Supplémentaire: La réponse de @resus est également importante lors du calibrage.Faites pivoter le téléphone plusieurs fois dans chaque axe.Cela semble idiot, mais il le calibre correctement.

Supplément 2 : Serait-il possible/pratique d'utiliser le relèvement du compas de votre GPS ?Cela nécessiterait que l'appareil bouge (la vitesse de marche devrait être bonne), mais vous n'auriez pas à vous soucier d'aucune interférence.Il devrait donner une lecture précise à condition que votre signal GPS soit bon.

Supplément 3 : Une autre pensée vient de me venir à l'esprit..Vous pouvez essayer d'appliquer un filtre passe-bas au capteur.Cela signifie que les changements soudains dans la lecture du capteur sont filtrés.regarde ça répondre.Et si cela ne fait pas du bon travail, il existe de nombreux algorithmes sur le Web parmi lesquels vous pouvez choisir.

Autres conseils

Si vous n'avez absolument rien modifié dans votre code et qu'il fonctionne toujours correctement sur d'autres appareils, cela suggère un problème avec cet appareil particulier.

Pendant que votre application est en cours d'exécution (c'est-à-direla boussole est utilisée), vous devez pouvoir l'agiter en forme de 8 afin de recalibrer automatiquement la boussole.Vous devez également vous assurer que vous ne vous tenez pas à côté de gros morceaux de métal, etc.cela pourrait interférer avec les lectures.

Vous pouvez remplacer le onAccuracyChanged() méthode de SensorEventListener pour afficher un message à l'utilisateur lorsque la boussole nécessite un réétalonnage (probablement lorsque la précision chute à SENSOR_STATUS_ACCURACY_LOW).

D'après mon expérience de jeu avec la boussole sur les téléphones Android, elles peuvent être assez peu fiables...

Si votre application fonctionne sur une autre tablette et une autre application Compass ne fonctionne pas sur votre appareil, cela est probablement dû à un mauvais étalonnage.

Comme indiqué dans le poteau ci-dessus, pour effectuer l'étalonnage, invitez votre appareil sur une figure de 8. Je veux juste ajouter que vous devez le faire pour chaque axe.Cela devrait résoudre votre problème.

Si ce n'est pas une erreur d'étalonnage, certaines personnes ont déjà répondu, il est possible que la boussole ait parcouru un champ magnétique et qu'il soit désagrétisé, il ne fonctionne donc pas correctement.

Où gardez-vous habituellement la tablette?Pourrait-il être que c'était près de grands serveurs ou aimants? Vous devriez vérifier la boussole au cas où, parler au support technique de Android.

espère que cela aide.

Je pense que la question était de savoir si l'étalonnage pouvait être effectué sans envoyer de données à la boussole.Parce que tout le monde ne dit pas que la boussole est calibrée comme le montre cette vidéo : https://support.google.com/maps/answer/6145351?hl=fr et évidemment vous ne pouvez rien faire d'autre que conseiller à l'utilisateur de calibrer avant d'utiliser le programme ou lorsque vous obtenez trop de changements.Par exemple, aller à gauche et à droite de 90 degrés en 25 ms environ.

Quoi qu'il en soit, je pense qu'il est bon de donner quelques secondes à l'application avant de commencer à prendre des données, car elle donne des valeurs instables (trop hautes et trop basses en peu de temps sans mouvement) au moment du chargement de l'application.Laissez simplement le gestionnaire onSensorChanged() codé avec un conditionnel et démarrez un fil de discussion sur le onCreate() gestionnaire, qui définira un boolean à vrai, après quelques secondes.Ensuite, vous commencez à capturer des données sur le onSensorChanged() gestionnaire.

Ce fil de discussion peut également aider à détecter la précision du capteur, puis vous pouvez afficher : Sous Android, puis-je détecter par programme que la boussole n'est pas encore calibrée ?

Je le sais parce que je construis un robot en utilisant la boussole du smartphone et je vis cette expérience.Donc, si vous fabriquez un robot, assurez-vous de laisser une place espacée entre l'électronique et le matériel au smartphone, mais rappelez-vous que c'est sur n'importe quelle boussole :les champs électromagnétiques peuvent être considérablement modifiés par les métaux.

Aujourd'hui, j'ai la chance de développer un robot doté d'un HMC-5983 Et un MPU-6050, qui peut être calibré en utilisant ses bibliothèques avec Arduino.

Ce code est compatible/portable avec d'autres uController mais pas aussi simple pour les smartphones, je suppose que les décalages nécessaires pour calibrer la boussole, le gyroscope et l'accéléromètre se trouvent dans certains composants internes d'Android, non disponibles dans le SDK.

J'ai répondu avant de penser que l'étalonnage ne concernait peut-être que certains appareils, mais j'ai réalisé que cela devait être comme je l'ai déjà dit.Donc, si jouer avec des robots est possible, je veux dire que c'est aussi facile, mais lorsque vous utilisez un smartphone, peut-être qu'un firmware personnalisé comme CyanogenMod apporterait la possibilité d'étudier la manière de régler les compensations, mais plus important encore d'exécuter un programme porté à partir de Sketch ( suivant son concept uniquement) pour les obtenir en premier...

Alors bonne chance !Ce qui est également vrai, c'est que dans les deux appareils (smartphone et mon robot), il est nécessaire de les déplacer pour qu'ils fonctionnent bien, comme je vous l'ai montré dans la vidéo de la dernière réponse, également utile sur les robots.

La bonne chance et beaucoup de plaisir avec ces choses sont très puissantes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top