veins - 为什么我不能在 TraCIDemo 中使用 bsm 消息?
问题描述
我正在使用 omnetpp 5.4.1、静脉 4.7.1 和 sumo-0.30.0。我正在 TraCIDemo11p 中编写自己的代码,我真的需要使用 bsm 消息。但是 TraCIDemo11p 不允许我使用它。例如,我在 TraCIDemo11p 类的 handlepositionupdate 方法中创建了一个数组,因为我想在其中添加 bsm。但是我遇到了运行时错误,而当我添加 wsa 和 wsm 时没有发生错误。我的问题是什么。我真的需要帮助,我很感激任何指导。我的代码是: void TraCIDemo11p::handlePositionUpdate(cObject* obj) { BaseWaveApplLayer::handlePositionUpdate(obj);
// stopped for for at least 10s?
if (mobility->getSpeed() < 1) {
if (simTime() - lastDroveAt >= 10 && sentMessage == false) {
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);
}
}
}
else {
lastDroveAt = simTime();
}
Coord senderPosition = 移动性->getCurrentPosition();
//Get all available nodes in simulation
std::map<std::string, cModule*> availableCars = mobility->getManager()-
getManagedHosts();
//Iterate through collection and find distance,
std::map<std::string, cModule*>::iterator it;
for(it = availableCars.begin(); it != availableCars.end(); it++)
{
TraCIMobility* mobility1 = TraCIMobilityAccess().get(it->second);
Coord receiverPosition = mobility1->getCurrentPosition();
double distance=senderPosition.distance(receiverPosition);
std::cout<<"we defined distance"<<endl;
WaveShortMessage* wsm = new WaveShortMessage();
BasicSafetyMessage* bsm = new BasicSafetyMessage();
wsm->setDistance(distance);
cArray array("array1");
array.add(wsm);
double dist[400];
double TheMax=dist[0];
for(int i=0;i<array.size();i++){
std::cout<< wsm->getDistance() << endl;
dist[i]=wsm->getDistance();
if(dist[i]>TheMax){
TheMax=dist[i];
int index=i;
std::cout<<"the max distance is "<<TheMax<<endl;
}}
simtime_t T=simTime()+60;
Coord senderPosition1=mobility->getPositionAt(T);
double direction1=mobility->getAngleRad();
std::map<std::string, cModule*> availableCars = mobility->getManager()-
>getManagedHosts();
std::map<std::string, cModule*>::iterator it;
for(it = availableCars.begin(); it != availableCars.end(); it++)
{
TraCIMobility* mobility2 = TraCIMobilityAccess().get(it->second);
double direction2=mobility2->getAngleRad();
Coord receiverPosition1=mobility2->getPositionAt(T);
if(direction2!=direction1){
std::cout<<"they move in opposite direction"<<endl;
}
double distance1=senderPosition.distance(receiverPosition);
std::cout<<"the first distance is "<<distance1 <<endl;
WaveShortMessage* wsm = new WaveShortMessage();
BasicSafetyMessage* bsm = new BasicSafetyMessage();
cArray array("array1");
int index = array.add(wsm);
double distance2=senderPosition1.distance(receiverPosition1);
std::cout<<"the second distance is:"<<distance2<<endl;
if(distance2>distance1){
std::cout<<"they are getting far away"<<endl;
array.remove(wsm);
} } }}
解决方案
推荐阅读
- firebase - 将图像文件夹从本地计算机复制到 Firebase 存储
- java - 是否可以通过 id 在查找视图中将对象参数作为 id 传递
- python - PySpark 展平数据框,其中一些列作为嵌套结构的数组
- c++ - 如何在运行时在 Qt 应用程序中动态切换 VSync?
- curl - 如何在 OpenRefine 中使用 cURL?
- ibm-watson - 如何在 IBM watson 响应节点中添加超链接
- python - 如何提取非常大的xml数据并存储在python中的字典中
- mysql - 如何通过对代码(脚本)、模块和数据库(添加的任务、供应商、项目)的自定义来正确更新 Docker Azerothcore
- .net-core - ADFS 注销问题 ID4037:无法从以下安全密钥标识符解析验证签名所需的密钥
- flutter - 如何在不影响边框的情况下垂直居中对齐 TextFormField 中的 Text 和 labelText?