我想在 Veins 的场景中将给定汽车的车辆数据(例如它的vType
、瞬时数据speed
和RSU 数据)传输到 RSU。position
如何从 SUMO 获取数据并通过 MiXiM 方法将其发送到 RSU 节点?
为了实现您的目标,您必须使用TraCIMobility
.Veins
您可以通过首先在initialize()
节点的方法中获取指向该组件的指针来做到这一点
cModule *tmpMobility = getParentModule()->getSubmodule("veinsmobility");
mobility = dynamic_cast<Veins::TraCIMobility*>(tmpMobility);
ASSERT(mobility);
拥有mobility
组件后,您可以查询它以获取各种数据。
它可以提供的数据类型可以在TraCIMobility.h
例如,在您的情况下,您可以这样做:
mobility->getCurrentSpeed().length()); /* will provide velocity vector */
mobility->getAngleRad()); /* will provide angle of movement */
然后,您可以将此数据附加到您的消息中,并将其发送到您选择的 RSU。
如果这个确切的解决方案对你不起作用,那可能是因为我使用了与你不同的 Veins 版本。
但是,您肯定会在Veins 项目中找到您需要的东西TraCIDemo11p.cc
。TraCIDemoRSU.cc
另外,TraCICommandInterface
是你应该看看的东西。
在文档部分下的官方 Veins 网站上说:
应用程序模块可以使用TraCICommandInterface类和相关类(可从TraCIMobility方便地访问)与正在运行的仿真进行交互。以下示例显示了如何让车辆了解名为 Second Street 的道路上的缓慢车流,这可能会导致其改变路线以避开这条道路。
mobility = TraCIMobilityAccess().get(getParentModule()); traci = mobility->getCommandInterface(); traciVehicle = mobility->getVehicleCommandInterface(); traciVehicle->changeRoute("Second Street", 3600);
其他一些与车辆相关的命令是setSpeed或setParking。类似的方法可用于整个模拟(例如 addVehicle、addPolygon)、道路(getMeanSpeed)、单个车道(getShape)、交通信号灯(setProgram)、多边形(setShape)、兴趣点、路口、路线、车辆类型或图形用户界面。
Veins 教程示例的源代码中演示了如何使用这些模块。同样,所有 80 多种可用方法的列表可以在TraCICommandInterface.h或自动生成的模块文档中找到。
此处可能相关的问题/答案:https ://stackoverflow.com/a/29918148/4786271