我正在开发一个 iPhone 应用程序,我们正在尝试计算移动汽车的加速度。类似的应用程序已经实现了这一点(Dynolicious),但不同的是,该应用程序旨在用于一般城市驾驶期间,而不是在拖曳带上使用。
这让我们想到了一个 Dynolicious 幸运地能够避免的大问题:山丘。是的,丘陵。
这有两个重要阶段:校准和实际驾驶。
我们最初的运行很简单,并遭受了后果。在校准阶段,我取手机上的平均力,而在跑步过程中,我只是从当前力中减去平均力,得到这一帧的当前加速度。这样做的问题是,典型的汽车受到的力远远超过向前的力——从转向到坑洼的一切都导致数值与实际发生的情况不同步。
接下来的运行是添加条件,即 iPhone 必须以屏幕朝向汽车后部的方式定向。使用这种方法,我试图只跟随 z 轴上的力,但这显然会导致问题,除非 iPhone 直接直立,因为重力。
后来做了一些三角函数,我设法从方程中计算出重力,所以iPhone实际上非常非常好地读取了汽车。
直到我碰到一个斜坡。当汽车的角度发生变化时,突然间我收到了毫无意义的加速和减速,我们又一次失去了同步。
与数学上比我聪明得多的人交谈会导致我尝试实施的解决方案比我想承认的要长。其步骤如下:
1) 在校准过程中,将重力测量为矢量而不是大小。存储该向量。2)当汽车最初向前移动时,取运动矢量并减去重力。以此为前进动力。(暂时忽略这将是困难的用户案例,让我们专注于数学:) 3) 从前向矢量和重力矢量,构造一个平面。4)每当收到一个力时,将其投射到所述平面上以消除侧向力等。5) 然后,使用该力、已知的重力大小和已知的前向运动方向基本上求解三角形以获得前向矢量。
在这个新系统中造成最大困难的问题不是第 5 步,我已经达到了所有数字看起来都应该如此的地步。困难的部分实际上是前向向量的检测。我正在选择大小超过重力的向量,然后从那里对它们进行平均并减去重力。(我正在做一些错误检查,以确保我没有因为 iPhone 加速度计稍微关闭而使用力,这比我想要的更频繁地发生)。但是,如果我绘制我正在使用的这些向量,它们实际上会以大约 20-30 度的角度变化,这可能会导致一些严重的不准确性。最终结果是该应用程序现在比以前更加不准确。
所以基本上 - 你所有的数学和 iPhone 大脑在那里 - 任何明显的错误?任何可能更好的解决方案?任何可能有用的经验?
奖励:为找到解决方案的第一个答案提供 250 美元的奖金。