【问题标题】:Detect the iPhone rotation spin?检测 iPhone 旋转旋转?
【发布时间】:2010-01-19 06:37:05
【问题描述】:

我想创建一个应用程序,可以检测用户旋转 iPhone 设备时的旋转次数。目前,我正在使用 Compass API 来获取角度并尝试多种方法来检测旋转。以下是我尝试过的解决方案列表: 1/ 在整轮中创建 2 个角度陷阱(整轮上的一块),以检测我们从指南针获得的角度是否通过它们。 2/ 对指南针更新时间之间的所有角度距离求和(在 updateHeading 函数中)。让我们尝试将和角除以 360 => 我们可以得到自旋数

问题是:当手机旋转太快时,指南针跟不上手机的速度,它会返回给我们最新时间的角度(不是像真实旋转那样连续)。

我们还尝试使用加速度计来检测旋转。但是,当您在平面上旋转手机时,这种方式将不起作用。

如果您对此问题有任何解决方案或经验,请帮助我。

非常感谢。

【问题讨论】:

    标签: iphone rotation accelerometer compass-geolocation


    【解决方案1】:

    iPhone4 包含一个 MEMS 陀螺罗盘,所以这是最直接的路线。

    如您所见,磁力计响应缓慢。这可以通过使用一种预期算法来减少,该算法利用迟缓性对当前方向的真实情况进行有根据的猜测。

    首先,您需要确定传感器的实际性能。为此,您需要在几个旋转速度下以精确的速率旋转它,并记录罗盘的行为。旋转平台应该可以读取瞬时位置。

    在较慢的速度下,您会看到不同程度的固定延迟。随着速度的增加,滞后会增加,直到接近 180 度,此时指南针会突然翻转。在更高的速度下,您将看到的只是翻转,尽管当翻转以相同的值重复时,它可能看起来没有翻转。在某些较高的速度下,指南针可能会出现反向旋转,与旋转方向相反。

    获得旋转台可能很麻烦,并且确保它不会影响当地磁场(使指南针无用)是一项挑战。理想的桌子将由铝制成,如果您需要使用钢制桌子(最常见),则需要将手机安装在非磁性平台上,使其尽可能远离钢制。

    本地机加工店将是一个很好的起点:CNC 机器很容易完成所需的工作。

    获得罗盘性能数据后,您需要建立观测读数与实际方向和旋转速率的模型。反转模型并将其应用于读数以获得对实际读数的猜测。

    一个简单的算法实现是保留读数的历史记录,并保留顺序读数之间差异的列表。由于我们知道罗盘存在滞后,当差值不为零时,我们会知道当前值由于滞后而存在一定程度的不准确性。

    下一步是创建一个“已校正”读数列表,其中先前实际值的已知滞后用于生成一个更新值,该更新值用于创建一个更新值,该更新值将添加到最后一个值中“更正”列表,并存储为最新值。

    当累积校正(实际和校正列表中的最新值之间的差异超过 360 度时,这意味着我们基本上不知道指南针指向的位置。希望不会到达那个点,因为大多数旋转运动通常应该持续相当短的时间。

    但是,由于您的目标只是计算旋转次数,因此在累积误差达到相当高的值之前,您将偏离完整旋转不到一圈。我不确定这个值是多少,因为它取决于实际的指南针滞后和实际的旋转速度。但是如果你只关心少量的旋转(5 次左右),你应该能够获得可用的结果。

    【讨论】:

    • 我希望我能给你一个以上的支持,以获得如此全面的答案。
    【解决方案2】:

    您可以使用加速度的速度来确定手机旋转的速度,并使用它来填补空白,直到手机停止,此时您可以再次查询指南针。

    【讨论】:

      【解决方案3】:

      如果您使用的是 iPhone 4,则问题已解决,您可以使用Core Motion 获取旋转数据。

      对于早期的设备,我认为一个有趣的方法是尝试在设备旋转时检测摆动,在非常精细的报告间隔上使用UIAccelerometer。您可能能够从与旋转平面成直角的运动中检测到一些合理的模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        相关资源
        最近更新 更多