sumo实例搭建
- 一、SUMO框架简介
- 二、静态net——OpensStreetMap获取
-
- 1.到OpenStrreMap官网选择道路
- 2.net文件和poly文件获取
- 3.rou文件获取
- 4.cfg文件获取
- 5.开始仿真
- 总结
一、SUMO框架简介
sumo的文字资料、安装教程在官网和csdn一抓一大把,不再赘述,我根据自己理解做了个流程框图如下。记得把sumo设置环境变量,and后面的实验是基于Win10做的。
注:图中netconverter、Random trips、duarouter以及后面提到的poly处理工具都是sumo自带的的。
一言以蔽之,先做静态的路,再在路的基础上添加各种动态因素(车、人、交通灯),如果是从现实地图导入路网的话还要进一步处理。然后搞个xml把静态的net和动态rou、附加文件合成cfg完事,之后就可以用GUI打开cfg文件可视化。
二、静态net——OpensStreetMap获取
1.到OpenStrreMap官网选择道路
官网在这里https://www.openstreetmap.org/#map=15/40.0414/116.2870
打开界面大概是这样,显示位置可能不一样,我这个大概在中关村软件园附近。然后按照图中红框指示,点击导出,再手动选择你需要的区域,导出就可以得到.osm文件,默认名字是map.osm,我后面用的都是默认名字。
2.net文件和poly文件获取
为了方便后面的处理,可以在sumo文件夹里建立一个project子文件夹。把刚刚得到的.osm文件放入。
用windows命令行进入project文件夹,执行下列命令,得到net文件。
netconvert --osm-files map.osm -o map.net.xml
然后,因为用的osm,所以做一步poly多余处理,具体原理没搞,希望了解的大佬讲解一下。
还是在project文件夹下,新建txt命名为typemap.xml,里面输入下列代码:
<polygonTypes><polygonType id="waterway" name="water" color=".71,.82,.82" layer="-4"/><polygonType id="natural" name="natural" color=".55,.77,.42" layer="-4"/><polygonType id="natural.water" name="water" color=".71,.82,.82" layer="-4"/><polygonType id="natural.wetland" name="water" color=".71,.82,.82" layer="-4"/><polygonType id="natural.wood" name="forest" color=".55,.77,.42" layer="-4"/><polygonType id="natural.land" name="land" color=".98,.87,.46" layer="-4"/><polygonType id="landuse" name="landuse" color=".76,.76,.51" layer="-3"/><polygonType id="landuse.forest" name="forest" color=".55,.77,.42" layer="-3"/><polygonType id="landuse.park" name="park" color=".81,.96,.79" layer="-3"/><polygonType id="landuse.residential" name="residential" color=".92,.92,.89" layer="-3"/><polygonType id="landuse.commercial" name="commercial" color=".82,.82,.80" layer="-3"/><polygonType id="landuse.industrial" name="industrial" color=".82,.82,.80" layer="-3"/><polygonType id="landuse.military" name="military" color=".60,.60,.36" layer="-3"/><polygonType id="landuse.farm" name="farm" color=".95,.95,.80" layer="-3"/><polygonType id="landuse.greenfield" name="farm" color=".95,.95,.80" layer="-3"/><polygonType id="landuse.village_green" name="farm" color=".95,.95,.80" layer="-3"/><polygonType id="tourism" name="tourism" color=".81,.96,.79" layer="-2"/><polygonType id="military" name="military" color=".60,.60,.36" layer="-2"/><polygonType id="sport" name="sport" color=".31,.90,.49" layer="-2"/><polygonType id="leisure" name="leisure" color=".81,.96,.79" layer="-2"/><polygonType id="leisure.park" name="tourism" color=".81,.96,.79" layer="-2"/><polygonType id="aeroway" name="aeroway" color=".50,.50,.50" layer="-2"/><polygonType id="aerialway" name="aerialway" color=".20,.20,.20" layer="-2"/><polygonType id="shop" name="shop" color=".93,.78,1.0" layer="-1"/><polygonType id="historic" name="historic" color=".50,1.0,.50" layer="-1"/><polygonType id="man_made" name="building" color="1.0,.90,.90" layer="-1"/><polygonType id="building" name="building" color="1.0,.90,.90" layer="-1"/><polygonType id="amenity" name="amenity" color=".93,.78,.78" layer="-1"/><polygonType id="amenity.parking" name="parking" color=".72,.72,.70" layer="-1"/><polygonType id="power" name="power" color=".10,.10,.30" layer="-1" discard="true"/><polygonType id="highway" name="highway" color=".10,.10,.10" layer="-1" discard="true"/><polygonType id="railway" name="railway" color=".10,.10,.10" layer="-1" discard="true"/><polygonType id="boundary" name="boundary" color="1.0,.33,.33" layer="0" fill="false" discard="true"/><polygonType id="admin_level" name="admin_level" color="1.0,.33,.33" layer="0" fill="false" discard="true"/>
</polygonTypes>
这里看的其他教程没有这一步,导致会报 **Error: Cannot read file ‘typemap.xml’!**这个错,所以,自己建一个就可以了。
然后在命令行终端执行下列命令:
polyconvert --net-files map.net.xml --osm-files map.osm --type-file typemap.xml -o map.poly.xml
到此为止,得到了map.net.xml和map.poly.xml文件。
3.rou文件获取
继续在命令行执行以下命令,注意 py文件路径替换一下。
python C:/mytest/sumo/tools/randomTrips.py -n map.net.xml -e 100 -l
这样就产生了随机过程文件,还差一个车流文件,emm按理说应该用到duarouter程序,但看到好多教程没用,执行(注意替换文件路径):
C:\sumo\bin\duarouter -n map.net.xml -t map.trips.xml -o map.rou.xml --ignore-errors
至此就得到了rou文件。
4.cfg文件获取
cfg文件就是把上述信息整合,一般有模板,我用的最简单的,如下。用的话直接建一个.xml,复制进去即可。
<?xml version="1.0" encoding="UTF-8"?><!-- generated on 2022-03-23 17:04:08 by Eclipse SUMO GUI Version 1.12.0
--><configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/sumoConfiguration.xsd"><input><net-file value="D:\sumo\project\crossroad\map.net.xml"/><route-files value="D:\sumo\project\crossroad\map.rou.xml"/><additional-files value="D:\sumo\project\crossroad\map.poly.xml"/></input></configuration>
核心就是中间的input层,定义了需要整合的文件路径。
5.开始仿真
命令行输入 sumo-gui,打开gui。然后open刚刚建立的.sumo.cfg文件,界面如下。
开始后可能立马结束,因为太快了,通过进度条把速度搞慢即可,放大可以找到车,不过默认好像车都是三角形,从上面任务栏 Edit-Edit Visualization 改成 车的形状。
在车流生成时的参数估计有点小,车比较少,得仔细查找。
总结
主要从操作角度讲了一下步骤,原理没咋讲,网上资料太多了。后面再试试Traci调试下。
万里长城第二块砖,期待后面把sumo交通流导入VTD。