我想知道如何在车辆靠近RSU时开始编写能够发送信息的程序。 首先,我仍然对某些定义感到困惑,但是,一点一点地说,我想我会学习静脉。
module = simulation.getModuleByPath("rsu[0]");
c = MobilityAccess().get(module)->getCurrentPosition();
我在这个帖子中找到了这部分代码:Getting the location of two different modules
但仍然有一些问题:
1)Module
是什么样的对象?我猜是TraCIMobility*
2)simulation
怎么样?我不知道。
那么,有人可以先向我解释如何在TraCIDemo11p.cc中获取RSU坐标吗?
谢谢!
答案 0 :(得分:2)
如果您研究Veins 4.4教程模拟(例如,通过在OMNeT ++的TkEnv中运行它),您将看到rsu[0]
包含名为mobility
的子模块,其类型为BaseMobility
。如果您调查BaseMobility
课程,您会看到它有一个方法getCurrentPosition()
。大概是通过阅读OMNeT ++用户手册,您已经知道如何获得模拟中任何模块的指针。
将这些知识放在一起,您已经找到了一种方法(通过多种可能的方式)来获取静脉模拟中(命名)节点的位置。
假设您正在使用Veins 4.4,模拟中的任何OMNeT ++模块都可以执行以下代码,以获取名为rsu[0]
的节点的位置:
Coord pos = check_and_cast<BaseMobility*>(getSimulation()->getModuleByPath("rsu[0].mobility"))->getCurrentPosition();
答案 1 :(得分:0)
此外,如果您需要动态方式来获取RSU坐标。主要是如果您有一个具有多个RSU的方案,您可以使用&#34; findSubModule&#34; :
BaseMobility *baseMob;
baseMob = FindModule<BaseMobility*>::findSubModule(getParentModule());
Coord rsuCoord = baseMob->getCurrentPosition();
希望这可以帮助某人。
干杯。