如何获得特定范围内的汽车数量

Ahm*_*san 1 c++ simulation omnet++ veins sumo

我正在尝试模拟一种VANET场景,在这种场景中,如果道路被阻塞,那么在特定时间之后,汽车会广播一条消息,其中包括被阻塞的roadId和它周围100米处的车辆数量。

在TraCIDemo11p应用程序中,当汽车停下来超过10秒钟时,它将节点颜色更改为红色(以表示事故),并向包含阻塞道路ID的其他汽车发送消息,所有这些操作均在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);
}
Run Code Online (Sandbox Code Playgroud)

可以通过更新.ini文件中的maxInterfDist值来设置100m的限制

*.connectionManager.maxInterfDist = 100m
Run Code Online (Sandbox Code Playgroud)

现在我的问题是如何获取车辆数量和100m的面积,我有一个想法,这将使用TraCI来完成,最有可能使用LaneAreaDetector的getJamLengthVehicle来完成,但是我不知道如何做到这一点。他们任何等效的方法还是我看错了方向?

Chr*_*mer 5

您可以使用TraCIScenarioManager :: getManagedHosts方法获得OMNeT ++仿真中所有车辆的列表。从那里开始,应该容易计算任何两个主机之间的距离(它们在OMNeT ++画布上的位置等于它们的位置,以米为单位)。