0

我已经实现了一个包含以下传感器的应用程序:

  • 加速度计
  • 磁场
  • 方向(已弃用)
  • 陀螺仪
  • 重力

这是 onSensorChanged() 方法的示例代码:

        @Override
    public void onSensorChanged(SensorEvent event) {
        int type = event.sensor.getType();

        if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
            if (type == Sensor.TYPE_GYROSCOPE) {
                // Log.e(TAG, "Unreliable gyroscope");
            } else if (type == Sensor.TYPE_GRAVITY) {
                // Log.e(TAG, "Unreliable gravity");
            }
            return;
        }

        if (type == Sensor.TYPE_ACCELEROMETER) {
            mmAcceleration = event.values.clone();
        } else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
            mmGeomagnetic = event.values.clone();
        } else if (type == Sensor.TYPE_GYROSCOPE) {
            mmRotation = event.values.clone();
        } else if (type == Sensor.TYPE_ORIENTATION) {
            mmOrientation = event.values.clone();
        } else if (type == Sensor.TYPE_GRAVITY) {
            mmGravity = event.values.clone();
        }

        if (mmAcceleration != null && mmGeomagnetic != null
                && mmOrientation != null) {

                            // Handling the data ...

            mmAcceleration = null;
            mmGeomagnetic = null;
            mmRotation = null;
            mmOrientation = null;
            mmGravity = null;
        }
    }

我尝试过代码的设备是 HTC One S。我已经在 3 个独立设备上尝试过。此外,我已经多次校准 G 传感器,然后启动了应用程序,但我仍然得到不可靠的结果。我也尝试过校准,重新启动手机然后再次校准,甚至在重新启动后直接运行我的应用程序。其他传感器工作正常。我也尝试过不同的环境(室内),并且我没有靠近任何干扰源。

对于陀螺仪和重力(使用陀螺仪)传感器,我仍然得到不可靠的(SENSOR_STATUS_UNRELIABLE)结果。

您对可能出现的问题有什么建议吗?

先感谢您。

4

1 回答 1

0

我认为您可能想要对加速度计数据和陀螺仪数据应用“互补滤波器”或“卡尔曼滤波器”......这应该可以解决问题......

于 2016-06-27T15:59:29.077 回答