1. SUMO交通仿真网络构建基础
SUMO(Simulation of Urban Mobility)作为开源的微观交通仿真工具,其网络构建是仿真流程中最关键的环节之一。网络文件(.net.xml)定义了道路拓扑结构、车道属性、信号灯位置等基础设施信息,相当于整个仿真系统的"骨架"。没有正确构建的网络文件,后续的车辆路径、信号控制等配置都将失去意义。
1.1 网络文件的核心组成
SUMO网络由四种基础XML文件通过netconvert工具合成:
- 节点文件(.nod.xml):定义所有交叉口和道路连接点的空间坐标
- 边文件(.edg.xml):描述路段(edge)的连接关系和基础属性
- 类型文件(.typ.xml):预设道路类型模板(可选)
- 连接文件(.con.xml):细化车道级连接关系(可选)
典型的路网构建流程如下:
netconvert --node-files=example.nod.xml \ --edge-files=example.edg.xml \ --output-file=example.net.xml提示:初学者建议先通过GUI工具netedit构建简单路网,再研究生成的XML文件结构。
1.2 节点文件深度解析
节点文件采用WGS84或本地坐标系,每个节点需要明确定位和类型:
<nodes> <node id="intersection1" x="125.3" y="387.2" type="traffic_light"/> <node id="merge1" x="225.7" y="401.5" type="priority"/> </nodes>节点类型直接影响交通规则:
- traffic_light:信号灯控制交叉口
- priority:让行规则交叉口
- right_before_left:无信号灯十字路口
- unregulated:完全无管制交叉口
实测中发现,坐标值建议保持0.1米精度,避免后续可视化时出现渲染错位。对于大型路网,建议使用Python脚本批量生成节点坐标,而非手动编写。
2. 道路网络详细构建方法
2.1 边文件参数详解
边文件定义实际通行路段,关键参数需要特别注意:
<edges> <edge id="highway_e1" from="node1" to="node2" numLanes="3" speed="33.33" priority="2"/> </edges>- speed:单位为m/s(需将常见km/h换算为m/s)
- numLanes:车道数影响后续车辆变道逻辑
- priority:道路优先级(1-3级)影响让行规则
常见问题:
- 速度单位混淆:SUMO中所有速度参数均为m/s,需将km/h除以3.6转换
- 车道编号规则:最右侧车道始终为0,向左递增
- 坡度参数:可通过
<edge>的slope属性模拟上下坡效果
2.2 连接文件高级配置
连接文件精确定义车道级转向关系:
<connections> <connection from="edge1" to="edge2" fromLane="0" toLane="1" dir="s" state="M"/> </connections>转向类型(dir):
- 's':直行
- 'l':左转
- 'r':右转
- 'L':掉头
信号相位(state):
- 'M':绿灯通行
- 'm':黄灯警示
- 'o':红灯停止
- 'O':全红相位
在复杂立交桥场景中,必须明确定义每个车道的转向连接,否则会出现车辆"凭空消失"的异常现象。
3. 实际路网构建案例
3.1 十字路口完整实现
以标准十字路口为例,需要定义:
- 4个信号灯节点
- 12条边(4个进口道×3车道)
- 48个连接关系(每个进口道3车道×4个转向)
节点配置示例:
<nodes> <node id="center" x="0" y="0" type="traffic_light"/> <node id="north" x="0" y="100" type="priority"/> <node id="south" x="0" y="-100" type="priority"/> <!-- 东西方向节点省略 --> </nodes>边配置技巧:
- 进口道长度建议≥200米,避免排队溢出
- 右转专用车道应单独定义
- 公交专用道需设置
allow="bus"属性
3.2 高速公路合流区建模
特殊场景需要特殊处理:
<edges> <edge id="ramp" from="onramp" to="merge" numLanes="1" speed="22.22" priority="1"/> <edge id="mainline" from="upstream" to="merge" numLanes="3" speed="33.33" priority="2"/> </edges> <connections> <connection from="ramp" to="mainline" fromLane="0" toLane="2" dir="s" state="M" visibility="30.0"/> </connections>关键参数:
- priority:主路优先级必须高于匝道
- visibility:设置合流可视距离
- speed:主路与匝道建议速度差≤10m/s
4. 网络优化与验证技巧
4.1 常见错误排查
节点未连接:
- 现象:仿真时车辆无法移动
- 检查:确保每条edge的from/to节点正确定义
车道数不匹配:
- 现象:车辆异常消失
- 检查:连接关系的fromLane/toLane编号有效性
坐标系异常:
- 现象:路网显示为极小的点
- 解决:统一采用UTM坐标系,避免经纬度直接输入
4.2 性能优化建议
大型路网分割:
netconvert --source-file=large.net.xml \ --partition.method=recursive \ --output-file=partitioned简化复杂交叉口:
- 使用
--junctions.join参数合并相近节点 - 对环形交叉口使用
--roundabouts.guess自动识别
- 使用
可视化检查工具:
netedit -s network.net.xml
实际项目中,建议先构建最小可验证单元(如单个交叉口),确认无误后再扩展为完整路网。遇到复杂拓扑时,可考虑使用OpenStreetMap数据导入(通过osmWebWizard工具),再针对性地修改生成的网络文件。