如何为SUMO和Veins添加自定义属性以实现车辆预计到达时间管控
SUMO+Veins自定义车辆预计到达时间属性开发指导
一、SUMO端自定义属性修改方案
- 优先使用SUMO原生*通用参数(Generic Parameter)*功能,无需修改SUMO核心C++代码:在路由文件的车辆定义中嵌入
param标签即可挂载自定义属性,示例如下:
运行过程中可通过TraCI接口的<vehicle id="veh0" depart="0.0" route="route0"> <param key="expectedETA" value="120.5"/> </vehicle>vehicle.getParameter("expectedETA")、vehicle.setParameter("expectedETA", "数值")直接读写该属性,满足大多数研究场景需求。 - 若需将预计到达时间作为SUMO内置属性参与内核路径规划逻辑,修改路径如下:
- 在
src/utils/vehicle/SUMOVehicle.h的SUMOVehicle类中添加对应类型的成员变量 - 在
src/utils/vehicle/SUMOVehicle.cpp的构造函数中完成变量初始化 - 在
src/vehicle/SUMOVehicleParser.cpp中添加属性解析逻辑,使SUMO可识别路由文件中自定义的ETA字段
- 在
二、Veins端数据交互适配方法
- 若使用上述SUMO通用参数方案,无需修改Veins核心代码:Veins的
TraCIVehicle类已封装好getParameter()、setParameter()方法,直接在自定义的车辆应用层代码中调用即可完成ETA属性的读写。 - 若修改了SUMO内核新增内置属性,按以下流程修改Veins代码:
- 在
veins/modules/mobility/traci/TraCIConstants.h中新增自定义属性对应的TraCI变量ID - 修改
TraCIVehicle类中的属性读写方法,适配SUMO端新增的TraCI接口逻辑,完成属性数据的双向传输
- 在
- Veins修改逻辑可参考自带示例代码,重点阅读
veins/examples/veins目录下的示例应用,以及TraCIMobility、TraCIVehicle两个核心类的实现,即可理清SUMO与Veins之间的全量数据交互流程。
内容的提问来源于stack exchange,提问作者kona
相关产品推荐
相关产品推荐

