SUMO仿真器跑起来需要有三个文件
***.net.xml
文件:路网构建、创建交通信号灯等,生成道路文件;***.rou.xml
文件:生成车辆文件;***.sumocfg
文件:将net.xml和rou.xml文件结合起来实现仿真。
SUMO地图替换
SUMO中路网文件的编写可以直接用 netedit 软件绘制,也可以用netconvert
命令转换第三方来源中的复杂路网。总体包括道路、交叉口的id和位置信息、车道信息(数量、长度、最大速度、形状、功能等)、优先权信息、交通信号信息、交叉口信息等。下面介绍了两种生成SUMO路网文件的方法。
1. 使用netconvert转换工具
使用 netconvert
命令,能够将多种第三方的路网文件转化为SUMO可读的文件,具体可转化的第三方来源有:OpenStreetMap(一种开源的地图引擎)、OpenDrive、MATsim、ArcView 等。例如在linux系统下使用OpenStreetMap导入地图操作如下:
***.osm
文件生成
首先进入OpenStreetMap官网(https://www.openstreetmap.org/),按下图步骤选择区域并导出map.osm
文件;
将导出的文件复制到linux系统中,然后再利用sumo bin目录下的netconvert、polyconvert转换工具和sumo tools目录下的randomTrips.py
工具生成相应的SUMO仿真文件。具体步骤如下:
***.net.xml
道路文件生成
打开终端
输入以下内容生成道路文件
netconvert --osm-files map.osm -o map.net.xml
如果报错则需要配置临时环境变量,在终端输入以下内容配置临时变量(注意 sumo 版本)
export SUMO\_HOME=/home/veins/src/sumo-1.11.0
netconvert可以将***.osm
文件转换成***.net.xml
文件,--osm-files
即表示输入文件类型, -o map.net.xml
是输出, -o
即output的意思,map.net.xml即为输出文件。
***.rou.xml
车辆行为文件生成
由于车辆的行为是多种多样的,所以可以利用SUMO中的randomTrips.py
脚本根据道路状况随机化车辆行为生成相应的***.rou.xml
文件。在终端输入以下内容将道路和行驶路径整合生成车辆行为文件
/home/veins/src/sumo-1.11.0/tools/randomTrips.py -n map.net.xml -e 100 -l
/home/veins/src/sumo-1.11.0/tools/randomTrips.py -n map.net.xml -r map.rou.xml -e 100 -l
-n map.net.xml
指定了路网文件,-e 100
定义了模拟时间结束的时刻(以秒为单位),-l
指示脚本在每个行程结束时让车辆再次出发,形成一个循环的行程。-r map.rou.xml
参数用于指定生成的路由文件的输出名称和位置。
也可以类似示例代码 erlangen.rou.xml
文件中使用<flow>元素定义一组具有相同特性(例如车辆类型、路线、发车时间等)的车辆。
<routes>
<vType id="vtype0" accel="2.6" decel="4.5" sigma="0.5" length="2.5" minGap="2.5" maxSpeed="14" color="1,1,0"/>
<route id="route0" edges="-39539626 -5445204#2 -5445204#1 113939244#2 -126606716 23339459 30405358#1 85355912 85355911#0 85355911#1 30405356 5931612 30350450#0 30350450#1 30350450#2 4006702#0 4006702#1 4900043 4900041#1"/>
<flow id="flow0" type="vtype0" route="route0" begin="0" period="3" number="195"/>
</routes>
意思是,在仿真开始时间0的时候,有195辆类型为 “vtype0” 的车辆开始按照 “route0” 的路线行驶,每 3 秒钟就有一辆车开始行驶。每辆车的加速度为 2.6,减速度为 4.5,长度 2.5,最小间隔2.5,最大速度 14,颜色为黄色(RGB值为1,1,0)。sigma 是车辆驾驶员模型的一个参数,它代表驾驶员的“”驾驶错误”或“驾驶不确定性”。sigma值越高,驾驶员的行为就越随机,反之则更接近理想的驾驶行为。
如果仿真需要修改车流行驶路线,可以在 netedit
中打开 ***.net.xml
路网文件获取道路 id,按照道路顺序(注意车辆行驶方向)将 route id
填入相应为位置,即可生成一组具有相同特性(例如车辆类型、路线、发车时间等)的车辆。
***.poly.xml
地形文件生成
因为在 veins 仿真过程中,将用到地形文件。polyconvert 转换工具可以根据 ***.net.xml
和 ***.osm
文件生成相应的地形文件。在终端输入以下内容生成地形文件
polyconvert --net-file map.net.xml --osm-files map.osm -o map.poly.xml
***.sumo.cfg
配置文件生成
使用 vim
或 touch
命令新建一个map.sumo.cfg
文件,编写并保存内容如下
<?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"/>
<step-length value="0.1"/>
</time>
<report>
<no-step-log value="true"/>
</report>
<gui_only>
<start value="true"/>
</gui_only>
</configuration>
- 开启可视化界面
在终端输入以下内容
sumo-gui map.sumo.cfg
此时会打开SUMO的GUI,按下图操作观察SUMO车辆行为仿真。
如果需要对地图进行小部分修改,可以点击 Edit->Open in netedit
。注意:修改之后,意味着***.net.xml
道路文件发生变化,需要重新生成车流行为文件,避免报错。
如果地图太大,边缘多余道路、地铁线等可以使用JSOM软件(https://josm.openstreetmap.de/)进行地图编辑,之后重新生成车辆行为文件即可。
- 加载地图到Veins中
复制路网文件(map.net.xml)、车辆行为文件(map.rou.xml)、地形文件(map.poly.xml)、配置文件(map.sumo.cfg)到OMNeT++示例项目的Veins -> examples -> veins
路径下,同时修改erlangen.launchd.xml
和erlangen.sumo.cfg
中的相应内容,如下:
或者重新生成 map.launchd.xml
和 map.sumo.cfg
文件,并在 omnetpp.ini
文件中修改相应内容,如下:
运行omnetpp.ini
文件,并根据需求在.ini
配置文件下更改相应内容。
如果刚运行就出现如下错误:
说明无法成功连接到 TraCI(Traffic Control Interface)服务器,TraCI 服务器是 SUMO 交通模拟器的一部分。这时只需要点击 Activities->veins_launchd
打开,出现如下界面即可再次运行 omnetpp.ini
。
运行后如遇到下述情况,则需要在 omnetpp.ini
文件中修改仿真区域范围大小:
2. 用netedit软件绘制地图
- 路网编辑
打开 netedit 软件通过选择 File->New Network
创建一个新网络,并确保 Network 被选中。以生成一个九宫格地图(2k×2k)为例。
- 进入netedit:
...\sumo\bin\netedit.exe
- 创建网络:选择
File->New Network
创建一个新网络 - 创建节点和边并修改属性:edge mode->(创建多个节点打开chain mode 模式)->inspect mode修改属性
- 添加反向车道:鼠标右键边->Edge operations->Add reverse direction for edge
-
根据需求 create TLS
-
路网保存
将保存的***.net.xml
文件复制到veins,之后的操作参照方法1,但是由于没有建筑物等,不用生成地形文件***.poly.xml
,在***.sumo.cfg
文件中删除<additional-files value="***.poly.xml"/>
。
最后,在终端输入sumo-gui ***.sumo.cfg
,运行效果如下: