3、创建第一个网络:使用netedit绘制简单十字路口,理解节点(Node)和边(Edge)
好,咱们正式开始动手了。
上一章我们聊了SUMO的核心概念,你可能觉得有点抽象。别急,这一章我们直接打开netedit,亲手画一个十字路口出来。你想想看,一个十字路口,说白了就是两条路交叉嘛。但在SUMO的世界里,这个交叉点叫节点(Node),连接节点的路段叫边(Edge)。
我个人习惯,学任何新工具,第一件事就是先瞎画两笔,把界面摸熟。所以别怕犯错,咱们今天的目标很简单:画一个能用的十字路口,然后跑一辆车上去。
3.1 启动netedit
打开终端(或者命令行),输入下面这行命令:
netedit
嗯,就这么简单。如果你配置好了环境变量,一个图形界面就会弹出来。我第一次用的时候,还傻乎乎地去菜单里找图标,后来发现命令行才是真爱。
界面主要分三块:
- 画布区:中间最大的空白区域,你就在这里画路网。
- 工具栏:左边一竖排图标,选模式用的。
- 状态栏:底部显示坐标、当前模式等信息。
你可能会问,为什么不用鼠标右键菜单?其实netedit的右键功能很强大,但咱们刚开始,先老老实实用工具栏。
3.2 理解节点(Node)和边(Edge)
在SUMO里,路网由两个基本元素构成:
| 元素 | 英文名 | 通俗理解 |
|---|---|---|
| 节点 | Node | 路的交叉点、端点或形状变化点 |
| 边 | Edge | 连接两个节点的路段,有方向 |
说白了,节点就是“点”,边就是“线”。但注意,这里的边是有方向的。你画一条边,它默认是从起点节点指向终点节点。这一点我在做项目时吃过亏——有一次画了个单向路,结果车全堵在入口,因为边方向画反了。
3.3 绘制第一个十字路口
好,咱们开始画。请按以下步骤操作:
- 切换到“边”模式:点击工具栏上的
Edge按钮(图标像一条直线)。 - 画第一条路:在画布上点击一下,这是起点节点。然后向右移动鼠标,再点击一下,这是终点节点。一条边就画好了。
- 画第二条路:同样方法,从下往上画一条垂直的边,让它穿过第一条路。
- 自动生成交叉节点:当你画完第二条边时,netedit会自动在两条边的交叉位置生成一个节点。这就是十字路口的中心。
嗯,这里要注意:如果你画的边没有自动交叉,可能是因为两条边没有真正相交。你可以手动调整节点位置,或者用 Move 模式拖动节点。
Ctrl 键,可以强制吸附到网格或已有节点上。我习惯一直按着,这样画出来的路网整齐很多。
3.4 调整节点和边的属性
画完了,但路网还光秃秃的。我们需要给它加点属性。
3.4.1 修改节点类型
双击十字路口中心的节点,弹出属性窗口。找到 Type 字段,默认是 priority(优先权交叉口)。你可以改成:
traffic_light:信号灯控制right_before_left:右侧先行allway_stop:全向停车
我个人建议初学者先用 priority,因为最简单。等后面学到交通信号灯再改。
3.4.2 修改边属性
双击一条边,你会看到:
numLanes:车道数,默认是1。改成2吧,双向两车道。speed:限速,单位m/s。默认13.89(约50km/h),可以改成11.11(40km/h)。priority:优先级,数字越大越优先。
我曾经犯过一个错:把限速设得太高,结果仿真里的车像飞一样,转弯时直接漂移出去。所以速度别设太夸张,现实一点。
3.5 保存并检查路网
画完后,按 Ctrl+S 保存。netedit会生成两个文件:
.net.xml:路网文件.nod.xml和.edg.xml:节点和边的原始数据(如果你保存为plain格式)
你可以用文本编辑器打开 .net.xml 看看,里面全是XML标签。但别怕,我们不需要手动改它,netedit会帮我们搞定。
3.6 知识体系:节点与边的核心逻辑
为了让你更直观地理解,我画了一张图。这张图展示了节点和边的关系,以及它们如何构成一个简单的十字路口。
这张图里,N1到N4是四个端点节点,N0是中心交叉节点。E1到E4是四条边,每条边都有方向。你看,从N1到N0是一条边,从N0到N2是另一条边。这就是SUMO里“边有方向”的含义。
3.7 避坑指南
最后,分享几个我踩过的坑:
- 节点重叠:有时候不小心在同一个位置画了两个节点,路网会报错。用
Clean Junctions工具可以合并。 - 边未连接:画完边后,记得用
Inspect工具点一下节点,看看连接了几条边。少于2条就是断头路。 - 方向错误:边默认是单向的。如果你需要双向,在属性里把
spreadType改成center,或者再画一条反向的边。
我曾经在一个项目里,画了20个节点的路网,结果因为一个节点没连上,车全堵在起点。排查了半小时才发现。所以,每画几步就保存一下,用 sumo-gui 加载看看效果。
好了,现在你已经会画一个简单的十字路口了。别小看这一步,所有复杂的路网——环岛、立交桥、高速公路——都是从节点和边组合出来的。多画几个路口练练手,你会发现netedit其实挺顺手的。
- 节点是路网的“点”,边是“线”,有方向。
- 十字路口至少需要5个节点、4条边。
- netedit里用
Edge模式画边,自动生成交叉节点。 - 双击节点/边可以修改属性,如车道数、限速、节点类型。
- 保存后生成
.net.xml文件,可用文本编辑器查看。
可可精品资料库