如何使用加速度计计算步数

6

我想知道如何使用加速度计计算步数。实际上,我会计算加速度,然后使用以下代码来统计步数:

length = sqrt(x * x + y * y + z * z);
if(length>=2){
   stepcount+=1;
}

在计算加速度时使用加速度.x、加速度.y和加速度.z来计算长度。 但是我的主要问题是,在开始应用程序时,步数会给出正确的步数值,但随着时间的推移,其值不正确。请帮忙解决。


你好,我有和你一样的需求。我获取了加速度传感器的x、y、z值。请问如何使用这些值计算步数?请查看我在Stack Overflow上发布的问题:https://dev59.com/O2025IYBdhLWcg3wPzfL - M.A.Murali
@darren - 取长度 >= 2 的逻辑是什么? - Lohith Korupolu
2
@lohith:长度大于2意味着向上/向下的加速度至少是重力的两倍。 - Biosopher
2个回答

6
基本上,您正在使用超过某个值的突然加速作为某人结束或开始步骤的标志。
首先,您必须确保频繁采样加速计,以免错过步骤。然后,您将需要确保自己正确猜测阈值应该是多少。
这将需要很多试错。
我建议绘制出随时间变化的长度图表,并查看是否可以找到通常正确的好阈值值。
但是,无论如何,它永远不会真正准确。我认为唯一真正准确地测量步数的方法是使用鞋中的脚跟传感器。

不是的。我想它甚至会因设备型号而异。这取决于加速度计测量的单位。 - Omnifarious
假设设备型号之间没有差异,您至少需要对步频进行2倍的采样才能检测到它。然后您还需要担心人是否在跑步。 - Calyth

2

编辑:我似乎误解了问题。请参考Omnifarious的答案,那更为恰当。


如果你仅仅计算加速度向量的长度,那么这不会给你总行驶距离。这个问题会比较复杂:

  • 首先将你的距离(标量)和速度(向量)设置为0。
  • 在每个时间间隔内,将当前加速度向量添加到速度向量中以计算更新后的速度向量。
  • 在每个时间间隔内,将速度向量的大小加入到距离中以累积行驶距离。
  • 如果这些时间间隔不是你所使用的任何时间坐标系中的“单位”间隔,则适当地缩放加速度和速度向量。例如,如果你的加速度以 m/s^2 表示,采样间隔为100ms,则在将其添加到速度向量之前应将加速度向量缩放0.1。同样,在将速度累积到距离时也要如此。

例如,假设你稍微加速一下,然后以匀速行驶,加速度向量将为0。但是,由于已经建立了一些速度,因此行驶距离应该稳步增加。

如果你想跟踪实际位置,则将其作为向量维护,并在每个时间间隔内将当前速度向量添加到其上。

这是通过死算法进行的惯性导航,随着时间的推移,误差会开始积累(在速度向量中,因此在行驶距离上也会有所积累)。你需要进行一些实验以了解你可以获得什么样的精度。


提问者不想测量距离,他只是想实现一个计步器。 - kennytm
他说他想测量步数,而不是总行程。寻找加速度的突然变化实际上并不是一个可怕的方法。 - Omnifarious
@Omnifarious:我向您所拥有的卓越智慧致敬。 - Tarydon
哇,我感觉特别了。 :-) 起初我也将其误读为一个死推算问题。 - Omnifarious

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