如何根据iphone的X,Y,Z加速度计读数计算行进方向的加速度/减速度

时间:2012-09-21 22:53:58

标签: iphone ios xcode algorithm accelerometer

我正在写一个iPhone / iPad应用程序。我需要计算在接近直线水平线行驶的车辆行驶方向上的加速度和减速度,加速度和减速度不稳定。我有来自X,Y,Z正交加速度计的3个读数序列。但是iphone / ipad的方向是任意的,加速度计读数包括车辆运动和重力效应。结果应该是一系列单个加速度值,其取决于车辆是减速还是加速而为正或负。只要加速度与减速度符号相反,正负方向就是任意的。应该从结果中考虑重力。结果的一些变量平滑将是有用的。

解决方案应尽可能简单,并且必须具有计算效率。答案应该是某种伪代码算法,C代码或一系列方程式,可以很容易地转换为C代码。 Objective C中的iPhone特定解决方案也没问题。

由于

4 个答案:

答案 0 :(得分:3)

分离重力和运动真的很难。如果您可以使用陀螺仪和罗盘信号分析数据,那就更容易了。

陀螺仪测量角度旋转的速度。它的积分在理论上是角度方向(加上一个未知的常数),但积分会受到漂移的影响,所以它本身就没用了。加速度计测量角度方向加上重力加线性加速度。通过一些中等复杂的数学运算,您可以将这3个数量中的所有3个与2个传感器的值隔离开来。添加指南针可将XY平面(Z为重力)固定为绝对坐标系。

请参阅this精彩演示。

答案 1 :(得分:2)

你需要一些三角学,例如获得你需要的量级

magn = sqrt(x*x+y*y+z*z);

要获得你需要的角度,那么c函数atan2就更好了

xyangel = atan2(y,x);
xymagn = sqrt(x*x+y*y);
vertangle = atan2(z,xymagn)

没有你得到的负面和正面幅度是任意的,你可以例如解释π/ 2< xyangle< 3π/ 2为负。那将是x的符号作为magn的符号,但从y中取出符号同样有效

答案 2 :(得分:1)

跟踪加速度的平均值。这将为您提供“向下”的参考。然后从个别读数中减去均值。

你需要调整平均计算的灵敏度,因为,例如,在高速公路上慢慢转弯会导致平均值慢慢向外漂移。

如果您想补偿这一点,您可以使用GPS跟踪来计算粗粒度的全局加速度来校准加速度计。事实上,您可能会发现区分GPS速度读数可以提供足够好的绝对加速度(我没有尝试过,所以我不能说)。

答案 3 :(得分:1)

使用userAcceleration

您无需弄清楚如何从加速度计读数中移除重力以及如何在核心运动框架中采用已经实施的方法。