基于Veins耦合SUMO与OMNeT++时车辆数量的判定及配置疑问
Veins中SUMO与OMNeT++耦合时的车辆数量配置问题解答
刚好之前在Veins项目里踩过这个配置的坑,来给你详细梳理下:
一、车辆数量的两种配置方式
你提到的两种设置方式都是有效的,具体区别如下:
- SUMO路由文件的
<flow>标签:这是从交通流源头定义车辆数量,比如你给出的例子:
<flow id="f" begin="0" end="100" number="23" from="beg" to="end"/>
这里的number指定了该flow在begin到end的时间范围内生成的车辆总数,SUMO会按照这个配置实际生成车辆并注入仿真场景。
- OMNeT++的omnetpp.ini配置:通过
*.manager.numVehicles = 4000可以设置Veins期望管理的联网车辆总数,但这只是一个参考值,并不是强制生成的数量。
二、两者同时设置时的优先级
划重点:最终由SUMO的<flow>配置决定实际仿真的车辆总数。
原因很简单:Veins作为耦合框架,是通过TraCI接口从SUMO获取所有车辆的实时状态和数据的。SUMO是交通流的生成和管理者,Veins只是同步SUMO中的车辆信息,并为联网车辆添加通信模块。哪怕你在omnetpp.ini里设置了numVehicles,如果SUMO实际生成的车辆数是23,Veins也只会处理这23辆车,不会额外生成或减少车辆。
三、渗透率的设置方法
渗透率(联网车辆占总车辆的比例)在Veins里有两种常用实现方式:
- 随机比例配置
在omnetpp.ini里开启混合交通模式,并直接设置渗透率:
Veins会在SUMO生成的所有车辆中,随机挑选对应比例的车辆作为联网车辆,其余为普通无通信能力的车辆。*.manager.mixedTraffic = true *.manager.penetration = 0.5 # 表示50%的车辆是联网车辆 - 按flow精准控制
如果你需要指定某一类flow的车辆全部为联网车辆,可以先在SUMO的路由文件里给flow指定自定义类型:
然后在omnetpp.ini里把这个自定义类型映射为Veins的联网车辆模块:<vType id="connectedCar" accel="2.6" decel="4.5"/> <flow id="connectedFlow" type="connectedCar" number="50" from="start" to="end"/> <flow id="normalFlow" number="50" from="end" to="start"/>
这样*.manager.vehicleTypes.connectedCar = "Veins::TraCIDemoVehicle"connectedFlow的50辆车都是联网的,normalFlow的50辆是普通车辆,整体渗透率就是50%,这种方式适合需要精准控制特定交通流的场景。
内容的提问来源于stack exchange,提问作者J.G
相关产品推荐
相关产品推荐

