iPhone - CMMotionManager属性和iPhone硬件

Oli*_*ver 2 hardware iphone accelerometer magnetometer gyroscope

有人知道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.magneticFied(唯一的磁力计?Iphone 3GS/4/4S与iOS4)

Kay*_*Kay 5

更新(硬件):

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

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

老答案:

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.