斯威夫特:CoreMotion设备不移动,但记录加速度
这里是我的CM代码:斯威夫特:CoreMotion设备不移动,但记录加速度
func checkMotion(_ myMotionManager:CMMotionManager) -> Bool {
//check to see if core motion is available
var isCoreMotionAvailable = myMotionManager.isAccelerometerAvailable
isCoreMotionAvailable = myMotionManager.isGyroAvailable
isCoreMotionAvailable = myMotionManager.isMagnetometerAvailable
isCoreMotionAvailable = myMotionManager.isDeviceMotionAvailable
if isCoreMotionAvailable {
myMotionManager.deviceMotionUpdateInterval = 0.25
myMotionManager.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: checkMotionUpdate)
}
return false
}
,并检查数据:
func checkMotionUpdate(data: CMDeviceMotion?, error:Error?) {
if error != nil {
print(error!.localizedDescription)
} else {
if let motionData = data {
//check to see if we have a base point and if not store one
if !bHasBasePoint {
basePoint = motionData
bHasBasePoint = true
print("Basepoint:\(basePoint!)")
}
print("Acceleration X: \(motionData.userAcceleration.x)")
print("Acceleration Y: \(motionData.userAcceleration.y)")
print("Acceleration Z: \(motionData.userAcceleration.z)")
print()
}
}
}
和一些成果:
基点:
Basepoint:QuaternionX 0.011783 QuaternionY -0.461725 QuaternionZ 0.000044 QuaternionW 0.886945 UserAccelX 0.006458 UserAccelY 0.000324 UserAccelZ 0.002740 RotationRateX 0.000997 RotationRateY -0.001316 RotationRateZ -0.001370 MagneticFieldX 0.000000 MagneticFieldY 0.000000 MagneticFieldZ 0.000000 MagneticFieldAccuracy -1 Heading -1.000000 @ 73807.821537
有些加速度重刑检查:
Acceleration X: 0.00645828247070312
Acceleration Y: 0.0003238245844841
Acceleration Z: 0.00274038314819336
Acceleration X: 0.00522691011428833
Acceleration Y: 0.000595645979046822
Acceleration Z: 0.00370562076568604
Acceleration X: 0.00506830215454102
Acceleration Y: 0.000180358067154884
Acceleration Z: 0.0017169713973999
Acceleration X: 0.00555837154388428
Acceleration Y: -0.00128581002354622
Acceleration Z: 0.00320953130722046
Acceleration X: 0.00509798526763916
Acceleration Y: -4.2034313082695e-05
Acceleration Z: 0.00197714567184448
所以我在CM编码(2天)非常新,我为什么我看到了X,Y和Z的加速度变化的时候,iPhone是在摇篮右边坐着的风景有点糊涂了现在?这是否是预期的行为,是否存在我应该忽视的一系列加速度,作为一种假阳性?
谢谢
所以,也许你现在发现了它的其他信息。但是因为它还没有被回答:
一般来说,由于设备仍然存在,所以有些动作录制是正常的。有两个原因:一个是,传感器本身产生了一些误差噪声,另一个是,传感器在一个轴上的值总是为1(或更真实地在轴之间分开)我们生活的星球。现在,这个引力部分通过过滤器分离出来,但这也引入了一些错误。
传感器本身的错误应该会随机产生负面和正面的错误,移动平均值会消除这些错误的影响(因为Y轴似乎不会受到引力和线性加速度分裂的影响,而我猜测它会几乎完全抵消一些值)。所以你应该已经通过平均一些过去的价值来获得更好的价值。
从你得到的读数通常是2轴的值稍高。我猜想他们从万有引力分裂中出现,而你的手机仍然是,但也许有点倾斜,因为在gradle中。
现在虽然0.00something不低,它也不是最高的错误。你可以通过查找一些参考文献,如Wikipedia Magnitude,或者可能是这个地方的地震来了解这些值的含义,在这些地方他们显示需要加速才能让人感受到它;)Wikipedia Ground Acceleration。
我不知道苹果用什么来分裂引力,但我记得它至少在一段时间之前并不是最好的过滤器,但对UI的东西足够快而且有用。但是,ARKit可能会改变这一点。所以如果你需要更精确的分裂,那么也许根据原始引力实施另一个滤波器是有意义的。
我希望能有所帮助。