4. 使用netedit绘制路网
好,咱们正式开始动手了。前面讲了SUMO的安装和基础概念,现在轮到核心工具——netedit。说实话,我第一次打开netedit时也有点懵,界面看着挺朴素,但功能是真不少。别急,跟着我一步步来,半小时你就能画出一个带红绿灯的十字路口。
4.1 netedit界面:别被它朴素的外表骗了
启动netedit很简单,终端里敲一行命令就行:
netedit
或者你想直接打开一个已有的路网文件:
netedit mynetwork.net.xml
界面一出来,你可能会想:「就这?」嗯,我当年也是这反应。但用久了你会发现,它其实挺顺手的。咱们快速过一下核心区域:
- 主画布:中间那块最大的区域,路网就在这上面画。鼠标滚轮缩放,按住中键平移。
- 左侧工具栏:这是灵魂所在。从上到下依次是选择、编辑、创建道路、创建连接、创建交通信号灯等等。我习惯把常用功能记个快捷键,效率翻倍。
- 右侧属性面板:选中一个元素后,这里会显示它的详细参数。车道数量、速度限制、信号灯相位……全在这调。
- 底部状态栏:显示当前鼠标坐标、选中元素信息。调试时很有用。
Ctrl + D 可以复制选中的道路或节点。我在搭建大型路网时经常用这招,省了不少重复劳动。
4.2 绘制十字路口:从两条路开始
咱们的目标很明确——画一个标准的十字路口。操作其实就三步:
- 创建道路:点击左侧工具栏的「创建道路」按钮(或者按快捷键
E)。然后在画布上点一下,拖拽,再点一下,一条路就出来了。我建议你先画一条水平方向的,再画一条垂直方向的。 - 调整节点:两条路交叉的地方会自动生成一个节点(junction)。选中它,右侧属性面板里可以调整交叉口的类型。默认是
priority(优先规则),咱们后面要改成信号灯控制。 - 连接车道:这一步很多人会忘。选中交叉节点,点击工具栏的「创建连接」按钮(快捷键
C),然后依次点击进入车道和驶出车道。说白了,就是告诉SUMO:「车辆从这条路进来,可以从哪条路出去。」
4.3 设置车道数量与方向:别让车挤在一起
默认创建的道路只有一条车道,而且双向通行。现实中哪有这么寒酸的路?咱们来改改。
选中一条道路,右侧属性面板找到 numLanes 参数。比如我想改成双向四车道:
- numLanes:设为
2(每个方向2条车道,总共4条) - speed:限速,单位是m/s。比如
13.89对应50km/h - oneway:如果勾上,这条路就变成单行道了
方向怎么控制?其实是通过 spreadType 参数:
| 参数值 | 含义 |
|---|---|
center |
道路中心线居中,车道向两侧展开(默认) |
right |
车道全部在中心线右侧(靠右行驶) |
left |
车道全部在中心线左侧(靠左行驶) |
国内靠右行驶,所以一般用 right。我个人习惯在画路网前就把这个统一设好,免得后面一条条改。
4.4 添加交通信号灯:让路口有序通行
十字路口没有红绿灯?那不乱套了。在netedit里加信号灯非常简单:
- 选中交叉口的节点
- 右侧属性面板找到
type,从下拉菜单选traffic_light - 点击「编辑信号灯」按钮,进入相位编辑器
相位编辑器里,你可以看到默认的相位方案。一般包含四个阶段:
- 相位1:东西直行 + 右转(绿灯)
- 相位2:东西左转(绿灯)
- 相位3:南北直行 + 右转(绿灯)
- 相位4:南北左转(绿灯)
每个相位可以设置时长(duration)和黄灯时间(yellow)。我一般这样设:
相位1: 绿灯30秒, 黄灯3秒
相位2: 绿灯15秒, 黄灯3秒
相位3: 绿灯30秒, 黄灯3秒
相位4: 绿灯15秒, 黄灯3秒
4.5 导出路网文件:保存你的劳动成果
画完了,记得保存。netedit默认保存为 .net.xml 格式,这是SUMO的标准路网文件。
操作路径:File → Save Network As...,或者直接按 Ctrl + S。我建议你养成随手保存的习惯,毕竟……嗯,软件崩溃这种事谁都遇到过。
导出的文件长这样:
<?xml version="1.0" encoding="UTF-8"?>
<net version="1.19" junctionCornerDetail="5" limitTurnSpeed="5.50">
<location netOffset="0.00,0.00" convBoundary="0.00,0.00,200.00,200.00" />
<edge id="gneE0" from="J0" to="J1" priority="1">
<lane id="gneE0_0" index="0" speed="13.89" length="100.00" shape="0.00,-3.00 100.00,-3.00"/>
<lane id="gneE0_1" index="1" speed="13.89" length="100.00" shape="0.00,3.00 100.00,3.00"/>
</edge>
...
</net>
看到没?每条车道、每个节点、每个信号灯的配置都清清楚楚写在这里。后面咱们写Python脚本做参数调优时,就是直接改这个文件。
4.6 本章知识体系一览
下面这张图帮你梳理了本章的核心逻辑。从界面操作到文件导出,每一步都是环环相扣的:
好了,到这一步,你已经掌握了netedit的核心操作。画一个十字路口、配上车道参数、加上信号灯、导出文件——这套流程在后面的章节中会反复用到。我个人建议你多练几次,试着画不同形状的路口,比如T型路口、环岛。熟能生巧嘛。
F5 刷新一下路网,看看有没有报错。这个小动作帮我省了不少调试时间。