2011-11-06 1 views
0

L'axe X et Y du magnétomètre peut être utilisé pour calculer le cap du nord lorsque le téléphone est au niveau du sol local. Mais lorsque vous roulez ou tanguez le téléphone, nous devrions utiliser le degré de roulis et le pas pour éliminer l'erreur d'inclinaison.Quelqu'un peut-il me dire si le capteur de gravité est comme un capteur d'inclinaison pour améliorer la précision de cap?

Maintenant, je veux savoir si le capteur de gravité est utilisé comme capteur d'inclinaison pour obtenir le roulis et la pente pour aider à améliorer la précision du cap vers le nord?

Répondre

3

Ici, je décris comment obtenir l'orientation de l'appareil par rapport au plan horizontal et au nord magnétique. C'est juste 1 ligne de code pour obtenir le cap magnétique de l'orientation (matrice de rotation).

prendre les mesures de l'accéléromètre et de magnétomètre un et m que trois vecteurs dimensionnels. Le a x mcross-product indique Orient ou Ouest, quelle que soit l'orientation du téléphone. Que le produit croisé pointe vers l'Est ou l'Ouest dépend de vos conventions de signe (vers le haut est positif ou négatif) et de la rectitude de votre système de coordonnées (gauche ou droitier).

Vous pouvez appliquer au moins a simple moving average à vos données avant de calculer le produit croisé.

En général, it is not a good idea pour utiliser le roulis, le tangage et le lacet, alors ne le faites pas. De toute façon, vous n'en avez pas besoin.

L'accéléromètre lecture un, le produit croisé un x m, et le produit croisé de la lecture de l'accéléromètre et le produit croisé un x (un x m) donne vous 3 vecteurs perpendiculaires par paires. Faites-en les vecteurs unitaires en les multipliant par l'inverse de leur longueur respective. Ces 3 vecteurs d'unité vous donneront a rotation matrix.

La matrice de rotation est équivalente à l'orientation du périphérique. Dans ma demande, le titre magnétique était atan2(R[Y][Y], R[Y][X]) où R est la matrice de rotation. Vous devrez peut-être prendre différents éléments de la matrice de rotation et peut-être modifier les signes, selon les conventions que vous suivez.

Si l'API de l'appareil fournit la matrice de rotation, il suffit de saisir la ligne magnétique pour obtenir le cap magnétique.

+0

Typiquement, je peux obtenir le roulis et la hauteur de l'accéléromètre lorsque le téléphone est statique. Cependant, lorsque le téléphone est en mouvement, le roulis et le ton que je reçois ne sont pas précis. Votre méthode est également inexacte lorsque le téléphone n'est pas stable. Et je pense que votre méthode ressemble beaucoup à la méthode suivante (f et q sont roll et pitch). XH = X * cos (f) + Y * sin (q) * sin (f) - Z * cos (q) * sin (f) YH = Y * cos (q) + Z * sin (q) Azimut = arcTan (YH/XH) –

+0

Eh bien, vous avez seulement mentionné les accéléromètres. Si vous avez aussi des gyroscopes, vous pouvez le rendre très précis. La solution de contournement est un filtrage de moyenne mobile si vous n'avez pas de gyroscopes, cela améliore un peu. Je n'utilise pas de roulis et de hauteur. Dans mon application j'utilise les gyros et les matrices de rotation, ça fonctionne comme un charme :) – Ali

Questions connexes