简短的问题:即使设备放在桌子上,CoreMotion 值的加速度也会产生相当大的漂移。没关系还是我做错了什么?
长问题:我在 -init 方法中使用这样的 CoreMotion 加速度计:
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 放在桌子上,乍一看,加速度值似乎没问题,但很明显,一个轴上的累积值开始迅速增加。我知道,从原始数据中去除重力并不是 100% 准确的,但我没想到即使 iPad 放在桌子上不动,情况也会如此糟糕。所以问题是我做错了什么还是应该是这样?