android - 即使明显错误,旋转矢量传感器也能保持高精度报告
问题描述
我正在使用这样的旋转矢量传感器:
val sensor = sensorManager.getDefaultSensor(TYPE_ROTATION_VECTOR)
我在上面注册了一个SensorEventListener
:
private class OrientationListener : SensorEventListener {
private val rotationMatrix = FloatArray(9)
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type != TYPE_ROTATION_VECTOR) return
SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values)
val easting = rotationMatrix[0]
val northing = rotationMatrix[3]
val azimuth = -atan2(northing, easting)
val azimuthAccuracy = event.accuracy
debug { "Azimuth changed to ${azimuth}, accuracy ${azimuthAccuracy}" }
}
}
override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
if (sensor.type == TYPE_ROTATION_VECTOR) {
info { "Azimuth accuracy changed to $accuracy" }
}
}
}
我从未观察到此代码报告除了 之外的任何内容SENSOR_STATUS_ACCURACY_HIGH
,即使有时它显然是错误的(例如在车内)。然而,谷歌地图和其他应用程序在这些情况下的准确性很低。
这些其他应用程序使用什么来确定指南针方向的实际准确性?
解决方案
推荐阅读
- mongodb - 如果存在则更新,如果不在 mongodb 中则插入
- linux - Ubuntu 下的 Qt - 输入重音符号
- laravel - 如何在流明中从 mongo db 中检索数据
- flutter - 在颤动中使用相机包没有点击和预览图片
- azure-pipelines - 无法在 Azure 上为 ARM64 上的模块构建映像以用于 iotedge 管道
- r - 由 / 分隔的嵌套列表的列
- php - Wordpress wp_send_json_success() 成功返回 undefined
- sql - 连接两个表以保留选定的值和空值
- python - 终端找不到 PyCharm 中导入的模块
- python - 获取主键 django 的问题