无论手机方向如何,都要使加速度垂直于重力方向。

时间:2015-04-19 05:41:43

标签: android accelerometer android-sensors magnetometer sensormanager

我试图在两个垂直于重力方向的轴上获得加速度,而不管手机的方向如何,但不太确定如何做到这一点,

我一直在研究使用TYPE_MAGNETIC_FIELD和TYPE_ROTATION_VECTOR,但无法弄清楚如何实现相同目标。

我只需要在xy平面上加速,假设重力方向在z平面内,无论手机方向如何。

先谢谢

1 个答案:

答案 0 :(得分:0)

这并不简单:)

要使用TYPE_MAGNETIC_FIELD,您应该知道地球磁场是如何定位在您的位置的,这并非易事。

您可以尝试使用TYPE_GRAVITY和TYPE_LINEAR_ACCELERATION:第一个返回重力加速度矢量,第二个设备的加速度不包括重力(它应该像LINEAR_ACCELERATION = ACCELEROMETER - GRAVITY,但我不知道精确度如何它是)。

要使重力位于z轴上,您必须执行重力矢量的旋转以使其形状为(0 0 g)...实际上,您必须找到使您的重力矢量转换的旋转矩阵。形式(0 0 g)。有关here (wikipedia)的更多信息。

获得此矩阵后,将其应用于线性加速度矢量,其x和y分量将是您要查找的分量。

如果你的手机没有这两个传感器,你必须自己计算重力和线性加速度:为此你可以实现一个高通滤波器来获得线性加速度,一个低通滤波器来获得重力矢量。有关here的更多信息。