【问题标题】:iPhone - CMMotionManager properties and iPhone hardwareiPhone - CMMotionManager 属性和 iPhone 硬件
【发布时间】:2011-10-26 09:30:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone hardware accelerometer gyroscope magnetometer


    【解决方案1】:

    更新(硬件):

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

    鉴于此,您只有 CMMotionManger accelerometerDatagyroData 的原始传感器数据属性,它们与传感器 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。

    【讨论】:

    • 好吧,我认为我的问题已经很清楚了。我要的是硬件,不是软件。我的在线网站不在 iOS 上。当您阅读它时,您甚至没有 iPhone。
    • 糟糕,抱歉。当我开始回答时,您的问题尚未更新
    • 没问题。无论如何,您对主题的硬件部分有解决方案吗?
    • 您确定 deviceMotion.rotationRate 或 deviceMotion.magneticFied 由于缺少陀螺仪而在 3GS 上不可用吗?
    • 是的,请参阅事件处理指南/核心运动的第一段:developer.apple.com/library/ios/DOCUMENTATION/EventHandling/…
    【解决方案2】:

    reference

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

    【讨论】:

    • 啊啊,简单。我已经读过了。你的意思是 CMMotionManager 需要三个硬件,所以它只能在 iPhone 4x 上运行?
    • 不,它使用加速度计。磁力计和陀螺仪仅在某些支持它的设备上。我猜它只会在那些设备上运行得更好。
    • 似乎 4.0 及更高版本可以访问加速度计、陀螺仪和磁力计。设备运动从 5.0 开始
    • 看看每个功能的“可用性”
    • @simpleBob :嗯,我认为我的问题已经很清楚了。我要的是硬件,不是软件。我的在线网站不在 iOS 上。当您阅读它时,您甚至没有 iPhone。我使用 CMMotionManager,但我没有看到任何地方都有它构建返回值的硬件。
    猜你喜欢
    • 2011-03-14
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多