2

我正在编写一个 iPhone/iPad 应用程序。我需要计算车辆行驶方向的加速度和减速度,该车辆接近直线水平线,加速度和减速度不稳定。我有来自 X、Y、Z 正交加速度计的 3 个读数序列。但 iphone/ipad 的方向是任意的,加速度计读数包括车辆运动和重力影响。结果应该是一系列单个加速度值,这些值是正值还是负值,具体取决于车辆是减速还是加速。只要加速度与减速度的符号相反,正负方向是任意的。重力应该被排除在结果之外。结果的一些变量平滑将是有用的。

解决方案应尽可能简单,并且必须具有计算效率。答案应该是某种伪代码算法、C 代码或可以轻松转换为 C 代码的方程式序列。Objective C 中的 iPhone 特定解决方案也可以。

谢谢

4

4 回答 4

3

将重力和运动分开是非常困难的。如果您可以将数据与陀螺仪和罗盘信号一起分析,则会更容易。

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

看到这个很棒的演示文稿。

于 2012-09-22T00:16:02.433 回答
3

为此,您将需要一些三角函数,例如获得所需的幅度

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

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

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

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

于 2012-09-22T01:15:13.443 回答
2

使用userAcceleration

您不必弄清楚如何从加速度计读数中消除重力以及如何考虑方向:它已经在 Core Motion Framework 中实现。

于 2012-09-22T09:12:16.297 回答
1

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

您需要考虑平均计算的敏感性,因为,例如,在高速公路上慢速转弯会导致平均缓慢向外漂移。

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

于 2012-09-21T23:31:50.947 回答