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

如何在Veins中获取SUMO中非联网车辆的自定义信息?

获取SUMO中非联网车辆自定义信息的方法(Veins+OMNeT++场景)

以下是几种可行的解决方案:

1. 扩展Veins的TraCIScenarioManager直接调用TRACI接口

Veins本身封装了SUMO的TRACI客户端,你可以修改TraCIScenarioManager的代码,在仿真周期内主动拉取所有车辆数据并筛选非联网车辆:

  • 在仿真的每一步(比如handleSelfMessage或updateVehicleStates方法中),调用TRACI的vehicle.getIDList()获取SUMO中所有车辆ID
  • 对比Veins管理的联网车辆ID(可通过getManagedVehicles()方法获取映射表),过滤出非联网车辆
  • 调用TRACI的各类查询方法(如vehicle.getPosition()、vehicle.getSpeed()、vehicle.getRoute()等)获取自定义数据,再将这些数据存储或传递给OMNeT++中的业务模块处理

示例代码片段:

// 在TraCIScenarioManager的仿真步处理逻辑中添加
std::vector<std::string> allSumoVehicles = traci->vehicle.getIDList();
const std::map<std::string, Veins::TraCIMobility*>& connectedVehicles = getManagedVehicles();

for (const auto& vehId : allSumoVehicles) {
    if (connectedVehicles.find(vehId) == connectedVehicles.end()) {
        // 处理非联网车辆数据
        Veins::TraCIPosition pos = traci->vehicle.getPosition(vehId);
        double currentSpeed = traci->vehicle.getSpeed(vehId);
        // 这里可以将数据发送给OMNeT++模块或写入日志
    }
}

2. 用traci-launchd搭配独立TRACI客户端进程

启动SUMO时使用traci-launchd服务,让Veins和一个独立的Python TRACI客户端同时连接到同一个SUMO实例:

  • 启动命令示例:traci-launchd -p 1234,然后在Veins的omnetpp.ini中设置*.manager.host = "localhost"和*.manager.port = 1234
  • 编写Python TRACI客户端,连接到同一个端口,自由获取所有车辆(包括非联网)的自定义信息
  • 通过本地socket或共享内存等IPC机制,将Python获取的数据同步到OMNeT++模块,注意要保证仿真步的同步,避免数据时序错误

3. 自定义SUMO输出并实时解析

如果不想修改Veins核心代码,可以通过SUMO的配置文件生成定制化输出,再在OMNeT++中解析:

  • 在SUMO的.sumocfg文件中,利用additional标签定义自定义输出,或给fcd-output添加过滤规则,只输出非联网车辆数据(前提是你给非联网车辆标记了特定的vehicle class)
  • 示例配置:
<output>
    <fcd-output value="non_connected_fcd.xml" filter="vehicle.hasClass('non-connected')"/>
</output>
  • 在OMNeT++中添加一个独立模块,实时读取SUMO生成的输出文件,解析XML内容后提取所需的自定义信息

内容的提问来源于stack exchange,提问作者netbug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:36:14