iPhone - CMMotionManager 属性和 iPhone 硬件

标签 iphone hardware accelerometer gyroscope magnetometer

是否有人知道 CMMotionmanager.deviceMotion 的每个属性及其子属性,它们基于哪种硬件(磁力计、加速度计、陀螺仪等)?

我的问题是关于硬件,而不是软件。

我需要知道 CMMotionManager 从哪个硬件获取其值,才能知道我的 CMMotionManager 调用将在哪种 iPhone 上运行。并在我的网站上编写后续文本。

那么使用什么硬件来构建:

deviceMotion.attitude.roll
deviceMotion.attitude.pitch
deviceMotion.attitude.yaw
deviceMotion.rotationRate(唯一陀螺仪?带 iOS4 的 Iphone 4/4S)
deviceMotion.gravity(唯一的加速度计?所以它应该适用于所有装有 iOS4 的 iPhone)
deviceMotion.userAcceleration(唯一的加速度计?所以它应该适用于所有装有 iOS4 的 iPhone)
deviceMotion.magicFied(唯一磁力计?Iphone 3GS/4/4S with iOS4)

最佳答案

更新(硬件):

deviceMotion 属性仅适用于同时具有加速计和陀螺仪的设备。这是因为它的子属性是传感器融合算法的结果,即两个信号一起评估以减少估计误差。特别是当需要高精度时,快速移动设备上的重力估计仍然是一项艰巨的工作(汽车导航、卫星定位……面临同样的问题)。流行的融合算法例如是 Kalman filter和衍生物,但我猜 CMMotionManager 的内部实现是基于更简单、更快的算法。

鉴于此,您只有 CMMotionManger accelerometerDatagyroData 的原始传感器数据属性,它们与传感器 1:1 相关 - 在 iOS 5 的情况下磁力计数据deviceMotion及其所有超属性都是融合算法内部实现的计算结果。

旧答案:

iOS 4.x:

CMMotionManager 支持陀螺仪和加速度计。它提供 isXxxAvailable 和 isXxxActive 来查询硬件功能并确定状态,例如accelerometerAvailableaccelerometerActive 。此外,如果设备上有加速度计和陀螺仪,则有一种简单但相当有效的传感器融合算法,称为 DeviceMotion - 不需要指南针,因此不使用。类似于您使用的传感器deviceMotionAvailabledeviceMotionActive用于获取信息。

磁力计只能通过 CLLocationManager 使用。

当应用程序在挂起后再次进入前台时,我有时会遇到 deviceMotionActive 问题(虽然 DeviceMotion 之前肯定已停止,但得到 true)。

iOS 5.x: 磁力计支持已添加到 CMMotionManager 中,并像其他两个传感器一样进行处理。

一般: 您甚至可以在 iPhone 3g(使用 iOS4)上使用 CMMotionManager。您无权访问 CMDeviceMotion,但可以查询加速度计更新。因此,您必须使用低通滤波来获得重力估计,这比 DeviceMotion 差得多。

您不应使用 iOS 4 之前的接口(interface) UIAccelerometerDelegate。

关于iPhone - CMMotionManager 属性和 iPhone 硬件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900888/

相关文章:

Android Nexus One - 我可以通过配色方案节省能源吗?

c# - 为 SVM 准备加速度计数据

java - 将设备坐标转换为世界坐标

iphone - 我可以用sqlite运行带有20万条记录的iPad吗?

iphone - 调用委托(delegate)的委托(delegate)

iphone - 在iphone objective-c中将联系人添加到地址簿

objective-c - 使用 Objective-C 获取 Mac 系统温度

memory-management - 为什么没有对内存管理的硬件支持?

java - android SDK中的FFT库

iphone - 指针与 nil 初始化指针