android - 使用 Android 的线性加速与应用低通滤波器

标签 android filtering accelerometer uiaccelerometer

我正在尝试确定使用 Android 的线性加速数据与简单地应用低通滤波器所带来的好处 in Androids API reference并讨论了in this other stackoverflow question .

我问这个问题是因为我正在尝试获取一个记录线性加速度的免费应用程序(以及满足我的其他要求(采样率、将数据写入文件等...))。我一直没能找到,所以我考虑只使用一个使用标准加速度计进行记录的应用程序,然后我将简单地对数据应用低通滤波器。或者,我可以编写自己的应用程序来完成我需要的事情 - 但我在 Android 开发方面没有太多经验,这需要一些时间。

最佳答案

我已经对这个主题进行了一定程度的探讨,我也许可以帮助您指明正确的方向。

正如其他人所提到的,只有一些手机实现了 TYPE_LINEAR_ACCELERATION 和 TYPE_GRAVITY,并且它们通常配备了陀螺仪。 Droid Razr 甚至有一个陀螺仪,但他们从来没有费心去实现它或 TYPE_LINEAR_ACCELERATION。我相信 GS2 实现了 TYPE_LINEAR_ACCELERATION,但没有陀螺仪,所以他们一定使用了磁传感器或某种低通滤波器。这可能令人沮丧。

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

如果您的手机没有支持 TYPE_LINEAR_ACCELERATION,那么您只能使用 TYPE_ACCELERATION,它无法将重力(倾斜)与线性加速度分开。

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

另一种选择是仅在设备静止时测量设备的倾斜度,然后在设备非静止时应用该重力测量。如果设备不经常改变方向,这可能是一个很好的选择,因为它非常快速和简单。

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

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

关于android - 使用 Android 的线性加速与应用低通滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17263256/

相关文章:

android - 导航和路由 Flutter

http - 添加到服务器响应但未从服务器返回的 WCF 自定义 HTTP header

iphone - 如何改进 2D 横向卷轴 iPhone 游戏的 "smoothness"?

java - 在android中的切换按钮上重叠文本

android - 如何在所有情况下保持 Android GridView 的位置?

c++ - Savitzky Golay 过滤器的零填充不适用于 C++ 数字配方

accelerometer - 如何通过 Apple TV Siri Remote 检测颠簸

android - 加速度计似乎只能工作几秒钟?

构建 NativeScript 项目时出现 java.util.zip.zipException

filtering - 如何从 Google Places API 结果中排除某些类型/类别?