sumo的简单应⽤_sumo快速运⾏简单仿真实例详细教程
本⽂旨在让⼤家快速的了解sumo,并给出运⾏⼀个简单的sumo的例⼦的教程,进⽽了解基本sumo⼯程的架构,使⼤家对该软件产⽣兴趣并持续学习下去,刚开始学习仿真的确枯燥,项⽬“跑起来”才是⼤家学习下去的动⼒,国内参考⽂献太少了,sumo官⽹⼜是纯英⽂,出于此产⽣了本篇教程,在写作过程中引⽤了⼏位CDDN博主的⽂章,还有两篇介绍车联⽹仿真模型的论⽂,就不⼀⼀列出了,知识共享,替⼤家感谢各位了,不会声明原创,我们都是搬运⼯!开始正题:
⼀.简单介绍sumo交通仿真器
SUMO是⼀个微观的,空间上连续,时间上离散的交通仿真软件,采⽤c++语⾔开发,其宏观特征包括带变道的多车道道路,基于道路交叉⼝的靠右侧⾏驶规则,⽀持动态路由,可以管理超过10000条街道的⽹络。其微观特征包括允许碰撞⾃由的车辆移动模式,⽀持单车路由。该软件特点是具有快速的OpenGL图形界⾯,⽀持多种⽹络格式输⼊,缺点是sumo本⾝不能提供⽹络仿真器所需要的轨迹⽂件。
SUMO可去官⽹下载,解压后就可以使⽤,图形界⾯软是在解压后bin⽂件夹下的。使⽤前最好设置环境变量
SUMO_HOME。其实不设置似乎也可以使⽤,但是会有警告。SUMO_HOME的内容就是安装⽂件的位置,也就是bin⽂件夹的上⼀级⽬录。
SUMO解压之后,作重要的是bin⽂件夹下的程序和tools⽂件夹下的程序。bin⽂件夹下⼤部分是可执⾏⽂件,但是并不像普通的可执⾏⽂件⼀样打开,⽽是需要⽤命令⾏打开,换句话说,整个功能程序并没有被包装起来,这是出于可裁剪和可维护性⾓度考虑的。tools下的⼯具则更多的是⽤phyton写的。
注:可能⼤家对于车载⾃主⽹仿真的⼀些概念⽣疏,可以先看两篇介绍的论⽂作为开胃菜,上知⽹搜索车载⾃主⽹的仿真研究综述和车辆⾃组织⽹仿真研究,写的都很好,是不错的车辆⾃组织⽹仿真⼊门的论⽂。
⼆.sumo⼯程结构
SUMO的仿真⾄少需要两个⽂件:
1.道路⽂件,或者叫路⽹⽂件(l),就是对⾏车道路的描述⽂件;
2.车流⽂件(l),或者叫做车量⾏驶⽂件,⽤来描述车流量的⾏为。当然,更加⾼级的仿真可以加⼊别的⽂件,⽐如车辆描述⽂件,地形⽂件。
这个很容易理解,想要做仿真,最起码要有地图吧,这就是路⽹⽂件net,xml;有了地图后是不是还要产⽣⼏辆车呢,不管你怎么产⽣,总之得有车,产⽣车的规则随意定,这就是l⽂件的功能。
车流⾏驶⽂件即规定车辆数量,车辆⾏驶规则等,实验⽬的不同,规则⾃然千变万化,所以l的产⽣⾃然也有很多的⽅法,本教程中使⽤的是sumo⾃带的⼀个radomTrips.py,它是⼀个⼯具,通过调⽤这个⼯具可以在已有的l上产⽣车辆⾏驶规则,利⽤它和上⾯的net,xml就可以产⽣l⽂件,当然,本实验纯粹为了演⽰,所以利⽤的已有的随机路径
三 sumo⼯程的例⼦ 详细教学
下⾯就开始进⼊实验环节,请⼤家⼀步⼀步按照要求来,绝对是可以出结果的
1.软件版本需求
windows系统(sumo在linux下运⾏效果更好)
不做要求,xp,7,8,10都可以
sumo版本
0.30及以上最好
Notepad++(为了查看和编辑xml⽂件)
可替换,只要能查看编辑xml即可
python环境
2.7及以上都可以,我⽤的
3.6
2.从openstreetmap上下载相关osm地图⽂件,并做相应处理
上⾯的软件都安装以后,就可以开始正式进⾏sumo第⼀个项⽬了
确认之后在右侧可以看到选择的地图的详细情况,不规则红圈标⽰了范围,外⾯矩形红圈是我标的,左侧是关于地图的简单介绍
如果该地图不能导出,可以选择别的地⽅,⽐如北京,上海等城市,不影响实验结果!
最好将地图保存在和sumo同⼀层次的⽂件夹中,例如我在C盘下新建了mytest⽂件夹,把sumo解压到mytest⽂件夹下,并且在mytest 下新建了map⽂件,来保存地图⽂件及随后产⽣的各个xml等⽂件,⽅便查看和管理,推荐这样做!
(2)对导出的地图做处理
官⽹原⽂,即下载的osm除了路⽹信息还包含别的东西,需要做简单处理
OSM-data not only contains the road network but also a wide range of additional polygons such as buildings and rivers. These polygons can be imported using POLYCONVERT and then added to a sumo-gui-configuration.
导出的osm地图不仅包含路⽹信息也包含⼤量的别的模块例如建筑和河流,这些模块可以⽤polyconvert⼯具添加到sumo-gui配置⽂件中。
我们⼿动打开sumo\doc\userdoc\Networks\Import\OpenStreetMap.html⽂件,然后在打开的⽹页中间部分 Importing additional Polygons (Buildings, Water, etc.)的下⾯有⼀⼤段xml的代码,复制这些代码,然后在notepad++中级新建⽂件并把复制的代码粘贴到⾥⾯,在本实验中因为不需要,所以删除了下⾯的id=“power”的那⼀⾏代码,然后保存为l,把这个⽂件保存到上⼀步骤建的map⽂件中去,和osm地图⽂件放⼀起。
(3)打开sumo/bin/start-command-line.bat,然后就可以⽤命令⾏模式对osm⽂件做处理,会使⽤linux命令是前提条件,当然在这⾥你可以照着敲,先cd到map⽂件夹下进⾏操作,如果在别的路径下可能会出错
然后输⼊以下指令
netconvert --osm-files map.osm -l
polyconvert --l --osm-files map.osm --l -o l
这⼀步完成后就产⽣了l和l⽂件
3.产⽣l⽂件
输⼊命令 python C:/mytest/sumo/tools/randomTrips.py -l -e 100 -l
-l表⽰输⼊,-n表述输⼊的类型是net类型,其实-n等价于--net,-n是⼀种简写的⽅式。后⾯的-l -e 600是随机⼯具的配置,就像随机数⽣成函数需要⼀个种⼦⼀样。
但是,这样的⼀个过程⽣成的是⼀个旅程随机过程⽂件,⽽我们需要的是⼀个l⽂件。
所以,最后,我们把随机的旅程和道路信息结合起来就获得了车流⽂件(l)了。我们要⽤到的⼯具是bin⽂件夹下的。
输⼊命令 python C:/mytest/sumo/tools/randomTrips.py -l -u.xml -e 100 -l
执⾏成功后可以在map⽂件夹下查看到l
4.编辑配置⽂件
编辑配置⽂件如下图,主要是更改input⽂件,可以在sumo⽂件夹中搜索test.sumo.cfg然后更改input⽂件,便可以得到如下图所⽰⽂件,然后把⽂件命名为map.sumo.cfg并保存到map⽂件夹中,到这⼀步,所有运⾏需要的⽂件就够了
5.运⾏map仿真例⼦
输⼊指令sumo-gui map.sumo.cfg
设置延时,可以设置在100到200之间,观察效果⽐较好
xml文件怎么打开
点后点击开始按钮,就可以观察仿真效果了,放⼤可以看到随机运动的车辆