如何通过iOS加速度计确定显著的运动?

14

我最初考虑使用CoreLocation跟踪速度来确定移动。但是这样做会耗尽电池,而且在较低的设置下,速度和位置读数远非准确。然后我开始使用加速度计来跟踪运动,就像这样:

http://blogs.oreilly.com/iphone/2008/06/iphone-as-pedometer.html

这个方法效果还不错,但并不是我想要的那么好。主要问题出现在你手持手机并盯着它走路时。在这种情况下,上面链接的代码将无法工作。如果放在口袋里或手臂上,它是一个很好的运动跟踪器。

因此,基于这些,有没有什么技术可以用iOS加速度计(非M7)创建一个伪计步器,并且易于理解,即使对于不懂数学的人也可以操作?


只是随口一说...加速度计测量加速度,对吧?所以它无法判断用户是静止还是以恒定速度移动。 - Max Chuquimia
1
你能描述一下“significant movements”的应用领域吗?目前还不清楚为什么“CoreLocation”不能满足需求。 - vokilam
6个回答

0

0

嗯,人们在走路时倾向于保持手机静止。没有完美的计步器,你必须接受它在他们握住设备时不更新的事实,如果他们在走路,他们本来就不应该做太多其他事情。你可以尝试找到平均步伐,在唤醒锁关闭的情况下(即他们正在看屏幕),然后根据平均步伐增加计数?


0

如果只使用加速度计,你无法追踪运动距离,因为加速度计只能检测加速度,当一个人在行走时很难准确检测到。

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

当你检测到用户快速移动时,他可能不是在走路,那么你可以仅使用低精度GPS。


“如果仅使用加速度计,就无法跟踪运动距离”并不完全正确。如果您知道用户的初始速度,然后不断检查用户的加速度,您可以通过近似地从开始到当前时间“积分”加速度来获取速度,然后再次积分以获取距离。但这可能会耗尽电池和/或效果不佳。” - sudo
@9000 你的方法是正确的,谢谢你提醒我。 - CarmeloS

0
我建议您观看2013年WWDC会议307与CoreLocation相关的会话。

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

他们正在谈论与您的任务类似的事情,使用延迟更新。

特别是他们涵盖了低功耗状态等内容。

简要概述:

  • 将活动类型设置为CLActivityTypeFitness
  • 调用startUpdatingLocations
  • 使用- (void)allowDeferredLocationUpdatesUntilTraveled:(CLLocationDistance)distance timeout:(NSTimeInterval)timeout;方法来管理行驶距离。据我所知,它只是在满足指定条件后唤醒手机,以便GPS芯片可以直接将收集到的位置传递给CoreLocation,并使用一些计算处理和分析新位置,以显示用户行驶的距离等信息。

0

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

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

  • 惯性导航
  • 计步器

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

计步器可以精确地完成一件事:计算步数。结合步伐、步数和步长可以推断出速度和距离。为了能够识别步伐并计算步伐,您将使用加速度计来检测手机在跑步者口袋内所经历的冲击。然而,手持手机会阻止检测到这些影响 - 因此计步器根本没有机会完成其工作。

你最好的选择是提高整体准确性,例如让用户校准计步器。一种方法是让他以不同速度走已知距离,记录每次运行的经过时间和步数。这些测量可以帮助你计算步长,甚至可以为不同步伐进行调整,而这只需要进行非常基本的数学计算。

0

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

目前(自iOS 8以来),Core Motion中有一个CMPedometer类。根据版本,可用的数据不仅是步数计数,还包括距离、速度和步频等。例如,自iOS 9以来提供了步频,自iOS 10以来提供了事件更新功能。

与大多数Core Motion类一样,您可以使用处理程序调用startEventUpdates,并且当数据发生变化时,会定期调用您的处理程序以获取数据更新。您还可以使用startUpdates并设置开始日期,查看累积过去的数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接