如何将静脉与现有的SUMO模拟相结合?

时间:2018-08-27 21:24:32

标签: omnet++ veins sumo

我对交叉路口交通控制算法已有自己的SUMO仿真,可以在线生成车辆,获取车辆信息,制定计划决策并控制每辆车。我在模拟中假设车辆和路口代理之间实现了完美的沟通。现在,我想使用静脉模拟现实的交流。但是,在阅读了许多文章并成功遵循了静脉教程之后,我仍然不清楚如何实现它。

大致了解到我有两种选择:
1.使用针对汽车行为的TraCIDemo11p文件和针对交叉代理的TraCIDemoRSU11p文件来实现该算法。问题是我需要再次使用C ++进行所有操作,而我不是C ++的专家。
2.我读了一篇文章: https://groups.google.com/forum/#!topic/omnetpp/XEazGbgq3eA

电子邮件中询问的问题与我的问题非常相似。 Christoph提供了以下解决方案:

  

对于这种复杂的交互,最好将所有捆绑在一起   Python脚本中的多路复用功能,然后运行   没有traci-launchd的模拟。

     

启动静脉时,它将尝试连接到已配置的TraCI服务器   (默认情况下,TCP端口9999上的localhost),然后发送TraCI命令   指示服务器启动SUMO,然后输入一些   订阅请求。

     

在模拟过程中,静脉将反复发送CMD_SIMSTEP   命令并等待订阅结果(即节点离开,   移动,到达)。

     

您的脚本可能会延迟将每个CMD_SIMSTEP命令从静脉传递到   SUMO(并将结果中继回静脉),直到准备好   处理下一个时间步。

     

如果脚本在端口9999上侦听,则读取TraCI命令,并丢弃   第一条消息,然后将其余命令传递给   (已经)正在运行SUMO实例,它可以用作此多路复用   点。

     

您可以使用从静脉到脚本的其他附加TraCI消息流   会在每个时间步更新存储的连接信息副本。

基本上,我需要创建静脉,并且我的模拟代码都连接到SUMO。每次静脉从SUMO读取运动轨迹并模拟一个时间步的通讯,然后我的算法从SUMO读取静脉的通讯数据和车辆数据,然后向SUMO发送控制命令。最后,SUMO模拟一个时间步,然后回到脉络。

我的问题是:
1.我的理解正确吗?这两种方法可行吗? 2.我喜欢第二种方法,因为它可能需要更少的时间。但是我不知道如何从发送给SUMO的数据静脉中分离CMD_SIMSTEP命令?我相信我应该在sumo-launchd.py中修改forward_connection()函数,但是我不确定如何更改数据变量。 3.对于静脉连接信息的复制,我不知道从何处获得它们?

非常感谢您的帮助。

更新:来自SUMO文档:

  

客户端必须使用与TraCI / Control相关的命令来触发SUMO中的每个模拟步骤#Command 0x02:Simulation Step命令。如果已完成任何预订,则返回已预订的值。一旦所有客户端都发送了仿真步骤命令,仿真将前进到下一个。

对于第二个问题,这是否意味着我不需要在forward_connection()函数中进行任何修改。我只需要弄清楚如何将SUMO与两个客户端(omnetpp和我的算法程序)连接?

更新:我能够成功地遵循静脉教程,现在我能够修改sumo-launchd.py以允许另一个客户端连接SUMO。我试图找出如何从静脉/ omnetpp获取通信数据。

0 个答案:

没有答案
相关问题