You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制仿真场景内车辆停留时长并实现自动驶离?

解决方案

1. SUMO侧调整车辆出发逻辑,控制并发数量

车辆未自动出发是因为路由配置中未设置正确的出发时间参数,按以下方式调整即可同时满足并发数限制要求:

  • 打开SUMO路由文件(通常为*.rou.xml),为120台车辆设置 staggered 出发时间,单台间隔设为0.5s:第一台出发时间为0,第二台为0.5,第三台为1,依次顺延。前30台全部进入场景的时间刚好为15s,与第一台车辆销毁时间对齐,可保证全程并发数稳定在30以内
  • 路由文件车辆配置示例:
<vehicle id="veh_0" depart="0" route="your_route_id">
  <param key="lifeTime" value="15"/>
</vehicle>
<vehicle id="veh_1" depart="0.5" route="your_route_id">
  <param key="lifeTime" value="15"/>
</vehicle>
<!-- 剩余118台按0.5s间隔顺延depart时间即可 -->
  • 批量生成路由可直接用Python脚本实现,无需手动修改:
for i in range(120):
    print(f'<vehicle id="veh_{i}" depart="{i*0.5}" route="your_route_id"><param key="lifeTime" value="15"/></vehicle>')

2. Veins侧实现车辆生命周期自动销毁

车辆进入场景后Veins会实例化对应TraCIVehicle节点,在节点逻辑中添加定时销毁逻辑即可实现15秒生命周期控制:

  • 首先在车辆节点的.ned文件中添加生命周期参数声明,用于读取SUMO侧配置:
double lifeTime = default(15.0);
  • 在节点initialize()方法中注册销毁自消息:
void TraCIVehicle::initialize(int stage) {
    BaseApplLayer::initialize(stage);
    if (stage == 0) {
        double lifeTime = par("lifeTime").doubleValue();
        scheduleAt(simTime() + lifeTime, destroySelfMsg);
    }
}
  • 在handleSelfMsg()方法中添加销毁逻辑:
void TraCIVehicle::handleSelfMsg(cMessage* msg) {
    if (msg == destroySelfMsg) {
        traci->vehicle.remove(getId());
        delete this;
    } else {
        BaseApplLayer::handleSelfMsg(msg);
    }
}

效果验证

按上述配置运行仿真后:

  • 每0.5秒有1台新车辆自动进入场景
  • 第15秒时第一台车辆到期销毁,同时第30台车辆刚好进入,场景内总车辆数稳定在30
  • 120台车辆全部投放完成总耗时60秒,全程并发数不超过30
  • 每台车辆在场景内停留时间误差小于100ms,符合15秒的要求

内容的提问来源于stack exchange,提问作者h.bahar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:06:00