Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用带有TraCI的相扑熊猫数据帧设置速度? 客观的_Python_Sumo - Fatal编程技术网

Python 如何使用带有TraCI的相扑熊猫数据帧设置速度? 客观的

Python 如何使用带有TraCI的相扑熊猫数据帧设置速度? 客观的,python,sumo,Python,Sumo,我想在相扑模拟中使用单个车辆的预定义速度向量来移动它们 数据和文件 模拟中有3辆车。对于其中的两辆车,我想指定速度。速度数据在Python中创建,如下所示: import numpy as np import pandas as pd from pandas import Series, DataFrame data = {'ADO_name':['car1','car1','car1','car2','car2','car2'], 'Time_sec':[0,1,2,0,1,

我想在相扑模拟中使用单个车辆的预定义速度向量来移动它们

数据和文件 模拟中有3辆车。对于其中的两辆车,我想指定速度。速度数据在Python中创建,如下所示:

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

data = {'ADO_name':['car1','car1','car1','car2','car2','car2'],
        'Time_sec':[0,1,2,0,1,2],
        'Speed.kph':[50,51,52,0,0,52]}
dframe = DataFrame(data)  
此模拟的路由、网络和配置文件位于以下文件夹中:
我还将代码放在同一文件夹中的
Script.py
文件中

我试过的 以下是我一直尝试使用的代码以及错误:

#start sumo
sumoBinary = "C:/Users/Quinton/Desktop/Documents/Sumo/bin/sumo-gui"
sumoCmd = [sumoBinary, "-c", "C:/Users/Quinton/Desktop/Example2/example2.sumocfg"]


#importing libraries
import traci
import traci.constants as tc
traci.start(sumoCmd)

#subscribing to variables that we want to be printed once the copy has run
traci.vehicle.subscribe("car1", (tc.VAR_SPEED, tc.VAR_ROAD_ID, tc.VAR_LANE_ID, tc.VAR_LANEPOSITION))
traci.vehicle.subscribe("car2", (tc.VAR_SPEED, tc.VAR_ROAD_ID, tc.VAR_LANE_ID, tc.VAR_LANEPOSITION))
traci.vehicle.subscribe("car3", (tc.VAR_SPEED, tc.VAR_ROAD_ID, tc.VAR_LANE_ID, tc.VAR_LANEPOSITION))

#using traci.movetoXY to position car1 and car2 on network
traci.vehicle.moveToXY(vehID="car1", edgeID="highway1.1", lane=0, x=1000, y=-3.3, keepRoute=0)
traci.vehicle.moveToXY(vehID="car2", edgeID="highway1.1", lane=1, x=700, y=3.3, keepRoute=0)

#disallows car1 and car2 from changing lanes during simulation
traci.vehicle.setLaneChangeMode(vehID="car1", lcm=512)
traci.vehicle.setLaneChangeMode(vehID="car2", lcm=512)


#importing python modules
import numpy as np
import pandas as pd
from pandas import Series, DataFrame

#creating speed data
data = {'ADO_name':['car1','car1','car1','car2','car2','car2'],
        'Time_sec':[0,1,2,0,1,2],
        'Speed.kph':[50,51,52,0,0,52]}
dframe = DataFrame(data)
#print(dframe)

step = 0

#running traci
for ado in dframe.groupby('ADO_name'):
  ado_name = ado[1]["ADO_name"]
  adoID = ado_name.unique()

  while step <= 2:
    traci.simulationStep()
    traci.vehicle.setSpeed(adoID, ado[1][ado[1].Time_sec == step]['Speed.kph'])
    print (traci.vehicle.getSubscriptionResults("car1"), traci.vehicle.getSubscriptionResults("car2"))

  step += 1  
#开始相扑
sumoBinary=“C:/Users/Quinton/Desktop/Documents/Sumo/bin/sumogui”
sumoCmd=[sumobilian,“-c”,“c:/Users/Quinton/Desktop/Example2/Example2.sumocfg”]
#导入库
进口traci
将traci.constants导入为tc
traci.start(sumoCmd)
#订阅要在副本运行后打印的变量
traci.vehicle.subscribe(“car1”,(tc.VAR\u速度、tc.VAR\u道路ID、tc.VAR\u车道ID、tc.VAR\u车道位置))
traci.vehicle.subscribe(“car2”、(tc.VAR\u速度、tc.VAR\u道路ID、tc.VAR\u车道ID、tc.VAR\u车道位置))
traci.vehicle.subscribe(“car3”,(tc.VAR\u速度、tc.VAR\u道路ID、tc.VAR\u车道ID、tc.VAR\u车道位置))
#使用traci.movetoXY在网络上定位car1和car2
traci.vehicle.moveToXY(vehID=“car1”,edgeID=“highway1.1”,lane=0,x=1000,y=-3.3,keepRoute=0)
traci.vehicle.moveToXY(vehID=“car2”,edgeID=“highway1.1”,lane=1,x=700,y=3.3,keepRoute=0)
#在模拟过程中不允许car1和car2改变车道
traci.vehicle.setLaneChangeMode(vehID=“car1”,lcm=512)
traci.vehicle.setLaneChangeMode(vehID=“car2”,lcm=512)
#导入python模块
将numpy作为np导入
作为pd进口熊猫
从熊猫导入系列,数据帧
#创建速度数据
数据={'ADO_name':['car1'、'car1'、'car1'、'car2'、'car2'、'car2'],
“时间秒”:[0,1,2,0,1,2],
'速度.kph':[50,51,52,0,0,52]}
数据帧=数据帧(数据)
#打印(数据帧)
步长=0
#运行traci
对于dframe.groupby('ado_name')中的ado:
ado_name=ado[1][“ado_name”]
adoID=ado_name.unique()

步骤问题不在traci部分,而是在adoID中,它是一个数组,但应该是一个单个id(字符串),因此您可能只需要获取该数组的第一个元素。

谢谢您的回答。在删除
car2
的数据后,我尝试了
adoID[0]
。成功了。但是,如果我将这两种车辆的数据与adoID[0]
一起保存,我会得到错误
必需参数不是浮点值。我不确定您的代码试图实现什么。您想将两辆车的数据都输入到traci中,还是只输入一辆车的数据,还是先输入一辆车,然后输入另一辆车的数据?如果您想同时执行这两项操作,我的方法是简单地按时间对数据进行排序,然后应用每个条目。不需要groupBy。谢谢。我想同时提高两辆车的速度。正如您所建议的,我只是使用了
for loop
,而没有使用
groupby
,并且它运行起来没有任何问题。好奇的是,有没有更优雅的方法来提高多辆车的速度?我总共有13个。恐怕没有。没有setMultipleSpeeds这样的东西,虽然实现它肯定不难,但它有点违背了通常的TraCI哲学,即分别处理每个对象及其属性。
Traceback (most recent call last):
  File "C:\Users\Quinton\AppData\Local\Temp\Rtmp6jCqR4\chunk-code-16888822790.txt", line 41, in <module>
    traci.vehicle.setSpeed(adoID, ado[1][ado[1].Time_sec == step]['Speed.kph'])
  File "C:\Program Files (x86)\DLR\Sumo\tools\traci\_vehicle.py", line 927, in setSpeed
    tc.CMD_SET_VEHICLE_VARIABLE, tc.VAR_SPEED, vehID, speed)
  File "C:\Program Files (x86)\DLR\Sumo\tools\traci\connection.py", line 139, in _sendDoubleCmd
    self._beginMessage(cmdID, varID, objID, 1 + 8)
  File "C:\Program Files (x86)\DLR\Sumo\tools\traci\connection.py", line 127, in _beginMessage
    self._packString(objID, varID)
  File "C:\Program Files (x86)\DLR\Sumo\tools\traci\connection.py", line 66, in _packString
    self._string += struct.pack("!Bi", pre, len(s)) + s.encode("latin1")
AttributeError: 'numpy.ndarray' object has no attribute 'encode'