6

我在我的应用程序中使用 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];

...

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

1 回答 1

0

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

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

于 2018-10-17T19:26:48.043 回答