0

私はCMDeviceMotion、特にstartDeviceMotionUpdatesUsingReferenceFrameを試してきました。その中のmagnetFieldの値は私には正しくないようです。

たとえば、私がそうする場合:

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];
}];       

サイズは約50のmagnetFieldベクトルを示していますが、重力とほぼ一致しています。つまり、デバイスがテーブル上に平らに置かれている場合、デバイスの回転方法に関係なく、xとyはゼロに近く、zは-50に近くなります。

50は地球の磁場のサイズとしては正しいでしょう(ウィキペディアによると25から65マイクロテスラの間でなければなりません)が、ベクトルの方向はすべて間違っているようです。私は疑問に思っていました:

  • それは私の場所だけ(ストックホルム、スウェーデン)で独特なものです、または
  • MagneticFieldプロパティは、地球の磁場なしで残っている磁場を示します。
  • これはバグです

MagneticFieldプロパティについて同様の経験がありますか?

4

1 に答える 1

2

OK、謎は解けました。

ここで、参照フレームCMAttitudeReferenceFrameXTrueNorthZVerticalを使用しました。これにより、以前に使用した...XArbirtraryCorrectedZVerticalと同様の結果が得られます。次に、与えられた姿勢を使用して参照フレームに回転して戻すことにより、magnetFieldベクトルが重力に対してどのように配置されるかを計算しました。

マグネティックフィールドは、真北の東5度をかなり安定して指していることがわかりますが、地面に対して約73度の角度を持っています。そして、この地図によると、それはスウェーデンでの私の場所への期待に正確に一致しています。

于 2012-03-28T09:46:07.217 に答える