作者说:作者研究SUMO软件一年有余了,从sumoV0.32版本开始,到现阶段的version 1.3.0,其中遇到很多坑,走过很多弯路,回想这一年的摸索,也有了一点心得体会和日常积累。同时在这过程中,发现靠谱的sumo技术帖子凤毛麟角,只能通过用户手册去一点一点的理解。为方便广大交通从业者使用sumo,我会专注写关于SUMO软件的一些技术帖子,和大家共同交流探讨。
公众号打算系统介绍一下SUMO软件的使用。公众号系列文章将以一个典型交叉口为例,从静态路网建模,交通需求加载,信号方案生成,到嵌入经典交通控制算法,A信控I算法,一步一步深入全面介绍sumo的知识。在此之后,公众号会横向拓展介绍,静态路网建模…AI信控算法的多种实现方式。最后,介绍大家可能接触不多,但是很重要的知识,如:仿真加速,并行仿真,仿真服务web可视化,仿真场景重现,中观与微观一体化仿真,大规模路网实时在线仿真等技术要点。最后呈现一个大规模在线实时仿真的demo。
作者提示:sumo运行环境: win10+sumoV1.2.0+python3.7
首先介绍sumo中一个仿真模型的文件结构:更多信息:http://sumo.sourceforge.net/userdoc/Networks/PlainXML.html#joining_nodes
sumo中一个路网文件,分为路网net文件和交通需求(路径)route文件。
net文件由node文件和edge文件组成。其中node表示节点,如一个交叉口。
关系如下:
现在我们新建一个十字交叉口0,平面坐标为(0m,0m),其东西南北四个进口方向的边缘节点分别为东边缘节点,结合交叉口的示意图,介绍sumo中节点(node.xml)和路段文件(edge.xml)的格式:
1、编写node.xml文件,文件名test.nod.xml
<nodes>
<node id="0" x="0.0" y="0.0" type="traffic_light"/>
<node id="1" x="500.0" y="0.0" type="priority"/>
<node id="2" x="-500.0" y="0.0" type="priority"/>
<node id="3" x="0.0" y="-500.0" type="priority"/>
<node id="4" x="0.0" y="+500.0" type="priority"/>
nodes>
指定节点类型为信控交叉口,节点属性设置为type=“traffic_light”,sumo自身会根据交叉口车道等信息,计算出一个默认的信控配时方案。后续文章会详细介绍sumo中的信控方案格式和常用操作技巧。更多关于节点的信息:https://sumo.dlr.de/docs/Networks/PlainXML.html#node_descriptions。
2、编写edge.xml文件,文件名及后缀test.edge.xml
<edges>
<edge id="0_1" from="1" to="0" priority="2" numLanes="3" speed="11.11"/>
<edge id="0_2" from="2" to="0" priority="2" numLanes="3" speed="11.11"/>
<edge id="0_3" from="3" to="0" priority="2" numLanes="3" speed="11.11"/>
<edge id="0_4" from="4" to="0" priority="2" numLanes="3" speed="11.11"/>
<edge id="1_2" from="0" to="1" priority="3" numLanes="3" speed="13.89"/>
<edge id="2_1" from="0" to="2" priority="3" numLanes="3" speed="13.89"/>
<edge id="3_4" from="0" to="3" priority="3" numLanes="3" speed="13.89"/>
<edge id="4_3" from="0" to="4" priority="3" numLanes="3" speed="13.89"/>
edges>
edge即为交通上的道路,路段。指定路段的起始节点和终止节点,并设置路段的优先级,车道数,车道限速(m/s)等属性.更多信息:https://sumo.dlr.de/docs/Networks/PlainXML.html#edge_descriptions 。
3、利用netconvert工具生成net.xml文件
netconvert --node-files=test.nod.xml --edge-files=test.edg.xml --output-file=test.net.xml
可在当前仿真文件所在目录下,打开cmd窗口,运行以上命令。netconvert工具的更多信息:https://sumo.dlr.de/docs/Networks/PlainXML.html#edge_descriptions 这个命令非常好用,可以好好研究一下。运行以上命令后,得到test.net.xml文件,我们通过netedit打开该文件,看到见下图所示,可以根据需要稍微修改一下连接器(交叉口进口道的车道类型,修改车道类型参考信息:https://sumo.dlr.de/docs/NETEDIT.html)
net文件截图(netedit打开)如需要手动修改一下车道类型,左直右等连接器
这里简单介绍一下如何利用netedit工具修改连接器:见下图三步走:
step1: 选中1所示图标
step2:选中(鼠标左键点击)索要修改的车道,比如图中2所示。此时路网颜色如图上所示:绿色表示当前联通的连接器,深绿表示可以联通,但是当前未联通,红色表示冲突。
step3:加入我们想去掉2车道的掉头连接器,则鼠标左键选中掉头所联通的车道(图中对应的是3)即可。
4、生成route.xml文件, 文件名:test.rou.xml
和生成net.xml一样,途径有很多,这里先介绍一个工具:randomtrips.py工具
工具地址:安装目录/tools下。更多信息https://sumo.dlr.de/docs/Tools/Trip.html#randomtripspy
例子:
python randomTrips.py -n test.net.xml -r route.rou.xml
具体的参数可以查看使用文档,或者 命令行:python randomTrips.py -h
5、直接运行sumo仿真文件或者生成配置文件
命令行运行仿真:
sumo-gui -n test.net.xml -r test.rou.xml (gui界面手动控制仿真开启关闭)
sumo-gui -n test.net.xml -r test.rou.xml -S True -Q True (gui界面自动控制仿真开启关闭)
tips: 命令行模式可以控制仿真自动开始和结束,命令选项为 -S True -Q True。更多信息:https://sumo.dlr.de/docs/SUMO.html
sumo -n test.net.xml -r test.rou.xml -C test.sumocfg
<configuration>
<input>
<net-file value="test.net.xml"/>
<route-files value="test.rou.xml"/>
input>
<processing>
<begin value="0"/>
<end value="3600"/>
processing>
configuration>
本人将致力于SUMO软件先关技术贴的写作交流,大家觉得有用,可以关注我的个人公众号,随时交流。公众号名:**林大的日常**