本文主要介绍 SUMO 自带的可视化路网编辑工具 netedit 的使用方法,并在其基础上进行简单的交通流仿真。
一、netedit 简介
除了从外部导入 SUMO 仿真所需要的路网文件,可视化路网编辑器 netedit 也可以根据需求自行定义路网或修改已存路网的各方面的细节。相比较外部导入路网,netedit 使路网编辑更加灵活,可按需求灵活定义路网仿真场景,大大提高仿真效率。与外部导入地图相同,netedit 最终也是生成 *.net.xml 文件,并在 sumo-gui 中进行仿真。
二、使用 netedit 定义简单路网
下面定义一个简单的双向六车道十字路口:
打开 netedit.exe ,点击 File -> New Network ,新建路网,保存为 *.net.xml 格式。
点击下图所示按钮添加边和连接点
此时设置中心点的坐标为(0,0),其余四条边分别设置为(100,0)(0,-100)(-100,0)(0,100),此时便生成了一个四个方向道路长度均为100米的十字路口。
软件默认添加的边为单向边,考虑实际情况,添加反向边保证双向行驶。具体方法为:选中某条边,鼠标右击,点击 “Add reverse direction” 。
此时的边默认只有一条车道,此时可以按需求将其划分成若干车道,本例中设为三条车道:
下面设置车道间的连接,在仿真中体现为车辆的可行驶路径:
(源路径与目标路径的连接关系参考左下角的颜色)
最后为路口设置红绿灯:
相位状态从12点方向开始,车道从左到右,从上到下安照右转、直行、左转顺序顺时针旋转,每条路径连接均需要设置相位状态,状态由 “G、g、r、Y、u” 五个参数表示,G代表最高优先级的绿灯,g代表次优先级的绿灯,r代表红灯,Y代表黄灯,u代表红/黄相间红灯
至此,路网编辑完毕。
三、在路网中定义车辆
1、人工定义车辆
使用 Notepad++ 编辑车流文件(*.rou.xml),代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<routes>
<vType id="type1" vClsss="taxi" accel="2.0" decel="3.0" length="4"
maxspeed="50" callFollowMode="IDM"
actionStepLength="1" tau="1.4" laneChangeModel="SL2015"/>
<vehicle id="veh0" type="type1" depart="0" departLane="0" departPos="0"
arrivalLane="2" arrivalPos="max" color="1,0,0" departSpeed="5">
<route edges="gneE3 -gneE0"/>
</vehicle>
<vehicle id="veh1" type="type1" depart="0" departLane="0" departPos="0"
arrivalLane="2" arrivalPos="max" color="1,0,0" departSpeed="5">
<route edges="gneE3 -gneE0"/>
</vehicle>
<vehicle id="veh2" type="type1" depart="0" departLane="0" departPos="0"
arrivalLane="2" arrivalPos="max" color="1,0,0" departSpeed="5">
<route edges="gneE3 -gneE0"/>
</vehicle>
...
</routes>
- vType
为车辆宏观类型定义,可定义车辆加速度、减速度、最大速度、车身长度、跟车模型、换道模型等参数,当需要定义若干辆参数相同的车辆时,可以使用该类型进行定义,使代码更简洁。 - vehicle
定义车辆细节,如车辆ID、出发时间、起始速度、起始车道、目标车道、行车路线、车辆颜色等。
2、flows + turns 生成交通流
除了逐辆车定义,还可以通过路径规划工具 jtrrouter ,将 *.flows.xml 文件和 *.turns.xml 文件生成 *.rou.xml 文件。
*.flows.xml 文件中描述了车流的相关信息,可以同时定义若干批参数相同的车流,代码如下:
<flowdefs>
<flow id="0" from="Edge id" begin="0" end="1000"
number="200" arrivalPos="max"/>
</flowdefs>
上述代码定义了200辆车的交通流
*.turns.xml 文件定义了交通流的起始边和目标边,以及在路口处车流各行驶方向的比例,代码如下:
<turns xmlns:xsi="http://www.w3.org/2001/XMLSchema-insance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/turns_file.xsd">
<interval begin="0" end="1000">
<fromEdge id="gneE3">
<toEdge id="-gneE1" probability=".5"/>
<toEdge id="-gneE0" probability=".3"/>
<toEdge id="-gneE2" probability=".2"/>
</fromEdge>
</interval>
</turns>
结合这两个文件,在命令行中调用 jtrrouter 生成 *.rou.xml 文件:
jtrrouter --flows=crossroad.flows.xml --turn-ratio-files=crossroad.turns.xml --net=crossroad.net.xml --output-file=crossroadflows.rou.xml --accept-all-destinations=t
四、仿真
将路网文件和车流文件添加到 *.sumo.cfg 文件,在 sumo-gui 进行仿真,观察仿真结果即可