4、手动创建路网:使用netedit绘制简单十字路口
好,咱们今天来点真格的。
前面几章讲了SUMO的安装、环境配置,还有那些基础概念。说实话,光看理论容易犯困。我自己当年学的时候,也是对着文档看了半天,脑子里还是一团浆糊。直到我亲手打开netedit,画了第一个十字路口,才真正明白路网是怎么一回事。
这一章,我们就来手动创建一个最简单的十字路口。你跟着我一步步操作,保证能跑通。
4.1 启动netedit
首先,你得确保SUMO已经装好了。在命令行里敲下面这行:
netedit
嗯,就这么简单。如果系统提示找不到命令,那八成是环境变量没配好。我建议你回头检查一下SUMO_HOME有没有设置对。
启动后,你会看到一个空白的编辑界面。左边是工具栏,右边是画布。别被那些密密麻麻的按钮吓到,我们只用其中几个。
4.2 绘制道路
画路之前,先想清楚你要什么样的路口。最简单的十字路口,就是两条路交叉,每条路都有两个方向。
我个人习惯先画一条水平的主干道。点击工具栏上的“创建边”按钮(图标是一段路加个加号),然后在画布上点一下,拖拽,再点一下,一条路就出来了。
接着画垂直的路。注意,要让两条路交叉,你得让垂直路的起点或终点落在水平路上。netedit会自动识别交叉点。
画完之后,你应该看到两条路交叉成了一个十字。但这时候,每条路都只有一个方向。说白了,就是单行道。我们需要把它改成双向的。
4.3 设置车道数量与方向
选中你画的那条水平路(点击它,会变红)。在右侧的属性面板里,找到“numLanes”这个参数。默认是1,改成2。这样这条路就有两条车道了。
但光有车道还不够,方向也得对。在属性面板里,找到“spreadType”,把它改成“center”。这样车道就会以道路中心线为基准,向两边对称展开。
等等,还没完。你想想看,两条车道都是同一个方向,那对面来的车走哪条?所以我们需要给这条路添加反向车道。
选中道路,右键,选择“Add opposite direction”。这时候你会发现,道路变成了双向四车道——每个方向各两条。嗯,这才像个城市道路的样子。
同样的操作,给垂直的那条路也来一遍。搞定之后,你的十字路口应该看起来像模像样了。
4.4 添加交通信号灯
十字路口没有红绿灯,那不乱套了?
在netedit里,添加信号灯其实很简单。先选中交叉点(就是两条路相交的那个节点)。然后右键,选择“Set TLS”(TLS就是Traffic Light System的缩写)。
这时候会弹出一个对话框,让你选择信号灯的配时方案。默认的配时方案是东西向绿灯30秒,南北向绿灯30秒,中间有3秒的黄灯过渡。对于初学者来说,这个方案完全够用。
点击确定,你会发现交叉点上多了一个红绿灯的图标。嗯,这就成了。
4.5 导出路网文件
画完了,也配好灯了,最后一步就是保存。
点击菜单栏的“File” -> “Save Network As”。选择一个你记得住的位置,文件名可以叫“my_crossroad.net.xml”。
SUMO的路网文件后缀名是.net.xml。这个文件里包含了所有道路的几何信息、车道数量、连接关系、信号灯配时等等。说白了,这就是你整个仿真场景的“骨架”。
保存之后,你可以用文本编辑器打开看看。里面全是XML格式的代码,密密麻麻的。别慌,我们不需要手动改它。netedit已经帮我们搞定了。
4.6 验证路网
导出了文件,怎么知道对不对?
最简单的方法,用SUMO自带的工具验证一下。在命令行里输入:
sumo -n my_crossroad.net.xml
如果没有任何报错,说明路网文件是合法的。如果报错了,它会告诉你哪行代码有问题。嗯,这时候再回到netedit里修改就好。
我个人习惯在导出后,再用netedit打开一次,检查一下有没有遗漏。比如,信号灯是不是真的配上了,车道方向有没有反。这一步虽然简单,但能省去后面调试时的大把时间。
4.7 避坑指南
最后,分享几个我踩过的坑:
- 车道连接问题: 有时候画了路,但车流就是过不去。检查一下交叉点上的连接(connections)有没有自动生成。如果没有,手动添加一下。
- 信号灯不亮: 配了TLS,但仿真时红绿灯不工作。大概率是信号灯的program ID没设置对。在属性面板里检查一下。
- 路网文件打不开: 如果保存时路径包含中文,SUMO可能会报错。我建议所有路径都用英文,省心。
好了,这一章的内容就这么多。你跟着操作一遍,应该能画出一个能用的十字路口。下一章,我们会在路网上生成车流,让这个路口真正“活”起来。