本文旨在让大家快速的了解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

sumo快速运行简单仿真实例详细教程的更多相关文章

  1. hadoop_spark伪分布式实验环境搭建和运行实例详细教程

    hadoop+spark伪分布式环境搭建 安装须知 单机模式(standalone): 该模式是Hadoop的默认模式.这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统 ...

  2. Expression Blend实例中文教程系列

    Expression Blend实例中文教程系列 本系列文章均转载:银光中国 时间:2010-04-09 09:20责任编辑:银光中国网 点击:次 Expression Blend实例中文教程系列由C ...

  3. Expression Blend实例中文教程(12) - 样式和模板快速入门Style,Template

    在上一篇,介绍了Visual State Manager视觉状态管理器,其中涉及到控件的样式(Style)和模板(Template),本篇将详细介绍样式(Style)和模板(Template)在Sil ...

  4. Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)

    Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(V 时间:2010-04-12 16:06来源:SilverlightChina. ...

  5. Spring Data JPA系列2:SpringBoot集成JPA详细教程,快速在项目中熟练使用JPA

    大家好,又见面了. 这是Spring Data JPA系列的第2篇,在上一篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring Data JPA,傻傻分不清楚?给你个 ...

  6. Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard http://silverlightchina.net/html/tips/2010/0329/934.html

    Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard 时间:2010-03-29 11:13来源:SilverlightChina.Net 作者:jv9 点击: ...

  7. Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard

    上一篇,介绍了Silverlight动画设计基础知识,Silverlight动画是基于时间线的,对于动画的实现,其实也就是对对象属性的修改过程. 而Silverlight动画分类两种类型,From/T ...

  8. iptables详细教程:基础、架构、清空规则、追加规则、应用实例(转)

    iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置iptables将会帮助你更有效地管理Linux防火墙.如果你是第一次 ...

  9. jquery简单使用(看教程:快全有实例)(固定样式:$().val()设置属性,$().click()设置方法)

    jquery简单使用(看教程:快全有实例)(固定样式:$().val()设置属性,$().click()设置方法) 一.总结 1.jquery不懂之处直接看教程,案例都有,有简单又快 2.jquery ...

随机推荐

  1. Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

    https://my.oschina.net/zhangxufeng/blog/905611

  2. MySQL详解--锁,事务

    http://www.cnblogs.com/jukan/p/5670950.html http://blog.csdn.net/xifeijian/article/details/20313977 ...

  3. 设计模式 --> (14)中介者模式

    中介者模式 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.中介者模式的例子很多,大到联合国安理会,小到房屋中介,都扮演了 ...

  4. Web安全概述

    互联网刚开始是安全的,但是伴随着黑客(Hacker)的诞生,互联网变得越来越不安全.任何一个事情都有两面性,黑客也有好有坏,好的黑客叫白帽子,坏的黑客叫黑帽子.与此同时,随着Web技术发展越来越成熟, ...

  5. 集合源码(一)之hashMap、ArrayList

    HashMap 一.HashMap基本概念: HashMap是基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒 ...

  6. Windows 安装nginx并开机启动

    Win安装nginx并 开机启动 下载nginx安装包 nginx-1.12.2.zip,解压到D盘. https://pan.baidu.com/s/1InQa527yq35Q68c73RBb-A# ...

  7. JavaScript(第十一天)【变量,作用域,内存】

    JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据 ...

  8. 2017-2018-1 Java演绎法 第二周 作业

    团队任务:讨论Android上的游戏软件 参考现代软件工程 第一章 [概论]练习与讨论: 软件有很多种,也有各种分类办法,本次团队任务是讨论选取Android上的一个游戏软件,考虑到每位组员接触的游戏 ...

  9. 【Alpha】咸鱼冲刺日记第一天-黄紫仪

    总汇链接 一,合照 emmmmm.自然是没有的. 二,项目燃尽图 emmmmm,事实上它还没有正式开始.所以依旧没有[突然觉得明天任务真重] 三,项目进展 emmmmm,我错了咸鱼了两天才突然反应过来 ...

  10. PTA题目的處理(四)

    题目7-3 求交错序列前N项和 1.实验代码 #include <stdio.h> //#include <stdlib.h> int main() { ,N; double ...