早在 iPhone 4 和第 4 代 iPod Touch 面世时,我就在玩弄 Apple 的 Core Motion 传感器融合算法,看看能否在非常局部的航位推算(在几英寸或几英尺的范围内)获得任何有趣的结果。考虑到 MEMS 传感器的规格相对较低,我没想到会有什么壮观的东西。尽管 Apple 的CMDeviceMotion
gravity
属性使用了不错的(虽然不透明)传感器融合算法,但互补userAcceleration
属性并不完全针对航位推算。不过,我认为那里可能有足够的乐趣。
iPhone 4、iPhone 5、第 4 代 iPod Touch 和第 5 代 iPod Touch 显然都使用了 STMicroelectronics LIS331DLH 加速度计和 L3G4200D 陀螺仪。(实际上,我还没有看到 iTouch-5 陀螺仪的部件号,所以可能会有所不同。)
拆解:iPhone-4、iTouch-4、iPhone-5、iTouch-5
ST 规格显示加速度计可以在高达 ±8g 的 1000 Hz 下进行采样。该陀螺仪可以以 800 Hz 的频率进行采样,最高可达 ±2000 dps。
但是,在使用我的第 4 代 iPod Touch(iOS 5 和 iOS 6)时,我只能将采样率提高到 100 Hz。如果我设置CMMotionManager
deviceMotionUpdateInterval
低于 0.01,它会自动重置为 0.01。accelerometerUpdateInterval
和相同gyroUpdateInterval
。
此外,加速度计输出似乎总是被限制在 ±2g 左右。
我看到其他人对 iPhone 4 的类似限制发表了评论。
这两个界限都严重限制了我可以挤出设备的局部加速度计算(用我的第 4 代 iPod touch 进行实验)。我认为 Apple 已将这些界限设置得较低以降低功耗。虽然我不知道它们是设置在硬件中,还是设置在 iOS 的某个地方。
有没有人在 iPhone 5 或第 5 代 iPod Touch 上使用过这些加速度计和陀螺仪边界?(或者任何 iPad?)任何高于 100 Hz 的采样率?任何加速度计测量值超出 ±2g 的范围?