3

我正在使用react-native-sensor从传感器中获取原始数据。

setUpdateIntervalForType(SensorTypes.gyroscope, 100)

gyroscope.subscribe(({ x, y, z, timestamp }) => {
  let pitch = Math.atan2(-x, -z) * 180 / Math.PI;// In degrees
  let roll = Math.atan2(-y, -x) * 180 / Math.PI;// In degrees
  let yaw = Math.atan2(y, -z) * 180 / Math.PI;// In degrees
  
  this.setState({pitch: pitch, roll: roll, yaw: yaw})
})

我怎么知道设备被旋转 360

4

1 回答 1

6

一点理论

一般来说,陀螺仪测量旋转运动。我们手机中包含的大多数传感器都会专门测量角速度。这意味着在大多数情况下,输出将描述手机随着时间的推移旋转了多少,通常以度/秒( °/s) 表示。

您可以围绕 3 个轴旋转:x、y 和 z。在 MATLAB 文档中有一张很好的图片:

电话轴表示

还有 3 个重要概念(您在代码段中使用):pitchrollyaw(或azimuth)。MATLAB 文档再次派上用场。他们在“更多关于”部分中对其进行了很好的描述,但我建议阅读整篇文章。

弄脏你的手

据我所知,react-native-sensors库将准确返回 degree per second。这意味着,使用提供的时间戳,您可以尝试计算手机在任何时间增量内围绕任何轴旋转了多少。你只需要保存值和时间戳,做一些转换,你就会得到结果。然而,这将需要额外的时间和内存。

有一种更简单的方法,您可能在阅读随附的文章后已经意识到这一点。根据您要旋转的轴,使用俯仰、滚动或偏航。

此外,如果您使用该库只是为了获取陀螺仪数据,您可能需要考虑Detecting device orientation Web API。它仍然是一个实验性功能,但可以在大多数现代浏览器中使用。

于 2020-10-29T10:16:57.670 回答