有人知道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)
答案 0 :(得分:5)
更新(硬件):
deviceMotion属性仅适用于同时具有加速度计和陀螺仪的设备。这是因为其子属性是传感器融合算法的结果,即两个信号一起被评估以便减少估计误差。特别是当需要高精度时(汽车导航,卫星定位......面临同样的问题),对快速移动设备的重力估算仍然很困难。流行的融合算法例如是Kalman filter和衍生物,但我想CMMotionManager的内部实现基于更简单且更快的算法。
鉴于此,您只有CMMotionManger accelerometerData
和gyroData
的原始传感器数据属性与传感器1:1相关 - 并且在iOS 5 magnetometerData
的情况下。 deviceMotion
及其所有超支属性是融合算法内部实现的计算结果。
旧回答:
iOS 4.x:
CMMotionManager支持陀螺仪和加速度计。它提供了isXxxAvailable和isXxxActive来查询硬件功能并确定状态,例如accelerometerAvailable和accelerometerActive。此外,还有一种简单但非常有效的传感器融合算法,称为DeviceMotion,如果设备上有加速度计和陀螺仪,则不需要罗盘,因此不使用罗盘。与您使用deviceMotionAvailable和deviceMotionActive获取信息的传感器类似。
磁力计只能通过CLLocationManager获得。
当应用程序在暂停后再次进入前台时,我遇到了有关deviceMotionActive的问题(虽然DeviceMotion之前已经停止了,但已获得true
。)
iOS 5.x: 磁力计支持添加到CMMotionManager,并像其他两个传感器一样处理。
常规强> 您甚至可以在iPhone 3g(使用iOS4)上使用CMMotionManager。您无权访问CMDeviceMotion,但可以查询加速度计更新。因此,您必须使用低通滤波来获得重力估计,并且它比DeviceMotion更糟糕。
您不应使用iOS 4之前的界面UIAccelerometerDelegate。
答案 1 :(得分:0)
请参阅reference
CMMotionManager对象是运动服务的网关 由iOS提供。这些服务提供了一个应用程序 加速度计数据,转速数据,磁力计数据等 设备运动数据,如态度。这些类型的数据来自 使用设备的加速度计和(在某些型号上)其磁力计 和陀螺仪。