sumo实例搭建

  • 一、SUMO框架简介
  • 二、静态net——OpensStreetMap获取
    • 1.到OpenStrreMap官网选择道路
    • 2.net文件和poly文件获取
    • 3.rou文件获取
    • 4.cfg文件获取
    • 5.开始仿真
  • 总结

一、SUMO框架简介

sumo的文字资料、安装教程在官网和csdn一抓一大把,不再赘述,我根据自己理解做了个流程框图如下。记得把sumo设置环境变量,and后面的实验是基于Win10做的。

0基础SUMO简单入门小实例-编程知识网
注:图中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

0基础SUMO简单入门小实例-编程知识网
打开界面大概是这样,显示位置可能不一样,我这个大概在中关村软件园附近。然后按照图中红框指示,点击导出,再手动选择你需要的区域,导出就可以得到.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文件,界面如下。
0基础SUMO简单入门小实例-编程知识网
开始后可能立马结束,因为太快了,通过进度条把速度搞慢即可,放大可以找到车,不过默认好像车都是三角形,从上面任务栏 Edit-Edit Visualization 改成 车的形状。
在车流生成时的参数估计有点小,车比较少,得仔细查找。
0基础SUMO简单入门小实例-编程知识网

总结

主要从操作角度讲了一下步骤,原理没咋讲,网上资料太多了。后面再试试Traci调试下。

万里长城第二块砖,期待后面把sumo交通流导入VTD。