SUMO交通仿真软件从0到1使用【亲测有用】有疑问评论区可解答


由于以后可能还会做有关交通仿真的工作,写个博客记录一下防止以后忘了(狗头

1 软件安装

1.1 简单介绍sumo交通仿真器

“城市交通仿真”(SUMO)是一个开源、高度便携、微观和连续的交通仿真软件包,旨在处理大型网络。它允许包括行人在内的多式联运仿真,并配有一套用于场景创建的大型工具。它主要由德国航空航天中心运输系统研究所的员工开发。

SUMO是一个微观的,空间上连续,时间上离散的交通仿真软件,采用c++语言开发,其宏观特征包括带变道的多车道道路,基于道路交叉口的靠右侧行驶规则,支持动态路由,可以管理超过10000条街道的网络。其微观特征包括允许碰撞自由的车辆移动模式,支持单车路由。该软件特点是具有快速的OpenGL图形界面,支持多种网络格式输入,缺点是sumo本身不能提供网络仿真器所需要的轨迹文件。

1.2 SUMO下载

在这里插入图片描述

SUMO可去官网下载(链接:https://sumo.dlr.de/docs/Downloads.php),解压后就可以使用,图形界面软是在解压后bin文件夹下的sumo-gui.exe。
比如我下载的就是这个1.11.0版本的zip压缩包
在这里插入图片描述

1.3 环境变量配置(其实这一步不做也可以,只是后面就没法直接在命令行下直接使用sumo)

环境变量配置很简单,不过我本人喜欢看不用脑子的手把手教程,又基于本文是为新手小白使用所以手把手写上环境变量的配置过程

1.直接搜索框搜环境变量
在这里插入图片描述
在这里插入图片描述
2.点击新建在这里插入图片描述
3.设置变量名值如下(每个人的都不同,看清了再配置),点确定。
这个路径就是你存放的sumo解压包的位置,比如我的sumo解压在G盘下,这里的路径就是G:\SUMO\sumo-0.19.0)
在这里插入图片描述
4.然后再添加PATH路径(这个路径就是你存放的sumo文件的bin目录下,比如我的sumo解压在G盘下,这里的路径就是G:\SUMO\sumo-0.19.0\bin)
在这里插入图片描述
在这里插入图片描述
5.配置完成点击确定
win+R调出命令行窗口输入sumo,出现如下结果即可,没出现就是上面配置的哪一步错了,仔细看重新做一次。
在这里插入图片描述

2.地图下载及格式转换

1.从openstreetmap上下载相关osm地图文件

打开openstreetmap官网(https://www.openstreetmap.org),在左侧输入框搜索fiarfax VA,然后开始搜索,在出现的选项选择city开头的选项,然后右侧界面会显示你选择的城市的地图
在这里插入图片描述
点击导出,就会下载一个osm文件,最好将地图保存在和sumo同一层次的文件夹中,例如我在G盘下新建了SUMO文件夹,把sumo解压到SUMO文件夹下,并且在SUMO下新建了Project文件,来保存地图文件及随后产生的各个xml等文件,方便查看和管理,推荐这样做!
在这里插入图片描述
2.对导出的地图做处理

手动打开sumo\doc\userdoc\Networks\Import\OpenStreetMap.html文件(官方教程),然后在打开的网页中间部分 Importing additional Polygons (Buildings, Water, etc.)的下面有一大段xml的代码,复制这些代码,然后在notepad++中级新建文件并把复制的代码粘贴到里面,然后保存为typemap.xml,把这个文件保存到上一步骤建的Project文件中去,和osm地图文件放一起。

这里为了方便我直接把代码给大家弄过来了,ctrl+c/v即可

<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>

3.打开sumo/bin/start-command-line.bat,然后就可以用命令行模式对osm文件做处理。先cd到Project文件夹下进行操作
在这里插入图片描述
4.生成map.net.xml路网文件

输入:netconvert --osm-files map.osm -o map.net.xml
提示一串warning,最后success
在这里插入图片描述
5.生成map.poly.xml地形文件

输入:polyconvert --net-file map.net.xml --osm-files map.osm --type-file typemap.xml -o map.poly.xml
在这里插入图片描述
6.接下来生成map.rou.xml 车流文件
输入:Python G:/SUMO/sumo-1.10.0/tools/randomTrips.py -n map.net.xml -e 100 -l(这里是l,英文字母l不是1)
(大家路径肯定跟我的不一样,记得改一下)
-n map.net.xml表示输入,-n表述输入的类型是net类型,其实-n等价于–net,-n是一种简写的方式。后面的-l -e 600是随机工具的配置,就像随机数生成函数需要一个种子一样。

7.但是,这样的一个过程生成的是一个旅程随机过程文件,而我们需要的是一个rou.xml文件。
所以,最后,我们把随机的旅程和道路信息结合起来就获得了车流文件(rou.xml)了。我们要用到的工具是bin文件夹下的duarouter.exe。

输入:Python G:/SUMO/sumo-1.10.0/tools/randomTrips.py -n map.net.xml -r map.rou.xml -e 100 -l (它调用了duarouter)
在这里插入图片描述可以看到map文件夹已经生成map.rou.xml

在这里插入图片描述
8.编写map.sumo.cfg 配置文件

这个文件是需要新建的,后缀名为xml。注意修改里面的参数

代码如下

<?xml version="1.0" encoding="iso-8859-1"?>
 
 
 
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.sf.net/xsd/sumoConfiguration.xsd">
 
 
 
<input>
 
<net-file value="map.net.xml"/>
 
<route-files value="map.rou.xml"/>
<additional-files value='map.poly.xml'/>
 
</input>
 
 
 
<time>
 
<begin value="0"/>
 
<end value="1000"/>
 
</time>
 
<!-- <report>
<no-duration-log value="true"/>
<no-step-log value="true"/>
</report> -->
 
 
 
</configuration>

3.仿真开始

运行仿真,在sumo/bin/start-command-line.bat窗口中输入 sumo-gui map.sumo.cfg

弹出弹窗 可以设置延时delay200

启动,可放大缩小观看道路上的车辆(黄色三角形)
在这里插入图片描述
参考:https://blog.csdn.net/weixin_41286835/article/details/102723793?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163988112116780255262354%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163988112116780255262354&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-102723793.first_rank_v2_pc_rank_v29&utm_term=sumo%E4%BB%BF%E7%9C%9F&spm=1018.2226.3001.4187

(部分图片为原图,懒得改)

  • 22
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白开水就盒饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值