ios - 使用 CoreMotion 跟踪用户速度,无需 GPS

标签 ios gps core-motion

我想跟踪用户的位置并根据他的移动在离线 map 中更新它,而无需使用 GPS 且必须依赖位置更新。

我尝试了 CMMotionManager 并获得了 G 级的加速度。然而,这是加速度而不是速度。管理器还允许获取重力、旋转和姿态。

有没有办法计算用户的速度(以米/秒为单位)?如果是这样,我该怎么办?有公式/代码示例吗?

最佳答案

执行此操作的唯一方法是假设应用程序启动时手机处于静止状态。使用加速度计无法区分静止状态和以恒定速率移动之间的区别。例如,如果您乘坐喷气式飞机,您将无法判断自己正在以 800 公里/小时的速度飞行并且没有静止不动。

如果您确实假设开始时处于静止状态,则可以通过跟踪加速度得出非常粗略的速度估计,但实际上,如果测量值很小,结果很容易出现大量“漂移误差”错误很快就会导致完全错误的当前速度结果,因此您的位置会毫无希望地漂移。

所以在实践中,你的问题的答案是“不,不是真的。”

编辑:

再多思考一下,如果您可以施加一些假设,您也许可以获得有用的结果。

假设我们假设用户正在步行。我们排除骑自行车/汽车/火车/飞机旅行。步行时,你真的不会“漂移”。当用户采取步骤时,您会断断续续地移动。事实上,您可以使用加速度计来识别人行走时的弹跳特征。有些计步器应用程序已经可以做到这一点。对于步行,您可能会假设在没有加速度的情况下(忽略恒定的重力),手机是静止的,因此将速度归零并保持为零,直到加速度超过某个阈值。这将使您能够减少漂移误差。

关于ios - 使用 CoreMotion 跟踪用户速度,无需 GPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013237/

相关文章:

ios - Xcode核心数据: Change existing XML to Sqlite (NSXMLStoreType to NSSQLiteStoreType)

ios - CGBitmapContextCreate : invalid data bytes/row

ios - CMPedometer SIGABRT 崩溃 iOS 10?

ios - CMotionManager 在实例化时崩溃

ios - Xamarin UITest native IOS 应用程序

java - 防止网络不可用时应用程序崩溃

ios - 如何在不写代码的情况下在iOS模拟器中设置位置?

android - Android 位置管理器的实用程序

ios7 - CMMotionActivityManager - 在应用程序暂停或在后台时接收运动事件更新