SUMO交通仿真软件入门使用
- 1 软件安装
- 1.1 简单介绍sumo交通仿真器
- 1.2 SUMO下载
- 1.3 环境变量配置(其实这一步不做也可以,只是后面就没法直接在命令行下直接使用sumo)
- 2.地图下载及格式转换
- 3.仿真开始
由于以后可能还会做有关交通仿真的工作,写个博客记录一下防止以后忘了(狗头
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
启动,可放大缩小观看道路上的车辆(黄色三角形)