我正在使用CoreMotion获取应用程序中的设备运动测量数据。我可以得到加速度x,y,滚动,俯仰,偏航,陀螺数据等。
但是我想要测量的是震动,也就是设备移动了多少,并为设备在任何方向移动了大量的东西设定了阈值。我发现我得到的测量结果非常敏感,我不知道如何正确地使用它。
注意:我知道如何检测摇动手势,这不是我所要求的--我要求的是正确的方法来测量摇动量并显示它。
我从DeviceMotion中使用的代码示例:
if let deviceMotion = motionManager.deviceMotion {
let quat = deviceMotion.attitude.quaternion;
var qRoll = radiansToDegrees(radians: atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z)) ;
var qPitch = radiansToDegrees(radians: atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z));
var qYaw = radiansToDegrees(radians: asin(2*quat.x*quat.y + 2*quat.w*quat.z));
let orientation = deviceMotion.attitude
var roll = radiansToDegrees(radians: orientation.roll)
var pitch = radiansToDegrees(radians: orientation.pitch)
var yaw = radiansToDegrees(radians: orientation.yaw)
}并使用加速度计:
if motionManager.isAccelerometerAvailable {
motionManager.startAccelerometerUpdates(to: OperationQueue.current!, withHandler: { accelerometerData, error in
if let acceleration = accelerometerData?.acceleration {
print("ACCELEROMETER X: " + acceleration.x.description)
print("ACCELEROMETER Y: " + acceleration.y.description)
print("ACCELEROMETER Z: " + acceleration.z.description)
})
}使用来自CoreMotion的测量来测量一个设备的震动程度的正确方法是什么?
发布于 2017-10-05 21:54:34
这取决于您的确切用例,但是如果您想确定震动的数量,则计算一个运动增量。在给定的时间内确定设备运动属性的最大值和最小值,并将该值用作“抖动”的近似值。
例如,您可以在5秒内测量设备的yaw。跟踪最小值和最大值,并记录它们之间的差异。更多的震动会导致更大的价值。
同样,它取决于您的确切用例,但您也可以采用设备运动属性和它们的运动增量的组合。如果您知道运动随着时间的推移是一致的(就像机器来回摇晃),您可以尝试找到局部的min/max值,并在一段时间内对它们进行平均值。
https://stackoverflow.com/questions/46594523
复制相似问题