From e807d9a9a048a4c6981e0a364e90caca41ab346c Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 1 Mar 2022 17:51:27 +0100 Subject: [PATCH] jeremy --- Car.py | 53 ++++++++++++++++++++++++++++++++---------------- CarController.py | 3 ++- test8.rou.xml | 2 +- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/Car.py b/Car.py index 3743f80..ab99f2f 100644 --- a/Car.py +++ b/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 diff --git a/CarController.py b/CarController.py index cec2788..c9c8ecc 100644 --- a/CarController.py +++ b/CarController.py @@ -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)) diff --git a/test8.rou.xml b/test8.rou.xml index 1e63708..06e04b4 100644 --- a/test8.rou.xml +++ b/test8.rou.xml @@ -4,7 +4,7 @@ --> - +