Omnet++ 静脉中的行人模拟(omnet+;+;/sumo)

Omnet++ 静脉中的行人模拟(omnet+;+;/sumo),omnet++,veins,sumo,Omnet++,Veins,Sumo,我试图在omnet++中运行相扑的行人模拟。为了保持简单(我是一个初学者),我决定使用提供的Erlangen示例,并使用几个行人来扩展它。我在相扑中加入了行人,然后运行它。它工作得非常好: 接下来,我尝试在omnet++中运行整个程序。我也设法做到了,但没有给行人看。只有汽车。我读了这两个主题: 并将这些行添加到示例的omnetpp.ini中: *.manager.moduleType = "vtype0=org.car2x.veins.nodes.Car ped_pedestrian

我试图在omnet++中运行相扑的行人模拟。为了保持简单(我是一个初学者),我决定使用提供的Erlangen示例,并使用几个行人来扩展它。我在相扑中加入了行人,然后运行它。它工作得非常好:

接下来,我尝试在omnet++中运行整个程序。我也设法做到了,但没有给行人看。只有汽车。我读了这两个主题:

并将这些行添加到示例的omnetpp.ini中:

*.manager.moduleType = "vtype0=org.car2x.veins.nodes.Car ped_pedestrian=org.car2x.veins.nodes.Pedestrian"
*.manager.moduleName = "vtype0=carNode ped_pedestrian=pedestrianNode"
*.manager.moduleDisplayString = "vtype0=carNode ped_pedestrian=pedestrianNode"
我还将omnetpp.ini中“node”的每个外观都更改为“carNode”,并为“pedestrianNode”创建了新条目,我复制了Car.ned文件,并将文件名更改为peander.ned,将模块名更改为“peander”。然后我再次运行了整个程序,但除了汽车的图像(如模拟中所示)变为灰色框外,没有任何变化

为什么没有显示行人?(我错过什么了吗?) 我是否必须告诉Velse(或sumo)将行人位置告知omnet++? 为什么模拟中的汽车图标变为灰色框

以下是我添加/修改的文件:

编辑:

我研究并调试了[静脉源代码]。我找到了一组完成订阅的代码:

{
    // subscribe to list of departed and arrived vehicles, as well as simulation time
    simtime_t beginTime = 0;
    simtime_t endTime = SimTime::getMaxTime();
    std::string objectId = "";
    uint8_t variableNumber = 7;
    uint8_t variable1 = VAR_DEPARTED_VEHICLES_IDS;
    uint8_t variable2 = VAR_ARRIVED_VEHICLES_IDS;
    uint8_t variable3 = commandInterface->getTimeStepCmd();
    uint8_t variable4 = VAR_TELEPORT_STARTING_VEHICLES_IDS;
    uint8_t variable5 = VAR_TELEPORT_ENDING_VEHICLES_IDS;
    uint8_t variable6 = VAR_PARKING_STARTING_VEHICLES_IDS;
    uint8_t variable7 = VAR_PARKING_ENDING_VEHICLES_IDS;
    TraCIBuffer buf = connection->query(CMD_SUBSCRIBE_SIM_VARIABLE, TraCIBuffer() << beginTime << endTime << objectId << variableNumber << variable1 << variable2 << variable3 << variable4 << variable5 << variable6 << variable7);
    processSubcriptionResult(buf);
    ASSERT(buf.eof());
}

{
    // subscribe to list of vehicle ids
    simtime_t beginTime = 0;
    simtime_t endTime = SimTime::getMaxTime();
    std::string objectId = "";
    uint8_t variableNumber = 1;
    uint8_t variable1 = ID_LIST;
    TraCIBuffer buf = connection->query(CMD_SUBSCRIBE_VEHICLE_VARIABLE, TraCIBuffer() << beginTime << endTime << objectId << variableNumber << variable1);
    processSubcriptionResult(buf);
    ASSERT(buf.eof());
}
{
//订阅离开和到达车辆列表,以及模拟时间
simtime\u t beginTime=0;
simtime_t endTime=simtime::getMaxTime();
std::string objectId=“”;
uint8_t variableNumber=7;
uint8\u t variable1=车辆的变量;
uint8\u t variable2=到达车辆的变量\u ID;
uint8_t variable3=commandInterface->getTimeStepCmd();
uint8\u t variable4=变量、远程传输、启动、车辆ID;
uint8\u t variable5=变量、远程传送、结束、车辆ID;
uint8\u t variable6=可变停车/启动车辆/ID;
uint8\u t variable7=变量、停车、停车、车辆ID;

TraCIBuffer buf=connection->query(CMD_SUBSCRIBE_SIM_变量,TraCIBuffer()你说得绝对正确。从Veines 5a1开始,行人(相扑术语中的人)不受开箱即用的Veines的支持,这意味着用户需要编写额外的代码

对于内部项目,我们只是克隆了处理车辆订阅的代码,在适当的情况下替换类和变量名

(即,
ID\u LIST
CMD\u SUBSCRIBE\u PERSON\u VARIABLE=0xde
,然后为每个新人订阅
VAR\u POSITION
,等等,并通过调用
addModule
nextPosition
对这些变量的变化做出反应)