veins车载通信仿真框架(2)--SUMO地图替换

对于veins仿真,我这两天首先先从sumo学起,感觉只用veins自带的地图太无聊,而且看基础知识也没有成就感,就想着至少把地图换了,至少表面上可以有一个成果,查了好多资料,发现使用openStreetMap中的资源是最便捷的啦

OpenStreetMap

OpenStreetMap 是一个由地图制作爱好者组成的社区,大家可以登录相应网站:https://www.openstreetmap.org/ 下载对应的.osm文件。

首先进入官网,点击左上方导出(Export)按钮,此时在左侧就会出现下图所示的界面,此时通过点击手动选择不同的区域(Manually select a different area),自己选择想要的地图范围,点击导出(Export),这样就会生成相应的map.osm文件(大家选择的范围建议不要过大,不然就很容易下载失败的)。


利用map.osm生成SUMO地图

在桌面点击Activities选择第五个Files,找到Downloads里面的map.osm(我是默认下载到这里了,大家根据自己选择的下载地址找到相应的文件) 剪切map.osm文件,进入Home-->src并新建文件夹map,并将map.osm文件粘贴到这里(文件夹位置在哪里都好,并不影响后面的操作,方便管理就好)

在桌面点击Activities-->在搜索框Type to search 搜索Terminal进入终端,(反正我使用快捷键进入终端没反应),

cd src/map    进入map文件夹下面(如果找不到位置,就从根目录下寻找:cd /home/veins/src/map)


此时会利用sumo bin目录下的netconvert, polyconvert,以及sumo tools目录下的randomTrips.py生成相应的SUMO仿真文件。

在这里说明一下SUMO的车载仿真至少需要两个文件(道路和车嘛):

1.道路的文件:是.net.xml形式的文件,该文件就是对车辆所行驶的道路进行描述;
2.描述车辆行驶:存储在.rou.xml文件中,该文件主要是用来描述车辆的行为;

(1).net.xml道路文件生成

在终端输入:   

netconvert --osm-files map.osm -o map.net.xml

生成.net.xml文件,此时我这里出现了如下的错误:

veins车载通信仿真框架(2)--SUMO地图替换_第1张图片

此时配置一下环境变量就好啦,在文件中永久配置请自行百度(与本文关系不大嘛,要不又可以写一个小博客啦),我这里就先配置临时的环境变量,方便后面的操作。

在终端输入 

export SUMO_HOME=/home/veins/src/sumo-0.30.0

 就可配置临时环境变量了


此时在重新输入 netconvert --osm-files map.osm.net.xml  就应该没问题啦

veins车载通信仿真框架(2)--SUMO地图替换_第2张图片

说明:netconvert作为一种转换工具,顾名思义可以将.osm文件转换成.net.xml文件,其中--osm-files map.osm是输入,--osm-files即表示输入文件类型, -o map.net.xml是输出, -o 即output的意思,map.net.xml即为输出文件

(2).rou.xml车辆行为文件生成

在这里将利用脚本randomTrips.py生成相应的.rou.xml文件。由于车辆的行为是多种多样的,因此脚本randomTrips.py的作用就是根据道路状况随机化车辆行为。
在终端输入:
/home/veins/src/sumo-0.30.0/tools/randomTrips.py -n map.net.xml -e 100 -l

回车,没有消息就是好消息,此语句执行后,在map文件夹中生成一个.trip.xml文件,trip在SUMO中表示从一条公路到另一条公路的意思,即通过该语句随机生成了车辆行驶的路径,-e 100 -l是随机工具的配置,具体含义可执行 randomTrips.py -help进行查看

最后通过执行:

/home/veins/src/sumo-0.30.0/tools/randomTrips.py -n map.net.xml -r map.rou.xml -e 100 -l 

将道路和行驶路径整合形成车辆的行驶行为。


(3).poly.xml地形文件生成

polyconvert同样作为一种转换工具,可以根据.net.xml和.osm文件生成相应的地形文件,之所以需要该文件是因为在veins仿真过程中,该文件将会被使用。要生成.poly.xml文件,在终端输入如下命令:

polyconvert --net-file map.net.xml --osm-files map.osm -o map.poly.xml

\

(4).sumo.cfg文件生成

.sumo.cfg是相应的配置文件新建一个文件map.sumo.cfg,编写其内容为:





    
        
        
        
    

    

    
        
    

    
        
    

该内容可以复制在/home/veins/src/veins/examples/veins/erlangen.sumo.cfg的内容, 并在input中的参数进行相应修改

(使用sumo-gui查看结果)

在终端输入

sumo-gui map.sumo.cfg 

开启sumo可视化界面


点击 NO,将上方偏右的Delay填上相应的延迟数值,点击绿色按钮或者(图中红色按钮旁边的橙色箭头组成圆圈的按钮),即可看到最终效果。

veins车载通信仿真框架(2)--SUMO地图替换_第3张图片

veins车载通信仿真框架(2)--SUMO地图替换_第4张图片

至此至少可以证明所做的地图是没有问题的。

(5)加载地图到veins中

按照上一篇博客的方法,打开omnet++,

复制map.net.xml,map.rou.xml,map.poly.xml,map.sumo.cfg道路文件,车辆行为文件,地形文件以及配置文件到veins-->examples-->veins中,同时修改erlangen,launchd.xml中的相应内容:




	
	
	
	

右键veins-->examples-->veins-->omnetpp.ini,点击run as -->OMNet++ Simulation,运行veins,得到如下结果:


成功,心好累啊

出现的各种问题:由于本文只是对SUMO地图进行更改,所以大多是发生的错误应该发生在SUMO及相应的配置文件中,因此,如果此时出现问题,则我们首先要看sumo-launchd终端页面。

(1)首先如果Warning Environment variable SUMO_HOME...那就是提示你需要配置环境变量啦,虽然后面还可能有error,先解决环境变量问题(诶?刚刚不是已经配置临时环境变量了么?而且单独运行SUMO也没问题呀)。就是把上面的

export SUMO_HOME=/home/veins/src/sumo-0.30.0

写到文件/etc/profile中

veins车载通信仿真框架(2)--SUMO地图替换_第5张图片

然后重启,发现还是报错,正准备放弃关机的时候,不小心按了重启,再运行居然就好用了,也是见了鬼了

(2)如果修改了地图,大家也可能会遇到类似这样的错误

veins车载通信仿真框架(2)--SUMO地图替换_第6张图片

这说明,大家建立的地图太大了,playground(就是灰色覆盖部分,正常情况下,灰色部分要大于地图)不够用啦仿真出现问题。此时双击omnetpp.ini 在中间选择source,在26,27行修改相应的值,同时,为了美观,也可以在56,57行调节RSU的位置哦

veins车载通信仿真框架(2)--SUMO地图替换_第7张图片

目前我所了解的内容就是这些,如果有其他问题,或者遇到问题有对应的解决方案欢迎留言,我也是新手,欢迎大家一起来讨论




你可能感兴趣的:(veins车载通信仿真框架(2)--SUMO地图替换)