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

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

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

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

由于我在不同的设备上试用了我的应用,我发现传感器值与我的 Nexus 5 测试设备不同。在我的 Samsung Galaxy Nexus 和 Samsung 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);

最佳答案

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

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

关于android - TYPE_ROTATION_VECTOR 的传感器值在不同设备上不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33421714/

相关文章:

ios - 在设备方向更改时更改 UIView/UIViewController

javascript - 使用 droidscript 保存 Canvas 图像

android - Android 中的 Webview 建立内存

javascript - 标准化设备方向数据

java - Android Sensor.getType() 检查有时不正确

java - Android(大)在浮点值产品上失败

ios - 以编程方式在 viewdidload 中设置方向不起作用

java - Geocoder.isPresent() 未定义 Geocoder 类型

android - 带 Webview 的全屏 Activity 仍会在顶部显示状态栏

android - 使用 android cmake 添加传感器链接器