fix + nv problemes
This commit is contained in:
parent
afe65943aa
commit
76b89967ac
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,3 +3,4 @@ main.build
|
|||||||
main.dist
|
main.dist
|
||||||
main.onefile-build
|
main.onefile-build
|
||||||
profile.txt
|
profile.txt
|
||||||
|
todo.txt
|
||||||
|
26
Car.py
26
Car.py
@ -80,6 +80,9 @@ class Car():
|
|||||||
|
|
||||||
def prepareRoute(self):
|
def prepareRoute(self):
|
||||||
route = list(map(self.map.getEdge,self.rawRoute))
|
route = list(map(self.map.getEdge,self.rawRoute))
|
||||||
|
if None in route:
|
||||||
|
print("error planning route, mismatched net/demand?")
|
||||||
|
return
|
||||||
for r,rn in zip(route,route[1:]):
|
for r,rn in zip(route,route[1:]):
|
||||||
self.route.append(r)
|
self.route.append(r)
|
||||||
conn=r.getConnections(rn)
|
conn=r.getConnections(rn)
|
||||||
@ -252,6 +255,7 @@ class Car():
|
|||||||
self.v = 0
|
self.v = 0
|
||||||
return
|
return
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if(leader is None):
|
if(leader is None):
|
||||||
self.v = self.vmax
|
self.v = self.vmax
|
||||||
self.updateGraph(self.v, vmax, 0)
|
self.updateGraph(self.v, vmax, 0)
|
||||||
@ -314,6 +318,10 @@ class Car():
|
|||||||
"""if self.id == "f_00" and self.controller.t%10>5:
|
"""if self.id == "f_00" and self.controller.t%10>5:
|
||||||
self.v = 0
|
self.v = 0
|
||||||
return
|
return
|
||||||
|
if self.id == "v_0" and self.controller.t > 5:
|
||||||
|
self.v = 0
|
||||||
|
self.updateGraph(self.leaderDist, self.distToInter, 0)
|
||||||
|
return
|
||||||
"""
|
"""
|
||||||
if leader is None:
|
if leader is None:
|
||||||
vd = min(self.v + self.a * dt, vmax)
|
vd = min(self.v + self.a * dt, vmax)
|
||||||
@ -327,19 +335,27 @@ class Car():
|
|||||||
if(self.leaderBefore):
|
if(self.leaderBefore):
|
||||||
# on calcule le temps qu'on va mettre à arriver à l'intersection
|
# on calcule le temps qu'on va mettre à arriver à l'intersection
|
||||||
# et le temps que le leader va mettre
|
# et le temps que le leader va mettre
|
||||||
tti, sai = self.calcTti(self.distToInter, self.v, vmax, self.a)
|
|
||||||
|
nextInternalIndex = self.index # Pour la voiture actuelle, dans l'ideal on calculerait la durée selon la vitesse sur chaque troncon
|
||||||
|
while not self.route[nextInternalIndex].isSpecial(): # Mais pour l'instant on prend juste la vitesse sur le troncon interne (le plus lent en general)
|
||||||
|
nextInternalIndex += 1
|
||||||
|
tti, sai = self.calcTti(self.distToInter, self.v, self.route[nextInternalIndex].getLane(0).getSpeed(), self.a) # TODO : laneID
|
||||||
ltti, lsai = self.calcTti(self.leaderDist, vleader, leader.vmax, leader.a)
|
ltti, lsai = self.calcTti(self.leaderDist, vleader, leader.vmax, leader.a)
|
||||||
|
|
||||||
lta = leader.vmax / leader.a # temps ou le leader accelere (i.e on ne gagne pas de vitesse relative) (on considere que leader.a==self.a)
|
lta = leader.vmax / leader.a # temps ou le leader accelere (i.e on ne gagne pas de vitesse relative) (on considere que leader.a==self.a)
|
||||||
marg = lta + (lsai-sai) / self.a # marge à prendre pour accelerer après l'intersection sans que le leader nous rattrape
|
marg = lta + (lsai-sai) / self.a # marge à prendre pour accelerer après l'intersection sans que le leader nous rattrape
|
||||||
|
|
||||||
|
tts = self.v/self.b # time to stop, temps pour s'arreter si on freine mnt
|
||||||
|
dts = self.v*tts - (self.b*tts**2)/2 # distance to stop, distance parcouru en tts si on freine
|
||||||
|
#print(self.distToInter, self.minSpace, dts)
|
||||||
# si on est suffisement loin de l'intersection (i.e on s'en fout du leader)
|
# si on est suffisement loin de l'intersection (i.e on s'en fout du leader)
|
||||||
# ou si on as le temps d'arriver à l'intersection avant le leader (plus un marge pour garder un distance de sécu)
|
# ou si on as le temps d'arriver à l'intersection avant le leader (plus un marge pour garder un distance de sécu)
|
||||||
# alors on accelere pour s'inserer
|
# alors on accelere pour s'inserer
|
||||||
if self.distToInter > self.minSpace or (tti + leader.T + marg) < ltti:
|
if self.distToInter > self.minSpace + dts or (tti + leader.T + marg) < ltti:
|
||||||
self.v = min(vmax, self.v + self.a*dt)
|
self.v = min(vmax, self.v + self.a*dt)
|
||||||
else:# sinon on s'arrete net
|
print(self.id, "ca passe")
|
||||||
self.v = 0#max(0, self.v - self.b*dt)
|
else:# sinon on freine
|
||||||
|
self.v = max(0, self.v - self.b*dt)
|
||||||
self.updateGraph(self.v, vmax, 0)
|
self.updateGraph(self.v, vmax, 0)
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -353,7 +369,7 @@ class Car():
|
|||||||
def updateGraph(self, v, vmax, vsec):
|
def updateGraph(self, v, vmax, vsec):
|
||||||
if self.infoWidg is None:
|
if self.infoWidg is None:
|
||||||
return
|
return
|
||||||
self.signals.addGraphPt.emit((2,self.controller.t,self.v))
|
self.signals.addGraphPt.emit((2,self.controller.t,v))
|
||||||
self.signals.addGraphPt.emit((0,self.controller.t,vmax))
|
self.signals.addGraphPt.emit((0,self.controller.t,vmax))
|
||||||
self.signals.addGraphPt.emit((1,self.controller.t,vsec))
|
self.signals.addGraphPt.emit((1,self.controller.t,vsec))
|
||||||
|
|
||||||
|
9
Map.py
9
Map.py
@ -41,7 +41,14 @@ class Map:
|
|||||||
|
|
||||||
@safeCall
|
@safeCall
|
||||||
def getEdge(self,edgeID):
|
def getEdge(self,edgeID):
|
||||||
return self.net.getEdge(edgeID)
|
ret = None
|
||||||
|
try:
|
||||||
|
ret = self.net.getEdge(edgeID)
|
||||||
|
except KeyError:
|
||||||
|
print("key not found, mismatched net/demand? clearing net")
|
||||||
|
self.net = None
|
||||||
|
else:
|
||||||
|
return ret
|
||||||
|
|
||||||
@safeCall
|
@safeCall
|
||||||
def getNode(self,nodeID):
|
def getNode(self,nodeID):
|
||||||
|
@ -44,7 +44,7 @@ class mainLoop(QObject):
|
|||||||
self.timer.timeout.connect(self.updateFps)
|
self.timer.timeout.connect(self.updateFps)
|
||||||
self.timer.timeout.connect(self.update)
|
self.timer.timeout.connect(self.update)
|
||||||
self.timer.setInterval(1000/60)
|
self.timer.setInterval(1000/60)
|
||||||
self.stopSignal.connect(self.timer.stop)
|
#self.stopSignal.connect(self.timer.stop)
|
||||||
|
|
||||||
def startTimer(self):
|
def startTimer(self):
|
||||||
self.timer.start()
|
self.timer.start()
|
||||||
@ -86,9 +86,9 @@ class mainLoop(QObject):
|
|||||||
|
|
||||||
@threadSafe
|
@threadSafe
|
||||||
def quickLoad(self):
|
def quickLoad(self):
|
||||||
self.map.fromPath("test9.net.xml")
|
self.map.fromPath("test_calc_dist.net.xml")
|
||||||
self.painter.generateTransform()
|
self.painter.generateTransform()
|
||||||
self.controller.fromPath("test14.rou.xml")
|
self.controller.fromPath("test_calc_dist.rou.xml")
|
||||||
self.controller.prepareRoute()
|
self.controller.prepareRoute()
|
||||||
|
|
||||||
def updateFps(self):
|
def updateFps(self):
|
||||||
|
75
test_calc_dist.net.xml
Normal file
75
test_calc_dist.net.xml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!-- generated on 2022-04-22 16:50:23 by Eclipse SUMO netedit Version 1.12.0
|
||||||
|
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/netconvertConfiguration.xsd">
|
||||||
|
|
||||||
|
<output>
|
||||||
|
<output-file value="/home/leo/Sketchbook/python/Traffic/test_calc_dist.net.xml"/>
|
||||||
|
</output>
|
||||||
|
|
||||||
|
<processing>
|
||||||
|
<offset.disable-normalization value="true"/>
|
||||||
|
</processing>
|
||||||
|
|
||||||
|
<junctions>
|
||||||
|
<no-turnarounds value="true"/>
|
||||||
|
</junctions>
|
||||||
|
|
||||||
|
<netedit>
|
||||||
|
<route-files value="/home/leo/Sketchbook/python/Traffic/test_calc_dist.rou.xml"/>
|
||||||
|
</netedit>
|
||||||
|
|
||||||
|
<report>
|
||||||
|
<aggregate-warnings value="5"/>
|
||||||
|
</report>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<net version="1.9" junctionCornerDetail="5" limitTurnSpeed="5.50" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/net_file.xsd">
|
||||||
|
|
||||||
|
<location netOffset="0.00,0.00" convBoundary="-37.63,15.86,168.37,80.47" origBoundary="10000000000.00,10000000000.00,-10000000000.00,-10000000000.00" projParameter="!"/>
|
||||||
|
|
||||||
|
<edge id=":J1_0" function="internal">
|
||||||
|
<lane id=":J1_0_0" index="0" speed="6.39" length="5.55" shape="96.23,48.62 96.15,47.41 96.48,46.21 97.23,45.01 98.41,43.81"/>
|
||||||
|
</edge>
|
||||||
|
<edge id=":J1_1" function="internal">
|
||||||
|
<lane id=":J1_1_0" index="0" speed="8.98" length="6.18" shape="92.62,45.20 94.47,45.25 95.79,45.23 96.97,44.85 98.41,43.81"/>
|
||||||
|
</edge>
|
||||||
|
<edge id=":J2_0" function="internal">
|
||||||
|
<lane id=":J2_0_0" index="0" speed="4.29" length="1.18" shape="132.11,14.65 132.37,14.43 132.59,14.31 132.83,14.27 133.18,14.26"/>
|
||||||
|
</edge>
|
||||||
|
|
||||||
|
<edge id="E0" from="J0" to="J1" priority="-1">
|
||||||
|
<lane id="E0_0" index="0" speed="13.89" length="130.26" shape="-37.63,45.93 92.62,45.20"/>
|
||||||
|
</edge>
|
||||||
|
<edge id="E1" from="J1" to="J2" priority="-1">
|
||||||
|
<lane id="E1_0" index="0" speed="13.89" length="44.56" shape="98.41,43.81 132.11,14.65"/>
|
||||||
|
</edge>
|
||||||
|
<edge id="E2" from="J2" to="J3" priority="-1">
|
||||||
|
<lane id="E2_0" index="0" speed="13.89" length="35.22" shape="133.18,14.26 168.39,14.77"/>
|
||||||
|
</edge>
|
||||||
|
<edge id="E3" from="J4" to="J1" priority="1">
|
||||||
|
<lane id="E3_0" index="0" speed="13.89" length="33.22" shape="104.23,80.86 96.23,48.62"/>
|
||||||
|
</edge>
|
||||||
|
|
||||||
|
<junction id="J0" type="dead_end" x="-37.63" y="47.53" incLanes="" intLanes="" shape="-37.63,47.53 -37.64,44.33"/>
|
||||||
|
<junction id="J1" type="priority" x="97.43" y="46.77" incLanes="E3_0 E0_0" intLanes=":J1_0_0 :J1_1_0" shape="94.68,49.00 97.79,48.23 97.81,47.23 98.02,46.70 98.37,46.16 98.84,45.60 99.45,45.02 97.36,42.60 95.85,43.56 95.21,43.69 94.52,43.69 93.68,43.63 92.62,43.60 92.63,46.80 93.53,47.04 93.90,47.35 94.21,47.77 94.47,48.33">
|
||||||
|
<request index="0" response="00" foes="10" cont="0"/>
|
||||||
|
<request index="1" response="01" foes="01" cont="0"/>
|
||||||
|
</junction>
|
||||||
|
<junction id="J2" type="priority" x="133.15" y="15.86" incLanes="E1_0" intLanes=":J2_0_0" shape="133.15,15.86 133.20,12.66 132.33,12.69 132.02,12.77 131.74,12.90 131.44,13.12 131.06,13.44">
|
||||||
|
<request index="0" response="0" foes="0" cont="0"/>
|
||||||
|
</junction>
|
||||||
|
<junction id="J3" type="dead_end" x="168.37" y="16.37" incLanes="E2_0" intLanes="" shape="168.42,13.17 168.37,16.37"/>
|
||||||
|
<junction id="J4" type="dead_end" x="105.79" y="80.47" incLanes="" intLanes="" shape="105.79,80.47 102.68,81.24"/>
|
||||||
|
|
||||||
|
<connection from="E0" to="E1" fromLane="0" toLane="0" via=":J1_1_0" dir="s" state="m"/>
|
||||||
|
<connection from="E1" to="E2" fromLane="0" toLane="0" via=":J2_0_0" dir="s" state="M"/>
|
||||||
|
<connection from="E3" to="E1" fromLane="0" toLane="0" via=":J1_0_0" dir="l" state="M"/>
|
||||||
|
|
||||||
|
<connection from=":J1_0" to="E1" fromLane="0" toLane="0" dir="l" state="M"/>
|
||||||
|
<connection from=":J1_1" to="E1" fromLane="0" toLane="0" dir="s" state="M"/>
|
||||||
|
<connection from=":J2_0" to="E2" fromLane="0" toLane="0" dir="s" state="M"/>
|
||||||
|
|
||||||
|
</net>
|
13
test_calc_dist.rou.xml
Normal file
13
test_calc_dist.rou.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!-- generated on 2022-04-22 16:43:43 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">
|
||||||
|
<vehicle id="v_0" depart="0.00">
|
||||||
|
<route edges="E0 E1 E2"/>
|
||||||
|
</vehicle>
|
||||||
|
<vehicle id="v_1" depart="5.00">
|
||||||
|
<route edges="E3 E1 E2"/>
|
||||||
|
</vehicle>
|
||||||
|
</routes>
|
Loading…
x
Reference in New Issue
Block a user