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

时间:2015-10-29 18:13:50

标签: android android-sensors device-orientation azimuth sensor-fusion

我在我的应用中使用了ROTATION_VECTOR类型的传感器数据。

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

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

Portrait Only - No Tilting to side

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];

...

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);

1 个答案:

答案 0 :(得分:0)

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

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