SUMO路网搭建 您所在的位置:网站首页 十字路口红绿灯顺序是顺时针方向呢还是逆时针方向 SUMO路网搭建

SUMO路网搭建

2023-12-26 19:04| 来源: 网络整理| 查看: 265

手动搭建路网在实际使用中很少会用到,但是手动搭建的过程对于了解SUMO的基本使用方法以及后续编写扩展很有帮助。这里就简单介绍一下。本文主要参考Quick Start-1,Quick Start-2,plain xml和个人使用经验撰写,分别通过编写.xml文件和操作netedit搭建一个双向8车道的十字交叉口。

纯.xml构建

纯.xml文件构建路网需要手写路网的配置,这是一项很费时费力的工作,但是对于了解路网的组成和生成很有帮助。而且纯文本的形式也方便我们编写脚本进行自动化操作,比如根据现有的信号配时表生成信号控制方案之类的。因此本文就介绍如何通过编写纯.xml文件来构建SUMO路网。首先,为了方便索引文件,我们建立一个文件夹1-plainxml\用来存放所有的文件。

节点文件

路网的搭建由点-线-网构成,因此第一步是构建节点文件1-plainxml\interseciton.nod.xml,并写入下面的代码:

12345678

这里存放了路网中所有的节点,每个节点的id必须是不一样的,x和y属性代表了节点的坐标,type表示节点的类型,这里id="0"的节点我们将其设置为信号灯,方便后续的操作。可以到官方文档中寻找更多关于节点属性和节点类型的信息。

道路文件

然后是线的搭建,也就是道路的搭建了,我们新建道路文件1-plainxml\interseciton.edge.xml,并写入下面的代码:

1234567891011

同样的,id属性必须是不一样的,from和to属性表示道路的起始和目标节点,numLanes则表示车道数量,speed表示道路限速,单位是m/s。更多的参数设置可以参考道路设置。

连接设置

所谓网的构建实际上就是要知道哪些线和哪些线该连在一起,因此我们需要构建连接文件组织线之间的连接。新建文件1-plainxml\interseciton.con.xml ,并写入下面的代码:

12345678910111213141516171819202122

其中,from和to属性表示起始道路和目标道路的id,fromLane和toLane则是车道之间的连接。这里我们将四条车道的渠化设置为中间两条直行,左右分别是左转和右转专用车道。

SUMO中规定车道的索引是从 0 开始,并从最外侧车道到最内侧车道,索引值逐渐增加的,如下图所示:

更多关于连接的属性设置可以参考连接属性。

路网生成

至此,一个双向8车道的十字交叉口所需文件就完成了,下面是根据这些文件生成路网文件,我们使用netconvert工具进行这项工作:

1netconvert -n intersection.nod.xml -e intersection.edge.xml -x intersection.con.xml -o intersection.net.xml

netconvert可以将输入的文件转化为SUMO路网文件,后续我们使用OSM文件构建SUMO路网时也会用到这个工具,关于这个工具的输入输出和参数设置可以参考官方文档。

可以使用netedit查看生成的路网:

1netedit intersection.net.xml 信号灯设置

使用编辑器打开上面生成的文件1-plainxml\interseciton.net.xml,可以看到里面已经自动生成了一个信号配时方案:

1234567891011

这里介绍一下SUMO的信号配时设置,这里每一个tlLogic就是对一个信号灯的配时方案,id指的是节点的id,因为前面配置节点文件的时候,我们把节点 0 的类型设置为了traffic_light所以这里可以为节点 0 进行信号配时的操作。type属性指信号配时的类型,这里用的是static也就是固定信号配时,当然也可以设置为激发式信号控制(actuated)。progamID指项目名称,比如一个路网中有多个交叉口,为所有交叉口设置一个整体的配时方案就可以让这些交叉口的programID一致,方便管理和切换。offset指相位差,单交叉口的情况下可以不设置。

tlLogic下的每一个phase标签指一个相位,duration指该相位持续时间,state指相位的设置。

