可能重复:
Getting displacement from accelerometer data with Core Motion
Android accelerometer accuracy (Inertial navigation)
我正在尝试使用核心运动用户加速度值,并将它们进行双重积分以得出所覆盖的距离。我将iPhone沿Y轴线性移动,与桌面上的30厘米日志标尺对齐。首先,我让设备静止10秒钟,然后通过平均相应的用户加速度值来计算沿三个轴的偏移量。 当我尝试计算所覆盖的距离时,从加速度值中减去X,Y和Z偏移。在偏移减法之后,这些值当然分别通过低通滤波器和中值滤波器。滤波器是线性滤波器,截止频率由相邻值的数量指定,相邻值的平均值采用低通,中值采用中值滤波器。我已经尝试了从1到100的不同数值。最后,使用梯形法则对这些滤波值进行双重积分以获得距离。但是,计算出的距离不会接近30厘米。我得到的最接近的值是-22厘米(我想知道为什么我得到负值,即使我在正Y方向移动设备)。我也遇到过这个: http://ajnaware.wordpress.com/2008/09/05/accelerating-iphones/ 它是一个关于同样事物的旧帖子,它说返回的加速计读数似乎是大约0.18m / s ^ 2(即大约0.018g)的量子,很快就会产生很大的累积误差。因此,为了使这个错误无关紧要,人们必须将设备加速几乎1.8m / s ^ 2,这对于距离/长度测量来说几乎是不可能的。对于小的运动,看起来不像通过使用最佳滤波器和更高阶数值积分方法来计算距离,而没有像这样的不切实际的速度/加速度约束。可能吗? 如何使用我的加速度与时间戳数据来插值随时间增长的多项式,因为我得到越来越多的运动更新,这代表了近似于加速度与时间的曲线。多项式的双重积分将是一块蛋糕。但是,对于小距离,多项式将具有较大的误差分量。使用我的设备将要经历的可预测的已知运动,我希望采用大量快照(计算的距离与实际已知距离)以类似的方式计算我的误差多项式,然后从我的第一个多项式中减去它。这可以吗?
答案 0 :(得分:3)
虽然这不适合StackOverflow,因为它不是一个问题而是一个讨论,我会试着总结一下我的想法。
正如已经说过的那样,加速度计非常不准确,您需要非常好的准确性来完成这类任务,特别是如果您要测量这么短的距离。此外,加速度计因设备而异,对于使用不同设备的相同动作,您将获得不同的结果。加上一个非常大的随机错误。
我的猜测是,您可以通过校准设备并进行“测量移动”几次(例如10次)来消除大部分随机性/错误。之后,您有足够的数据来获得可能接近实际值的平均值。
校准是这里的一个关键部分,您必须考虑一种聪明的校准方法,例如让用户以不同的速度在不同的距离上移动设备。
但这一切只是理论。我真的很想看到你的结果,但我怀疑你使用最好的滤波器/算法让它运行得足够好,因为噪音太大了。