【问题标题】:Equivalent replacement for deprecated Sensor.TYPE_ORIENTATION已弃用 Sensor.TYPE_ORIENTATION 的等效替换
【发布时间】:2016-12-09 18:54:30
【问题描述】:

我正在寻找替代已弃用的 Android 传感器 Sensor.TYPE_ORIENTATION 的解决方案。

报道最多的解决方案是结合Sensor.TYPE_ACCELEROMETERSensor.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算法内部是怎么做的?

【问题讨论】:

    标签: android android-sensors


    【解决方案1】:

    getOrientation 中的 azimuth 是磁北与设备 y 轴在世界 x-y 平面中的投影之间的角度。当设备达到 90° 时,投影是零矢量,因此在这种情况下方位角没有意义,可以是任何值。从物理上讲,试图找到磁北与指向天空的矢量之间的角度是没有意义的。 你应该看看我的项目https://github.com/hoananguyen/dsensor/blob/master/dsensor/src/main/java/com/hoan/dsensor_master/DProcessedSensor.java

    【讨论】:

    • 如何检测正确的方向和旋转横向/纵向?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多