如何在SUMO(城市交通模拟)中获取电动车实时充电/电池状态?
在SUMO中获取电动车实时充电/电池状态的方法
要获取SUMO中电动车的电池状态,核心是确保车辆启用电池设备,并通过TraCI的getParameter接口读取对应参数。
1. 先配置电动车的电池设备
在你的路网/车辆配置文件(如rou.xml或vtypes.xml)中,必须为车辆添加电池设备定义:
方式1:在车辆类型中全局配置
<vType id="electric_vehicle" vClass="passenger" emissionClass="electric"> <!-- 启用电池设备 --> <param key="has.battery.device" value="true"/> <!-- 电池总容量(单位:Wh) --> <param key="device.battery.maxBatteryCapacity" value="60000"/> <!-- 初始电量百分比 --> <param key="device.battery.initialCharge" value="70"/> </vType>
方式2:在单个车辆中配置
<vehicle id="ev_001" type="passenger" depart="0"> <param key="has.battery.device" value="true"/> <param key="device.battery.maxBatteryCapacity" value="50000"/> <param key="device.battery.initialCharge" value="50"/> </vehicle>
2. 通过TraCI获取电池状态参数
使用traci.vehicle.getParameter(vehID, 参数名)读取电池相关实时数据,常用参数如下:
device.battery.batteryLevel:剩余电量百分比(0-100)device.battery.actualBatteryCapacity:当前剩余电池容量(单位:Wh)device.battery.maxBatteryCapacity:电池总容量(单位:Wh)device.battery.chargingPower:当前充电功率(未充电时返回空字符串)device.battery.isCharging:是否正在充电(返回"true"/"false")
3. 修改你的示例代码
整合上述参数后的完整代码示例:
import traci # 启动SUMO仿真(替换为你的配置文件路径) traci.start(["sumo", "-c", "your_simulation_config.sumocfg"]) vehID = "ev_001" # 替换为目标车辆ID # 推进仿真并实时获取数据 while traci.simulation.getMinExpectedNumber() > 0: traci.simulationStep() # 获取基础车辆数据 distance = traci.vehicle.getDistance(vehID) speed = traci.vehicle.getSpeed(vehID) lane_pos = traci.vehicle.getLanePosition(vehID) # 获取电池状态数据 battery_level = float(traci.vehicle.getParameter(vehID, "device.battery.batteryLevel")) remaining_cap = float(traci.vehicle.getParameter(vehID, "device.battery.actualBatteryCapacity")) max_cap = float(traci.vehicle.getParameter(vehID, "device.battery.maxBatteryCapacity")) charging_power = traci.vehicle.getParameter(vehID, "device.battery.chargingPower") # 打印数据 print(f"Vehicle {vehID} | Speed: {speed:.2f} | Lane Pos: {lane_pos:.2f} | Distance: {distance:.2f}") print(f"Battery Status: {battery_level:.2f}% | Remaining: {remaining_cap:.2f}Wh | Total: {max_cap:.2f}Wh") if charging_power: print(f"Charging at {charging_power}W\n") else: print("\n") traci.close()
注意事项
- 如果未给车辆启用电池设备,调用
getParameter会返回空值,部分场景会触发报错。 - 所有参数返回的是字符串类型,需要根据需求转换为数值类型(如
float())。
内容的提问来源于stack exchange,提问作者monositPhD
相关产品推荐
相关产品推荐

