使用Accelerometer和Magnetometer进行Android Tilt问题

时间:2015-06-02 20:50:12

标签: android accelerometer magnetometer tilt

我正试图检测Yaw,Pitch&使用以下代码滚动:

    @Override
    public void onSensorChanged(SensorEvent event) {

        if (event.sensor == mAccelerometer) {
            System.arraycopy(event.values.clone(), 0, mLastAccelerometer, 0, event.values.length);
            mLastAccelerometerSet = true;
        } else if (event.sensor == mMagnetometer) {
            System.arraycopy(event.values.clone(), 0, mLastMagnetometer, 0, event.values.length);
            mLastMagnetometerSet = true;
        }
        if (mLastAccelerometerSet && mLastMagnetometerSet) {
            SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer);
            SensorManager.getOrientation(mR, mOrientation);

            mOrientation[0] = (float) Math.toDegrees(mOrientation[0]);
            mOrientation[1] = (float) Math.toDegrees(mOrientation[1]);
            mOrientation[2] = (float) Math.toDegrees(mOrientation[2]);

            mLastAccelerometerSet = false;
            mLastMagnetometerSet = false;
            ManageSensorChanges();
        }
    }

除了一个问题之外,这个工作正常;

当手机上下颠倒或开始上下颠倒时(即使在纵向模式下向前倾斜一点),角度也会变得混乱......吐出随机角度!

为什么会发生这种情况 - 以及 - 解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果有人遇到这个问题:

Strange behavior with android orientation sensor

总之,问题在于使用欧拉角 - 所以除了使用四元数(适用于OpenGL或3D)之外,几乎无法在设备的极端角度对上述问题进行排序。突起)。

我正在使用它在我的应用程序上进行2D绘图(以创建视差效果),所以我最终使用了Accelerometer值(范围显然是-9.8到9.8)...它工作得很好并且是一个烦人的简单解决方案为了我的原始需求。这种技术不适用于3D投影......如果需要精确测量,请参阅https://bitbucket.org/apacha/sensor-fusion-demo