@@ -1290,6 +1290,7 @@ def update(self, state : AllState):
12901290 desired_speed = self .desired_speed
12911291 accel = self .acceleration
12921292 decel = self .deceleration
1293+ lookahead_distance_to_pedestrian = lookahead_distance
12931294
12941295 for r in state .relations :
12951296 if r .type == EntityRelationEnum .YIELDING and r .obj1 == '' :
@@ -1362,20 +1363,25 @@ class ObjectFrameEnum(Enum):
13621363 ###############################################
13631364 # # UNCOMMENT NOT TO YIELD: JUST STOP FOR PART1
13641365 # print("The vehicle is Stopping.")
1366+ # print("@@@@@", a.pose.x)
1367+
1368+ # # Update the collision distance.
1369+ # if lookahead_distance_to_pedestrian > collision_distance:
1370+ # lookahead_distance_to_pedestrian = collision_distance
1371+
13651372 # # Decide the deceleration based on the collision distance.
1366- # brake_deceleration = max(self.deceleration, v1[0]**2 / (2 * (collision_distance)))
1367- # if brake_deceleration > self.deceleration:
1368- # if brake_deceleration > self.max_deceleration:
1369- # brake_deceleration = self.max_deceleration
1373+ # # To stop perfectly, assume the vehicle is running at the desired speed.
1374+ # brake_deceleration = max(self.deceleration, desired_speed**2 / (2 * (collision_distance)))
1375+ # if brake_deceleration > self.max_deceleration:
1376+ # brake_deceleration = self.max_deceleration
1377+
1378+ # if brake_deceleration > decel:
13701379 # decel = brake_deceleration if brake_deceleration > decel else decel
13711380 # should_brake = True
1372- # break
13731381 # break
13741382 ###############################################
13751383
13761384 print ("Collision detected. Try to find yielding speed." )
1377- # Update lookahead distance to pedestrian.
1378- route_with_lookahead = route .trim (closest_parameter , closest_parameter + collision_distance )
13791385
13801386 collision_distance_after_yield = - 1
13811387
@@ -1391,23 +1397,29 @@ class ObjectFrameEnum(Enum):
13911397 collision_distance_after_yield = sim .run ()
13921398 if collision_distance_after_yield < 0 :
13931399 print (f"Yielding at speed: { v } " )
1394- desired_speed = v if v < desired_speed else desired_speed
1395- decel = self .yield_deceleration if self .yield_deceleration > decel else decel
1396- break
1400+ if lookahead_distance_to_pedestrian > collision_distance :
1401+ lookahead_distance_to_pedestrian = collision_distance
1402+ desired_speed = v
1403+ decel = self .yield_deceleration
1404+ break
13971405
13981406 # Collision detected with any yielding speed.
13991407 # => Brake to avoid collision.
1400- if collision_distance_after_yield > 0 :
1408+ if collision_distance_after_yield >= 0 :
14011409 print ("The vehicle is Stopping." )
14021410 # Decide the deceleration based on the collision distance.
14031411 brake_deceleration = max (self .deceleration , v1 [0 ]** 2 / (2 * (collision_distance )))
14041412 if brake_deceleration > self .max_deceleration :
14051413 brake_deceleration = self .max_deceleration
1406- decel = brake_deceleration if brake_deceleration > decel else decel
1407- should_brake = True
1414+ if lookahead_distance_to_pedestrian > collision_distance :
1415+ lookahead_distance_to_pedestrian = collision_distance
1416+ decel = brake_deceleration
1417+ route = route_with_lookahead
1418+ should_brake = True
1419+
1420+ # Update the lookahead distance to pedestrian.
1421+ route_with_lookahead = route .trim (closest_parameter ,closest_parameter + lookahead_distance_to_pedestrian )
14081422
1409- break
1410-
14111423 # # UNCOMMENT TO BRAKE FOR ALL PEDESTRIANS
14121424 # should_brake = True
14131425 # desired_speed = 0.0
0 commit comments