如何测量Swift中的iOS设备上的震动量?
我正在使用CoreMotion在应用程序中获取设备运动测量。我可以得到加速度xyz,滚动,俯仰,偏航,陀螺仪数据等。如何测量Swift中的iOS设备上的震动量?
但我想测量的是摇动即设备移动了多少,并为设备移动一个大金额在任何方向。我发现我回来的测量值超级敏感,我不知道如何正确使用它。
注:我知道如何检测摇动手势,这不是我要求的 - 我要求正确的方法来测量抖动量并显示它。代码
样我从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测量测量正确的方式多少设备在晃动?
这取决于您的具体使用情况,但是如果您想确定晃动量,请计算运动增量。确定给定时间段内某个设备运动属性的最大值和最小值,并将该值用作“不稳定性”的近似值。
例如,您可以在5秒的时间内测量设备的yaw
。跟踪最小值和最大值,并区分它们之间的差异。更多的摇晃会带来更大的价值。
这又取决于您的确切用例,但您也可以将设备运动属性与其运动变化相结合。如果您知道运动在一段时间内保持一致(如机器来回晃动),您可以尝试查找局部最小值/最大值并在一段时间内取平均值。
我不认为它是具体的使用案例。从地震仪到测量机器振动的任何使用情况都需要计算对于设备的任何位置测量多少移动,即面朝下,面朝上,在其底部朝上。我看到返回的值非常敏感,即使手机根本没有移动,值也会有很多闪烁。 – motionpotion
你的用例是什么? – nathan
有一些,但我的兴趣是发现更多关于CoreMotion和如何衡量shakeyness,但用例是将设备放在一个对象上,并测量它有多大的震动。 – motionpotion