2012-03-26 1 views
0

J'ai expérimenté avec CMDeviceMotion, et en particulier avec startDeviceMotionUpdatesUsingReferenceFrame. Les valeurs de magneticField ne me semblent pas correctes.La propriété MagneticField de CMDeviceMotion est-elle incorrecte?

Par exemple, si je fais:

CMDeviceMotion *manager = [[CMDeviceMotion alloc] init]; 
manager.deviceMotionUpdateInterval = 0.1; 
[manager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:queue withHandler:^(CMDeviceMotion *motion, NSError *error) { 
    CMMagneticField fld = motion.magneticField.field; 
    NSLog(@"%5.1f %5.1f %5.1f", fld.x, fld.y, fld.z); 
    [self handleDeviceMotion:manager.deviceMotion]; 
}];  

il montre un vecteur champ magnétique avec une taille d'environ 50, mais presque aligné avec gravité. Autrement dit, lorsque l'appareil est à plat sur une table, x et y sont proches de zéro, et z est proche de -50, indépendamment de la façon dont je fais tourner l'appareil.

Le 50 aurait la taille correcte pour le champ magnétique de la Terre (selon Wikipedia devrait être entre 25 et 65 micro Tesla), mais la direction du vecteur semble tout faux. Je me demandais si:

  • Il est quelque chose de particulier à mon endroit que (Stockholm, Suède), ou
  • La propriété champ magnétique disponible restant sur le champ magnétique sans champ de la terre, ou
  • Ceci est bug

Avez-vous des expériences similaires avec la propriété magneticField?

+0

Au moins pour une partie de votre question, le [docs] (http://developer.apple.com/library/ios/DOCUMENTATION/CoreMotion/Reference/CMDeviceMotion_Class/Reference/Reference.html#//apple_ref/occ/ instp/CMDeviceMotion/magneticField) sont vos amis: "... vous donne le champ magnétique total dans le voisinage de l'appareil sans biais de l'appareil ... ces valeurs reflètent le champ magnétique de la Terre plus les champs environnants, moins biais de l'appareil." – rickster

+0

Vrai, mais le vrai comportement ne semble pas être selon les docs ... – fishinear

+1

Votre question m'a inspiré de jouer avec le magnétomètre moi-même ... J'ai essayé ce code (n'utilisant pas le cadre de référence de votre réponse depuis que je suis intéressé par la direction de champ relative à l'appareil), mais tout ce que je vois est <0,0,0>. Ai-je manqué quelque chose qui n'est pas dans votre extrait? – rickster

Répondre

2

OK, le mystère est résolu.

J'ai maintenant utilisé un cadre de référence CMAttitudeReferenceFrameXTrueNorthZVertical, qui donne des résultats similaires à ceux de ... XArbirtraryCorrectedZVertical que j'ai utilisé auparavant. Ensuite, j'ai calculé comment le vecteur magneticField est positionné par rapport à la gravité, en le retournant à la frame de référence en utilisant l'attitude donnée.

Il s'avère que le champ magnétique est assez stable pointant 5 degrés à l'est du nord vrai, mais avec un angle d'environ 73 degrés dans le sol. Et c'est exactement selon l'attente pour mon emplacement en Suède, selon this map.

+0

Ouais. Ils ne vous apprennent pas celui à l'école :-) La plupart des vecteurs de champ magnétique de la Terre pointent directement dans le sol - du moins, c'est là où je vis (en Grande-Bretagne). – Benjohn

Questions connexes