代码之家  ›  专栏  ›  技术社区  ›  Apollo giaset

CM加速计数据始终为负值

  •  1
  • Apollo giaset  · 技术社区  · 11 年前

    我试图检测用户何时将手机向下移动,何时将手机向上移动。手机只能上下移动(没有左右移动)

    我在记录加速度数据,但它总是负值,即使我向后移动。这是为什么?

    [_motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init]
                                         withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
                                             dispatch_async(dispatch_get_main_queue(), ^{
                                                 [self performSelectorOnMainThread:@selector(update:) withObject:accelerometerData waitUntilDone:NO];
                                             });
    

    -更新:

    - (void)update:(CMAccelerometerData *)accelData {
          NSLog(@"acceldata.z %f",accelData.acceleration.z);
    }
    

    示例数据

    2014-03-14 02:24:02.973 myApp[16294:60b] acceldata.z -0.863266
    2014-03-14 02:24:02.993 myApp[16294:60b] acceldata.z -0.855530
    2014-03-14 02:24:03.004 myApp[16294:60b] acceldata.z -0.853592
    2014-03-14 02:24:03.024 myApp[16294:60b] acceldata.z -0.793396
    2014-03-14 02:24:03.043 myApp[16294:60b] acceldata.z -0.774567
    2014-03-14 02:24:03.053 myApp[16294:60b] acceldata.z -0.749664
    2014-03-14 02:24:03.072 myApp[16294:60b] acceldata.z -0.716141
    2014-03-14 02:24:03.082 myApp[16294:60b] acceldata.z -0.733749
    2014-03-14 02:24:03.102 myApp[16294:60b] acceldata.z -0.752518
    
    2 回复  |  直到 11 年前
        1
  •  1
  •   matt    11 年前

    问题是重力是一种加速度,它永远不会停止。(实际上,我认为这是一件好事。)用户的运动“隐藏”在用户加速度(基于肌肉的运动)和重力的组合中。这是因为您使用的是原始加速计数据。这样做有点愚蠢。

    你可以用高通滤波器大致过滤掉重力。苹果有很多示例代码显示如何做到这一点。

    然而,使用CMDeviceMotion更明智( startDeviceMotionUpdatesUsingReferenceFrame: ),这会给你一个 userAcceleration 属性,该属性已经执行了比您可能执行的过滤更准确、延迟更少的过滤。

        2
  •  0
  •   mbm29414    11 年前

    iOS返回的加速度数据是“标准化”的,其中值1.0表示与地球重力相等。也就是说,一部面朝上放在桌子上的手机会始终返回大约-1.0的“Z”值(你永远不会得到静态值;即使手机完全处于静止状态,它也会不断发生轻微变化)。

    这个 acceleration.z 您的价值 CMAccelerometerData object表示垂直于手机正面/背面的轴。

    根据你的数据(-0.86到-0.71),你正在将手机屏幕移向地球中心。如果没有X轴和Y轴的值,很难确切地知道发生了什么。基本上,值-0.8表示z轴正以0.2*9.8m/s的速度向地心加速。

    如果您想要正值,请向下翻转手机屏幕。或者,你可以“放下”手机,使其向下加速度超过地球重力的加速度。

    如果手机不完全垂直于地球重力,你应该使用这三个值来确定加速度矢量。