0

搜索了一段时间后,我没有找到任何方法将平移加速度方向与旋转隔离。

我正在寻找一种方法来获得与手机旋转方式无关的加速度方向(当然也与手机的旋转方式无关)。

基本上,这将使我能够在加速、减速和方向改变之间做出区分。

我试图用从中获得的角度来补偿加速度传感器角度,getOrientation但我试验getOrientation了当设备具有平移运动(加速度)时角度(方位角、俯仰和滚动)是不一样的。

我需要两者之一:无论设备如何旋转,加速度方向或方向值,无论设备如何加速。

这甚至可能吗?

4

1 回答 1

1

终于我们找到了!

通过Android文档我们可以得到旋转矩阵(getRotationMatrix)来改变手机的坐标系:旋转矩阵R将一个向量从设备坐标系转换到世界坐标系。

但是在参数文档中说(这里是测验):

重力 - 是一个包含 3 个浮点数的数组,其中包含以设备坐标表示的重力矢量。您可以简单地使用 TYPE_ACCELEROMETER 类型的 Sensor 的 SensorEvent 返回的值。

那么,如果您使用文档中的加速度计值作为旋转矩阵的参数,那么加速度当然会受到影响,而移动平移和矩阵将毫无用处。

而不是使用加速度计传感器值,您必须使用重力传感器值(类型为 TYPE_GRAVITY 的传感器

由于此传感器不受移动平移的影响,因此可以在平移移动时使用旋转矩阵。

最后,适用于我们的代码是:

float[] trueacceleration = new float[4];
float[] R = new float[16];
float[] RINV = new float[16];    

SensorManager.getRotationMatrix(R, I, GRAVITY, geomagnetic);
Matrix.invertM(RINV, 0, R, 0);          
Matrix.multiplyMV(trueAcceleration, 0, RINV, 0, linearAcceleration, 0);

在哪里

  • GRAVITY 是具有来自 TYPE_GRAVITY 传感器的值的向量,
  • geomangetic 是一个向量,其值来自 TYPE_MAGNETIC_FIELD 传感器,并且
  • linearAcceleration 是一个向量,其值来自 TYPE_LINEAR_ACCELERATION 传感器

然后在 trueAcceleration 向量中,无论移动设备如何移动其方向,我们都会在移动平移中获得加速度。

于 2013-06-03T15:15:48.360 回答