【发布时间】:2016-12-09 18:54:30
【问题描述】:
我正在寻找替代已弃用的 Android 传感器 Sensor.TYPE_ORIENTATION 的解决方案。
报道最多的解决方案是结合Sensor.TYPE_ACCELEROMETER和Sensor.TYPE_MAGNETIC_FIELD,然后使用SensorManager#getRotationMatrix计算旋转矩阵,使用SensorManager#getOrientation得到欧拉角。
另一个报告的解决方案是使用Sensor.TYPE_ROTATION_VECTOR,它还使用SensorManager#getOrientation 得到一个旋转矩阵和欧拉角
不幸的是,在旋转移动设备时,它们的行为与TYPE_ORIENTATION 完全不同。当您的手机放在桌子上时尝试这两种类型,然后将其调高(俯仰)至 90°(屏幕现在直接面向您)。计算出的方位角和滚动的欧拉角变得非常疯狂(原因称为Gimbal lock 问题),而使用TYPE_ORIENTATION 检索的度数值非常稳定(不准确但还可以)。 TYPE_ORIENTATION 的每个值(偏航、俯仰和滚动)似乎都是某种“投影”度,没有万向节锁定问题。
在不使用已折旧的TYPE_ORIENTATION 传感器(可能来自旋转矩阵)的情况下获得相似度数(偏航、滚动和俯仰)的方法是什么? TYPE_ORIENTATION算法内部是怎么做的?
【问题讨论】: