簡単な質問: CoreMotion 値からの加速は、デバイスがテーブルに置かれていても、かなり大きなドリフトを取得します。大丈夫ですか、それとも何が間違っていますか?
長い質問: 私はそのような CoreMotion 加速度計を -init メソッドで使用しています:
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0 / 60.0;
次に、更新を開始します。
if ([motionManager isDeviceMotionAvailable])
{
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical];
}
次に、いくつかの更新メソッドで値を読み取ります (タイマーによって Cocos3d によって呼び出されます)。また、現在の加速度値を追加する静的変数 accum - アキュムレータもあります。したがって、accum はすべての加速度値の合計を保持します。
if (motionManager.deviceMotionActive)
{
CMDeviceMotion *deviceMotion = motionManager.deviceMotion;
CMAcceleration accel = deviceMotion.userAcceleration;
static CC3Vector accum = {0,0,0};
accum.x += accel.x;
accum.y += accel.y;
accum.z += accel.z;
NSLog(@"%f, %f, %f", accum.x, accum.y, accum.z);
}
iPad 3 をテーブルに置いたところ、一見すると加速値は問題ないように見えましたが、1 つの軸の累積値がかなり急速に増加し始めていることがわかります。生データから重力を取り除くことが 100% 正確ではないことはわかっていますが、iPad をテーブルに置いて動かしていなくても、これがそれほど悪いことだとは思っていませんでした。問題は、私が何か間違ったことをしているのか、それともこうあるべきかということです。