加速度计测量速度的负峰值

时间:2011-07-11 14:27:01

标签: objective-c xcode accelerometer velocity

我正在为iphone4编写一个应用程序,我正在从加速度计中获取值来计算当前从已知初始位置的移动。

我注意到一种非常奇怪的行为:经常在我拿着手机行走几米然后停下来的时候,当手机发出声响时,我会记录整体速度的负峰值。如果我继续朝着同一个方向前进,那怎么可能呢?

要计算速度的变化,我就这样做:

delta_v = (acc_previous + acc_now)/2 * (1/(updating_frequency))

4 个答案:

答案 0 :(得分:2)

假设您以10 m / s的速度移动。你的加速度为零。让我们说,为了简单起见,您每1秒进行一次采样。

如果你在0.1秒的时间内平稳减速,你可能会得到100 m / s / s的读数,或者你可能根本没有读数,因为减速可能会落在两个窗口之间。您的公式很可能不会检测到任何减速,或者如果是,您将得到两个值-50 m / s / s:(0 - 100)/ 2然后(-100 + 0)/ 2.无论哪种方式你将得到错误的最终速度。

类似的事情几乎可以在任何比例下发生,你所需要的只是短时间的高加速度或减速度,你碰巧采样并且你的数字被搞砸了。

答案 1 :(得分:2)

数值整合很难。噪声信号的朴素数值积分基本上总是产生重大误差和漂移(就像你所看到的那样)。人们已经提出了各种巧妙的方法来解决这个问题,其中大部分都需要除了加速度计之外还有一些参考信息来源(想想一个Wii控制器,它不仅有加速度计,还有顶部的东西)电视节目。)

请注意,任何MEMS加速度计都必须限于仅报告一定的加速度带;如果加速度超出该频段,那么除非你有办法补偿它,否则你绝对会得到明显的漂移。最重要的是,事实上加速度被报告为离散量,因此即使您不在窗外,也必然会出现一些近似误差和噪声。当你将所有这些因素加在一起时,一定程度的漂移是不可避免的。

答案 2 :(得分:1)

如果你在一个方向上移动任何物体,那么就会产生加速物体的力。

为了使对象再次停止,需要在完全相反的方向上施加相同的力 - 或者更准确地说,之前发生的加速度事件的向量需要与-1相乘。那是你的负面高峰。

不是严格的编程答案,但话说回答,你的问题并不是一个严格的编程问题:)

答案 3 :(得分:0)

如果它以每小时一千英里的速度运行,则其加速度为0.如果超速,则加速度为正。如果它正在减速,则加速度为负。

如果需要,您可以使用速度的绝对数来反转任何负加速度:

fabs(delta_v); // use abs for ints