【问题标题】:Is there any way to remove the small bias along the gravity axis in the accelerometer data有什么方法可以消除加速度计数据中沿重力轴的小偏差
【发布时间】:2012-02-22 21:37:18
【问题描述】:

类似于这个问题: CMDeviceMotion userAcceleration drift

我在 iOS5 SDK 中使用 CMDeviceMotion.userAcceleration 来绘制其 x、y、z 分量随时间的变化。像上面的帖子一样,当我的 iPhone 4s 坐在平坦的表面上时,我看到 z 加速度分量总是显示小的正值 (0.005 - 0.015),而 x 和 y 分量沿零 (-0.005 - 0.005) 居中。

即使我的手机没有移动一点,这个小偏差也会不断增加估计的速度(我通过整合加速度数据来计算)。有没有已知的方法可以从加速度计数据中消除这种偏差?我不能简单地从 z 分量中减去偏置,因为如果设备处于某个任意方向,偏置似乎会沿着重力轴分布在 x y 和 z 上。

我知道 CMDeviceMotion.userAcceleration 中的数据已经使用 Gyro 数据排除了重力,但想知道是否有任何有效的方法可以消除这种残留偏差?

【问题讨论】:

    标签: iphone ios5 accelerometer core-motion


    【解决方案1】:

    老问题,但我想分享一些见解。加速度计中的部分偏差实际上并非来自传感器的任何不准确,而是来自苹果对计算的疏忽。计算假设重力始终为 1 G(定义为 9.80665 m/s2)。任何剩余的都必须是用户加速。

    但是,gravity varies slightly 遍布全球。如果您所在区域的重力不完全是 9.80665 m/s2,那么用户加速度会有一个小的偏差,可以使用低通滤波器检测到。这种偏差可以通过以下计算消除:

    - (void) handleDeviceMotion:(CMDeviceMotion *)m atTime:(NSDate *)time
    {
        // calculate user acceleration in the direction of gravity
        double verticalAcceleration = m.gravity.x * m.userAcceleration.x + 
                                      m.gravity.y * m.userAcceleration.y +  
                                      m.gravity.z * m.userAcceleration.z;
    
        // update the bias in low pass filter (bias is an object variable)
        double delta = verticalAcceleration - bias;
        if (ABS(delta) < 0.1) bias += 0.01 * delta;
    
        // remove bias from user acceleration
        CMAcceleration acceleration;
        acceleration.x = m.userAcceleration.x - bias * m.gravity.x;
        acceleration.y = m.userAcceleration.y - bias * m.gravity.y;
        acceleration.z = m.userAcceleration.z - bias * m.gravity.z;
    
        // do something with acceleration
    }
    

    请注意,即使消除了这种偏差,仍然会有很多噪音,并且每个加速度计芯片也可能存在不同的制造偏差。因此,您仍然很难从中得出速度和位置。

    【讨论】:

      【解决方案2】:

      感谢 Ali 更新您的答案和其他参考资料。他们确实帮助我理解了这个问题(我很惊讶地看到有多少人对这个问题感兴趣)。我可能听起来有点固执,但我仍然认为我没有从任何地方找到原始问题的答案。现在让我们忘记集成。随着更多的实验,当我对用户加速度数据随时间进行平均时,我在 x 和 y 轴上也看到了一些恒定的偏差(尽管甚至更小)。我只是想知道是否有任何方法可以从我从 iOS5 CMDeviceMotion 获得的“用户”加速数据中消除这些偏差。如果它们是由陀螺仪在过滤掉重力过程中的白噪声引起的,我想我们可能会在用户加速度计数据中看到随机噪声,但不会看到那些偏差。但根据我目前的印象,这些偏差似乎是由加速度计和陀螺仪的有限“准确性”引起的,尽管我不是 100% 确定,但我们对此无能为力。我试图将我的印象放在评论中(不在答案部分),但不允许,因为它太长了,但我想知道有多少人会通过投票来支持我的印象,所以我决定把它放在答案部分。 ..对不起,如果我有点漫无边际。

      【讨论】:

      • 平均加速度以获得“偏差”,然后应用1/2 at^2 is 积分。公式1/2 cx^2 是对常数c 积分两次的一般结果。请接受阿里的回答。顺便说一句,除非每次测量的误差都相同,否则它不是偏差。
      【解决方案3】:

      首先,您需要一些不会漂移的外部参考,例如 GPS。然后你必须执行传感器融合(卡尔曼滤波器浮现在脑海中)。否则无法消除偏差,积分误差将无限增长。

      更新:您不能仅通过整合加速度来获得相对位移,请参阅我对Android accelerometer accuracy (Inertial navigation) 的回答。但是,我会在此处给出一些示例,您实际上可以做什么。

      如果您查看我的答案,您会发现是陀螺仪白噪声使集成无望。

      【讨论】:

      • 感谢您的回复。需要明确的是,我正在寻找一种方法来有效地消除原始加速度计数据中的偏差(目前不是积分误差)。如果它需要任何校准步骤也没关系,但不确定卡尔曼滤波器对这种情况有何帮助。
      • @atisman MEMS 传感器总是会漂移,它们对温度变化很敏感,而且您对此无能为力...如果您没有集成,那么为什么小的偏差会导致你的问题?你想做什么?
      • 目前,我只是想了解这些传感器和相关的 iOS API 以及我能从中得到什么。我最初的目标是尽可能准确地获得 iPhone 任意两个位置的相对位移。但是在这种恒定的正偏差下,即使不考虑积分步骤中的任何误差,位移误差似乎也太大了。例如,0.0015 g/s^2 的量将在 1 秒后(基于公式 1/2at^2)产生约 7.35 厘米的位移,而手机没有任何移动。
      • 好的,我更新了答案。我自己尝试了集成,得出的结论是:令人惊讶的是,陀螺仪白噪声使它变得不可能,而不是加速度计偏差。请检查我的更新答案。
      猜你喜欢
      • 2023-01-05
      • 2011-03-23
      • 2015-08-12
      • 1970-01-01
      • 2015-01-16
      • 2012-09-18
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多