V2V/V2I网络拥塞判断、构造及SUMO+Veins+OMNET++仿真测量问询
车联网拥塞判断、场景构造及Veins仿真测量方案
一、V2V/V2I网络拥塞判断与拥塞场景构造
1. 拥塞判定标准
- 信道层指标:信道繁忙率(CBR) 超过60%为核心判定依据,同时结合端到端时延>100ms、报文丢包率>10%、实际吞吐量远低于802.11p标称的10Mbps带宽,多指标联合确认即可判定网络存在拥塞。
- 节点层指标:单节点发送队列持续积压、MAC层退避次数短时间内陡增、连续3次以上报文发送失败,可作为节点侧拥塞的辅助判定依据。
2. 拥塞场景构造方法
- 节点密度控制:在通信覆盖范围内集中部署50台以上车载节点/路侧单元,将节点常规报文发送频率从默认1Hz提升到10Hz以上,快速抢占信道资源。
- 报文载荷调整:将BSM等常规报文载荷从默认几百Byte提升到1500Byte左右,同时新增高频WSM、WSA业务报文传输,进一步提升信道负载。
- 移动场景配置:构造路口、交通拥堵路段等场景,限制车辆移动速度低于5km/h,让大量节点长期处于同一通信范围内,避免节点移动分散降低信道负载。
二、SUMO 0.30.0 + Veins 5.0 + OMNET++ 4.7 仿真实现方案
1. 仿真环境主动构造拥塞操作
- 修改SUMO配置:在路网的
*.rou.xml文件中调整车流参数,将<flow>标签的vehsPerHour属性设置为1000以上,同时在*.sumocfg中配置路口信号灯红灯时长≥60s,制造车辆长时间聚集的场景。 - 修改Veins参数:在
omnetpp.ini中调整*.node[*].appl.beaconInterval参数,将BSM发送间隔从1s降到0.1s,同时调整beaconLengthBits参数到12000bit以上,开启多应用并行发送WSM、WSA报文,快速拉高信道负载。
2. 报文数量统计实现
Veins框架已内置各层报文的收发钩子,直接修改源码添加计数逻辑即可:
- 在
WaveApplLayer.cc、Mac1609_4.cc中定义全局统计信号,区分WSM、WSA、BSM、ACK四类报文的发送/接收计数信号 - 在
handleLowerMsg()、handleUpperMsg()方法中根据报文的messageKind、psid字段判断报文类型,每触发一次收发事件就通过emit()方法上报对应计数 - 在
omnetpp.ini中开启标量统计配置:*.node[*].**scalar-recording = true,仿真结束后可直接从.sca结果文件中导出各类报文的总数量
示例代码片段:
// 注册BSM计数统计信号 simsignal_t bsmTxCountSignal = registerSignal("bsmTxCount"); simsignal_t bsmRxCountSignal = registerSignal("bsmRxCount"); // BSM报文发送时计数 if (msg->getKind() == BSM_MSG_TYPE) { emit(bsmTxCountSignal, 1); sendDown(msg); } // BSM报文接收时计数 if (msg->getKind() == BSM_MSG_TYPE) { emit(bsmRxCountSignal, 1); handleBSM(msg); }
3. 带宽测量实现
- 实时带宽占用:在
Mac1609_4.cc的onMessageSent()方法中累加单位时间内所有发送报文的总比特数,按1s为周期计算即可得到当前信道的实时带宽占用值。 - 间接计算:直接调用Veins内置的
channelBusyRatio统计信号,结合802.11p的10Mbps标称带宽,通过公式实际使用带宽 = 10Mbps * 信道繁忙率计算得到带宽数据。
4. 仿真拥塞状态验证
仿真运行过程中直接读取channelBusyRatio的实时值,当该值>60%且同时满足报文丢包率>10%时,即可判定当前仿真网络已进入拥塞状态。
内容的提问来源于stack exchange,提问作者ELMasry
相关产品推荐
相关产品推荐

