2、网络构建:NETEDIT图形化编辑器、道路网络绘制、连接器与交叉口设置、车道属性配置

好,咱们进入第二章。这一章我打算带大家亲手把路网建出来。你想想看,SUMO仿真里最基础也最核心的,就是路网。路网不对,后面采集的数据全是废的。我个人习惯,能用图形界面搞定的,绝不手写XML——NETEDIT就是干这个的。

2.1 NETEDIT 图形化编辑器初探

NETEDIT是SUMO自带的图形化路网编辑器。启动方式很简单,在终端里敲:

netedit

或者你直接双击安装目录下的netedit.exe(Windows用户)。界面一打开,你会看到一个大白板,左边是工具栏,右边是属性面板。嗯,这里要注意,第一次打开可能会有点懵,别急,咱们一步步来。

我在项目中遇到过,很多新手上来就画路,结果发现交叉口连不上,或者车道方向反了。其实说白了,NETEDIT的设计逻辑很清晰:你先画边(edge),再画连接(connection),最后调属性。按这个顺序来,基本不会乱。

小技巧: 打开NETEDIT后,先按 Ctrl + G 打开网格对齐。这能帮你画出笔直的道路,避免后期出现奇怪的夹角。

2.2 道路网络绘制

画路的核心操作就两个:画边(Edge) 和 画节点(Junction)。NETEDIT里,边就是道路,节点就是交叉口或道路端点。

具体步骤:

  1. 点击工具栏的 创建边 按钮(图标是一段路加个加号)。
  2. 在画布上点击起点,再点击终点,一条路就出来了。
  3. 如果想画弯道,点击中间点拖动即可。我建议弯道用至少3个控制点,这样曲率更平滑。

画完路之后,你会发现每条路默认是双向的。如果你只需要单向,可以在属性面板里把 spread type 改成 center,然后删掉不需要的那一侧。我曾经在一个项目中,因为忘了改这个,结果仿真时车全在逆行,排查了半天才找到原因。

避坑指南: 画路时尽量让道路与网格对齐。我曾经因为偷懒没对齐,结果后面做交叉口连接时,连接器死活生成不对,浪费了2小时。

2.3 连接器与交叉口设置

路画好了,接下来就是让它们连起来。NETEDIT里,交叉口默认是自动生成的。但自动生成的不一定对,尤其是复杂路口。

手动设置连接器的步骤:

  1. 选中交叉口节点(点击它,会变成红色高亮)。
  2. 在右侧属性面板里,找到 connection 选项,点击编辑。
  3. 你会看到一个表格,每一行代表一条可能的转向。勾选你需要的转向(直行、左转、右转、掉头)。

我个人习惯,对于三岔路口或十字路口,我会手动把每个转向都确认一遍。尤其是左转和掉头,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 知识体系总览

下面这张图,是我自己总结的网络构建核心逻辑。你照着这个顺序走,基本不会漏掉什么。

网络构建核心流程 1. 绘制道路 创建边(Edge) 2. 设置交叉口 节点(Junction)配置 3. 配置连接器 转向与让行规则 4. 车道属性配置 车道数/限速/允许类型 5. 验证与导出 检查连接/导出.net.xml 建议按此顺序操作,避免返工

这张图里,我特意把「车道属性配置」放在了中间位置。为什么?因为属性配置贯穿始终——你画路的时候就要想好车道数,设交叉口的时候就要想好限速。说白了,属性配置不是最后一步,而是每一步都要同步考虑的。

2.6 导出与验证

路网画完了,记得保存。NETEDIT默认保存为 .net.xml 文件。我建议你保存后,用SUMO自带的验证工具跑一遍:

netcheck your_network.net.xml

这个工具会检查路网里有没有断头路、连接器缺失、车道属性冲突等问题。我在项目中每次都会跑一遍,宁可多花30秒检查,也不愿在仿真跑了一半时发现路网有bug。

我的习惯: 每画完一个区域(比如一个街区),就保存并验证一次。不要等到整个城市画完了再验证,那时候找bug会找到崩溃。

嗯,这一章的内容就到这儿。路网是仿真的地基,地基打牢了,后面采集数据才踏实。你按我上面说的步骤,打开NETEDIT,亲手画一个十字路口试试。相信我,画完第一个路口,你就上手了。

可可精品资料库