4、传感器基础:SUMO传感器类型、E1与E2原理配置与数据输出

好了,咱们进入传感器这块。说实话,SUMO 里如果没有传感器,仿真就跟闭着眼睛开车一样——你根本不知道路上发生了什么。我个人习惯是,在做任何交通仿真之前,先把传感器布局想清楚。这步做好了,后面数据采集就是水到渠成的事。

4.1 SUMO 传感器类型概览

SUMO 里内置了好几种传感器,但咱们做仿真最常用的就三类:

  • E1 感应线圈:相当于路面下埋了个线圈,车一压过去就计数。简单粗暴,但很实用。
  • E2 区域检测器:覆盖一段连续的路段区域,能统计平均速度、密度、排队长度。说白了就是 E1 的升级版。
  • E3 多入口/多出口检测器:监控一个区域内的进出流量,比如交叉口或者停车场出入口。

嗯,这里要注意,E1 和 E2 是咱们今天的主角。E3 后面章节会单独讲。

4.2 E1 感应线圈:原理与配置

原理:E1 传感器模拟的是咱们现实中常见的感应线圈。车经过线圈上方时,磁场变化触发信号,SUMO 就记录下这辆车的通过时间、速度、车长等信息。说白了,它就是个“车过留痕”的装置。

配置方法:E1 的配置很简单,你只需要在 .add.xml 文件里定义好位置就行。我一般这样写:

<additional>
    <inductionLoop id="E1_01" lane="edge1_0" pos="50" freq="60" file="output_e1.xml"/>
</additional>

参数解释一下:

  • id:传感器名字,别重名就行。
  • lane:放在哪条车道上。注意要写完整车道 ID,比如 edge1_0 表示路段 edge1 的第 0 车道。
  • pos:距离路段起点的位置,单位米。我习惯放在路段中间偏前一点,这样数据更稳定。
  • freq:数据输出频率,单位秒。设 60 就是每 60 秒输出一次聚合数据。
  • file:输出文件路径。
我的小经验:pos 别设在路段起点或终点附近。我曾经把线圈放在路段起点,结果车辆刚生成就被检测到,速度数据全是 0,排查了半天才发现是位置问题。建议至少离起点 10 米以上。

4.3 E2 区域检测器:原理与配置

原理:E2 检测器覆盖一段连续的车道区域,而不是一个点。它能统计这个区域内的车辆数、平均速度、排队长度等。你想想看,如果你想知道某个路段是不是堵车了,E1 只能告诉你“有多少车经过”,但 E2 能告诉你“这段路上现在有多少车在堵着”。

配置方法:E2 的配置稍微复杂一点,因为它要指定一个范围:

<additional>
    <laneAreaDetector id="E2_01" lane="edge1_0" startPos="20" endPos="80" freq="60" file="output_e2.xml"/>
</additional>

关键参数:

  • startPos 和 endPos:检测区域的起点和终点位置。注意 startPos 必须小于 endPos。
  • lane:同样指定车道。
  • freq 和 file:跟 E1 一样。
避坑指南:我曾经把 startPos 和 endPos 写反了,结果 SUMO 直接报错不运行。后来养成习惯,每次写完都检查一下数值大小关系。另外,检测区域长度建议至少 30 米以上,太短了统计意义不大。

4.4 传感器数据输出格式

数据输出这块,我直接拿实际输出文件来说话。E1 的输出长这样:

<detector>
    <interval begin="0.00" end="60.00" id="E1_01" nVehContrib="12" flow="720" occupancy="0.05" speed="13.5" length="4.2"/>
    <interval begin="60.00" end="120.00" id="E1_01" nVehContrib="15" flow="900" occupancy="0.06" speed="12.8" length="4.1"/>
</detector>

字段含义:

字段含义
nVehContrib该时段内通过车辆数
flow折算成每小时流量(辆/小时)
occupancy占有率(0~1),车占道路时间的比例
speed平均速度(m/s)
length平均车长(m)

E2 的输出会多几个字段:

<interval begin="0.00" end="60.00" id="E2_01" nVehContrib="8" flow="480" occupancy="0.12" speed="10.2" length="4.3" nVehSeen="5" meanSpeed="9.8" meanOccupancy="0.15" maxJamLengthInVehicles="3" maxJamLengthInMeters="12.6"/>

E2 特有的字段:

  • nVehSeen:当前区域内存在的车辆数(瞬时值)
  • meanSpeed:区域内所有车辆的平均速度
  • maxJamLengthInVehicles:最大排队长度(按车辆数算)
  • maxJamLengthInMeters:最大排队长度(按米算)
重点:E1 的 occupancy 是时间占有率,E2 的 meanOccupancy 是空间占有率。前者反映车流密度,后者反映拥堵程度。做拥堵分析时,我一般优先看 E2 的数据。

4.5 知识体系结构图

下面这张图帮你理清今天讲的内容:

SUMO 传感器知识体系 传感器类型 E1 感应线圈 E2 区域检测器 E3 多入口/出口检测器 配置参数 • id:传感器名称 • lane:车道指定 • pos/startPos/endPos:位置 • freq:输出频率 • file:输出文件 数据输出 • nVehContrib:通过数 • flow:流量 • occupancy:占有率 • speed:平均速度 • length:平均车长 • maxJamLength:排队长度 E1 适合断面流量统计,E2 适合路段拥堵分析,E3 适合区域进出监控 实践建议:先确定分析目标,再选传感器类型,最后配置参数

这张图把咱们今天讲的内容串起来了。从左到右看:先选传感器类型,再配参数,最后看输出数据。每一步都有讲究。

我的习惯:做仿真前,我会先在纸上画个传感器布局草图。标清楚每个 E1 和 E2 的位置、检测范围。这样写配置文件时不容易出错。你也不妨试试。

好了,传感器基础就讲到这里。记住,E1 适合做断面流量统计,E2 适合做路段拥堵分析。选对传感器,你的数据采集就成功了一半。

可可精品资料库