flow
This commit is contained in:
parent
b5ac5a820f
commit
bed9dcc52a
36
Car.py
36
Car.py
@ -30,6 +30,8 @@ class Car():
|
||||
self.vmax = newLane[1]
|
||||
self.laneId = newLane[2]
|
||||
|
||||
if self.infoWidg is None:
|
||||
return
|
||||
self.signals.updateDisp.emit(("Index",f"{self.index}/{len(self.route)}"))
|
||||
self.signals.updateDisp.emit(("Edge",self.route[self.index]))
|
||||
|
||||
@ -48,10 +50,6 @@ class Car():
|
||||
self.leader=None
|
||||
self.startTime=float(startTime)
|
||||
|
||||
self.signals=updateSignals()
|
||||
self.signals.updateDisp.connect(self.infoWidg.setVal)
|
||||
self.signals.addGraphPt.connect(self.infoWidg.addSpeedPoint)
|
||||
|
||||
self.pos=[0,0]
|
||||
self.v=0
|
||||
self.a=10
|
||||
@ -61,12 +59,18 @@ class Car():
|
||||
|
||||
self.vroom = 0
|
||||
|
||||
self.rawRoute = route
|
||||
|
||||
if infoWidg is None:
|
||||
return
|
||||
self.signals=updateSignals()
|
||||
self.signals.updateDisp.connect(self.infoWidg.setVal)
|
||||
self.signals.addGraphPt.connect(self.infoWidg.addSpeedPoint)
|
||||
|
||||
self.signals.updateDisp.emit(("Position",self.pos))
|
||||
self.signals.updateDisp.emit(("Vitesse",self.v))
|
||||
self.signals.updateDisp.emit(("Index",f"{self.index}/{len(route)}"))
|
||||
|
||||
self.rawRoute = route
|
||||
|
||||
def prepareRoute(self):
|
||||
route = list(map(self.map.getEdge,self.rawRoute))
|
||||
for r,rn in zip(route,route[1:]):
|
||||
@ -161,8 +165,11 @@ class Car():
|
||||
S=5
|
||||
T=0.3
|
||||
vsec=vleader+(S-vmax*T)/(vbar/bbar+T)
|
||||
vd=min(self.v+self.a*dt,vmax,vsec)
|
||||
vd=min(self.v+self.a*dt,vmax) #,vsec)
|
||||
self.v=max(0,vd)
|
||||
|
||||
if self.infoWidg is None:
|
||||
return
|
||||
self.signals.addGraphPt.emit((2,self.controller.t,self.v))
|
||||
self.signals.addGraphPt.emit((0,self.controller.t,vmax))
|
||||
self.signals.addGraphPt.emit((1,self.controller.t,vsec))
|
||||
@ -198,9 +205,20 @@ class Car():
|
||||
self.pos[1]+=(endPos[1]-self.pos[1])*adv
|
||||
lgt=0
|
||||
|
||||
if randint(0,100) == 0:
|
||||
self.vroom = 60
|
||||
|
||||
if self.infoWidg is None:
|
||||
return
|
||||
self.signals.updateDisp.emit(("Position", self.pos))
|
||||
self.signals.updateDisp.emit(("Vitesse", self.v))
|
||||
self.signals.updateDisp.emit(("Leader", self.leader if self.leader is None else f"{self.leader.id} @ {self.leaderDist:.2f}m"))
|
||||
|
||||
if randint(0,100) == 0:
|
||||
self.vroom = 60
|
||||
def __copy__(self):
|
||||
copy = Car(self.id, self.rawRoute, self.startTime, self.map, self.controller, self.infoWidg)
|
||||
copy.route = self.route
|
||||
copy.pos = self.pos.copy()
|
||||
copy.laneShape = self.laneShape
|
||||
copy.laneId = self.laneId
|
||||
copy.vmax = self.vmax
|
||||
return copy
|
||||
|
@ -1,5 +1,6 @@
|
||||
import sumolib
|
||||
from Car import Car
|
||||
from Flow import Flow
|
||||
from carInfo import Ui_carInfo
|
||||
from PySide6.QtWidgets import QWidget, QLabel
|
||||
from PySide6.QtCore import Qt, Slot, Signal, QThread
|
||||
@ -78,6 +79,7 @@ class CarController:
|
||||
def __init__(self,parentMap):
|
||||
self.map=parentMap
|
||||
self.cars=[]
|
||||
self.flows=[]
|
||||
self.t=0
|
||||
self.infoWidget=None
|
||||
|
||||
@ -87,15 +89,21 @@ class CarController:
|
||||
while self.infoWidget.count() != 0:
|
||||
self.infoWidget.removeItem(0)
|
||||
|
||||
for vehicle in sumolib.xml.parse(path,"vehicle"):
|
||||
for vehicle in sumolib.xml.parse(path,["vehicle","flow"]):
|
||||
route=vehicle.route[0].edges.split()
|
||||
if vehicle.name == "vehicle":
|
||||
wId=self.infoWidget.addItem(carInfo(self.infoWidget), vehicle.id)
|
||||
self.cars.append(Car(vehicle.id,route,vehicle.depart,self.map,self,self.infoWidget.widget(wId)))
|
||||
elif vehicle.name == "flow":
|
||||
self.flows.append(Flow(vehicle.id, route, vehicle.begin, vehicle.vehsPerHour, self.map, self))
|
||||
|
||||
def prepareRoute(self):
|
||||
for car in self.cars:
|
||||
car.prepareRoute()
|
||||
|
||||
for flow in self.flows:
|
||||
flow.prepareRoute()
|
||||
|
||||
def getCarsOnEdge(self,edgeID):
|
||||
return filter(lambda c: c.route[c.index].getID()==edgeID,self.cars)
|
||||
|
||||
@ -110,6 +118,10 @@ class CarController:
|
||||
for car in self.cars:
|
||||
car.update(1.0/60)
|
||||
|
||||
for flow in self.flows:
|
||||
if flow.shouldSpawn(self.t):
|
||||
self.cars.append(flow.spawnCar())
|
||||
|
||||
def draw(self,painter):
|
||||
for ind,car in enumerate(self.cars):
|
||||
selectedId = self.infoWidget.currentIndex()
|
||||
|
25
Flow.py
Normal file
25
Flow.py
Normal file
@ -0,0 +1,25 @@
|
||||
from Car import Car
|
||||
|
||||
import copy
|
||||
|
||||
class Flow:
|
||||
def __init__(self,ID,route,start,vph,parentMap,parentController):
|
||||
self.route = route
|
||||
self.id = ID
|
||||
self.startTime = start
|
||||
self.vph = float(vph)
|
||||
self.carModel = Car("model",self.route,start,parentMap,parentController,None)
|
||||
self.carsSpawned = 0
|
||||
|
||||
def prepareRoute(self):
|
||||
self.carModel.prepareRoute()
|
||||
|
||||
def shouldSpawn(self, t):
|
||||
f = self.carsSpawned / (t/3600)
|
||||
return f < self.vph
|
||||
|
||||
def spawnCar(self):
|
||||
newCar = copy.copy(self.carModel)
|
||||
newCar.id = self.id + str(self.carsSpawned)
|
||||
self.carsSpawned += 1
|
||||
return newCar
|
@ -72,9 +72,9 @@ class mainLoop(QObject):
|
||||
|
||||
@threadSafe
|
||||
def quickLoad(self):
|
||||
self.map.fromPath("test2.net.xml")
|
||||
self.map.fromPath("test4.net.xml")
|
||||
self.painter.generateTransform()
|
||||
self.controller.fromPath("test5.rou.xml")
|
||||
self.controller.fromPath("test8.rou.xml")
|
||||
self.controller.prepareRoute()
|
||||
|
||||
def updateFps(self):
|
||||
|
10
test8.rou.xml
Normal file
10
test8.rou.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- generated on 2022-02-27 14:22:47 by Eclipse SUMO netedit Version 1.12.0
|
||||
-->
|
||||
|
||||
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd">
|
||||
<flow id="f_0" begin="0.00" end="3600.00" vehsPerHour="3600.00">
|
||||
<route edges="gneE0 gneE1"/>
|
||||
</flow>
|
||||
</routes>
|
Loading…
x
Reference in New Issue
Block a user