1. 创建单车道环形道路并运行基础仿真

任务目标

使用SUMO构建一个单车道环形道路网络,配置周期性车辆流,运行基础仿真并观察车辆在环路上的连续行驶状态。本案例聚焦于最小可复现的SUMO仿真闭环,不涉及信号灯、多车道或复杂路网。

环境依赖

需要安装SUMO(建议1.18.0及以上版本),并确保命令行工具netedit、sumo、python可用。本案例使用SUMO自带的netedit生成路网,通过XML文件定义道路与流量,最终使用sumo-gui进行可视化观察。

实现步骤

整个案例包含三个文件:路网文件(ring.net.xml)、路由文件(flow.rou.xml)以及SUMO配置文件(run.sumocfg)。路网通过netedit图形化生成,路由与配置文件手工编写。

1. 生成单车道环形路网

启动netedit,新建网络。使用"创建边"工具绘制一个近似圆形的闭合环路(至少4条边首尾相连)。选中所有边,在右侧属性栏中将"车道数"(numLanes)设为1,并确保道路方向一致形成单向环。保存文件为ring.net.xml。若希望精确复现,可直接使用以下等价的XML路网定义(将内容保存为ring.net.xml):

```xml ```

上述XML定义了一个400m×200m的矩形环路,每条边为单向单车道,限速50km/h(约13.89m/s)。实际使用中推荐用netedit生成更圆滑的几何形状,但此定义足以完成仿真验证。

2. 定义车辆流量

创建flow.rou.xml,定义每2秒生成一辆车,车辆从edge1出发,沿环路行驶一圈后从edge1再次进入(即持续绕行)。SUMO中车辆需指定出发边与目的边,由于是环路,车辆到达edge1终点后会自动继续沿下一条边行驶,因此只需定义一条完整路径即可实现循环效果。

```xml ```

该配置表示从仿真开始到第100秒,每2秒从edge1释放一辆车,车辆依次经过四条边完成一圈。由于路网是环形的,车辆到达edge4终点后会自动回到edge1起点继续行驶,形成持续绕圈。

3. 创建SUMO配置文件

创建run.sumocfg,将路网与路由文件关联起来:

```xml ```

运行与验证

在命令行中切换到三个文件所在目录,执行以下命令启动图形化仿真:

```bash sumo-gui run.sumocfg ```

启动后点击"运行"按钮(或按Ctrl+D)开始仿真。观察窗口中的车辆是否沿环路持续行驶,无碰撞、无停滞。验证通过条件如下:

  • 仿真从0秒运行至200秒无报错退出;
  • 车辆按约2秒间隔依次出现在edge1起点;
  • 车辆沿环路连续行驶超过一圈,且不出现逆行或卡在路口的情况;
  • 仿真结束时,路网中仍有车辆在行驶(因为流量持续到100秒,车辆需约30秒完成一圈,200秒内不会全部离开)。

若需无界面验证,可将sumo-gui替换为sumo,并在配置文件中添加--summary-output参数查看统计信息。例如在命令行追加:

```bash sumo run.sumocfg --summary-output summary.xml ```

运行结束后检查summary.xml中的running字段,确认仿真期间始终有车辆在路网中行驶,且meanSpeed接近13.89m/s(自由流速度),即可判定仿真正常。

常见问题

  • 车辆在路口停住不动:检查路网中四条边是否形成闭合且方向一致,若某条边方向反向,车辆将无法通行。
  • 仿真立即结束:检查end时间是否大于流量结束时间,并确认flow的end值大于begin值。
  • 车辆消失:若车辆到达edge4终点后未进入edge1,说明路网连接不完整,需在netedit中检查交叉口连接关系。