【问题标题】:Using Android's Linear Acceleration versus applying a low pass filter使用 Android 的线性加速与应用低通滤波器
【发布时间】:2016-03-30 21:04:16
【问题描述】:

我正在尝试确定使用 Android 的线性加速度数据的好处,而不是像 in Androids API reference 和讨论的 in this other stackoverflow question 那样简单地应用低通滤波器。

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

【问题讨论】:

  • 低通滤波器通常是个坏主意,尤其是当您可以使用线性加速度时。你想干什么?为什么需要加速?
  • 我只是尝试在执行同时动作时记录和分析典型的加速度曲线。幸运的是,我找到了一个使用线性加速度计的免费应用程序。我发现线性加速度计和普通加速度计之间存在差异,因为普通加速度计返回的读数高达 2G(这通过调用 getMaxRange() 函数得到确认)。然而,线性加速度计返回高达 3G 的读数——尽管它的 getMaxRange() 函数返回 2G。我很困惑。如果有帮助,我在三星 Galaxy S2 上看到了所有这些。
  • 3G是合理的,想想看。您可以测量的最大值是 2G,在消除重力 (1G) 后,在某些情况下,您确实可以获得 3G,具体取决于方向。换句话说:acceleration = gravity + linear-acceleration 并且不要忘记这些是带有符号的向量!长度确实可以是你写它的方式。

标签: android filtering accelerometer uiaccelerometer


【解决方案1】:

我已经深入探讨了这个主题,也许可以帮助您指出正确的方向。

正如其他人所提到的,只有部分手机实现了 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 链接都已损坏。
  • 最近正在整合项目。更新。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2014-10-24
  • 2013-09-12
相关资源
最近更新 更多