首页 文章

Android线性加速精度

提问于
浏览
0

我有一个应用程序,我在其中轮询传感器的加速度数据并将XYZ值保存到SQL DB . Codewise非常简单:

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 ,我注意到存储到我的数据库的值的准确性相当低(只有2位小数) . 但如果我使用硬件加速度计 Sensor.TYPE_ACCELERATION 那么精度要高得多(6dp)

我的问题是,我是否错误地检索线性加速度值使我只能获得2dp的准确度?或者这只是Android中传感器融合方式的限制?如果是后者,在使用熔断传感器时,如何在滤除重力后获得更高的加速度计值精度?

1 回答

  • 0

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

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

    我建议做以下事情:

    • 尝试仅使用 one sensor 执行相同的测量并检查应用程序行为是否已更改 - 可能是多个读数导致测量不准确?

    • 尝试在不同的设备上运行此应用程序(如果有),并验证行为和准确度是否不同 - 传感器的准确度在不同的设备上可能不同?

    • 检查数据库中的准确性和数据类型,并验证它是否正确处理更准确的数据

    如果您在应用上述建议后没有发现任何差异,我认为我们无法做任何有关提高传感器读数准确度的事情 .

    此外,我前段时间使用Nexus 5和Nexus 6在Android上使用传感器进行了一些实验,我发现不同的传感器具有不同的精度,您也注意到了 . 据我所知,我们无法从Android SDK API级别控制它 .

相关问题