Android 直线加速精度
Android linear acceleration accuracy
我有一个应用程序,我在其中轮询传感器以获取加速度数据并将 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 class 中设置的一个字段。
如果我将其设置为 Sensor.TYPE_LINEAR_ACCELERATION
,我注意到存储到我的数据库中的值的准确性相当低(只有 2 位小数)。但是如果我使用硬件加速度计 Sensor.TYPE_ACCELERATION
那么精度会高得多 (6dp)
我的问题是,我是否错误地检索了线性加速度值,导致我只能获得 2dp 的精度?或者这只是 Android 中传感器如何融合在一起的限制?如果是后者,在过滤掉重力后,如何在使用融合传感器时获得更高的加速度计值精度?
据我所知,您无法更改 Android 上硬件传感器的精度。您只能通过 SensorEventListener
接口的 registerListener() method from SensorManager
class or monitor accuracy change with onAccuracyChanged() 回调来调整采样周期。
看起来您在代码段中正确检索了传感器读数。
我建议做以下事情:
- 尝试仅使用 一个传感器 执行相同的测量,并且
检查应用程序行为是否已更改 - 可能是多个读数
导致测量不准确?
- 尝试 运行 在另一台设备上运行此应用程序(如果您有)并验证行为和准确度是否不同 - 传感器的准确度可能在不同设备上不同?
- 检查数据库中的准确性和数据类型,并验证它是否能正确处理更准确的数据
如果您在应用上述建议后没有发现任何差异,我认为我们无法提高传感器读数的准确性。
此外,我前段时间使用 Nexus 5 和 Nexus 6 在 Android 上对传感器进行了一些实验,我发现不同的传感器具有不同的精度,正如您也注意到的那样。据我所知,我们无法从 Android SDK API 级别控制它。
我有一个应用程序,我在其中轮询传感器以获取加速度数据并将 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 class 中设置的一个字段。
如果我将其设置为 Sensor.TYPE_LINEAR_ACCELERATION
,我注意到存储到我的数据库中的值的准确性相当低(只有 2 位小数)。但是如果我使用硬件加速度计 Sensor.TYPE_ACCELERATION
那么精度会高得多 (6dp)
我的问题是,我是否错误地检索了线性加速度值,导致我只能获得 2dp 的精度?或者这只是 Android 中传感器如何融合在一起的限制?如果是后者,在过滤掉重力后,如何在使用融合传感器时获得更高的加速度计值精度?
据我所知,您无法更改 Android 上硬件传感器的精度。您只能通过 SensorEventListener
接口的 registerListener() method from SensorManager
class or monitor accuracy change with onAccuracyChanged() 回调来调整采样周期。
看起来您在代码段中正确检索了传感器读数。
我建议做以下事情:
- 尝试仅使用 一个传感器 执行相同的测量,并且 检查应用程序行为是否已更改 - 可能是多个读数 导致测量不准确?
- 尝试 运行 在另一台设备上运行此应用程序(如果您有)并验证行为和准确度是否不同 - 传感器的准确度可能在不同设备上不同?
- 检查数据库中的准确性和数据类型,并验证它是否能正确处理更准确的数据
如果您在应用上述建议后没有发现任何差异,我认为我们无法提高传感器读数的准确性。
此外,我前段时间使用 Nexus 5 和 Nexus 6 在 Android 上对传感器进行了一些实验,我发现不同的传感器具有不同的精度,正如您也注意到的那样。据我所知,我们无法从 Android SDK API 级别控制它。