Android线性加速精度



我有一个应用程序,我在其中轮询传感器以获取加速度数据,并将XYZ值保存到SQL数据库中。代码方面非常简单:

public void onSensorChanged(SensorEvent event) {
        sensor = event.sensor;
        int i = sensor.getType();
        if (i == MainActivity.TYPE_ACCELEROMETER) {
            accelerometerMatrix = event.values;
        } else if (i == MainActivity.TYPE_GYROSCOPE) {
            gyroscopeMatrix = event.values;
        } else if (i == MainActivity.TYPE_GRAVITY) {
            gravityMatrix = event.values;
        } else if (i == MainActivity.TYPE_MAGNETIC) {
            magneticMatrix = event.values;
        }
        //insert into database
    }

MainActivity.TYPE_ACCELEROMETER只是我在MainActivity类中设置的一个字段。

如果我将其设置为Sensor.TYPE_LINEAR_ACCELERATION,我会注意到存储到DB中的值的准确性相当低(只有小数点后两位)。但如果我使用硬件加速度计Sensor.TYPE_ACCELERATION,则精度要高得多(6dp)

我的问题是,我是否错误地检索了线性加速度值,导致我只能获得2dp的精度?或者这只是安卓系统中传感器融合方式的限制?如果是后者,在过滤掉重力后,在使用融合传感器时,我如何获得更高精度的加速度计值?

据我所知,您无法更改Android上硬件传感器的准确性。只能使用SensorManager类中的registerListener()方法调整采样周期,或者使用SensorEventListener接口中的onAccuracyChanged()回调来监测精度变化。

看起来您在代码片段中正确地检索了传感器读数。

我建议做以下事情:

  • 尝试仅使用一个传感器执行相同的测量,并且检查应用程序行为是否发生了变化——可能有多个读数是否导致测量不准确
  • 如果你有一个不同的设备,试着在另一个设备上运行这个应用程序,并验证行为和准确性是否不同——也许不同设备上传感器的准确性不同
  • 检查数据库中的准确性和数据类型,并验证它是否正确处理了更准确的数据

如果你在应用上述建议后没有注意到任何差异,我认为我们无法提高传感器读数的准确性。

此外,不久前,我在安卓系统上使用Nexus 5和Nexus 6进行了一些传感器实验,我发现不同的传感器具有不同的精度,正如您所注意到的。据我所知,我们无法从Android SDK API级别控制这一点。

最新更新