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



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

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

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

如果你对加速度积分两次,你就会得到位置,但误差很可怕。它在实践中是无用的。以下是为什么(谷歌科技谈话)在23:20。我强烈推荐这个视频。

现在,你不需要任何准确的东西,那就另当别论了。线性加速度在传感器融合后可用,如视频中所述。参见SensorEvent的Sensor.TYPE_LINEAR_ACCELERATION。我会首先尝试高通滤波器来检测沿垂直轴的线性加速度的突然增加。

我不知道这对你的申请是否有利。

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

只有当手机的海拔(高度)发生变化时,这种情况才会发生(显著)变化。使用accelerometermagnetometer得到两个float[3]数组,将它们视为向量,使它们成为单位向量,然后任意两个单位向量之间的角度为arccos(AxM)。

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

  1. 你可以将它与microTesla 中的磁场传感器关联起来

  2. 你可以使用dist=加速度积分的积分~∑~求和=速度积分+恒定