交通通信耦合仿真模块介绍 |
|
时间:2023-11-13 | |
模块介绍:交通通信耦合仿真模块 一、耦合仿真模块架构体系 1、基础层 如图1,基础层的特点: (1)定义了通信体必须具备的属性与功能。 (2)设计基础层为抽象类,只能作为接口使用。 (3)通过功能层的子类进行实例化。 图1 基础层的参数与功能 2、功能层 特点: (1)基于基础层进行通信体的功能划分。 (2)提供了有针对性、更加丰富的属性与功能 图2 功能层的参数与功能 3、应用层 特点: (1)需要考虑交通相关的功能和属性,如路网拓扑、车辆拓扑、车流密度等。 (2)生成通信路由表和标准覆盖车辆数。 图3 应用层的参数与功能 二、可适配微观交通行为的通信等效模型 相比于传统的通信仿真器,本研究以数据+场景驱动的参数标定,简化通信过程建模。 通信等效模型主要包括: (1)RSU信息服务区域定义; (2)连通概率模型; (3)时延模型。 三、敏捷开发需求的交通-通信耦合仿真工具 1、基于SUMO仿真平台嵌入RSU与OBU对象--实现基础参数配置 (1)在netedit编辑器中添加RSU个体,并生成(RSU.xml)文件。 ①功能栏选择Network,进入其中的POI点设置。 图4 NETEDIT编辑器上设置POI示意图 ②参数设置。 Ⅰ. 修改poi类型为RSU Ⅱ. 设置对应的参数包括基础参数id(” RSU_XX”)、pos; Ⅲ. 可视化相关参数有图标读取路径image、图标宽度width、图标高度height以及可视化图层layer。可视化图层layer默认设置为-1,以防止RSU图标覆盖路网图层。 Ⅳ. 设备参数。需要在Edit parameter中增加“设备参数”。包括发射功率emit_rate、comm_range通信范围、控制周期cont_cycle等。 Ⅴ. 环境参数。需要在Edit parameter中增加“设备参数”。包括路径损失系数arfa和高斯随机变量标准差theta。 图5 NETEDIT编辑器上设置RSU示意图 ③保存至附属设施(RSU.xml)文件中。 点击File选择Additionals and Shapes,通过save Additional as自动保存并生成RSU附属设施文件(.xml)。 (2)在(.rou)文件中添加OBUcar车辆类型,更新(rou.xml)文件。
①添加OBUcar车辆类型,添加对应的参数。 Ⅰ. 设备参数。包括发射功率emit_rate、comm_range通信范围等。 Ⅱ. 环境参数。包括路径损失系数arfa和高斯随机变量标准差theta。 ②根据场景需求设定车辆类型选择OBUcar。 2、基于Traci接口导入等效通信模型---实现通信功能配置 (1)配置导sumosfg文件中,并使用已封装的RSU类对象实现案例测试。 import RSU_OBU 导入封装好的库 (2)使用功能函数:
①根据需求,选择功能对应的类及函数,例如,获取RSU与装载OBU车辆的通信数据,选择RSU(). comp_data()
②获取对应RSU的参数值,完成函数调用(实例化)。见案例
说明:该仿真模块代码的β1.0版本已开放在Code Ocean,链接地址为:https://doi.org/10.24433/CO.8068651.v1.
案例介绍:RSU与OBU的配置及其通信数据输出 一、数据输入与文件配置 1、输入路网及信号控制数据文件 以安徽省宣城市路网(xuancheng.net.xml)及其真实信号控制数据(signal_new.add.xml)为输入文件。 图6 宣称路网SUMO仿真图 2、配置交通出行需求文件 通过netedit模块设置出行需求文件(flows.rou.xml)为输入文件。 3、配置OBU设备 在车辆出行需求文件(.rou.xml)中,配置'OBUcar'类型,设置其基础功能参数 4、配置RSU设备 在NETEDIT编辑器或是RSU.xml(附属设施文档)中,配置RSU对象,设置其基础功能参数 5、形成配置文件(sim.sumocfg) 完成仿真场景配置,仿真场景示意图如下。 图7 场景仿真示意图 二、仿真运行与数据输出 1、仿真启动 通过Traci接口,编写demo.py文件。通过命令traci.start(["sumo-gui", "-c", "sim.sumocfg"], port=7930)启动SUMO交通仿真软件。 2、导入等效通信模型库 在demo.py中导入'RSU_OBU'库,选择对应的类与功能函数。 from RSU_OBU import RSU,OBU 3、RSU的基础参数 可以通过traci.poi.getxxx()相关函数获取RSU的基础参数。例如: 以'RSU_01'为例,
获取RSU的位置数据:RSU_position_01=traci.poi.getPosition('RSU_01')
获取RSU的发射功率数据:RSU_emit_rate_01=traci.poi.getParameter('RSU_01','emit_rate') 获取RSU的通信范围数据:RSU_comm_range_01 = traci.poi.getParameter('RSU_01', 'comm_range')
获取RSU的路径损耗参数数据:RSU_theta_01 = traci.poi.getParameter('RSU_01', 'theta')
获取RSU的高斯随机变量标准差数据:RSU_arfa_01 = traci.poi.getParameter('RSU_01', 'arfa')
获取RSU的服务容量数据:RSU_capacity_01 = traci.poi.getParameter('RSU_01', 'capacity')
获取RSU的控制周期数据:RSU_cycle_01 = traci.poi.getParameter('RSU_01', 'cont_cycle')
4、OBU的基础参数 可以通过traci.vehicletype.getxxx()和traci.vehicle.getxxx()相关函数获取OBU的基础参数。例如: 以'OBU_01'为例, 获取OBU的位置数据:OBU_position_01 = traci.vehicle.getPosition('flow_2.2')
获取OBU的发射功率数据:OBU_emit_rate_01 = traci.vehicletype.getParameter('OBUcar', 'emit_rate') # getParameter()
获取OBU的通信范围数据:OBU_comm_range_01 = traci.vehicletype.getParameter('OBUcar', 'comm_range')
获取OBU的路径损耗参数数据:OBU_theta_01 = traci.vehicletype.getParameter('OBUcar', 'theta')
获取OBU的高斯随机变量标准差数据:OBU_arfa_01 = traci.vehicletype.getParameter('OBUcar', 'arfa')
5、输出RSU与任一OBU的通信状态数据 例如:获取连通概率数据:RSU(id='RSU_01', pos=RSU_position_01, emit_rate=int(RSU_emit_rate_01), comm_range=int(RSU_comm_range_01), theta=float(RSU_theta_01), arfa=float(RSU_arfa_01),capacity=int(RSU_capacity_01), cont_cycle=int(RSU_cycle_01)).comp_data(pos_OBU)[1] 获取通信时延数据:RSU(id='RSU_02', pos=RSU_position_02, emit_rate=int(RSU_emit_rate_02), comm_range=int(RSU_comm_range_02), theta=float(RSU_theta_02), arfa=float(RSU_arfa_02),capacity=int(RSU_capacity_02), cont_cycle=int(RSU_cycle_02)).comp_data(pos_OBU)[1] 6、输出多个RSU下OBU通信状态数据 例如:多个RSU覆盖下OBU的通信对象选择及时延数据输出:OBU(id='flow_2.2', pos=traci.vehicle.getPosition('flow_2.2'), emit_rate=int(OBU_emit_rate_01),comm_range=float(OBU_comm_range_01),theta=float(OBU_theta_01), arfa=float(OBU_arfa_01)).comp_data_formul(RSUsp_list)[2]
|