Android中旋转矢量传感器和方向传感器之间的概念差异是什么?

时间:2012-12-25 17:53:52

标签: android android-sensors android-orientation

Android提供旋转矢量传感器和方向传感器。我知道它们会返回不同的数据,因为对于矢量传感器,我们有角度,在方向传感器中我们有角度。但是概念上的区别是什么?我从文档中无法理解。哪一个提供了三维空间中设备的方向?我很困惑!

4 个答案:

答案 0 :(得分:42)

旧的ORIENTATION传感器使用三个角度报告方向。这种坐标系统的问题在于它遭受“万向节锁定”:当实际方向矢量接近垂直时,其中一个坐标变为90或-90度,其余两个坐标变得无法解释或危险地非规范化。

较新的ROTATION传感器使用四分之一坐标报告方向,使用起来比较复杂,但不会受到万向节锁定问题的影响。使用四元数坐标报告方向时,无论方向如何,都可以确定设备的精确方向。

四元数也更具计算效率。您不需要调用昂贵的trig函数来将四元数旋转应用于向量。如果没有提供w坐标,你仍然可以使用单个sqrt调用计算w,相比之下,三角度欧拉形式的三个sin和三个cos函数调用方向坐标。

短篇小说:ORIENTATION风格的传感器做错了。它们在API 9中修复,用ROTATION传感器替换它们。

答案 1 :(得分:18)

ROTATION_VECTOR传感器在API 9中引入,代表“虚拟”传感器,它结合了来自不同传感器(通常为ACCELEROMETER,GEOMAGNETIC_FIELD和GYROSCOPE)的数据,并进行了一些智能计算,以提供更准确的数据,而不是使用来自ACCEL和GEOMAGNETIC_FIELD传感器的原始数据。这被称为“传感器融合”。您可以找到here

的更多信息

ORIENTATION传感器已弃用,因为它提供的数据不是很准确。文档建议使用来自ACCELEROMETER和GEOMAGNETIC_FIELD传感器的原始数据。

不幸的是,我现在无法提供任何关于如何使用ROTATION_VECTOR传感器数据的示例:)

万一你需要一些如何使用原始数据的例子 - 随时问我 - 我会发布一些例子,但简单的谷歌搜索可以帮助你更好;)

答案 2 :(得分:0)

它们在概念上是相同的,只是代表性的不同。

查看方向传感器here的代码。 方向传感器的函数参数是旋转矩阵,其中inturn是根据旋转矢量计算的(quats表示)

答案 3 :(得分:0)

在廉价的Android手机上(与高端iPhone不同),只有当手机方向接近水平(即平行于地面)时,罗盘才会起作用。

从技术上讲,一个好的指南针(即一个漂浮的磁球)应该可以在任何方向工作,但便宜的指南针不应该。因此,要使用指南针,请在使用MAGNETOMETER之前通过查看ACCELEROMETER确保手机处于水平状态。希望Google将来会使用更好的磁力计!