2. 路网构建基础

说实话,刚接触SUMO那会儿,我最头疼的就是路网怎么建。命令行敲来敲去,一个路口没对齐,仿真就跑偏了。后来用上NETEDIT,才觉得这事儿终于「可视化」了。

这一章,我就带你上手NETEDIT。咱们不搞花架子,直接讲怎么画路、怎么设路口、怎么加红绿灯。这些都是我平时做项目天天用的基本功。

NETEDIT是什么?

NETEDIT是SUMO自带的图形化路网编辑器。说白了,就是让你用鼠标画路网,不用写一堆XML代码。

我个人习惯,小规模路网(比如一个十字路口、一个小区内部道路)直接用NETEDIT画。大规模路网嘛,还是用OSM导入更靠谱。但不管怎样,NETEDIT的编辑功能你都得会——因为导入的路网十有八九要手动调。

小提示:启动NETEDIT很简单。在终端里敲 netedit 就行。如果你装了SUMO的完整包,它就在安装目录的bin文件夹里。

界面布局:别被吓到

第一次打开NETEDIT,你可能会觉得「按钮也太多了吧?」别慌,核心区域就三块:

  • 画布区:中间最大的那块,你画路网的地方。
  • 工具栏:左边竖着的一排,选模式用的。比如画路模式、选点模式、编辑属性模式。
  • 属性面板:右边或者下边,选中某个元素后,这里会显示它的详细参数。

嗯,这里要注意:工具栏最上面那几个图标,决定了你当前能做什么操作。比如你点了「道路模式」,才能画路;点了「选择模式」,才能点选元素改属性。

绘制道路:从一条直线开始

画路其实很简单。我带你走一遍:

  1. 点击左侧工具栏的「道路模式」图标(像个十字路口)。
  2. 在画布上点一下,确定起点。
  3. 再点一下,确定终点。一条路就出来了。
  4. 想画弯的?在中间多点几下,每个点都是一个控制点。

画完之后,双击或者按ESC退出。这时候你看到的路,默认是双向两车道。

核心参数:选中一条路,在属性面板里你可以改:
  • numLanes:车道数。比如设成2,就是双向四车道。
  • speed:限速,单位m/s。我一般习惯设成13.89(相当于50km/h)。
  • priority:优先级。数值越高,在交叉口越有路权。

我在项目中遇到过一个问题:画完路发现车道方向反了。别急,选中路,在属性面板里找到 spreadType,改成 center 就行。或者直接用工具栏里的「翻转」按钮。

设置交叉口:让路网连起来

两条路交叉了,NETEDIT会自动生成一个交叉口(junction)。但自动生成的,不一定符合你的需求。

举个例子:你画了一条十字路,但其中一条是支路,应该让行。这时候就需要手动设置交叉口的规则。

操作步骤:

  1. 点击左侧工具栏的「选择模式」。
  2. 点选交叉口(就是两条路交汇的那个节点)。
  3. 在属性面板里,找到 type 参数。

type 的值决定了交叉口的行为:

类型 含义 适用场景
priority 优先规则(默认) 主路优先,支路让行
right_before_left 右侧先行 无信号灯、无标志的路口
traffic_light 信号灯控制 需要红绿灯的路口
allway_stop 全向停车 四个方向都需停车观察

我曾经在一个物流园区项目里,就因为没改交叉口类型,导致仿真里支路车辆永远出不来。后来改成 priority,再设好主路的优先级,问题就解决了。

注意:改了交叉口类型后,一定要检查连接关系(connections)。有时候NETEDIT自动生成的连接不对,比如左转车道连到了直行道上。你可以在交叉口上右键,选「编辑连接」来手动调整。

添加交通信号灯:让路口有序

信号灯是交叉口的「指挥官」。在NETEDIT里加信号灯,其实就两步:

  1. 选中交叉口,把 type 改成 traffic_light。
  2. 在属性面板里,找到 tlID,给它起个名字(比如 tl_1)。

这时候NETEDIT会生成一个默认的信号灯方案。但说实话,默认方案往往不太合理。比如绿灯时间太短,或者相位顺序不对。

怎么调?我一般这么做:

  • 在交叉口上右键,选「编辑信号灯」。
  • 你会看到一个相位列表。每个相位包含一组绿灯的流向。
  • 双击某个相位,可以改它的绿灯时长(duration)。
  • 点「添加」,可以增加新的相位。

举个例子,一个标准的十字路口,我通常会设4个相位:

相位 绿灯流向 时长(秒)
1 南北直行 30
2 南北左转 15
3 东西直行 30
4 东西左转 15

你想想看,如果南北直行和左转同时放行,左转车就会被对向直行车堵住。所以必须分开。

我的习惯:每个相位结束后,加3秒的黄灯(yellow)。这个在信号灯编辑器的「过渡」选项卡里设置。别小看这3秒,它能避免很多追尾事故。

知识体系一览

这一章的内容,说白了就是三个核心操作:画路、设路口、加信号灯。它们之间的关系,我画了张图:

NETEDIT 路网构建核心流程 绘制道路 车道数、限速、方向 设置交叉口 类型、连接、让行规则 添加信号灯 相位、时长、黄灯 可仿真的路网文件(.net.xml) 每一步都可在属性面板中微调参数 建议顺序:先画路 → 再设路口 → 最后加信号灯 ⚠ 避坑:画完路记得检查连接关系,否则仿真会报错 我曾经因为漏改一个连接,排查了整整一下午

避坑指南:我踩过的三个坑

讲完基础操作,我分享几个真实踩过的坑。你遇到了,能少走弯路。

坑一:路网不连通

画了两条路,看起来交叉了,但仿真时车就是过不去。为什么?因为两条路的节点没重合。NETEDIT里,只有两条路共享同一个节点,才算真正连通。解决办法:用「选择模式」选中两条路的端点,按 Ctrl+J 合并节点。

坑二:信号灯相位冲突

我曾经设了一个信号灯,结果仿真里两股车流在路口中间撞在一起。检查发现,两个相位的绿灯流向有重叠。比如相位1放行南北直行,相位2放行北向东左转,但左转车和直行车在路口中间交叉了。解决办法:画一个相位冲突图,确保每个相位只放行互不干扰的流向。

坑三:车道连接丢失

从OSM导入的路网,有时候交叉口的连接关系是空的。车到了路口直接消失。解决办法:在交叉口上右键,选「编辑连接」,手动把每条入车道连接到对应的出车道。别嫌麻烦,这一步省不了。

总结一下:NETEDIT的核心就三个操作——画路、设路口、加信号灯。画路注意车道数和限速;设路口注意类型和连接;加信号灯注意相位和时长。每一步做完,都点一下「保存」,养成习惯。

好了,这一章的内容就到这儿。你可以在NETEDIT里试着画一个十字路口,加个信号灯,跑一下仿真看看效果。实践出真知嘛。

可可精品资料库