获得从车辆到RSU的最短路径(如GPS)

时间:2016-11-11 05:51:47

标签: omnet++ veins sumo

我正在研究Veins框架,使用SUMO在OMNET ++内部根据博洛尼亚加入的数据集模拟我的流量(可在http://sumo.dlr.de/wiki/Data/Scenarios获得)。这个想法首先是使用最短路径将消息转发到其目的地(场景中的静止点,RSU)。之后我会做一些改进,但首先我需要知道如何创建从车辆到RSU的最短路线。我见过有人提到Dijkstra这样做,但可能要使用Dijsktra我需要一个场景图并且它不提供图形(可能它将是一个未加权的图形)。你建议我用什么来创建最短的路线?

基本上我需要的是在我的场景中实现一个GPS系统,为我提供通往RSU的最短路径。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您的图表未加权,您可以进行简单的广度优先搜索。图形不需要显式提供,只要您可以检索每个节点的邻居就足够了。在Python中,它看起来类似于以下从节点v开始,寻找节点rsu并且具有提供getNeighbors(n)的邻居的函数n

queue = [v]
bfsTree = {}
bfsTree[v] = None
while len(queue) > 0:
    currentNode = queue.pop(0)
    for n in getNeighbors(currentNode):
        if n not in bfsTree:
            bfsTree[n] = currentNode
            if n == rsu:
                del queue[:]
                break
            queue.append(n)
if rsu not in bfsTree:
    print("no path from v to rsu")
else:
    path = [rsu]
    while path[0] != v:
        path.insert(0, bfsTree[path[0]])
    print("shortest path from v to rsu:", path)

答案 1 :(得分:0)

如果您只是在街道图中寻找最短路径,您可以轻松地使用现有的TraCI功能。您可以使用此命令http://sumo.dlr.de/wiki/TraCI/Change_Vehicle_State#change_target_.280x31.29更改车辆的目标,然后使用带有边缘的http://sumo.dlr.de/wiki/TraCI/Vehicle_Value_Retrieval#Command_0xa4:_Get_Vehicle_Variable检索路线边缘。

静脉中的相应功能是TraCICommandInterface::Vehicle::newRoute(std::string roadId)TraCICommandInterface::Vehicle::getPlannedRoadIds()

相关问题