sumo快速运行简单仿真实例详细教程
本文旨在让大家快速的了解sumo,并给出运行一个简单的sumo的例子的教程,进而了解基本sumo工程的架构,使大家对该软件产生兴趣并持续学习下去,刚开始学习仿真的确枯燥,项目“跑起来”才是大家学习下去的动力,国内参考文献太少了,sumo官网又是纯英文,出于此产生了本篇教程,在写作过程中引用了几位CDDN博主的文章,还有两篇介绍车联网仿真模型的论文,就不一一列出了,知识共享,替大家感谢各位了,不会声明原创,我们都是搬运工!开始正题:
一.简单介绍sumo交通仿真器
SUMO是一个微观的,空间上连续,时间上离散的交通仿真软件,采用c++语言开发,其宏观特征包括带变道的多车道道路,基于道路交叉口的靠右侧行驶规则,支持动态路由,可以管理超过10000条街道的网络。其微观特征包括允许碰撞自由的车辆移动模式,支持单车路由。该软件特点是具有快速的OpenGL图形界面,支持多种网络格式输入,缺点是sumo本身不能提供网络仿真器所需要的轨迹文件。
SUMO可去官网下载,解压后就可以使用,图形界面软是在解压后bin文件夹下的sumo-gui.exe。使用前最好设置环境变量SUMO_HOME。其实不设置似乎也可以使用,但是会有警告。SUMO_HOME的内容就是安装文件的位置,也就是bin文件夹的上一级目录。
SUMO解压之后,作重要的是bin文件夹下的程序和tools文件夹下的程序。bin文件夹下大部分是可执行文件,但是并不像普通的可执行文件一样打开,而是需要用命令行打开,换句话说,整个功能程序并没有被包装起来,这是出于可裁剪和可维护性角度考虑的。tools下的工具则更多的是用phyton写的。
注:可能大家对于车载自主网仿真的一些概念生疏,可以先看两篇介绍的论文作为开胃菜,上知网搜索车载自主网的仿真研究综述和车辆自组织网仿真研究,写的都很好,是不错的车辆自组织网仿真入门的论文。
二.sumo工程结构
SUMO的仿真至少需要两个文件:
1.道路文件,或者叫路网文件(net.xml),就是对行车道路的描述文件;
2.车流文件(rou.xml),或者叫做车量行驶文件,用来描述车流量的行为。当然,更加高级的仿真可以加入别的文件,比如车辆描述文件,地形文件。
这个很容易理解,想要做仿真,最起码要有地图吧,这就是路网文件net,xml;有了地图后是不是还要产生几辆车呢,不管你怎么产生,总之得有车,产生车的规则随意定,这就是rou.xml文件的功能。
道路文件的产生有好多种方法,我们先简单的来了解两个,第一个是从开源的地图上下载osm地图文件,常用的是openstreetmap(osm是一种地图信息文件,可以去openstreetmap官网下载。网址:http://www.openstreetmap.org/),然后利用sumo自带的netconvert工具将osm文件转换为net.xml文件;第二个是自己"编写"net.xml文件,我目前学习到的并不是直接开始编写net.xml文件,因为在sumo规定中,道路是由节点和边组成的,也符合我们一贯的数学思维,所以我们会先编写nod.xml节点文件和edg.xml边文件,然后通过netconvert工具去将这两个文件结合成net.xml文件;除了这两种方法外还有通过OD矩阵啊,等等产生路网文件,不过我还没了解,所以先不做深入介绍,可以到官网查看,官网介绍的很详细,本文主要是做个快速教程。
车流行驶文件即规定车辆数量,车辆行驶规则等,实验目的不同,规则自然千变万化,所以rou.xml的产生自然也有很多的方法,本教程中使用的是sumo自带的一个radomTrips.py,它是一个工具,通过调用这个工具可以在已有的net.xml上产生车辆行驶规则,利用它和上面的net,xml就可以产生rou.xml文件,当然,本实验纯粹为了演示,所以利用的已有的随机路径
三 sumo工程的例子 详细教学
下面就开始进入实验环节,请大家一步一步按照要求来,绝对是可以出结果的
1.软件版本需求
windows系统(sumo在linux下运行效果更好) | 不做要求,xp,7,8,10都可以 |
sumo版本 | 0.30及以上最好 |
Notepad++(为了查看和编辑xml文件) | 可替换,只要能查看编辑xml即可 |
python环境 | 2.7及以上都可以,我用的3.6 |
2.从openstreetmap上下载相关osm地图文件,并做相应处理
上面的软件都安装以后,就可以开始正式进行sumo第一个项目了
(1)打开openstreetmap官网(https://www.openstreetmap.org),在左侧输入框搜索fiarfax VA,然后开始搜索,在出现的选项选择city开头的选项,然后右侧界面会显示你选择的城市的地图
确认之后在右侧可以看到选择的地图的详细情况,不规则红圈标示了范围,外面矩形红圈是我标的,左侧是关于地图的简单介绍
如果该地图不能导出,可以选择别的地方,比如北京,上海等城市,不影响实验结果!
最好将地图保存在和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”的那一行代码,然后保存为typemap.xml,把这个文件保存到上一步骤建的map文件中去,和osm地图文件放一起。
(3)打开sumo/bin/start-command-line.bat,然后就可以用命令行模式对osm文件做处理,会使用linux命令是前提条件,当然在这里你可以照着敲,先cd到map文件夹下进行操作,如果在别的路径下可能会出错
然后输入以下指令
netconvert --osm-files map.osm -o map.net.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.产生map.rou.xml文件
输入命令 python C:/mytest/sumo/tools/randomTrips.py -n map.net.xml -e 100 -l
-n map.net.xml表示输入,-n表述输入的类型是net类型,其实-n等价于--net,-n是一种简写的方式。后面的-l -e 600是随机工具的配置,就像随机数生成函数需要一个种子一样。
但是,这样的一个过程生成的是一个旅程随机过程文件,而我们需要的是一个rou.xml文件。
所以,最后,我们把随机的旅程和道路信息结合起来就获得了车流文件(rou.xml)了。我们要用到的工具是bin文件夹下的duarouter.exe。
输入命令 python C:/mytest/sumo/tools/randomTrips.py -n map.net.xml -r map.rou.xml -e 100 -l
执行成功后可以在map文件夹下查看到map.rou.xml
4.编辑配置文件
编辑配置文件如下图,主要是更改input文件,可以在sumo文件夹中搜索test.sumo.cfg然后更改input文件,便可以得到如下图所示文件,然后把文件命名为map.sumo.cfg并保存到map文件夹中,到这一步,所有运行需要的文件就够了
5.运行map仿真例子
输入指令sumo-gui map.sumo.cfg
设置延时,可以设置在100到200之间,观察效果比较好
点后点击开始按钮,就可以观察仿真效果了,放大可以看到随机运动的车辆
好了,教程就到这里,如果想要了解更多的话,请参考sumo官方文档http://www.sumo.dlr.de/userdoc/SUMO-GUI.html