iPhone - CMMotionManager属性和iPhone硬件

时间:2011-10-26 09:30:06

标签: iphone hardware accelerometer gyroscope magnetometer

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

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

我需要知道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(唯一的磁力计?带iOS4的Iphone 3GS / 4 / 4S)

2 个答案:

答案 0 :(得分:5)

更新(硬件):

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

鉴于此,您只有CMMotionManger accelerometerDatagyroData的原始传感器数据属性与传感器1:1相关 - 并且在iOS 5 magnetometerData的情况下。 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之前的界面UIAccelerometerDelegate。

答案 1 :(得分:0)

请参阅reference

  

CMMotionManager对象是运动服务的网关   由iOS提供。这些服务提供了一个应用程序   加速度计数据,转速数据,磁力计数据等   设备运动数据,如态度。这些类型的数据来自   使用设备的加速度计和(在某些型号上)其磁力计   和陀螺仪。