首页 > 解决方案 > 即使明显错误,旋转矢量传感器也能保持高精度报告

问题描述

我正在使用这样的旋转矢量传感器:

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,即使有时它显然是错误的(例如在车内)。然而,谷歌地图和其他应用程序在这些情况下的准确性很低。

这些其他应用程序使用什么来确定指南针方向的实际准确性?

标签: androidkotlinandroid-sensors

解决方案


推荐阅读