You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:17:27