2015-06-10 2 views
0

Я пытаюсь смоделировать сценарий в Венах, где я хочу отключить право прохода на дорожных развязках. Я поднял глаза на Sumo wiki и обнаружил, что битсет . Другой поиск в TraCIMobility.h заголовка в комплекте с Венами помог мне знать, что это может быть сделано с помощью функции commandSetSpeedMode() для TraCIDemo11p узла , какие модели автомобилей в венах демо-моделировании. Я пытаюсь создать свою модель, используя эту демонстрацию в комплекте с Veins.Почему Veins сбой при использовании команды CommandSetSpeedMode()?

Но поскольку я пытаюсь это сделать, 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 разбился. Я не могу понять, где еще я должен разместить эту команду. Я попробовал , чтобы установить режим на каком-то другом этапе инициализации, добавив к нему еще пункт , но он все еще падает. Более того, пока не включен отладчик, ошибка отображается либо в окне OMNeT ++, либо в sumolaunchd.py выход в OMNeT ++ cmd. Пожалуйста, помогите понять мою ошибку. Благодарю.


EDIT: добавления сообщений об ошибках Информация

Чтобы сделать вещи ясно, я не получаю никакого сообщения об ошибке, но код выхода. Я искал код, но не получил никакой помощи. Появляется обычное окно «Это приложение не отвечает», и сим заканчивается, поэтому я подозреваю, что 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, сообщение об ошибке, появляется на ЦМД MinGW из OMNeT ++ является:

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 
+0

вы можете включить сообщение об ошибке на вопрос? – user4786271

+0

попробовать это и сообщить:. 'мобильностью = TraCIMobilityAccess() получить (getParentModule());' ' Трэйси = mobility-> getCommandInterface();' ' traciVehicle = mobility-> getVehicleCommandInterface();' ' traciVehicle -> setSpeedMode (21); ' – user4786271

+0

Я уже это сделал. Ошибка все еще появляется. – AayDee

ответ

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 */ 
    } 
} 
+0

Ну, я использую Veins 3.0 и в файле заголовка 'TraCIMobility.h',' commandSetSpeedMode() 'является функцией. И да, я попробовал код, который вы написали выше, написав: 'traci = TraCIMobilityAccess(). Get (getParentModule()); traci-> getCommandInterface() -> setSpeedMode (23); ' Но даже это не сработало. Я подозреваю, что, возможно, я помещаю свой код в неправильное место. Я попытался установить это на другом этапе инициализации, но ошибка все еще происходит. Кроме того, ошибка возникает при любом значении, которое я передаю функции. – AayDee

+0

Кроме того, в моей версии Veins 'getVehicleCommandInterface()' не является определенной функцией. 'setSpeedMode()' непосредственно доступен с 'TraCICommandInterface' – AayDee

+0

, очевидно, что у нас разные версии Veins. Я проверил и подтвердил, что 'commandSetSpeedMode()' предоставляется, как вы говорите в Veins 3.0. Кроме того, я пробовал код в том же месте, что и ваш, и он работал для меня в моей версии Veins. Какая версия SUMO у вас есть? Рассматривайте обновление Veins и SUMO в совместимой версии друг с другом? – user4786271

Смежные вопросы