26

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

4

4 回答 4

50

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

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

四元数的计算效率也更高。您无需调用昂贵的三角函数即可将四元数旋转应用于向量。如果未提供 w 坐标,您仍然可以通过一个 sqrt 调用来计算 w,相比之下,三个 sin 和三个 cos 函数调用三个角度欧拉形式的方向坐标。

简短的故事:方向型传感器做错了。通过用 ROTATION 传感器替换它们,它们在 API 9 中得到修复。

于 2013-09-20T06:32:12.473 回答
20

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

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

不幸的是,我无法提供任何示例如何使用 ROTATION_VECTOR 传感器数据,因为我现在正在调查中:)

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

于 2013-01-02T19:10:44.803 回答
1

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

在这里查看方向传感器的代码。方向传感器的函数参数是旋转矩阵,该矩阵又是从旋转向量(quats 表示)中计算出来的

于 2018-03-14T19:21:50.107 回答
0

在廉价的 Android 手机(与高端 iPhone 不同)上,指南针仅在手机方向接近水平(即与地面平行)时才能工作。

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

于 2018-06-04T18:43:48.140 回答