本文旨在让大家快速的了解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的简单应用_sumo快速运行简单仿真实例详细教程相关推荐

  1. sumo快速运行简单仿真实例详细教程

    本文旨在让大家快速的了解sumo,并给出运行一个简单的sumo的例子的教程,进而了解基本sumo工程的架构,使大家对该软件产生兴趣并持续学习下去,刚开始学习仿真的确枯燥,项目"跑起来&quo ...

  2. Windows11安装安卓/Android子系统运行安卓应用程序详细教程

    Windows11安装安卓子系统运行安卓应用程序详细教程 Windows11安装安卓子系统运行安卓应用 开启虚拟化支持 下载安卓子系统 安装安卓子系统 下载安装配置abd环境 adb连接安卓子系统 安 ...

  3. 怎么提取伴奏?只要三招即可快速搞定,附带详细教程

    有没有跟我一样喜欢唱歌的小伙伴呀?我闲暇时就喜欢在k歌平台上录歌并分享给好友,但有时因为一些个别原因,部分歌曲找不到伴奏,从各大音乐平台上下载下来的音频也是带有原唱,这可就无法展现我的唱歌" ...

  4. 如何安装一个虚拟机?(简单15步,安装VMware16.1.1详细教程)

    [软件名称]:VMware16.1.1 [安装环境]:Win10/Win8/Win7 VMware(虚拟机)是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统,通 ...

  5. cookie购物车php简单,php中利用cookie实现购物车实例_PHP教程

    – phpMyAdmin SQL Dump – version 2.11.9.2 – – 主机: 127.0.0.1:3306 – 生成日期: 2009 年 12 月 06 日 02:05 – 服务器 ...

  6. 前后端分离必备工具:Swagger快速搞定(整合SpringBoot详细教程)

    本文根据狂神教学视屏同步所做笔记 目录 一.Swagger简介 1. 前后端分离 2. Swagger引入 二.SpringBoot集成Swagger 1. 新建springboot项目 2. 导入S ...

  7. omnet++ 快速入门 | 计算机网络仿真 | omnet++ 入门教程

    文章目录 omnet 1 网络仿真软件综述 01 wsn仿真软件 02 为什么使用omnet 03 学习资料 04 目标 2 omnet介绍 1 omnet安装与启动 2 使用omnet仿真的一般步骤 ...

  8. 教你如何快速安装Pycharm2018——Pycharm2018安装详细教程(附激活软甲+永久破解)

    安装教程 下载pycharm 2018.3.2安装文件,可以直接点击下载网盘下载 激活码下载地址 http://demo.liuy88.cn/jp0616.html 下载完成后,双击exe即可开始安装 ...

  9. docker 添加端口映射_Docker快速搭建PHP开发环境详细教程

    想必作为一个web开发的程序员,近些年对docker技术一定不会陌生,docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux ...

最新文章

  1. linux实现时间服务器视频,linux实现时间同步有哪几种方法
  2. mysql配置以及性能优化(转)
  3. Leetcode 系列 | 反转链表
  4. 如何使用curl访问k8s的apiserver
  5. Matlab打开文件替换变量,读取matlab某个路径下的“.mat”文件,改变文件中的内容,并以原名字,变量保存...
  6. zdc找不到xenapp服务器,Citrix XenApp 在检测过程使用时出错
  7. python手机安装不了软件怎么办_安装python安装方法
  8. 【流体力学】从无量纲化的NS方程看几个准则数:施特劳哈尔数、雷诺数、弗劳德数
  9. 测试用例方法--等价类划分法
  10. 开源超级终端工具——WindTerm
  11. MATLAB学习笔记 imagesc函数使用
  12. 恐龙涂色游戏 - 恐龙画画世界填色游戏
  13. Android 3D 旋转
  14. DEVC++实现街头篮球(爷青回)(1.01版)
  15. Win10“混合现实门户”图标更新:加入Fluent Design风格
  16. 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 C 颜料的混合 (计算几何)
  17. 浙大版《C语言程序设计实验与习题指导(第4版)》题目集-编程题-实验1-1-Hello World!
  18. 1580_AURIX_TC275_SMU模块初步
  19. GNOME Commander: Linux文件管理器
  20. 百度地图 JavaScript API GL

热门文章

  1. php创建表设置编码,教您在Zend Framework里如何设置数据库编码以及怎样给数据表设定前缀!...
  2. 熔断器熔断时间标准_一种熔断器熔断时间测试电路的制作方法
  3. C++编译时多态和运行时多态
  4. empinfo Oracle数据库,Oracle数据库---包
  5. php java执行linux_java_java执行Linux命令的方法,本文实例讲述了java执行Linux命 - phpStudy...
  6. python mysql 正则表达式,MySQL之正则表达式(REGEXP)
  7. Python二级笔记(9)
  8. 4-什么是Image和container
  9. SpringMVC源码解析(四)——请求处理
  10. 加拿大大数据:正在升温的大数据市场