使用安卓的线性加速度还是应用低通滤波器

6
我正在尝试确定使用Android的线性加速度数据与仅应用低通滤波器的好处,如Android API参考中所述,并在这个stackoverflow问题中讨论。
我之所以问这个问题,是因为我正在寻找一个免费的应用程序来记录线性加速度(以及满足我的其他要求(采样率,将数据写入文件等...))。我还没有找到一个,所以我考虑使用一个记录标准加速计数据的应用程序,然后将低通滤波器应用于数据。或者,我也可以编写自己的应用程序来完成我需要的功能-但我在Android开发方面没有太多经验,这需要一些时间。

低通滤波器通常是个坏主意,特别是如果你可以访问线性加速度。你想做什么?为什么需要加速度? - Ali
我只是想记录和分析在同时进行多个动作时的典型加速度曲线。幸运的是,我找到了一个使用线性加速度计的免费应用程序。我发现线性加速度计和普通加速度计之间存在差异,因为普通加速度计返回高达2G的读数(通过调用getMaxRange()函数进行确认)。然而,尽管其getMaxRange()函数返回2G,线性加速度计返回高达3G的读数。我非常困惑。如果有帮助的话,我是在三星Galaxy S2上看到这一切的。 - dgldy
3G是合理的,想想就知道。最大可测量的是2G,在去除重力(1G)后,在某些情况下确实可以得到3G,这取决于方向。换句话说:加速度=重力+线性加速度,不要忘记它们是具有符号的向量!它们的长度可以根据您编写的方式确定。 - Ali
1个回答

14

我已经深入研究了这个主题,可能能够帮助您指明正确的方向。

正如其他人所提到的,只有一些手机实现了TYPE_LINEAR_ACCELERATION和TYPE_GRAVITY,并且它们通常配备陀螺仪。即使Droid Razr也拥有陀螺仪,但他们从未费心去实现它或者TYPE_LINEAR_ACCELERATION。我相信GS2已经实现了TYPE_LINEAR_ACCELERATION,但没有陀螺仪,因此他们必须使用磁传感器或某种低通滤波器。这可能令人沮丧。

在大多数带有陀螺仪的手机上,加速度传感器和陀螺仪之间存在某种融合(可能是互补滤波器来补偿漂移,然后是四元数或欧拉角来隔离重力)。这些融合和过滤器可以以不同的方式实现并使用不同的硬件等...... 延迟和精度会因设备而异,因此TYPE_LINEAR_ACCELERATION并不总会产生相同的结果。

如果您没有带有TYPE_LINEAR_ACCELERATION的手机,则只能使用TYPE_ACCELERATION,该传感器无法分离重力(倾斜)和线性加速度。

一个选项是应用低通滤波器。这可能有效也可能无效,具体取决于您的应用程序。我编写了一个免费应用程序来帮助开发人员和其他感兴趣的人探索低通滤波器选项。

另一个选择是测量设备静态时的倾斜角度,然后在设备不静止时应用重力测量值。如果设备没有经常更改方向,则这可能是一个非常快速简单的选择。

一种极好的替代传感器融合方法是使用磁传感器而不是陀螺仪。此选项将适用于几乎所有设备,假设磁场未受硬或软铁畸变的影响。

我已经在开源项目Acceleration Explorer中实现了所有这些方法。


不错的答案,但目前所有的Github链接都失效了。 - mcy
1
最近正在整合项目。已更新 :) - Kaleb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接