state中的每个字母表示不同颜色的信号,比如r表示红灯,车辆必须停下;y表示黄灯;G表示保护相位绿灯;g则是非保护相位的绿灯,全部设置可以参考相位设置。而字母的组合则是和tls index相关的,这是SUMO中为每个转向行为(movement)设置的索引,和车道渠化相关,而且索引的方向是从 12 点钟方向开始顺时针方向,拿我们的模型来说,2to0就是交叉口的 12 点钟方向,而右转又是该车道的第一个转向行为,所以2to0的右转车道的tls index就是 0,然后依次按顺时针方向增加索引值。

使用netedit可以查看交叉口的tls index:

得知信号灯配置方式后,就可以自定义信号配时方案了,新建文件1-plainxml\interseciton.tll.xml,并写入下面的代码:

12345678910111213

如果想将这个信号配时整合到路网中,取代自动生成的配时方案,可以使用下面的指令:

1netconvert -n intersection.nod.xml -e intersection.edge.xml -x intersection.con.xml -i intersection.tll.xml -o intersection_full.net.xml

至此一个完全使用xml编写的SUMO路网1-plainxml\interseciton_full.net.xml就搭建完成了,后面在路网上添加车辆就可以运行了。关于添加车流可以参考SUMO需求建模-手动建模。

图形界面构建

上面介绍了纯使用.xml文件构建路网的方法,实际上SUMO也是提供了方便的图形界面可以完成上述操作的。

路网绘制

我们打开netedit,File-->New Network,就建立了一个空白工作界面。然后选中Network模式,点击绘制图标,就可以开始绘制路网了,下面的动图介绍了节点和道路的绘制方法,这里绘制第二条道路的时候,只要终点和第一个条的起点重合,netedit就会将两个节点归为一个节点了。

另外,动图中可以看到,选择了绘制按钮后,最后又会多出两个新的按钮,分别表示连续和双向,即选择第一个按钮的话,可以连续绘制多个节点;点击第二个按钮的话,生成的道路就是双向的。具体使用可以自己试一下,体会差别。

绘制后的节点和道路可以使用对其属性进行修改(顺便说一下,该按钮旁边的橡皮一样的按钮点击后可以删除节点和道路,ctrl+z则可以撤销操作),如下图:

按照这种方法,绘制出双向8车道的十字交叉口如下图(注意中间的节点的类型要设置为traffic_light):

渠化设置

下一步是设置路网的渠化,点击按钮,可以看到路网的渠化,可以看到默认情况是没有左转和右转专用车道的:

然后按照下面的步骤,修改渠化设置(修改完成记得点击左上方的 OK 按钮保存修改。:

按照这种方法,修改所有渠化,到下面的结果:

至此路网文件已经编辑完成,可以点击按钮保存文件了,这里我们保存在2-gui\intersection.net.xml中,方便后续使用。

信号配时修改

当然我们也可以对信号灯进行编辑,如下图所示:

同样的,修改完成后记得点击绿色的 OK 按钮,保存修改。当然我们也可以点击左下角独立的Save按钮,将修改配时方案保存为独立的文件2-gui\intersection.tll.xml。

总结

总的来说,通过书写文本文件,我们可以很轻松的构建一个SUMO路网。这种搭建路网的方式实际上很方便我们进行路网的自动化生成。在这篇文章中,我们是处于一种没有数据的状态,而且路网规模很小,所以我们是逐行敲写代码的。在实际接触项目的过程中,则是另外一种情况。

比如我们可能有一份很大规模的城市路网数据,包含了所有的节点坐标,道路属性等,这种时候我们就可以编写脚本,先读取所有的外部数据,然后输出SUMO可以读取的.xml文件。这种方式生成路网显然比使用图形界面一点一点绘制要方便得多。而图形界面则主要是提供一个辅助作用,即我们根据数据生成路网后,如果有小的瑕疵,可以使用图形界面进行简单的修改。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有