2、网络构建:NETEDIT图形化编辑器、道路网络绘制、连接器与交叉口设置、车道属性配置
好,咱们进入第二章。这一章我打算带大家亲手把路网建出来。你想想看,SUMO仿真里最基础也最核心的,就是路网。路网不对,后面采集的数据全是废的。我个人习惯,能用图形界面搞定的,绝不手写XML——NETEDIT就是干这个的。
2.1 NETEDIT 图形化编辑器初探
NETEDIT是SUMO自带的图形化路网编辑器。启动方式很简单,在终端里敲:
netedit
或者你直接双击安装目录下的netedit.exe(Windows用户)。界面一打开,你会看到一个大白板,左边是工具栏,右边是属性面板。嗯,这里要注意,第一次打开可能会有点懵,别急,咱们一步步来。
我在项目中遇到过,很多新手上来就画路,结果发现交叉口连不上,或者车道方向反了。其实说白了,NETEDIT的设计逻辑很清晰:你先画边(edge),再画连接(connection),最后调属性。按这个顺序来,基本不会乱。
Ctrl + G 打开网格对齐。这能帮你画出笔直的道路,避免后期出现奇怪的夹角。
2.2 道路网络绘制
画路的核心操作就两个:画边(Edge) 和 画节点(Junction)。NETEDIT里,边就是道路,节点就是交叉口或道路端点。
具体步骤:
- 点击工具栏的 创建边 按钮(图标是一段路加个加号)。
- 在画布上点击起点,再点击终点,一条路就出来了。
- 如果想画弯道,点击中间点拖动即可。我建议弯道用至少3个控制点,这样曲率更平滑。
画完路之后,你会发现每条路默认是双向的。如果你只需要单向,可以在属性面板里把 spread type 改成 center,然后删掉不需要的那一侧。我曾经在一个项目中,因为忘了改这个,结果仿真时车全在逆行,排查了半天才找到原因。
2.3 连接器与交叉口设置
路画好了,接下来就是让它们连起来。NETEDIT里,交叉口默认是自动生成的。但自动生成的不一定对,尤其是复杂路口。
手动设置连接器的步骤:
- 选中交叉口节点(点击它,会变成红色高亮)。
- 在右侧属性面板里,找到
connection选项,点击编辑。 - 你会看到一个表格,每一行代表一条可能的转向。勾选你需要的转向(直行、左转、右转、掉头)。
我个人习惯,对于三岔路口或十字路口,我会手动把每个转向都确认一遍。尤其是左转和掉头,SUMO有时候默认不生成,你得自己加上。你想想看,如果路口没有左转连接,左转的车就会停在路口中间,整个仿真就卡死了。
这里有个关键参数:交叉口类型。在节点属性里,你可以设置 type 为 priority(优先通行)、traffic_light(信号灯)或 allway_stop(全停)。
| 类型 | 适用场景 | 注意事项 |
|---|---|---|
| priority | 主路优先、支路让行 | 需要设置主路和支路的优先级 |
| traffic_light | 城市信号灯路口 | 需要额外配置信号灯相位 |
| allway_stop | 停车让行路口 | 所有方向车辆必须停车观察 |
我记得有一次做城市路网仿真,一个五岔路口,自动生成的连接器完全乱套了。我手动花了半小时,把每个方向的转向、让行规则、信号灯相位全配了一遍。仿真跑起来的那一刻,看着车流有序通过,那种成就感,嗯,值得。
2.4 车道属性配置
车道属性是路网的灵魂。你画的路是几车道?限速多少?允许什么车走?这些都在属性面板里配。
选中一条边(Edge),右侧属性面板会显示:
- numLanes:车道数。城市主干道我一般设3-4条,支路设1-2条。
- speed:限速,单位m/s。注意,SUMO里速度单位是米/秒,不是公里/小时。换算公式:
km/h ÷ 3.6 = m/s。比如限速60km/h,就填16.67。 - allow / disallow:允许或禁止的车辆类型。比如公交车专用道,可以设
allow="bus"。 - width:车道宽度,默认3.2米。我一般不改,除非是特殊车道(比如窄巷子)。
oneway 选项,默认是 false(双向)。如果你画的是单行道,一定要改成 true。我曾经见过有人画了单行道但没改这个,结果车在路中间掉头,仿真直接报错。
还有一个容易被忽略的参数:lane offset。这个参数控制车道相对于道路中心线的偏移。比如最左侧车道可以偏移一点,用来画左转待转区。我在做精细化路网时,经常用这个参数来模拟真实道路的标线位置。
2.5 知识体系总览
下面这张图,是我自己总结的网络构建核心逻辑。你照着这个顺序走,基本不会漏掉什么。
这张图里,我特意把「车道属性配置」放在了中间位置。为什么?因为属性配置贯穿始终——你画路的时候就要想好车道数,设交叉口的时候就要想好限速。说白了,属性配置不是最后一步,而是每一步都要同步考虑的。
2.6 导出与验证
路网画完了,记得保存。NETEDIT默认保存为 .net.xml 文件。我建议你保存后,用SUMO自带的验证工具跑一遍:
netcheck your_network.net.xml
这个工具会检查路网里有没有断头路、连接器缺失、车道属性冲突等问题。我在项目中每次都会跑一遍,宁可多花30秒检查,也不愿在仿真跑了一半时发现路网有bug。
嗯,这一章的内容就到这儿。路网是仿真的地基,地基打牢了,后面采集数据才踏实。你按我上面说的步骤,打开NETEDIT,亲手画一个十字路口试试。相信我,画完第一个路口,你就上手了。