Objective c 用于车道监控的矢量点/叉积

Objective c 用于车道监控的矢量点/叉积,objective-c,core-location,Objective C,Core Location,我正在开发一个应用程序,借助Xcode中的mapkit和CoreLocation框架来监控车辆的速度。但我还必须监控车道跟踪,以确定车辆是否在同一车道上行驶,或者驾驶员改变车道的频率。如果他变化太频繁,我必须发出警告说“保持警惕”。 当驾驶员右转时,必须弹出一条消息,说明右转;同样,当左转时,必须弹出一条消息,说明左转。 我只允许使用GPS坐标,其他什么都不允许 我该如何处理这个问题?如何使用矢量点/叉积来解决此问题? 任何形式的帮助都将不胜感激 谢谢 首先,我要确保GPS对您的项目足够准确。我

我正在开发一个应用程序,借助Xcode中的mapkit和CoreLocation框架来监控车辆的速度。但我还必须监控车道跟踪,以确定车辆是否在同一车道上行驶,或者驾驶员改变车道的频率。如果他变化太频繁,我必须发出警告说“保持警惕”。 当驾驶员右转时,必须弹出一条消息,说明右转;同样,当左转时,必须弹出一条消息,说明左转。 我只允许使用GPS坐标,其他什么都不允许

我该如何处理这个问题?如何使用矢量点/叉积来解决此问题? 任何形式的帮助都将不胜感激


谢谢

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

首先将位置向量转换为速度和加速度向量,就可以用位置向量解决这个问题。如果这里的时间是恒定的,采样率是固定的和规则的,则可以忽略它,并且可以通过简单的减法实现从位置到速度的转换

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的右旋转向量,只需交换数字并求反。让我们称之为副总裁

ap=A·Vp/|Vp |会将加速度向量投射到指向汽车右侧的向量上,除非他们向后行驶或打滑。是的,这就是我们想要的意味着向右加速意味着向左加速

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

如果你只需要一个横向加速度的标量,这就行了。如果需要实际矢量,请计算出右侧Vp/| Vp |的单位矢量,并按ap进行缩放

Ap=Ap-Vp/| Vp|

所有这些的问题是它完全忽略了地图。如果地图显示道路正在转弯,则向左或向右加速并不一定表示车道改变

因此,你还必须有数据点,表明他们应该采取的路径。将测量的速度应用于路径数据点,并预测垂直加速度。这方面的数学和我已经讲过的差不多。预测和测量之间的差异是车道变化

然而,即使他们驾驶一个完美的路径,这些地图数据点最有可能不会完全匹配您的位置数据点,因为时间。所以你必须做一些插值来预测在采样时垂直加速度应该是多少

正如你所见,答案涉及很多数学问题。也许你应该跟进

只允许使用GPS坐标?你不能使用这个位置。当然?还是指南针的航向?水平精度和头部精度如何?首先,你必须确保你有一个准确的GPS信号和指南针航向,然后才能用它们做任何事情。