如何计算手机从静止垂直方向的运动?

Posted

技术标签:

【中文标题】如何计算手机从静止垂直方向的运动?【英文标题】:how to calculate phone's movement in the vertical direction from rest? 【发布时间】:2011-09-11 13:51:09 【问题描述】:

我正在使用 android OS 开发一个应用程序,我需要知道如何计算设备在垂直方向上的移动。

例如,设备处于静止状态(A 点),用户将其拿在手中(B 点),现在 A 点和 B 点之间存在高度变化,我该如何计算?

我已经阅读了有关传感器和加速度计的文章,但我真的找不到任何可以帮助我的文章。有人有什么想法吗?

【问题讨论】:

您需要准确的高度变化吗? 不,我只需要知道高度变化超过 2 或 3 英尺。 【参考方案1】:

如果你将加速度积分两次,你会得到位置,但错误是可怕的。在实践中是没有用的。这是 23:20 的 explanation why (Google Tech Talk)。我强烈推荐这个视频。

现在,您不需要任何准确的东西,那是另一回事。 线性加速度在传感器融合后可用,如视频中所述。请参阅Sensor.TYPE_LINEAR_ACCELERATIONSensorEvent。我会首先尝试使用high-pass filter 来检测沿垂直轴的线性加速度的突然增加。

我不知道它是否适合你的应用程序。

【讨论】:

谢谢@Ali。该视频确实帮助我了解了加速度计及其计算。然而,就像你说的那样,它是不切实际的,所以我放弃了这个应用程序的想法,因为我没有看到它在其中被使用。基本上,该应用程序的核心思想取决于测量设备从静止到用户拾取点的距离(尽管只知道它是否 > 3ft ),现在我发现这不能用加速度计完成。 很高兴听到它有帮助。据我所知,视频中也提到了一个手势库,也许它已经支持你需要的东西。我没有对Android设备进行编程,所以我不太了解它。祝你好运! 嗨,谢谢。我将研究手势库。其次,我只是在用 TYPE_LINEAR_ACCELERATION 测试一些东西,我可能会让它按我的意愿工作。如果我幸运的话会发布更新。【参考方案2】:

您实际上可以(仅)建立垂直位置,而无需随时间测量加速度。这是通过测量地心方向与磁北极方向之间的夹角来实现的。

这仅在手机的高度(高度)发生变化时(显着)发生变化。你要做的是用accelerometermagnetometer得到两个float[3]数组,把它们当作向量,做成单位向量,然后任意两个单位向量的夹角就是arccos(AxM)。

请注意,这是点积,即。 math.acos(A[0]*B[0]+A[1]*B[1]+A[2]*B[2]) 这个角度的任何变化都对应于高度的变化。另请注意,这必须根据实际单位进行校准,并且角度与高度的变化比在不同的经度上会有所不同;但这是一种获得高度绝对值的方法;当然,当加速时,或者附近有磁铁时,角度也会倾斜:)

【讨论】:

【参考方案3】:

    您可以将其与 microTesla 中的磁场传感器相关联

    您可以使用 dist= 加速度积分的积分 ~ sigma ~ summation = 速度积分+常数

【讨论】:

你说什么??你能解释一下吗?

以上是关于如何计算手机从静止垂直方向的运动?的主要内容,如果未能解决你的问题,请参考以下文章

设备保持静止时垂直轴上的 Android 设备角度

无论手机方向如何,都获得垂直于重力方向的加速度。

CoreMotion框架--加速计和陀螺仪

科氏力与地球自转产生的惯性离心力差别

项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前水平和垂直角度)

项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前水平和垂直角度)