Je cherchais à mettre en œuvre un système de navigation inertielle pour un téléphone Android, ce qui, je me rends compte, est difficile étant donné la précision de l'accéléromètre et la fluctuation constante des lectures.
Pour commencer, j'ai placé le téléphone sur une surface plane et j'ai échantillonné 1000 lectures d'accéléromètre dans les directions X et Y (parallèles à la table, donc aucune gravité n'agissant dans ces directions). J'ai ensuite fait la moyenne de ces lectures et utilisé cette valeur pour calibrer le téléphone (en soustrayant cette valeur de chaque lecture ultérieure).
J'ai ensuite testé le système en le plaçant à nouveau sur la table et en échantillonnant 5000 lectures d'accéléromètre dans les directions X et Y. Je m'attendrais, compte tenu de l'étalonnage, à ce que ces accélérations totalisent 0 (environ) dans chaque direction. Cependant, ce n'est pas le cas, et l'accélération totale sur 5000 itérations est loin d'être proche de 0 (en moyenne autour de 10 sur chaque axe).
Je me rends compte que sans voir mon code, il peut être difficile de répondre mais dans un sens plus général ...
Est-ce simplement un exemple de l'inexactitude des lectures de l'accéléromètre sur un téléphone mobile (HTC Desire S), ou est-il plus probable que j'ai commis des erreurs dans mon codage?
la source
Réponses:
Vous obtenez la position en intégrant l'accélération linéaire deux fois mais l'erreur est horrible. C'est inutile en pratique.
Voici une explication pourquoi (Google Tech Talk) sur 23:20 . Je recommande vivement cette vidéo.
Ce n'est pas le bruit de l'accéléromètre qui cause le problème mais le bruit blanc gyroscope , voir la sous-section 6.2.3 Propagation des erreurs. (Au fait, vous aurez également besoin des gyroscopes.)
En ce qui concerne le positionnement en intérieur, j'ai trouvé ceux-ci utiles:
Localisation et suivi en intérieur basés sur RSSI à l'aide de Sigma-Point Kalman Smoothers
Suivi des piétons avec capteurs inertiels montés sur chaussures
Amélioration des performances des podomètres à l'aide d'un seul accéléromètre
Je n'ai aucune idée de la façon dont ces méthodes fonctionneraient dans des applications réelles ou comment les transformer en une belle application Android.
Une question similaire est la suivante .
METTRE À JOUR:
Apparemment, il existe une version plus récente que celle d'Oliver J. Woodman ci-dessus, "Une introduction à la navigation inertielle", sa thèse de doctorat:
Localisation des piétons pour les environnements intérieurs
la source
Je réfléchis simplement à voix haute et je n'ai pas encore joué avec une API d'accéléromètre Android, alors soyez patient.
Tout d'abord, traditionnellement, pour obtenir la navigation à partir d'accéléromètres, vous auriez besoin d'un accéléromètre à 6 axes. Vous avez besoin d'accélérations en X, Y et Z, mais aussi de rotations Xr, Yr et Zr. Sans les données de rotation, vous ne disposez pas de suffisamment de données pour établir un vecteur à moins que vous ne supposiez que l'appareil ne change jamais d'attitude, ce qui serait assez limitant. Personne ne lit le TOS de toute façon.
Oh, et vous savez que l'INS dérive avec la rotation de la terre, non? Alors il y a ça aussi. Une heure plus tard, vous grimpez mystérieusement sur une pente de 15 ° dans l'espace. Cela suppose que vous disposiez d'un INS capable de maintenir l'emplacement aussi longtemps, ce qu'un téléphone ne peut pas encore faire.
Une meilleure façon d'utiliser des accéléromètres - même avec un accéléromètre à 3 axes - pour la navigation serait de se connecter au GPS pour étalonner l'INS chaque fois que possible. Là où le GPS n'est pas à la hauteur, l'INS complimente bien. Le GPS peut soudainement vous tirer à 3 pâtés de maisons parce que vous vous êtes trop près d'un arbre. INS n'est pas génial, mais au moins il sait que vous n'avez pas été touché par un météore.
Ce que vous pouvez faire, c'est enregistrer les données de l'accéléromètre du téléphone, et une grande partie. Comme des semaines. Comparez-les avec de bonnes données GPS (je veux dire vraiment bonnes) et utilisez l'exploration de données pour établir la corrélation des tendances entre les données de l'accéléromètre et les données GPS connues. (Conseil de pro: vous voudrez vérifier l'almanach GPS pendant des jours avec une bonne géométrie et beaucoup de satellites. Certains jours, vous pouvez n'avoir que 4 satellites et ce n'est pas suffisant) Ce que vous pourriez faire est de trouver que quand une personne marche avec son téléphone dans sa poche, les données de l'accéléromètre enregistrent un schéma très spécifique. Sur la base de l'exploration de données, vous établissez un profil pour cet appareil, avec cet utilisateur, et quel type de vitesse ce modèle représente lorsqu'il disposait de données GPS pour l'accompagner. Vous devriez être capable de détecter les virages, monter les escaliers, s'asseoir (calibrage à 0 temps de vitesse! ) et diverses autres tâches. La façon dont le téléphone est tenu devrait être traitée comme des entrées de données entièrement séparées. Je sens un réseau neuronal utilisé pour faire le data mining. Quelque chose de aveugle à ce que signifient les entrées, en d'autres termes. L'algorithme ne rechercherait que les tendances des modèles et ne prêterait pas vraiment attention aux mesures réelles de l'INS. Tout ce qu'il saurait, c'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 cela ferait avancer la pièce en conséquence. Il est important qu'il soit complètement aveugle, car le simple fait de mettre un téléphone dans votre poche peut être orienté dans l'une des 4 orientations différentes, et 8 si vous changez de poche. Et il existe également de nombreuses façons de tenir votre téléphone. Nous parlons ici de beaucoup de données.Vous aurez évidemment encore beaucoup de dérive, mais je pense que vous aurez plus de chance de cette façon car l'appareil saura quand vous avez arrêté de marcher, et la dérive de position ne se perpétuera pas. Il sait que vous vous tenez immobile sur la base des données historiques. Les systèmes INS traditionnels n'ont pas cette fonctionnalité. La dérive se perpétue à toutes les mesures futures et se compose de manière exponentielle. Une précision impie, ou avoir une navigation secondaire à vérifier à intervalles réguliers, est absolument vitale avec les INS traditionnels.
Chaque appareil et chaque personne devrait avoir son propre profil. C'est beaucoup de données et beaucoup de calculs. Tout le monde marche à des vitesses différentes, avec des étapes différentes, et met son téléphone dans différentes poches, etc. Il est certain que la mise en œuvre de cela dans le monde réel nécessiterait une gestion des nombres côté serveur.
Si vous avez utilisé le GPS pour la ligne de base initiale, une partie du problème est que le GPS a tendance à avoir ses propres migrations au fil du temps, mais ce sont des erreurs qui ne se perpétuent pas. Installez un récepteur au même endroit et enregistrez les données. S'il n'y a pas de corrections WAAS, vous pouvez facilement obtenir des correctifs de localisation dérivant dans des directions aléatoires à 100 pieds autour de vous. Avec WAAS, peut-être jusqu'à 6 pieds. Vous pourriez en fait avoir plus de chance avec un système RTK sous-mètre sur un sac à dos pour au moins obtenir l'algorithme de l'ANN.
Vous aurez toujours une dérive angulaire avec l'INS en utilisant ma méthode. C'est un problème. Mais, si vous êtes allé aussi loin pour créer un ANN pour déverser pendant des semaines des données GPS et INS parmi n utilisateurs, et que vous l'avez fait fonctionner jusqu'à présent, cela ne vous dérange évidemment pas pour le moment. Continuez sur cette voie et utilisez plus de données pour aider à résoudre la dérive angulaire: les gens sont des créatures d'habitude. Nous faisons à peu près les mêmes choses, comme marcher sur les trottoirs, franchir les portes, monter les escaliers, et ne pas faire des choses folles comme traverser les autoroutes, traverser les murs ou sortir des balcons.
Supposons donc que vous preniez une page de Big Brother et que vous commenciez à stocker des données sur la destination des gens. Vous pouvez commencer à cartographier les endroits où les gens devraient marcher. Il y a fort à parier que si l'utilisateur commence à monter les escaliers, elle se trouve au même pied que la personne avant elle. Après 1000 itérations et quelques ajustements aux moindres carrés, votre base de données sait à peu près où se trouvent ces escaliers avec une grande précision. Vous pouvez maintenant corriger la dérive angulaire et l'emplacement lorsque la personne commence à marcher. Lorsqu'elle atteint ces escaliers, tourne dans ce couloir ou descend un trottoir, toute dérive peut être corrigée. Votre base de données contiendrait des secteurs pondérés par la probabilité qu'une personne s'y promène ou que cet utilisateur y ait marché dans le passé. Les bases de données spatiales sont optimisées pour cela en utilisant
divide and conquer
de n'allouer que des secteurs significatifs. Ce serait un peu comme ces projets du MIT où le robot équipé d'un laser commence par une image noire et peint le labyrinthe en mémoire en prenant chaque tour, éclairant où se trouvent tous les murs.Les zones à fort trafic auraient des poids plus élevés, et les zones où personne n'a jamais été à 0 poids. Les zones à trafic élevé ont une résolution plus élevée. Vous vous retrouveriez essentiellement avec une carte de partout où quelqu'un a été et vous l'utiliserez comme modèle de prédiction.
Je ne serais pas surpris si vous pouviez déterminer quel siège une personne a pris dans un théâtre en utilisant cette méthode. Avec suffisamment d'utilisateurs pour le cinéma et une résolution suffisante, vous auriez des données mappant chaque rangée du cinéma et la largeur de chaque rangée. Plus il y a de personnes qui visitent un lieu, plus la fidélité avec laquelle vous pouvez prédire que cette personne se trouve est élevée.
De plus, je vous recommande vivement de vous abonner (gratuitement) au magazine GPS World si vous êtes intéressé par les recherches actuelles sur ce genre de choses. Chaque mois, je me débrouille avec ça.
la source
Je ne sais pas à quel point votre décalage est important, car vous avez oublié d'inclure des unités. ("Environ 10 sur chaque axe" ne dit pas grand-chose.: P) Cela dit, c'est toujours probablement dû à une imprécision dans le matériel.
L'accéléromètre convient pour des choses comme la détermination de l'orientation du téléphone par rapport à la gravité, ou la détection de gestes (secouer ou cogner le téléphone, etc.)
Cependant, essayer de faire de l'estime à l'aide de l'accéléromètre vous exposera à de nombreuses erreurs composées. Dans le cas contraire, l'accéléromètre devrait être incroyablement précis, et ce n'est pas un cas d'utilisation courant, donc je doute que les fabricants de matériel optimisent pour cela.
la source
L'accéléromètre Android est numérique, il échantillonne l'accélération en utilisant le même nombre de "seaux", disons qu'il y a 256 seaux et l'accéléromètre est capable de détecter de -2g à + 2g. Cela signifie que votre sortie serait quantifiée en termes de ces "compartiments" et sauterait autour d'un ensemble de valeurs.
Pour calibrer un accéléromètre Android, vous devez échantillonner plus de 1000 points et trouver le "mode" autour duquel l'accéléromètre fluctue. Ensuite, trouvez le nombre de points numériques en fonction de la fluctuation de la sortie et utilisez-le pour votre filtrage.
Je recommande le filtrage de Kalman une fois que vous obtenez le mode et les fluctuations +/-.
la source
Je me rends compte que c'est assez ancien, mais le problème en question n'est abordé dans AUCUNE des réponses données.
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 signalera l'accélération due à la gravité qui est approximativement
9.80665 m/s2
, donnant ainsi le 10 que vous voyez. Les capteurs sont inexacts, mais ils ne sont pas SI inexacts! Voir ici pour quelques liens utiles et des informations sur le capteur que vous recherchez.la source
Vous faites l'hypothèse que les lectures de l'accéléromètre dans les directions X et Y, qui dans ce cas sont entièrement du bruit matériel, formeraient une distribution normale autour de votre moyenne. Ce n'est apparemment pas le cas.
Une chose que vous pouvez essayer est de tracer ces valeurs sur un graphique et de voir si un modèle émerge. Sinon, le bruit est statistiquement aléatoire et ne peut pas être calibré, du moins pour le matériel de votre téléphone.
la source