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 知识体系结构图
下面这张图帮你理清今天讲的内容:
这张图把咱们今天讲的内容串起来了。从左到右看:先选传感器类型,再配参数,最后看输出数据。每一步都有讲究。
我的习惯:做仿真前,我会先在纸上画个传感器布局草图。标清楚每个 E1 和 E2 的位置、检测范围。这样写配置文件时不容易出错。你也不妨试试。
好了,传感器基础就讲到这里。记住,E1 适合做断面流量统计,E2 适合做路段拥堵分析。选对传感器,你的数据采集就成功了一半。