2

我目前正在研究如何通过加速度计值获取方向值(偏航、俯仰、滚动)。以下是我目前使用的方式,但是方向值似乎是错误的,有没有我忽略的问题或错误?非常感谢您的帮助!

if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        accelerometerValues = event.values;
    }

    if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        magneticFieldValues = event.values;
    }

    SensorManager.getRotationMatrix(rotate, null, accelerometerValues,
            magneticFieldValues);
    SensorManager.getOrientation(rotate, rotationValues);

    // change radian to degree
    rotationValues[0] = (float) Math.toDegrees(rotationValues[0]);
    rotationValues[1] = (float) Math.toDegrees(rotationValues[1]);
    rotationValues[2] = (float) Math.toDegrees(rotationValues[2]);
4

2 回答 2

1

getRotationMatrix() 和 getOrientationMatrix 使用的坐标轴不同。所以你需要旋转上面的旋转矩阵代码如下:

SensorManager.getRotationMatrix(rotate, null, accelerometerValues,
        magneticFieldValues);
SensorManager.remapCoordinateSystem(rotate, SensorManager.AXIS_X, SensorManager.AXIS_MINUS_Z, rotate); //Overwriting rotate matrix with the rotated values
SensorManager.getOrientation(rotate, rotationValues);
于 2014-05-28T22:23:23.190 回答
0

与北极相关的方向是rotationValues[2];

所以

float course = (float) Math.toDegrees(rotationValues[2]);

应该是正确的。

尝试校准(使用设备制作数字 8)并查看其他应用程序是否显示正确的方向。用指南针检查。

于 2013-02-07T17:54:04.340 回答