TYPE_ROTATION_VECTOR传感器的值在不同设备上不同

6

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

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

由于我已经在不同设备上尝试过我的应用程序,我发现传感器值与我的Nexus 5测试设备不同。在我的Samsung Galaxy Nexus和Samsung Galaxy S3 Mini上,方位角受到以下图片所示的倾斜设备的影响。

Portrait Only - No Tilting to side

TYPE_ROTATION_VECTOR正在使用传感器融合技术,这就是为什么我使用传感器测试应用程序检查了不同设备上的单个传感器值。在Nexus 5上,z轴的方向值在倾斜设备时保持基本不变,在Samsung 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);

我建议您在计算中包括陀螺仪传感器。 - Metehan Toksoy
1个回答

0

通常情况下,您需要三个角度来定义方向,并且为了将它们用于向外投射一些距离,您必须按正确的顺序使用它们,因为您将会旋转您的坐标系。我在这里回答了一个类似的问题,其中包含一些未经优化的JavaScript代码,以展示解决该问题所使用的步骤。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接