6

我想知道如何正确使用“旋转矢量传感器”的输出。目前我想出了以下内容并想从 计算偏航和俯仰result[],以便知道设备指向的位置(处于横向模式)。但我对结果有疑问。偏航计算非常精确,但俯仰表现很奇怪。也许任何人都可以为我指出如何使用数据的正确方向。我还想知道的另一件事是设备方向(横向或纵向)是否对该传感器的输出有任何影响。提前致谢。

private double max = Math.PI / 2 - 0.01;
private double min = -max;

private float[] rotationVectorAction(float[] values) {
    float[] result = new float[3];
    float vec[] = values;
    float quat[] = new float[4];
    float[] orientation = new float[3];
    SensorManager.getQuaternionFromVector(quat, vec);
    float[] rotMat = new float[9];
    SensorManager.getRotationMatrixFromVector(rotMat, quat);
    SensorManager.getOrientation(rotMat, orientation);
    result[0] = (float) orientation[0];
    result[1] = (float) orientation[1];
    result[2] = (float) orientation[2];     
    return result;
}

private void main () {
    float[] result = rotationVectorAction(sensorInput);
    yaw = result[0];
    pitch = result[1];
    pitch = (float) Math.max(min, pitch);
    pitch = (float) Math.min(max, pitch);
    float dx = (float) (Math.sin(yaw) * (-Math.cos(pitch)));
    float dy = (float) Math.sin(pitch);
    float dz = (float) (Math.cos(yaw) * Math.cos(pitch));
}

在 OpenGL ES 2.0 中,我设置它来移动我的相机:

Matrix.setLookAtM(mVMatrix, 0, 0, 0, 0, dx, dy, dz, 0, 1, 0);
4

3 回答 3

4

最后我自己解决了。音高无法正常工作的原因是 INPUT 和 OUTPUT 之间的差异SensorManager.getQuaternionFromVector(quat, vec);。该方法期望一个向量vec(x|y|z|w)输出quat看起来像这样(w|x|y|z)。在我的情况下,我只需将quat数组的第一个值移动到末尾,它就像一个魅力。

于 2013-05-28T11:15:27.800 回答
3

上面的解决方案对我没有帮助。提出删除SensorManager.getQuaternionFromVector(quat, vec);作为文档状态的SensorManager.getRotationMatrixFromVector()要求ROTATION_VECTOR传感器返回的旋转向量。

private float[] rotationVectorAction(float[] values) 
{
    float[] result = new float[3];
    float vec[] = values;
    float[] orientation = new float[3];
    float[] rotMat = new float[9];
    SensorManager.getRotationMatrixFromVector(rotMat, vec);
    SensorManager.getOrientation(rotMat, orientation);
    result[0] = (float) orientation[0]; //Yaw
    result[1] = (float) orientation[1]; //Pitch
    result[2] = (float) orientation[2]; //Roll
    return result;
}
于 2014-05-30T14:49:18.397 回答
0

我可以回答这个问题的一部分。

设备方向对传感器输出没有影响,因为传感器始终与设备的默认方向相关。但是,要在屏幕上绘制诸如指向北方的指南针箭头之类的东西,您需要考虑设备方向,因为如果设备不在默认方向。

于 2013-05-27T08:18:48.560 回答