2

有人知道,对于 CMMotionmanager.deviceMotion 的每个属性及其子属性,它们基于什么样的硬件(磁力计、加速度计、陀螺仪......)?

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

我需要知道 CMMotionManager 从哪块硬件获取其值,以了解我的 CMMotionManager 调用将在哪种 iPhone 上工作。并在我的网站上写下相应的文本。

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

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

4

2 回答 2

5

更新(硬件):

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

鉴于此,您只有 CMMotionManger 的原始传感器数据属性,accelerometerData并且gyroData与传感器 1:1 相关 - 在 iOS 5 的情况下magnetometerDatadeviceMotion它的所有超属性都是融合算法内部实现的计算结果。

老答案:

iOS 4.x:

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

磁力计只能通过 CLLocationManager 获得。

当应用程序在暂停后再次进入前台时,我有时会遇到 deviceMotionActive 的问题(true尽管之前肯定已经停止了 DeviceMotion)。

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

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

您不应使用 iOS 4 之前的界面 UIAccelerometerDelegate。

于 2011-10-26T13:42:48.757 回答
0

请参阅参考资料

CMMotionManager 对象是 iOS 提供的运动服务的网关。这些服务为应用程序提供加速度计数据、旋转速率数据、磁力计数据和其他设备运动数据,例如姿态。这些类型的数据源自设备的加速度计和(在某些型号上)其磁力计和陀螺仪。

于 2011-10-26T09:37:41.600 回答