【问题标题】:What is a good way to determine significant movement with the iOS Accelerometer?使用 iOS 加速度计确定显着运动的好方法是什么?
【发布时间】:2014-03-11 17:19:24
【问题描述】:

我首先开始考虑可以使用 CoreLocation 来跟踪速度以确定运动。这不起作用,因为我不想让电池干涸,而且在较低的设置下,速度和位置读数远不准确。然后我继续使用加速度计来跟踪运动,如下所示: http://blogs.oreilly.com/iphone/2008/06/iphone-as-pedometer.html

这效果出奇的好,但没有我想要的那么好。当您在走路时拿着手机盯着它看时,就会出现大问题。在这种情况下,上面的链接代码不起作用。如果它放在你的口袋或手臂上,它是一个很好的运动追踪器。

那么,说了这么多,是否有任何技术可以用于使用 iOS 加速度计(不是 M7)的伪计步器,非数学专家也可以使用?

【问题讨论】:

  • 只是大声思考......加速度计测量加速度,对吗?所以它无法判断用户是静止不动还是匀速移动
  • 您能描述一下重要运动的应用领域吗?不清楚,为什么CoreLocation 不符合要求。

标签: ios ios7 core-location accelerometer


【解决方案1】:

嗯,人们走路时往往会拿着手机不动。它不可能是完美的,没有计步器可以。当他们拿着设备时,你必须接受它不更新,如果他们正在走路,他们不应该做太多事情。您可以尝试找出平均配速,当唤醒锁定关闭时(即他们正在看屏幕),然后根据平均配速增加计数?

【讨论】:

    【解决方案2】:

    如果只使用加速度计,则无法跟踪运动距离,因为加速度计只能检测加速度,而当一个人走路时,这并不准确。

    也许你可以使用加速度计作为计步器,计算用户步行的步数,并使用低精度 GPS(或短时间高精度 GPS)来检测平均步距,结合这两个数据,你可以粗略测量用户在使用少量电池的情况下行驶的距离。

    当您检测到用户正在快速行驶时,他不能走路,那么您可以只使用低精度的 GPS。

    【讨论】:

    • “如果仅使用加速度计,则无法跟踪移动距离”并不完全正确。如果您知道用户的初始速度然后继续检查用户的加速度,您可以通过近似“积分”从开始到当前时间的加速度来获得速度,然后再次积分以获得距离。而且它可能会耗尽电池和/或不能很好地工作。
    • @9000 你的方法是对的,谢谢提醒。
    【解决方案3】:

    我建议您观看与 CoreLocation 相关的 2013 WWDC session 307。

    https://developer.apple.com/wwdc/videos/

    他们通过使用延迟更新谈论与您的任务相似的事情。

    特别是他们涵盖了诸如低功耗状态之类的内容。

    简要概述:

    • 将活动类型设置为CLActivityTypeFitness
    • 致电startUpdatingLocations
    • 使用- (void)allowDeferredLocationUpdatesUntilTraveled:(CLLocationDistance)distance timeout:(NSTimeInterval)timeout; 方法管理行驶距离。据我了解,它只是在满足指定条件后唤醒手机,因此 GPS 芯片可以将收集到的位置直接传递给 CoreLocation,它会通知您的应用程序有新的位置,您将使用一些计算来处理和分析它们,以显示用户走了多远,等

    【讨论】:

      【解决方案4】:

      当涉及到导航的目的时,单独使用加速度计最多只能进行有根据的猜测。

      那是因为只有两种方法可以解释加速度计数据,这两种方法都有缺陷:

      • 惯性导航
      • 计步器

      惯性导航可以跟踪所有三个空间维度的位置,但当今智能手机中使用的传感器不够准确 - 几秒钟后误差会变得太大,从而使数据无用。

      您正在寻找的计步器只做一件事:计算步数。结合步速、步数和步长可以对速度和距离做出假设。为了能够识别步数并计算步速,您将使用加速度计来检测手机体验的影响,因为它位于跑步者的口袋里。然而,将手机拿在手中会阻止检测到这些影响 - 因此计步器根本没有机会完成它的工作。

      您能做的最好的事情是提高整体准确性,例如允许用户校准计步器。做到这一点的一种方法是让他以不同的速度步行几次已知距离,并记录每次跑步的经过时间和步数。通过这些测量,您可以计算步长,甚至可以针对不同的步速进行调整——这只是非常基础的数学运算。

      【讨论】:

        【解决方案5】:

        请参阅 CMMotionManager,它提供了在您的设备加速时获取 X、Y 和 Z 坐标的方法:

        https://developer.apple.com/library/ios/documentation/coremotion/reference/cmmotionmanager_class/Reference/Reference.html

        【讨论】:

          【解决方案6】:

          您链接到的文章在该 URL 上不再可用,因此我可能不清楚您想要做什么。但是,如果您正在寻找像计步器那样使用的步数,您应该考虑使用 iOS 更高级别的 API。

          目前(从 iOS 8 开始)有一个 CMPedometer 类作为 Core Motion 的一部分。根据版本的不同,可用数据不仅包括计步,还包括距离、步速和节奏。从 iOS 9 开始提供节奏,例如从 iOS 10 开始提供事件更新功能。

          像大多数 Core Motion 类一样,您可以使用处理程序调用 startEventUpdates,并且您的处理程序会在数据发生时定期更新数据。您还可以使用带有开始日期的 startUpdates 并查看过去的累积数据。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-05
            • 1970-01-01
            • 2012-05-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多