SUMO里最容易被低估的工具,我觉得就是NetEdit。很多搞仿真的人习惯用netconvert把OSM数据一键转成路网,或者靠Python脚本批量生成网络,但真到了要手工调整交叉口几何、检查转向连接、补几个公交站和检测器的场景,NetEdit就是绕不开的那个存在。新版NetEdit的各个编辑模式(Mode)划分得更清晰,从画路、连转向到布信号灯和附属设施,全都收拢在左侧那一排模式按钮里。新手第一次打开,面对这排按钮往往一脸懵;老手虽然常用,但也很少有人系统性地把这些模式的功能边界和操作细节捋一遍。这篇文章就干这件事:把新版NetEdit各编辑模式完整拆解一遍,讲清每个模式能做什么、不能做什么、具体怎么操作、有哪些坑,最后用一个从零搭建信号交叉口的实战案例把流程串起来。无论你是刚接触SUMO的仿真新人,还是需要快速用NetEdit搭测试路网的工程师,这篇文章都值得花十几分钟读完。
1. NetEdit新版界面与模式体系总览
1.1 先认识NetEdit的整体布局
在逐个讲模式之前,有必要花半分钟把NetEdit的界面结构说清楚,因为模式按钮不是孤立存在的,它的操作结果都要在画布和属性面板里体现。
新版NetEdit的窗口布局还是几大块:顶部是菜单栏,文件读写、撤销重做、视图变换、路网处理这些全局操作都在这里;窗口左侧是这次的主角——模式工具栏(Mode Toolbar),从上到下排列着各种编辑模式;中间是画布,所有路网元素的创建、移动、连接都在这里完成;右侧是属性面板,选中元素后可以查看和修改这个元素的全部参数;底部是状态栏,显示当前鼠标坐标、当前操作状态和模式提示信息。这种布局和很多图形编辑软件类似,但NetEdit有个鲜明的特殊性:不同模式下,鼠标点击、拖拽、右键在画布上的含义完全不同。在Select模式下点击一条边是选中它看属性,在Create Edge模式下点击画布则是新建一个节点并拉出一条边。所以理解各个模式的区别,是使用NetEdit的第一道门槛,也是这篇文章要解决的核心问题。
1.2 各模式功能速查表
新版NetEdit的模式工具栏一般包含九个模式,这里先给出一张速查表,方便你之后遇到具体问题时快速定位。
| 模式名称 | 核心用途 | 典型应用场景 |
|---|---|---|
| Select(选择) | 查看/修改元素属性,批量选择删除 | 调整车道数、限速、节点坐标 |
| Move(移动) | 拖动节点、边、形状的位置 | 修正交叉口几何,拉直弯曲道路 |
| Create Edge(创建边) | 用鼠标绘制道路 | 从零搭建路网骨架 |
| Create Railway(创建铁路) | 绘制铁路轨道 | 加入有轨电车、铁路线路 |
| Create Connection(创建连接) | 定义车道间的转向连接 | 让车辆能左转、直行、右转 |
| Create TLS(创建信号灯) | 将交叉口设为信号控制 | 设置路口红绿灯 |
| Create Additional(创建额外元素) | 布设停车区、公交站、检测器等 | 公共交通设施与数据采集 |
| Create POI(创建兴趣点) | 放置点状标记 | 标记地标、学校、重要地点 |
| Create Polygon(创建多边形) | 绘制面状背景要素 | 建筑物轮廓、水域、区域边界 |
建议新手不要急着背参数,而是把这张表当成索引。后面遇到"我想画一条路""我想加个信号灯"这类具体需求,回来查表定位到对应模式,再结合下文的具体说明操作,效率高得多。
1.3 新版相比旧版的核心变化
如果你用过老版本NetEdit再切到新版,会感受到一些实实在在的变化。我自己的体会有四点。
第一,模式工具栏的图标和间距重新设计了,辨识度明显提高,在2K、4K这类高分屏上不会像老版本那样小而密。第二,属性面板的交互优化很明显,选中元素后参数做了分组,像边的限速、车道数、允许车型这些最常用的字段都在第一屏就能看到,不用反复滚动查找。第三,Create Additional模式整合了大量额外元素,公交站、停车区、感应线圈、减速带等都集中在这个模式里通过下拉框切换,不用再像老版本那样在各种菜单深处找入口。第四,画布渲染性能有提升,加载城市级大路网后缩放平移卡顿感明显减少,这对日常操作的影响比想象中大得多。
当然,新版也带来一些需要适应的小变化,比如部分快捷键和右键菜单的位置与旧版不完全一致。从旧版迁移过来的老用户,刚上手时稍有点不适正常,但整体操作逻辑没有变,适应期很短。
2. 基础操作模式:选择、移动与视图
2.1 Select Mode:查看属性与批量编辑
Select Mode是使用频率最高的基础模式,几乎任何一次路网微调都要从这里开始。进入这个模式后,鼠标点击任意一个路网元素,右侧属性面板就会列出该元素的所有关键属性,你可以在面板里直接修改。
对边元素来说,常见可修改属性包括:边ID(id)、起始节点(from)、终止节点(to)、限速(speed,注意单位是m/s)、车道数(numLanes)、允许/禁止车辆类型(allow/disallow)等。对节点来说,主要是ID和坐标,有时还会涉及节点类型,比如priority节点、traffic_light节点。对连接来说,可以查看fromLane、toLane等关键参数,确认这条连接到底是从哪条车道转到哪条车道。
Select Mode还有一个很实用的能力:批量选择。按住Shift键点击多个元素,或者直接在画布上拖拽出一个矩形框,就能把一片区域内的元素全部选中。批量选中后,属性面板显示的是公共属性,这时候可以一次性修改多个边的限速或车道数。从外部导入的路网如果限速参数全不对,用框选加批量修改,几分钟就能调整完,这个功能我几乎每次处理导入路网时都会用到。
删除功能也在这个模式下完成:选中元素后按Delete键即可删除。有一个新手容易踩的坑:删除节点会一并删除与该节点相连的所有边,删除边则不会影响节点本体。如果不小心删错了节点导致大段路网消失,立刻按Ctrl+Z撤销就行,不用慌乱。
2.2 Move Mode:调整节点与边的几何位置
Move Mode解决的是"路画完了但位置不对"的问题。这个模式的操作非常直觉:直接拖动节点或边来改变路网的几何形态。
具体来说,拖动节点时,与该节点相连的所有边都会跟着变化,相当于整个交叉口区域被整体调整;拖动边时,只会调整这条边本身的位置,不会改变它两端节点的坐标。这个逻辑和很多道路编辑工具一致:动点则连带动边,动边则不影响点。理解这个区别很重要,因为你调整交叉口时通常要动节点,而拉直一段路时只需要动边或者拖动一串中间节点。
实际使用中,我最常用Move Mode做两件事。一是拉直道路:从OSM转换来的路网经常有大量弯曲的小节点,在Move模式下框选这一串节点,手动对齐成直线,路网看起来立刻清爽很多。二是调整交叉口角度:有些交叉口的入边角度非常奇怪,用Move模式把入边拖到合适角度,后续做连接和信号灯时都更顺手。
Move Mode里有个小技巧:按住Ctrl键拖动时,移动的精度会更高,适合需要微调的场合。如果你用的是笔记本,没有独立中键,平移画布可以按住鼠标右键拖拽,或者按住Shift加左键拖拽,这个在下一节展开。
2.3 视图操作与常用快捷键
视图操作虽然不算模式,但和模式配合紧密,值得单独说一下。新版NetEdit的视图操作没有太大变化:滚轮缩放,按住鼠标中键或右键拖拽平移,右键菜单里有复位视图、缩放至全图等选项。Ctrl+A在Select模式下是全选,Ctrl+Z和Ctrl+Y分别是撤销和重做,Delete删除,Esc取消当前正在进行的绘制或选择操作。
特别提醒一点:在Create Edge、Create Connection这类"正在绘制"的状态下,Esc键是取消当前操作的最可靠方式。但如果只是视图操作,比如平移了画布,有些版本里Ctrl+Z并不会撤销视图变化,因为视图变化不在编辑历史记录里。如果按了撤销发现视图没反应,不用怀疑软件出了问题,这是正常现象。
3. 路网创建核心:边、铁路与连接
3.1 Create Edge Mode:从零画一条路
创建边模式是最直观的模式,也是搭建路网的第一步。进入模式后,在画布上点击任意位置,NetEdit会生成一个新的节点,这条边从这个节点开始;在另一个位置点击,生成第二个节点,同时生成一条边连接两个节点;继续点击,则会依次生成连续的边和节点;双击或按Esc结束本次绘制。
新手容易困惑的一点是:NetEdit创建出来的边默认是什么样的?SUMO里的edge本身是有方向的,一条edge代表一个方向的通行,但NetEdit默认创建的是双向道路,也就是同时生成两条方向相反的edge,在画面上显示为两条紧挨着的边,车辆可以在两个方向通行。如果你只需要单向道路,绘制完成后选中边,在属性面板里把方向参数改为单向即可。
属性面板中最值得关注的几个参数:
- numLanes:车道数。对双向道路通常指的是每个方向的车道数,需要按需求设置
- speed:限速,单位是m/s。很多人直接填50,仿真时发现车速异常,才反应过来单位错了,50m/s相当于180km/h
- allow/disallow:允许或禁止通行的车辆类型,默认所有车辆,也可以限制为passenger、bus、truck等
操作上我的经验是:画路网之前先在纸上或脑子里把拓扑结构想清楚,尤其是交叉口位置和道路等级。NetEdit虽然可以随时修改,但拓扑关系一旦画错,牵一发动全身,后续调整的代价比改属性大得多。画的时候从主干道开始,先画出几条大框架,再逐渐细化支路,这样整体结构不容易乱。
3.2 Create Railway Mode:铁路轨道的创建逻辑
Create Railway Mode和Create Edge Mode很像,但生成的是铁路边。在SUMO中,铁路本质上也是一种edge,只是类型是railway,默认不允许普通机动车通行,而是服务于rail列车、tram有轨电车这类交通方式。
绘制方式与普通边完全一致,连续点击生成轨道节点和边。属性面板中可以设置轨道类型(rail、tram、light_rail等)、电气化状态、限速等。实际项目里,这个模式最常见的用途是在路网中加入有轨电车或轻轨线路,配合公共交通仿真需求。
我的建议是:铁路的几何绘制逻辑和普通道路完全一致,所以完全可以用Create Edge Mode先画好,再在属性面板里把类型改成railway,效果一样。直接用Create Railway Mode的好处只是省去手动改类型这一步。需要注意的一个坑是:NetEdit里创建的铁路边默认可能只画了单轨,如果你需要双向通行,要像创建双向道路一样注意方向设置,否则后续仿真时列车只能在单个方向运行,反向会报"无路可走"。
3.3 Create Connection Mode:转向连接决定仿真成败
接下来要讲我认为NetEdit中最重要、也最容易出错的模式:Create Connection Mode。
在SUMO中,交叉口的转向行为是由connection(连接)定义的。连接描述的是"从某条进入交叉口的边的某一车道,可以转向到哪条离开交叉口的边的某一车道"。如果没有定义连接,SUMO在仿真阶段虽然会根据一些默认规则尝试自动生成,但结果往往不符合真实交通规则。最常见的现象就是:车辆到了路口不知道该往哪走,停在原地,或者直接报错退出仿真。
Create Connection Mode的操作逻辑如下:
- 进入连接模式后,点击进入交叉口的那条边(入边)的某一车道
- 被点击后,画面会高亮显示所有可以和该车道建立连接的目标车道,也就是离开交叉口的边上的车道
- 再点击目标出边的某一车道,连接创建成功,画布上出现表示转向的箭头
对于标准十字路口,如果每个方向只有一条入车道,想让车辆能左转、直行、右转,那么每个入口方向要创建三条连接,四个方向一共12条。如果某个方向有两条车道,比如一条左转专用道加一条直行右车道,连接数会相应增加,每条车道都需要单独定义它允许转向的出口车道。
NetEdit在连接模式下会用不同颜色提示连接状态。颜色含义可能随版本略有差异,但大致逻辑是:灰色表示当前未被选中的车道;绿色表示可以创建连接的目标;红色或已有箭头表示该连接已经存在。创建连接时如果点击一个已经存在的连接,通常不会重复创建,而是在属性面板里显示该连接的参数供你修改。
我在实际操作中还有一个细节想分享:如果某个入口方向有多条车道,先想清楚每条车道的转向功能,再逐个车道创建连接。很多人在单车道交叉口没问题,一碰到多车道就乱,根本原因是没有先规划好车道转向。车道转向规划得清楚,连接创建就是一两次点击的事情。如果发现有错误连接,选中后按Delete删除,重新创建即可。
再强调一次我踩过很多次的坑:连接不完整是SUMO仿真中车辆在交叉口停住不动的最常见原因。如果你仿真跑到某个路口车辆全部卡住,不要急着调路由和车辆参数,先回到NetEdit,进入Create Connection Mode,把交叉口的连接仔细检查一遍。这个习惯能帮你省下大量排查时间。
4. 交通控制与附属设施:TLS、Additional、POI、Polygon
4.1 Create TLS Mode:信号灯的创建与参数调整
信号灯在SUMO中对应TLS(Traffic Light System)。在NetEdit里创建信号灯非常直接:进入Create TLS Mode,点击想要信号控制的交叉口节点,该节点就会变成TLS节点,画布上出现信号灯相关标识。
信号灯创建后的重点在配置。选中TLS节点,右侧属性面板会出现完整的信号灯控制参数,包括相位(Phase)、周期时长(Cycle Time)、各相位内绿灯、黄灯、红灯的时长等。新版NetEdit的属性面板中,你可以直接修改每个相位的时长参数。刚上手时,我最建议的做法是先用NetEdit提供的默认相位配置把仿真跑起来,再根据车流情况逐步调整绿灯时长分布。
信号灯类型也是一个必须了解的概念。常见的TLS类型包括:
- static(固定配时):按固定周期循环,不感知车流量
- actuated(感应式):根据检测器反馈动态调整绿灯时间
- 其他如priority、rail signal等,用于特殊场景
对于大多数测试场景,static类型足够。如果想研究感应式信号控制,那就需要配合额外的检测器(在Create Additional Mode中布设)和更复杂的参数设置,这一块足够单独写一篇长文,这里先点到为止。
操作上还有两个容易忽略的点。第一,一个TLS节点控制的范围是它所在的交叉口,如果路网里有两个紧挨着的交叉口且信号需要协调,需要把这几个节点纳入同一个TLS方案,或者通过TLS联动设置来实现,属于进阶操作。第二,在Create TLS Mode下再次点击已经是TLS的节点,有的版本会弹出参数面板,有的版本会移除TLS,具体交互要留意画面提示,不确定时先看一眼状态栏文字再操作,不要盲目双击。
4.2 Create Additional Mode:公交站、停车区与检测器
Create Additional Mode是新版NetEdit整合度较高的一个模式。进入模式后,通常在模式工具栏内会有一个下拉选择框,列出所有可以创建的额外元素类型。常见的包括:
- BusStop(公交站):点击某条边的某个位置放置,属性里可设置站名、所在边、位置、是否港湾式等
- ParkingArea(停车区):在路边划定停车区域,需要设置入口位置、停车位容量等
- InductionLoop(感应线圈/车检器):布设在车道上,统计通过车辆数、时间,是后续交通流分析的基础
- E2检测器:覆盖一段路段的检测器,可检测平均车速、排队长度等
- VariableSpeedSign(可变限速牌):按时间动态调整限速
- Rerouter(路径重定向器):在仿真中强制车辆改道
以公交站为例,具体操作是:在Additional模式下拉框里选择BusStop,然后点击某条边的某个位置,公交站就出现在点击位置;右侧属性面板里可以修改边ID、位置、名称等参数,也可以用鼠标拖动微调位置。
这个模式的价值在于把仿真路网中需要的"路上设施"统一到一个模式里。想起要加什么,切换下拉框就行,不用在菜单里找来找去。我的使用经验是:搭测试路网时,初期不用急着添加这些Additional元素,先把路网和连接调通,跑一次基础仿真确认没问题后,再回来在需要的位置补上公交站、检测器。这样排查问题时思路更清晰——路网问题归路网问题,设施问题归设施问题,不混在一起。
4.3 Create POI与Create Polygon:让路网"看得懂"
POI和Polygon在仿真路网里不是必需要素,但用了之后效果提升明显,建议不要跳过。
Create POI模式的操作是:进入模式后点击画布任意位置放置一个兴趣点标记,属性面板里可以设置POI的图标类型、颜色、层、名称等。它的作用类似于地图上的图钉,用来标记"这栋楼是学校""这里是收费点"这类信息。在实际项目中,POI经常用于团队沟通:交付路网文件时用醒目POI标出关键地点,别人打开文件一眼就能看懂设计意图。
Create Polygon模式的操作是:进入模式后通过连续点击绘制多边形的各个顶点,双击或按Esc结束。它可以用来绘制建筑物轮廓、水域、公园等面状背景要素,属性面板中可调整填充色、边线色、是否填充等。把Polygon画好之后,NetEdit和sumo-gui的仿真画面都会更有辨识度,漫游起来不会像面对"一片白地"。
这里想说的是:Polygon和POI本质上不影响车辆仿真逻辑,只是在视觉层提供辅助,所以不用太担心画得不够精确,画错了也不会导致仿真报错,最多影响美观,修改起来也很快。我做路网宣讲或录演示视频时,通常会花点时间把主要建筑物轮廓画出来,呈现效果好得多。
5. 模式组合实战:从零搭建一个四方向信号交叉口
为了让前面这些模式说明更连贯,我这里记录一次实际操作的全过程:用NetEdit从零搭建一个带信号灯和公交站的十字交叉口,整个流程大约十分钟,你可以照着走一遍。这个小路网也是我平时测试路由和信号方案时最常用的基础模板。
5.1 准备与创建四条入边
新建文件后,切换到Create Edge Mode。在画布中央偏左的位置点击一下,生成第一个节点,这是十字路口的西侧入口;在中央位置点击第二个节点,这是交叉口中心;继续向右侧点击第三个节点,形成一条跨越中心的东西向道路。用同样方法,在中心节点上方和下方各点一个节点,形成南北向道路。
这里有一个非常关键的细节:创建南北向道路时,第二个点必须准确落在之前创建的中心节点上。当鼠标移动到已有节点附近时,NetEdit会显示吸附提示,比如高亮或捕捉标记,此时点击会复用该节点而不是新建一个。如果没吸附上,路就画歪了,形成"伪交叉口"。我第一次画的时候就没注意吸附,结果四条边没有真正相交于同一个节点,仿真时车辆全部堵在中心,后来才发现是几何没有接上。遇到这种情况,用Move Mode把节点拖到正确位置对齐即可,但最好一开始就注意吸附。
5.2 给交叉口补全连接
切换到Create Connection Mode。先点击西侧入边(东西向道路中由西向东进入中心节点的那条edge)的车道,此时东侧出边的车道应该被高亮,依次点击向北出边(左转)、向东出边(直行)、向南出边(右转)三条目标车道,创建三条连接。同样的方法处理东、南、北三个入口方向,保证每个方向都能左转、直行、右转,总共12条连接。
创建完成后,画布上会出现若干条转向箭头。建议花几秒钟检查一下:每个入口方向是否都有三条连接,箭头方向是否符合预期。如果某个方向漏了左转,仿真时左转车就会停下不走。这个检查过程虽然只有几秒,但能避免后面整个仿真跑不起来,值得养成习惯。
5.3 设置信号灯与公交站
切换到Create TLS Mode,点击中心节点,把它变成TLS控制节点。右侧属性面板出现信号灯配置,先保持默认相位和周期,让这个交叉口先成为一个"能跑的"信号路口。如果过一会儿想验证车辆排队和信号配时的关系,再回来调整绿灯时长。
然后切换到Create Additional Mode,在下拉框中选择BusStop,在东西向道路东侧出边的某个位置点击,放置一个公交站,属性面板里设置站名为EastStop。这样路网中就集成了一个公共交通设施点,后续可以配合公交线路做仿真测试。如果需要统计通过车辆数,可以再在同一模式里选择InductionLoop,在任一入边车道上放置一个感应线圈。
5.4 导出路网并在sumo-gui中验证
到这里,一个带信号灯、带公交站的十字路口路网基本成型。保存文件时注意选择合适文件名,NetEdit保存的路网文件后续可以直接在sumo-gui中打开仿真。打开sumo-gui,加载刚才保存的路网文件,手动添加一条简单路由:车辆从西侧入口进入,计划在东侧出口离开,运行仿真,观察车辆能不能根据信号灯和连接顺利通过交叉口。
这一步验证非常关键。很多人画完网就直接去写路由、调参数,结果一堆报错,最后发现根因是路网本身的问题。花几分钟在sumo-gui里先小流量验证路网,能省去后面大把调试时间。这也是我做过很多次路网项目后总结出的铁律:路网验证永远排在路由验证前面。
6. 常见问题与排查技巧实录
最后把我在NetEdit使用过程中遇到的典型问题整理成速查表,再挑几个重点展开。这张表可以直接当排查手册用。
| 现象 | 可能原因 | 排查思路 |
|---|---|---|
| 仿真时车辆在路口停住不走 | 交叉口连接不完整 | 回到连接模式检查转向箭头是否齐全 |
| 车辆方向与预想相反 | 道路方向设置错误,双向/单向没分清 | 在Select模式下查看边的方向属性 |
| 信号灯不生效,车辆无序通行 | TLS节点位置不对,或相位配置异常 | 检查TLS是否创建在正确节点,重设相位 |
| 公交站识别不了 | 公交站所在边ID或位置不对 | 检查公交站属性中的边ID是否与实际一致 |
| 删除节点后大片路网消失 | 节点删除会连带删除边 | 及时撤销,或改用Move模式调整 |
| 属性面板不显示选中元素 | 不在Select Mode,或选中了不支持的组合 | 切回Select Mode,逐个元素点击测试 |
| 批量改车道数后部分道路不变 | 选中的边不完整,或修改后未保存 | 确认勾选所有目标边,保存后重开文件验证 |
| 大路网操作明显卡顿 | 路网元素过多,图形渲染负载高 | 关闭部分图层显示,简化几何,分批编辑 |
6.1 连接"看不见"的坑
有关连接,有一个非常容易迷惑新手的现象:在Create Connection Mode下,点击入边某条车道后,并不是所有出边车道都会高亮。一些出边车道看起来离得很近,却怎么都无法点击建立连接。这通常不是软件bug,而是几何或拓扑原因导致SUMO认为该转向非法,比如出边节点与入边节点不在同一个交叉口、入边和出边的方向形成锐角等。
遇到这种情况,不建议硬点。回到Select模式检查各条边的方向和节点归属,确认拓扑上没有绕晕。如果确实需要这个转向,可以先在Move模式下调整交叉口几何,或移开多余的中间节点,建立连接后再把几何恢复,这个迂回的办法我试过多次,比硬生生创建一条"非法连接"可靠得多。
6.2 TLS相位改完却不生效
关于TLS,比较常见的困惑是:在属性面板里改了某个相位的绿灯时长,仿真里看起来却没有变化。这多半是因为改的是某个TLS方案的参数,但节点实际使用的可能是另一套方案,或者修改后没有确认应用就关掉了面板。
我的建议是每次改完TLS参数后,先在NetEdit里刷新一下视图,再在sumo-gui里重新打开路网验证,确保配置确实写入了.net.xml文件。路网文件是纯文本,不放心时可以直接用文本编辑器打开查看TLS相关字段,这种"最笨"的验证方式往往最可靠。尤其当路网里存在多个TLS时,直接看XML能立刻确认你改的是不是正确的那一个。
6.3 导入路网属性面板参数特别多
最后想提醒一个很常见但也容易吓到新手的场景:用netconvert或osmWebWizard转换出来的大路网,导入NetEdit后,选中边或节点时属性面板会显示一长串参数。这些大多是路网导入时自动生成的附加字段,不需要手工关注。
遇到这种情况,只需要聚焦常用字段:边的id、speed、numLanes,节点的坐标和类型,连接的方向。其他参数保持默认即可。如果觉得属性面板太乱,可以收起不常用的属性分组,把注意力放在核心几个字段上。处理大路网时,我最常用的组合是Select模式加框选加批量修改,针对限速和车道数统一调整,比一条条点快得多。
最后再分享一个我个人的使用习惯:每次搭完一个路网,都会强制自己花两分钟把模式工具栏从头到尾过一遍,确认每个模式对应的画布内容都符合预期,尤其是连接和TLS这两个容易出错的地方。这个习惯花费的时间极少,却帮我避免过好几次"仿真跑到一半才发现路网有基础问题"的尴尬局面。NetEdit这个工具看起来朴素,但值得花时间深挖,模式用熟了之后,搭路网的效率真的能翻倍。