问题描述
我正在使用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°
解决方法
有点理论
一般来说,陀螺仪测量旋转运动。我们手机中随附的大多数传感器将专门测量角速度。这意味着在大多数情况下,输出将描述手机随时间旋转的程度,通常以每秒度(°/s
({>)的形式表示。
您可以绕3个轴旋转:x,y和z。在MATLAB文档中有一张很好的图片:
还有3个重要概念(您在代码段中使用过):音高,侧倾和偏航(或方位角)。同样,MATLAB documentation派上用场了。他们在“更多关于”部分对此进行了很好的描述,但我建议阅读整篇文章。
弄脏你的手
据我所知,react-native-sensors库将完全返回 每秒度数 。这意味着,使用提供的时间戳,您可以尝试计算手机在任何时间增量内绕任意轴旋转了多少。您只需要保存值和时间戳,进行一些转换即可得到结果。但是,这将需要更多的时间和内存。
有一种更简单的方法,在阅读附件后您可能已经意识到。根据要旋转的轴,使用俯仰,滚动或偏航。
此外,如果仅使用该库来获取陀螺仪数据,则可能需要考虑Detecting device orientation Web API。它仍然是一项实验性功能,但可以在大多数现代浏览器中使用。