我希望将一些交通模拟作为一个副项目,但我无法想出我应该如何代表道路本身的想法。我喜欢使用一系列航路点(使用纬度/经度坐标的直线)的想法,但使用这种方法似乎很难表示不同的交通车道。我也一直在研究其他一些交通模拟问题,其中一个提到使用位图,但我无法确定这将如何让我轻松地将真实世界的长度分配给路段和车道宽度等。有没有人有任何有用的提示或其他想法可以让汽车存在于道路上的特定点并能够切换车道等?
3 回答
我将从连接节点的网格开始。一个节点将代表道路状况的变化,例如十字路口、起点或终点车道、道路本身的加宽等。要么您进行复杂的连接以存储所有信息(双向车道?每个方向有多少车道?车道属性等),或者您为每条车道保存一个连接。为确保节点不同侧的 2 个连接与同一通道相关,您可以在每个节点基础上使用通道 ID。
这样,您就有了一个可以运行计算的图表,并且您拥有所有数据来可视化整个网络。
这真的取决于你想用你的模型做什么,所以很难在这里找到“正确”的答案。
如果要对拥塞进行建模,则可能根本不需要网络。您可以在圆形道路上进行模拟。
你真的需要车道的概念吗?如果这样做,您可以将它们建模为节点之间的单独线,或者仅存储每条道路的车道数就足够了。
无论如何,我要说的是,在开始考虑确切的数据模型之前,您应该首先更深入地考虑您想要实现的目标。
在之前的工作中,我是驾驶模拟器的首席开发人员,特别是道路网络建模。我建立了我所谓的逻辑道路网络,它是道路网络的抽象描述,用于跟踪道路上的车辆。
车道只是一条沿着道路的路径,但与中心路径有正或负的距离。每条道路要么是直线路段,要么是曲线路段,本质上是一条中央顶点路径,两侧有一条或多条偏移车道。然后,自动驾驶汽车可以沿着车道行驶。
简而言之,构成道路的多边形是围绕道路的中央路径构建的,例如
*------*------*
|\ |\ |
| \ | \ |
| \ | \ |
| \ | \ |
| \ | \ |
| \| \|
*------*------*
其中 * 是一个顶点,为这个简单的直线路段创建 4 个多边形。
沿路径的 2 个顶点之间的插值提供了一种沿给定方向移动车辆的简单方法。在这条简单的路径之上,我们随后为自动驾驶汽车引入了一些模糊性,以便出现路径中的小偏差(创建更真实的交通)。从逻辑上讲,车辆被添加到路段或从路段中移除,车辆可以检查路段以查看前方、后方或不同车道上的其他车辆。这使得每辆车内都有一定程度的人工智能,这样他们就可以在另一辆车后面放慢速度,或者在转弯之前等待迎面而来的车辆通过。
不确定这是否正是您所追求的,但我希望它仍然有帮助:-)