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可能会报错。我建议所有路径都用英文,省心。

好了,这一章的内容就这么多。你跟着操作一遍,应该能画出一个能用的十字路口。下一章,我们会在路网上生成车流,让这个路口真正“活”起来。