用于车道监控的矢量点/交叉产品

时间:2014-04-13 03:36:10

标签: objective-c core-location

我正在开发一个应用程序,它借助于Xcode中的mapkit和CoreLocation框架来监控车辆的速度。但我还必须监控车道跟踪,如识别车辆是否在同一车道,或者驾驶员改变车道的频率。如果他的变化太频繁,我必须发出警报说要警惕。 当司机向右转时,必须弹出一条消息,说明"转右"并且类似地当向左转时,必须弹出一条消息说"向左转"。 我只允许使用GPS坐标,而不是别的。

我该如何解决这个问题?如何使用Vector DOT / CROSS产品来解决这个问题? 任何形式的帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

首先,我要确保GPS对您的项目足够准确。我没有很多GPS功能的经验,但我不相信它们足以准确检测车道变化。我所知道的唯一一款足够准确的GPS是基于GPS的原型公交车,它可以在路肩上行驶。无论如何,如果iPhone GPS适合您的需求,您应该研究线性代数和矩阵运算来处理向量。

答案 1 :(得分:0)

首先将它们转换为速度和加速度矢量,可以通过位置矢量解决这个问题。如果时间在这里是恒定的(采样率是固定的和常规的),它可以被忽略,并且可以通过简单的减法从位置到速度的转换。

velX[i] = posX[i+1] - posX[i];
velY[i] = posY[i+1] - posY[i];

accX[i] = velX[i+1] - velX[i];
accY[i] = velY[i+1] - velY[i];

现在我们有一些x,y向量用于速度和一堆不同时间的加速度(i)。你想要的是加速度矢量中与速度矢量垂直的部分。

A·V / | V | 将加速度矢量投影到速度矢量上。与我们想要的完全相差90度。这是错的,但也许我们可以使用这个想法。

垂直于⟨a,b⟩的右旋转矢量是⟨b,-a⟩。

因此,我们可以通过交换数字并取消来找到垂直于 V 的右旋转矢量。让我们称之为 Vp

ap = A·Vp / | Vp | 会将加速度矢量投影到指向汽车右侧的矢量上(除非它们向后行驶或集材)。是的,这就是我们想要的。 +意味着向右加速。 - 意味着向左加速。

| Vp | 计算可能有点贵,因为它涉及平方根(毕达哥拉斯定理),但这与 | V | 实际上是一样的,车辆的速度相对于数据样本之间的时间。如果您正在跟踪速度,那么您可能已经在其他地方计算了它。

如果你需要的只是侧向加速的标量,那就有效。如果您需要实际矢量,请在右侧 Vp / | Vp | 中计算单位矢量,并将其按比例缩放。

Ap = ap( Vp / | Vp |

所有这一切的问题在于它完全忽略了地图。如果地图指示道路正在转弯,则左加速度或右加速度不一定表示车道变换。

因此,您还必须拥有指示他们应该采用的路径的数据点。将测量的速度应用于路径数据点并预测垂直加速度应该是什么。数学与我已经涵盖的大致相同。预测和测量之间的差异是车道变化。

然而,即使他们驾驶一条完美的路径,由于时间安排,这些地图数据点很可能不会与您的位置数据点完全匹配。因此,您必须进行一些插值来预测样本时的垂直加速度应该是多少。

正如你所看到的,答案涉及很多数学。也许你应该跟进mathmatics