Android 传感器管理器旋转矢量 (TYPE_ROTATION_VECTOR) 不可靠/慢

Android Sensor Manager Rotation Vector (TYPE_ROTATION_VECTOR) unreliable / slow

我目前在读取 Android 旋转向量的值时遇到一些问题。正如 Android 文档所解释的那样,旋转矢量是陀螺仪、磁力计和加速度计的传感器融合组合。当设备平放时,旋转矢量的参考坐标系为X朝东,Y朝北,Z垂直。

所有提到的特征都是正确的并且适用于我的应用程序。

现在的问题是:旋转矢量似乎有一部分不准确。首先,旋转矢量的值似乎落后于实际移动,其次,这些值确实受到设备快速移动的影响。

为了排除我的实施所造成的任何错误,还测试了来自 google 的演示应用程序。源代码位于 here。同样在此演示中,旋转矢量在快速运动中似乎部分滞后且不可靠。

其他人是否遇到过 Android 旋转向量的问题?

这是我的做法: 注册传感器和监听器:

sensorManager.registerListener(this, gravitySensor, SensorManager.SENSOR_DELAY_FASTEST, handler)

读取值并创建用于 OpenGL 渲染的旋转矩阵:

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
        SensorManager.getRotationMatrixFromVector(rotationMatrix4D, event.values);
    }
}

编辑: 我正在 Samsung Galaxy S3 Mini 上开发。也许只是设备的传感器不太好。

在不同设备上深入研究 Android 的旋转矢量后,我发现这个传感器确实不准确。

所以有很多可能性来获得更准确和稳定的方向。 1.随着时间的推移平滑旋转矢量 2. 使用 Ratation Vector 执行传感器融合,例如陀螺仪。

我的方法是存储初始旋转矢量,然后使用陀螺仪计算设备的实际方向。由于陀螺仪很可能会受到漂移的影响,我每隔几秒就重新设置方向,即旋转矢量的方向。