TYPE_ROTATION_VECTOR的传感器值与不同设备的传感器值不同

RuN*_*Y87 6 android azimuth device-orientation android-sensors sensor-fusion

我在我的应用程序中使用ROTATION_VECTOR类型的传感器数据.

使用我的Nexus 5,我可以从方向[0]获得方位角,并且可以使手机朝向下图所示的范围(这是非常准确的).

由于我在不同的设备上尝试了我的应用程序,我发现传感器值与我的Nexus 5测试设备不同.在我的三星Galaxy Nexus和三星Galaxy S3 Mini上,方位角受到倾斜设备的影响,如图所示.

仅限肖像 - 没有倾斜

TYPE_ROTATION_VECTOR正在使用传感器融合,这就是我使用传感器测试应用检查不同设备上的单个传感器值的原因.在Nexus 5上,当倾斜设备时,z轴的方向值保持大致相同,在三星Galaxy Nexus上,z的值在倾斜时变化(从直立到躺着大约90°).我担心传感器融合正在使用这些值,这就是为什么我的方位角在不同的设备上是不同的.

有没有人遇到类似的情况,甚至更重要的是:有没有人有解决方法或不同的方式来接收方位角?

为了确保,我寻找后置摄像头指向的方向......

这是我的代码:

final float[] mRotationMatrix = new float[9];
final float[] mRotationMatrixFromVector = new float[9];
final float[] orientation = new float[3];
Run Code Online (Sandbox Code Playgroud)

...

SensorManager.getRotationMatrixFromVector(mRotationMatrixFromVector,
                event.values);

// enables usable range like in picture
SensorManager.remapCoordinateSystem(mRotationMatrixFromVector,
                        SensorManager.AXIS_X, SensorManager.AXIS_Z,
                        mRotationMatrix);

SensorManager.getOrientation(mRotationMatrix, orientation);
Run Code Online (Sandbox Code Playgroud)

wor*_*gon 0

通常有三个角度定义方向,并且要使用它们向外投影一定距离,您必须以正确的顺序使用它们,因为您将旋转轴系统。我在这里回答了一个类似的问题,这可能会对您有所帮助——那里有一些 javascript 代码,我没有对其进行优化,以显示解决该问题所使用的步骤。

通常,方位角位于地球参考系中,您可以单独使用它。但并非所有情况都如此。如果您怀疑您的方位角受到高度的影响,那么很可能(假设他们不仅仅是将数字标记错误!)他们为您提供的角度应该以不同的顺序使用,并且您'我们必须弄清楚它们的应用顺序。一旦你有了正确的顺序,按该顺序应用三个角度(请参阅我的其他答案),然后旋转的 X 轴在 XY 平面上的投影就是实际的方位角。