jeremy
This commit is contained in:
parent
b443166c62
commit
e807d9a9a0
53
Car.py
53
Car.py
@ -1,5 +1,5 @@
|
||||
import sumolib
|
||||
from math import dist, ceil
|
||||
from math import dist, ceil, sqrt
|
||||
from random import randint
|
||||
from PySide6.QtGui import QPainter
|
||||
from PySide6.QtCore import QPointF, Signal, QObject
|
||||
@ -25,7 +25,7 @@ class Car():
|
||||
|
||||
def initPath(self):
|
||||
newLane = self.getShape(self.index)
|
||||
|
||||
|
||||
self.laneShape = newLane[0]
|
||||
self.vmax = newLane[1]
|
||||
self.laneId = newLane[2]
|
||||
@ -36,7 +36,7 @@ class Car():
|
||||
self.signals.updateDisp.emit(("Edge",self.route[self.index]))
|
||||
|
||||
#print(f"{self.id} : {startEdge.getID()} -> {nextEdge.getID()} via {laneId}")
|
||||
|
||||
|
||||
def __init__(self,carID,route,startTime,parentMap,parentController,infoWidg):
|
||||
self.id=carID
|
||||
self.map=parentMap
|
||||
@ -49,7 +49,7 @@ class Car():
|
||||
self.laneId=0
|
||||
self.leader=None
|
||||
self.startTime=float(startTime)
|
||||
|
||||
|
||||
self.pos=[0,0]
|
||||
self.v=0
|
||||
self.a=10
|
||||
@ -57,20 +57,21 @@ class Car():
|
||||
|
||||
self.vmax=0
|
||||
|
||||
self.S = 5
|
||||
self.gamma = 5
|
||||
self.delta = 0
|
||||
self.T = 0.3
|
||||
self.size = 3
|
||||
|
||||
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)}"))
|
||||
@ -84,7 +85,7 @@ class Car():
|
||||
continue
|
||||
edge=self.map.getLane(conn[0].getViaLaneID()).getEdge()
|
||||
self.route.append(edge)
|
||||
|
||||
|
||||
secEdge=edge.getConnections(rn)[0].getViaLaneID() # Parfois je sais pas pourquoi il coupe les edges internes, mais il marque quand même la connection, ducoup pour contourner
|
||||
while secEdge!="":
|
||||
edge=self.map.getLane(secEdge).getEdge()
|
||||
@ -94,7 +95,7 @@ class Car():
|
||||
self.initPath()
|
||||
|
||||
self.pos=list(self.laneShape[0])
|
||||
|
||||
|
||||
def getLeader(self, maxDist):
|
||||
shapeInd = self.laneInd
|
||||
edgeInd = self.index
|
||||
@ -155,14 +156,17 @@ class Car():
|
||||
self.vroom -= 1
|
||||
painter.restore()
|
||||
#painter.drawEllipse(pt,100,100)
|
||||
|
||||
|
||||
def conduite(self,vmax,leader,dt):
|
||||
if self.id == "f_00" and 10 < self.controller.t < 10.5:
|
||||
if self.id == "f_00" and self.controller.t%10>5:
|
||||
|
||||
self.v = 0
|
||||
return
|
||||
|
||||
if(leader is None):
|
||||
vleader=self.v
|
||||
self.v = self.vmax
|
||||
return
|
||||
vleader=50#self.v
|
||||
bleader=self.b
|
||||
else:
|
||||
vleader=leader.v # vitesse de la voiture leader
|
||||
@ -170,10 +174,23 @@ class Car():
|
||||
|
||||
vbar=(self.v+vleader)/2
|
||||
bbar=(bleader+self.b)/2
|
||||
S=self.S
|
||||
|
||||
|
||||
|
||||
|
||||
# S = vleader * 3.6 * 0.6
|
||||
Si=self.leaderDist-25
|
||||
#S=vf**2 / self.b + vleader**2 / bleader + self.gamma * vf + self.delta
|
||||
T=self.T
|
||||
vsec=vleader+(S-vmax*T)/(vbar/bbar+T)
|
||||
vd=min(self.v+self.a*dt,vmax) #,vsec)
|
||||
vsec=vleader+(Si-vmax*T)/(vbar/bbar+T)
|
||||
vd=min(self.v+self.a*dt,vmax,vsec)
|
||||
#vf=min(va,vb2)
|
||||
|
||||
#va=self.v+2.5*self.a*self.T*(1-(self.v/vd))*sqrt(0.025+(self.v/vd))
|
||||
#vb2=self.b*self.T+sqrt((self.b)**2*(self.T)**2-self.b*(2*(S-Si)-self.v*self.T-((vleader)**2/bbar)))
|
||||
|
||||
|
||||
|
||||
self.v=max(0,vd)
|
||||
|
||||
if self.infoWidg is None:
|
||||
@ -189,7 +206,7 @@ class Car():
|
||||
self.leader=self.getLeader(100)
|
||||
|
||||
self.conduite(self.vmax,self.leader,dt)
|
||||
|
||||
|
||||
lgt=self.v*dt
|
||||
|
||||
while(lgt>0):
|
||||
@ -204,7 +221,7 @@ class Car():
|
||||
self.index+=1
|
||||
if(self.index>=len(self.route)-1):
|
||||
self.index=0
|
||||
|
||||
|
||||
self.initPath()
|
||||
self.pos=list(self.laneShape[self.laneInd])
|
||||
continue
|
||||
@ -212,7 +229,7 @@ class Car():
|
||||
self.pos[0]+=(endPos[0]-self.pos[0])*adv
|
||||
self.pos[1]+=(endPos[1]-self.pos[1])*adv
|
||||
lgt=0
|
||||
|
||||
|
||||
if randint(0,100) == 0:
|
||||
self.vroom = 60
|
||||
|
||||
|
@ -103,7 +103,8 @@ class CarController:
|
||||
self.infoWidget=mainWindow.findChild(QToolBox, "carInfos")
|
||||
|
||||
varWidget = mainWindow.ui.constEdit
|
||||
varWidget.addWidget(varEdit(varWidget, self, "S", 5))
|
||||
varWidget.addWidget(varEdit(varWidget, self, "gamma", 5))
|
||||
varWidget.addWidget(varEdit(varWidget, self, "delta", 0.5))
|
||||
varWidget.addWidget(varEdit(varWidget, self, "T", 0.3))
|
||||
varWidget.addWidget(varEdit(varWidget, self, "size", 3))
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
-->
|
||||
|
||||
<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">
|
||||
<flow id="f_0" begin="0.00" end="3600.00" vehsPerHour="5000.00">
|
||||
<route edges="gneE0 gneE1"/>
|
||||
</flow>
|
||||
</routes>
|
||||
|
Loading…
x
Reference in New Issue
Block a user