2. 路网构建基础
说实话,刚接触SUMO那会儿,我最头疼的就是路网怎么建。命令行敲来敲去,一个路口没对齐,仿真就跑偏了。后来用上NETEDIT,才觉得这事儿终于「可视化」了。
这一章,我就带你上手NETEDIT。咱们不搞花架子,直接讲怎么画路、怎么设路口、怎么加红绿灯。这些都是我平时做项目天天用的基本功。
NETEDIT是什么?
NETEDIT是SUMO自带的图形化路网编辑器。说白了,就是让你用鼠标画路网,不用写一堆XML代码。
我个人习惯,小规模路网(比如一个十字路口、一个小区内部道路)直接用NETEDIT画。大规模路网嘛,还是用OSM导入更靠谱。但不管怎样,NETEDIT的编辑功能你都得会——因为导入的路网十有八九要手动调。
netedit 就行。如果你装了SUMO的完整包,它就在安装目录的bin文件夹里。
界面布局:别被吓到
第一次打开NETEDIT,你可能会觉得「按钮也太多了吧?」别慌,核心区域就三块:
- 画布区:中间最大的那块,你画路网的地方。
- 工具栏:左边竖着的一排,选模式用的。比如画路模式、选点模式、编辑属性模式。
- 属性面板:右边或者下边,选中某个元素后,这里会显示它的详细参数。
嗯,这里要注意:工具栏最上面那几个图标,决定了你当前能做什么操作。比如你点了「道路模式」,才能画路;点了「选择模式」,才能点选元素改属性。
绘制道路:从一条直线开始
画路其实很简单。我带你走一遍:
- 点击左侧工具栏的「道路模式」图标(像个十字路口)。
- 在画布上点一下,确定起点。
- 再点一下,确定终点。一条路就出来了。
- 想画弯的?在中间多点几下,每个点都是一个控制点。
画完之后,双击或者按ESC退出。这时候你看到的路,默认是双向两车道。
numLanes:车道数。比如设成2,就是双向四车道。speed:限速,单位m/s。我一般习惯设成13.89(相当于50km/h)。priority:优先级。数值越高,在交叉口越有路权。
我在项目中遇到过一个问题:画完路发现车道方向反了。别急,选中路,在属性面板里找到 spreadType,改成 center 就行。或者直接用工具栏里的「翻转」按钮。
设置交叉口:让路网连起来
两条路交叉了,NETEDIT会自动生成一个交叉口(junction)。但自动生成的,不一定符合你的需求。
举个例子:你画了一条十字路,但其中一条是支路,应该让行。这时候就需要手动设置交叉口的规则。
操作步骤:
- 点击左侧工具栏的「选择模式」。
- 点选交叉口(就是两条路交汇的那个节点)。
- 在属性面板里,找到
type参数。
type 的值决定了交叉口的行为:
| 类型 | 含义 | 适用场景 |
|---|---|---|
priority |
优先规则(默认) | 主路优先,支路让行 |
right_before_left |
右侧先行 | 无信号灯、无标志的路口 |
traffic_light |
信号灯控制 | 需要红绿灯的路口 |
allway_stop |
全向停车 | 四个方向都需停车观察 |
我曾经在一个物流园区项目里,就因为没改交叉口类型,导致仿真里支路车辆永远出不来。后来改成 priority,再设好主路的优先级,问题就解决了。
添加交通信号灯:让路口有序
信号灯是交叉口的「指挥官」。在NETEDIT里加信号灯,其实就两步:
- 选中交叉口,把
type改成traffic_light。 - 在属性面板里,找到
tlID,给它起个名字(比如tl_1)。
这时候NETEDIT会生成一个默认的信号灯方案。但说实话,默认方案往往不太合理。比如绿灯时间太短,或者相位顺序不对。
怎么调?我一般这么做:
- 在交叉口上右键,选「编辑信号灯」。
- 你会看到一个相位列表。每个相位包含一组绿灯的流向。
- 双击某个相位,可以改它的绿灯时长(duration)。
- 点「添加」,可以增加新的相位。
举个例子,一个标准的十字路口,我通常会设4个相位:
| 相位 | 绿灯流向 | 时长(秒) |
|---|---|---|
| 1 | 南北直行 | 30 |
| 2 | 南北左转 | 15 |
| 3 | 东西直行 | 30 |
| 4 | 东西左转 | 15 |
你想想看,如果南北直行和左转同时放行,左转车就会被对向直行车堵住。所以必须分开。
知识体系一览
这一章的内容,说白了就是三个核心操作:画路、设路口、加信号灯。它们之间的关系,我画了张图:
避坑指南:我踩过的三个坑
讲完基础操作,我分享几个真实踩过的坑。你遇到了,能少走弯路。
坑一:路网不连通
画了两条路,看起来交叉了,但仿真时车就是过不去。为什么?因为两条路的节点没重合。NETEDIT里,只有两条路共享同一个节点,才算真正连通。解决办法:用「选择模式」选中两条路的端点,按 Ctrl+J 合并节点。
坑二:信号灯相位冲突
我曾经设了一个信号灯,结果仿真里两股车流在路口中间撞在一起。检查发现,两个相位的绿灯流向有重叠。比如相位1放行南北直行,相位2放行北向东左转,但左转车和直行车在路口中间交叉了。解决办法:画一个相位冲突图,确保每个相位只放行互不干扰的流向。
坑三:车道连接丢失
从OSM导入的路网,有时候交叉口的连接关系是空的。车到了路口直接消失。解决办法:在交叉口上右键,选「编辑连接」,手动把每条入车道连接到对应的出车道。别嫌麻烦,这一步省不了。
好了,这一章的内容就到这儿。你可以在NETEDIT里试着画一个十字路口,加个信号灯,跑一下仿真看看效果。实践出真知嘛。
可可精品资料库