1.基本路网的构建(十字路口)
在下载完成sumo后,bin目录下有一个可以运行的nete.exe,点击可以进入界面进行路网的编辑,编辑生成.net.xml文件。点击进去后,点击File->New Network就能开始建立自己的路网了。截图如下:
1.1构建十字路口
在这里介绍的时候,介绍如何建立一个十字路口。刚进入的界面会有一个红色的小圆圈,用来定义结点的。在连接完四个节点后如下所示;
然后在菜单栏点击如下按钮,就可以保存并进入下一步的编辑:
为了规范一点,点击结点(即红色的区域) 可以在pos这个位置设置点的坐标,如下图:
这里将五个点的坐标分别设置为(0,0)(0,100)(100,0)(-100,0)(0,-100).效果如下所示:
基本框架建立以后,选中某一条边点击右键,可以进行变得操作。由于道路有两个方向,这里选择对每条边添加相反的边。操作步骤如下:
1.2 添加相反的边(双向车道)
选中某条边点击右键->edge operations->add reverse diection for edge就能添加出相反的边。重复四次以后的效果图如下:
1.3添加车道(双向六车道)
完成上述绘制以后,可以看到一个基本的十字路口,通过对单条车道的编辑,可以进行车道的扩展。编辑方法如下:选中某条车道以后,在左边的参数栏中间numLanes改为3即可得到3条车道。现在对每条车道的numLanes均改为3就可得到双向六车道的道路。效果图如下:
(如果还行针对某一条车道进行参数设置,可以在edit->clicking should select edges or lanes中取消这一项,选中要修改的车道即可在左边的参数栏中进行参数修改)
1.4车道通行设置
接下来进行车道通行的设置,比如限制某条车道不可右转。
在任务栏中点击如下图所示按钮,可进行车道直接的连接设置:
点击完成后的效果图如下:
车道上的箭头指示了车道接下来可以行驶的路线。以南北方向第六条车道为例,选中以后可得到如下的效果:
左侧任务栏
可以看到,该车道目前可以右转可以直行可以左转。为了限制右转,可以点击东西方向第六条车道,点击以后就能变成墨绿色,然后点击参数栏的ok即可。设置完成后的效果图如下:
针对黄色的限制行驶车道,如果要强行改成可以形式,则按住Ctrl键再点击即可。
1.5红绿灯及通行设置
设置完基本的十字路口后,还缺少红绿灯的设置。设置红绿灯点击任务栏的如下按钮:
然后点击十字路口的中心(即红色区域),再点击参数栏的Create即可。效果如下:
![]()
在参数栏中,可以看见红绿灯的相位:
,选中某一条线(以南北方向第一车道,绿色的为例)点击右键可以看见其状态(J0_0就代表了第一个G)。可以删除相位也可以添加相位,如果要编辑,只需要跟上面一样的操作,然后改变其颜色就能改变该车道的通行状况。
例如,不允许由南向北的车辆左转,用上面的方法就能得到如下的效果图:
设置完成后点击左侧参数栏的Save,至此基本的十字路口设置完成。
按住Ctrl+S就能保存设置好的路网,文件后缀为.net.xml。保存后可以通过上一篇文章介绍的方法打开路网进行查看。
在sumo-gui.exe中打开路网的效果如下图:
可以看到刚才的设置效果:由南向北的车辆禁止左转。
2.对路网进行交通模拟
在基本的十字路口编辑完成以后,进行简单的道路模拟。
模拟出一辆车从某一条边(即道路)运动到另一条边需要知道在路网中边的编号。下面模拟的是一辆车由东向西运动然后右转进入由北向南运动。
此时需要知道进过的边的编号,在netedit中,点击边即可在左侧的参数栏中查看编号,我模拟的两条编号分别是E1和E0。
然后开始编写车流文件.rou.xml。这里命名为cross_road_2.rou.xml键入如下代码:
<routes> <vType id="myType" vClass="taxi" accel="0.8" decel="4.5" sigma="0.5" length="5" maxSpeed="50" callFollowMode="IDM" actionStepLength="1" tau="1.4" laneChangeModel="SL2015"/> <vehicle id="00" tpye="myType" depart="2" departLane="1" departPos="0" arrivalLane="0" arrivalPos="max" color="1,0,0" depardSpeed="20"> <route edges="E1 E0"/> </vehicle> </routes>
在代码段中,<vType>部分是车辆的一下参数,包括加速度、初速度等;<vehicle>部分就是定义的第一辆小车,id为“00”,depart表示进入的时间 departLane表示进入的车道等等。<route edges >定义的就是车辆行走的路线,前面以及得到了车辆走过边的编号。如果需要模拟多辆汽车,只要复制<vehicle>部分即可,id不能相同,depart即进入的时间只能往上增加。
在完成车辆的路由文件以后,还需要完成.sumocfg文件的编写。这里将其命名为cross_road_2.sumocfg。在文件中键入一下代码:
<configuration> <input> <net-file value="cross_road_2.net.xml"/> <route-files value="cross_road_2.rou.xml"/> </input> <time> <begin value="0"/> <end value="10000"/> </time> </configuration>
代码中 道路文件cross_road_2.net.xml和车辆路由文件cross_road_2.rou.xml需要根据读者实际情况进行修改。<time>部分定义了仿真开始和结束的时间。
在都编写完成以后,按照上一篇文章介绍的方法就能完成仿真。仿真的效果图如下所示:
1.小车进入并正常形式:
2.走到十字路口等待红绿灯:
3.完成转弯继续正常形式:
为了模拟多台车辆的运动效果,修改cross_road_2.rou.xml代码后如下所示: (其它代码不变)
<routes> <vType id="myType" vClass="taxi" accel="0.8" decel="4.5" sigma="0.5" length="5" maxSpeed="50" callFollowMode="IDM" actionStepLength="1" tau="1.4" laneChangeModel="SL2015"/> <vehicle id="00" tpye="myType" depart="2" departLane="1" departPos="0" arrivalLane="0" arrivalPos="max" color="1,0,0" depardSpeed="20"> <route edges="E1 E0"/> </vehicle> <vehicle id="01" tpye="myType" depart="3" departLane="1" departPos="0" arrivalLane="0" arrivalPos="max" color="1,0,0" depardSpeed="20"> <route edges="E1 -E2"/> </vehicle> <vehicle id="02" tpye="myType" depart="4" departLane="1" departPos="0" arrivalLane="0" arrivalPos="max" color="1,0,0" depardSpeed="20"> <route edges="E2 E0"/> </vehicle> <vehicle id="03" tpye="myType" depart="5" departLane="1" departPos="0" arrivalLane="0" arrivalPos="max" color="1,0,0" depardSpeed="20"> <route edges="E3 -E2"/> </vehicle> <vehicle id="04" tpye="myType" depart="6" departLane="1" departPos="0" arrivalLane="0" arrivalPos="max" color="1,0,0" depardSpeed="20"> <route edges="-E0 -E3"/> </vehicle> </routes>
效果图如下: