通过加速度计获取方向值

时间:2013-02-07 17:49:45

标签: android accelerometer

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

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

所以

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

应该是正确的。

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