В жилах я пытаюсь смоделировать сценарий VANET, в котором, если дорога заблокирована, то через определенное время автомобиль передает сообщение, включающее заблокированный roadId и количество транспортных средств около 100 метров.
В приложении TraCIDemo11p, когда автомобиль остановлен на более чем 10 секунд, он меняет цвет узла на красный (чтобы показать аварию) и отправляет сообщение другим автомобилям, содержащее заблокированный идентификатор дороги, все это делается в методе handlePositionUpdate:
findHost()->getDisplayString().updateWith("r=16,red");
sentMessage = true;
WaveShortMessage* wsm = new WaveShortMessage();
populateWSM(wsm);
wsm->setWsmData(mobility->getRoadId().c_str());
//host is standing still due to crash
if (dataOnSch) {
startService(Channels::SCH2, 42, "Traffic Information Service");
//started service and server advertising, schedule message to self to send later
scheduleAt(computeAsynchronousSendingTime(1,type_SCH),wsm);
}
else {
//send right away on CCH, because channel switching is disabled
sendDown(wsm);
}
Предел в 100 м может быть установлен путем обновления значения maxInterfDist в файле .ini
*.connectionManager.maxInterfDist = 100m
Теперь у меня есть проблема, как получить количество транспортных средств и 100 м площади, у меня есть идея, что это будет сделано с помощью TraCI и, скорее всего, с помощью LaneAreaDetector’s getJamLengthVehicle но я не понимаю, как это будет сделано в венах, это какой-то эквивалентный метод, или я смотрю в неправильном направлении?
Вы можете получить список всех транспортных средств в моделировании OMNeT ++, используя TraCIScenarioManager :: getManagedHosts метод. Оттуда должно быть легко вычислить расстояние между любыми двумя хостами (их местоположение на холсте OMNeT ++ эквивалентно их положению, измеренному в метрах).
Других решений пока нет …