【问题标题】:Getting the shortest path from a vehicle to a RSU (Like a GPS)获取从车辆到 RSU 的最短路径(如 GPS)
【发布时间】:2016-11-11 05:51:47
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: omnet++ veins sumo


    【解决方案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)
    

    【讨论】:

    • 感谢您的回答,但该解决方案似乎给出了节点到达 RSU 的路径,我需要到达目的地的路线(街道或十字路口的名称),类似于GPS 系统可以。
    【解决方案2】:

    如果您只是在街道图中寻找最短路径,则可以轻松使用现有的 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 与边缘检索路线边缘。

    Veins中对应的函数是TraCICommandInterface::Vehicle::newRoute(std::string roadId)TraCICommandInterface::Vehicle::getPlannedRoadIds()

    【讨论】:

    • 抱歉这么久才回答,在测试之前我正在对代码和场景进行一些调整。这似乎是我需要的,但是使用这些功能会改变车辆路线,我该如何防止这种情况发生?。
    • 您可以保存旧路线并在之后重置它,或者添加一个虚拟车辆仅用于路线计算。
    猜你喜欢
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多