Android加速度计精度(惯性导航)

时间:2011-10-19 22:40:49

标签: android physics accelerometer acceleration calibration

我正在研究为Android手机实施惯性导航系统,我认识到加速度计的准确性和读数的不断波动很难实现。

首先,我将手机放在平坦的表面上,并在X和Y方向上取样1000个加速度计读数(平行于桌子,因此没有重力作用于这些方向)。然后我平均这些读数并使用此值来校准手机(从每个后续读数中减去此值)。

然后我再次将它放在桌面上并在X和Y方向上采样5000个加速度计读数来测试系统。在给定校准时,我预计这些加速度应该在每个方向上加起来为0(大致)。然而,事实并非如此,超过5000次迭代的总加速度远不及0(每个轴平均大约10)。

我意识到在没有看到我的代码的情况下,这可能很难回答,但在更一般的意义上......

这仅仅是移动电话(HTC Desire S)上加速度计读数不准确的一个例子,还是我的编码中出现错误的可能性更大?

5 个答案:

答案 0 :(得分:122)

通过将线性加速度积分两次得到位置,但错误很可怕。它在实践中毫无用处。

an explanation why (Google Tech Talk)位于23:20。我强烈推荐这个视频。

导致问题的加速度计噪声不是gyro white noise,请参阅6.2.3小节错误的传播。 (顺便说一下,你也需要陀螺仪。)

至于室内定位,我发现这些有用:

RSSI-Based Indoor Localization and Tracking Using Sigma-Point Kalman Smoothers

Pedestrian Tracking with Shoe-Mounted Inertial Sensors

Enhancing the Performance of Pedometers Using a Single Accelerometer

我不知道这些方法在现实应用程序中的表现如何,或者如何将它们变成一个不错的Android应用程序。

类似的问题是this

<强>更新

显然有一个比上面的Oliver J. Woodman更新的版本,“惯性导航的介绍”,他的博士论文:

Pedestrian Localisation for Indoor Environments

答案 1 :(得分:8)

我不确定你的偏移有多好,因为你忘了包含单位。 (“每个轴上大约10个”并没有多说。:P)那说,它仍然可能是由于硬件不准确。

加速度计适用于确定手机相对于重力的方向,或检测手势(摇晃或撞击手机等)的事情。

但是,尝试使用加速度计进行航位推算会使您遇到很多复合错误。加速度计需要非常精确,否则这不是常见的用例,所以我怀疑硬件制造商正在优化它。

答案 2 :(得分:7)

Android加速度计是数字的,它使用相同数量的“桶”来采样加速,假设有256个桶,加速度计能够从-2g到+ 2g进行感应。这意味着您的输出将根据这些“桶”进行量化,并且会跳过某些值。

要校准Android加速度计,您需要采样超过1000个点并找到加速度计波动的“模式”。然后根据输出波动的数量找出数字点的数量,并将其用于过滤。

一旦你得到模式和+/-波动,我建议卡尔曼过滤。

答案 3 :(得分:5)

我意识到这已经很老了,但是在给出的任何答案中都没有解决手头的问题。

您所看到的是设备的线性加速度,包括重力的影响。如果您将手机放在平坦的表面上,传感器将报告由于重力引起的加速度,大约为9.80665 m/s2,因此给出了您所看到的10。传感器不准确,但它们并不准确!有关您可能会遇到的传感器的一些有用链接和信息,请参阅here

答案 4 :(得分:0)

您假设X和Y方向上的加速度计读数(在这种情况下完全是硬件噪声)会在您的平均值附近形成正态分布。显然情况并非如此。

您可以尝试的一件事是在图表上绘制这些值,看看是否出现任何模式。如果没有,则噪声在统计上是随机的,无法校准 - 至少对于您的特定手机硬件而言。