第3章:SUMO基础操作:网络文件结构、路网生成工具与简单路网创建
各位同学,今天我们来聊聊SUMO里最基础也最核心的一块——路网。说白了,路网就是仿真的“舞台”。没有它,车往哪儿跑?
我个人习惯把路网文件比作一张电子地图。它不光是画几条线,里面藏着车道数量、限速、连接关系、红绿灯等等信息。嗯,咱们一步步拆开看。
3.1 .net.xml文件结构——别被吓到,其实很规整
我第一次打开.net.xml文件时,说实话,有点懵。满屏的XML标签,看得眼花。但后来发现,它的结构其实非常清晰,就像搭积木一样。
一个标准的.net.xml文件,核心就这几块:
- 头部声明:版本号、编码方式,没啥好说的。
- <net>根元素:整个路网的容器,里面包含所有路网元素。
- <edge>元素:定义路段。每个路段有ID、车道数、限速等属性。
- <lane>元素:定义车道。注意,路段是车道的集合。一个路段可以有1条或多条车道。
- <junction>元素:定义交叉口。包括路口位置、连接关系、红绿灯逻辑。
- <connection>元素:定义车道之间的连接。比如左转、直行、右转。
我给大家画个简单的结构图,方便理解:
你看,结构就这么简单。一个路段(edge)包含若干车道(lane),交叉口(junction)定义连接关系(connection)。
3.2 netedit——可视化路网编辑器,比手写XML强多了
说实话,手写.net.xml文件太痛苦了。尤其是复杂路口,坐标算得你怀疑人生。所以,SUMO官方提供了netedit这个神器。
netedit是SUMO自带的图形化路网编辑器。你可以在上面画路、画交叉口、设置红绿灯,所见即所得。
启动netedit很简单,在终端输入:
netedit
或者直接双击SUMO安装目录下的netedit.exe(Windows用户)。
界面主要分三块:
- 画布区:中间最大的区域,用来绘制和编辑路网。
- 工具栏:左侧或顶部,选择绘制模式、选择模式、删除模式等。
- 属性面板:右侧或底部,显示和修改选中元素的属性。
我记得第一次用netedit时,最不习惯的是它的操作逻辑。比如,画一条路要先点“创建边”工具,然后在地图上点两个点。嗯,习惯了就好。
3.3 创建简单路网——从十字路口开始
咱们来动手创建一个最简单的十字路口路网。别小看它,很多复杂路网都是从这个基础演变来的。
操作步骤:
- 打开netedit,新建一个空路网。
- 选择“创建边”工具(快捷键:e)。
- 画四条路:从中心点向四个方向延伸。先画一条水平路(从左到右),再画一条垂直路(从上到下)。
- 调整交叉口:netedit会自动在道路交叉处生成一个交叉口节点。你可以选中它,在属性面板里修改类型(比如“priority”优先规则路口或“traffic_light”信号灯路口)。
- 设置车道数:选中某条路段,在属性面板里修改“numLanes”属性。比如,主干道设3条车道,支路设2条。
- 添加连接:netedit会自动生成默认连接(直行、左转、右转)。你也可以手动调整,比如禁止某个方向的左转。
- 保存并导出:点击“文件”->“保存网络”,生成.net.xml文件。
导出后的.net.xml文件,你可以直接用SUMO加载进行仿真。也可以继续在netedit里调整,直到满意为止。
3.4 避坑指南——我踩过的几个坑
做路网这么多年,我总结了几条经验,分享给大家:
- 坐标系统:SUMO使用笛卡尔坐标系,单位是米。如果你从其他地图导入数据,注意坐标转换。
- 路段方向:路段是有方向的。从起点到终点。别搞反了,否则车会逆行。
- 交叉口类型:默认是“priority”优先规则路口。如果你想要红绿灯,记得手动改成“traffic_light”。
- 连接关系:netedit自动生成的连接不一定合理。尤其是复杂路口,一定要检查每个方向的转向是否允许。
3.5 小结
这一章我们聊了.net.xml文件的结构,认识了netedit这个好用的工具,还亲手创建了一个简单的十字路口路网。说白了,路网创建就是搭积木——路段是积木块,交叉口是连接件,连接关系是拼装规则。
我个人觉得,学SUMO最忌讳的就是死记硬背。多动手、多试错,比看十遍文档都管用。下次遇到路网问题,别急着百度,先打开netedit画一画,说不定就找到答案了。
好了,这一章就到这儿。记住,路网是仿真的基础,基础打牢了,后面的仿真才能跑得顺。