使用commandSetSpeedMode()时为什么Veins会崩溃?

时间:2015-06-10 13:25:12

标签: omnet++

我正在尝试模拟Veins中我想要禁用它的场景 在路口检查通行权。我抬头看着Sumo wiki和 发现bitset 23 就此目的。另一个查找 与Veins捆绑的TraCIMobility.h标题让我知道这可以 使用函数commandSetSpeedMode()完成 TraCIDemo11p 节点 它为Veins演示模拟中的车辆建模。我在尝试着 使用与Veins捆绑的演示构建我的模型。

但是当我试图这样做时,SUMO崩溃了。我正在尝试初始化 initialize() TraCIDemo11p函数中的节点通过以下内容 代码:

void TraCIDemo11p::initialize(int stage) {
    BaseWaveApplLayer::initialize(stage);
    if (stage == 0) {
        traci = TraCIMobilityAccess().get(getParentModule());
        annotations = AnnotationManagerAccess().getIfExists();
        ASSERT(annotations);

        traci->commandSetSpeedMode(23);  // This is the point of modification

        sentMessage = false;
        lastDroveAt = simTime();
        findHost()->subscribe(parkingStateChangedSignal, this);
        isParking = false;
        sendWhileParking = par("sendWhileParking").boolValue();
    }
}

我尝试将模式设置为其他标准值,例如0或31,但是 每次我让SUMO崩溃。 我无法弄清楚我应该把这个命令放在哪里。我试过了 通过添加 else 子句在其他初始化阶段设置模式 对它,但它仍然崩溃。更重要的是,调试器开启前夕,没有错误 正在显示,在OMNeT ++窗口或sumolaunchd.py输出中 在OMNeT ++ cmd中。 请帮助理解我的错误。感谢。

编辑:添加错误消息信息

为清楚起见,我没有收到任何错误消息,但退出代码。我搜索了代码但没有得到任何帮助。通常'这个应用程序没有响应'窗口弹出并且SIM卡结束,所以我怀疑SUMO崩溃。

OMNeT ++环境显示以下消息:

Simulation terminated with exit code: -1073741819
Working directory: C:/Users/stes-2/veins-3.0/examples/Cross Roads
Command line: c:/Users/stes-2/omnetpp-4.4/bin/opp_run.exe -r 0 -n ../veins;../../src --tkenv-image-path=../../images -l ../../src/veins omnetpp.ini

Environment variables:
OMNETPP_ROOT=c:/Users/stes-2/omnetpp-4.4
PATH=;C:/Users/stes-2/veins-3.0/src;c:\Users\stes-2\omnetpp-4.4\bin;c:\Users\stes-2\omnetpp-4.4\msys\bin;c:\Users\stes-2\omnetpp-4.4\mingw\bin;c:/Users/stes-2/omnetpp-4.4/ide/jre/bin/client;c:/Users/stes-2/omnetpp-4.4/ide/jre/bin;c:/Users/stes-2/omnetpp-4.4/ide/jre/lib/i386;.;C:\Users\stes-2\omnetpp-4.4\msys\local\bin;c:\Users\stes-2\omnetpp-4.4\mingw\bin;C:\Users\stes-2\omnetpp-4.4\msys\bin;c:\Users\stes-2\omnetpp-4.4\bin;c:\ProgramData\Oracle\Java\javapath;c:\Windows\system32;c:\Windows;c:\Windows\System32\Wbem;c:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;c:\Python27;c:\Users\stes-2\sumo-0.21.0;c:\Users\stes-2\omnetpp-4.4;
OMNETPP_IMAGE_PATH=c:\Users\stes-2\omnetpp-4.4\images

由于我通过sumoLaunchd.py脚本运行SUMO,因此在OMNeT ++的MingW cmd处出现的错误消息是:

Starting SUMO (c:/Users/stes-2/sumo-0.21.0/bin/sumo-gui.exe -c cross.sumo.cfg) o
n port 64161, seed 0
Connecting to SUMO (c:/Users/stes-2/sumo-0.21.0/bin/sumo-gui.exe -c cross.sumo.c
fg) on port 64161 (try 1)
Releasing lock on port
Starting proxy mode
Done with proxy mode
Done with proxy mode, killing SUMO
SIGTERM
Done running SUMO
Cleaning up
Result: "<?xml version="1.0"?>
<status>
        <exit-code>15</exit-code>
        <start>1433944271</start>
        <end>1433944276</end>
        <status>Exited with error code 15</status>
        <stdout><![CDATA[Loading configuration... done.
]]></stdout>
        <stderr><![CDATA[]]></stderr>
</status>
"
Closing connection from 127.0.0.1 on port 64160

1 个答案:

答案 0 :(得分:1)

我认为你缺少一些线条。

您已将 TraCIMobility 分配给traci,然后您甚至不考虑常规 commandInterface vehicleCommandInterface

TraCIMobility* mobility = TraCIMobilityAccess().get(getParentModule());
TraCICommandInterface* traci = mobility->getCommandInterface(); /* missing command interface */
TraCICommandInterface::Vehicle* traciVehicle = mobility->getVehicleCommandInterface(); /* missing vehicle command interface */
traciVehicle->setSpeedMode(someNumber);

我甚至尝试编译您的代码,但它抱怨没有TraCIMobility名为commandSetSpeedMode()的方法可用。但这可能是由于Veins版本的不同。

<强> Multi-stage initialization

当您尝试使用它时,您尝试访问的模块/变量可能尚未就绪,即仍未创建。在这种情况下,可以使用OMNeT ++的多阶段初始化功能。

这意味着“任务”可能会延迟到当前模块初始化的后期阶段:

void SomeModule::initialize(int stage)
{
    ApplicationBase::initialize(stage);  /* ignore if causes error */

    if(stage == 0)
    {
        /* do this */

    else if (stage == 3)
    {
        /* do this later */
    }
}