为什么使用 commandSetSpeedMode() 时 Veins 会崩溃?
Why does Veins crash when commandSetSpeedMode() is used?
我正在尝试在 Veins 中模拟一个我想禁用
在路口检查通行权。我抬头看着 Sumo wiki 和
发现 bitset 是 23 的目的。中的另一个查找
TraCIMobility.h
header 与 Veins 捆绑在一起帮助我知道这可以
使用函数 commandSetSpeedMode()
为 TraCIDemo11p 节点完成
它在 Veins 演示模拟中对车辆进行建模。我在尝试着
使用这个与 Veins 捆绑在一起的演示来构建我的模型。
但是当我尝试这样做时,SUMO 崩溃了。我正在尝试初始化
TraCIDemo11p
的 initialize()
函数中的节点通过以下
代码:
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++ window 或 sumolaunchd.py
输出中显示
在 OMNeT++ 命令中。
请帮助理解我的错误。谢谢。
编辑: 添加错误消息信息
澄清一下,我没有收到任何错误消息,只有退出代码。我搜索了代码但没有得到任何帮助。弹出通常的'this app is not responding' window 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
由于我是运行 SUMO 通过sumoLaunchd.py 脚本,在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
我认为您漏掉了一些台词。
你把TraCIMobility赋值给了traci
,然后你根本不考虑通用的commandInterface和车辆命令接口
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 版本不同所致。
您尝试访问的 module/variable 可能尚未准备好,即在您尝试使用它时尚未创建。在这种情况下,可以使用 OMNeT++ 的 多阶段初始化 功能。
这意味着"task"可能会延迟到当前模块初始化的后期:
void SomeModule::initialize(int stage)
{
ApplicationBase::initialize(stage); /* ignore if causes error */
if(stage == 0)
{
/* do this */
else if (stage == 3)
{
/* do this later */
}
}
我正在尝试在 Veins 中模拟一个我想禁用
在路口检查通行权。我抬头看着 Sumo wiki 和
发现 bitset 是 23 的目的。中的另一个查找
TraCIMobility.h
header 与 Veins 捆绑在一起帮助我知道这可以
使用函数 commandSetSpeedMode()
为 TraCIDemo11p 节点完成
它在 Veins 演示模拟中对车辆进行建模。我在尝试着
使用这个与 Veins 捆绑在一起的演示来构建我的模型。
但是当我尝试这样做时,SUMO 崩溃了。我正在尝试初始化
TraCIDemo11p
的 initialize()
函数中的节点通过以下
代码:
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++ window 或 sumolaunchd.py
输出中显示
在 OMNeT++ 命令中。
请帮助理解我的错误。谢谢。
编辑: 添加错误消息信息
澄清一下,我没有收到任何错误消息,只有退出代码。我搜索了代码但没有得到任何帮助。弹出通常的'this app is not responding' window 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
由于我是运行 SUMO 通过sumoLaunchd.py 脚本,在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
我认为您漏掉了一些台词。
你把TraCIMobility赋值给了traci
,然后你根本不考虑通用的commandInterface和车辆命令接口
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 版本不同所致。
您尝试访问的 module/variable 可能尚未准备好,即在您尝试使用它时尚未创建。在这种情况下,可以使用 OMNeT++ 的 多阶段初始化 功能。
这意味着"task"可能会延迟到当前模块初始化的后期:
void SomeModule::initialize(int stage)
{
ApplicationBase::initialize(stage); /* ignore if causes error */
if(stage == 0)
{
/* do this */
else if (stage == 3)
{
/* do this later */
}
}