如何使用(x,y,z)陀螺仪检测设备是否旋转了360度?

4

我正在使用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度

1个回答

7

一点理论知识

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

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

Phone axes representation

还有 3 个重要概念 (在您的代码片段中使用): 俯仰角翻滚角偏航角(或 方位角)。同样,在 MATLAB文档 的 "更多信息" 部分中对此进行了很好的描述,但我建议您阅读整篇文章。

实践操作

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

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

此外,如果您只是使用库来获取陀螺仪数据,则您可能想考虑检测设备方向Web API。它仍然是一个实验性功能,但在大多数现代浏览器中都可以使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接