|  |  | @ -55,6 +55,7 @@ class PathPlanner(): | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.solution_invalid_cnt = 0 |  |  |  |     self.solution_invalid_cnt = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.path_offset_i = 0.0 |  |  |  |     self.path_offset_i = 0.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.lane_change_state = LaneChangeState.off |  |  |  |     self.lane_change_state = LaneChangeState.off | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     self.lane_change_direction = LaneChangeDirection.none | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.lane_change_timer = 0.0 |  |  |  |     self.lane_change_timer = 0.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.prev_one_blinker = False |  |  |  |     self.prev_one_blinker = False | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -89,21 +90,21 @@ class PathPlanner(): | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.LP.parse_model(sm['model']) |  |  |  |     self.LP.parse_model(sm['model']) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Lane change logic |  |  |  |     # Lane change logic | 
			
		
	
		
		
			
				
					
					|  |  |  |     lane_change_direction = LaneChangeDirection.none |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     one_blinker = sm['carState'].leftBlinker != sm['carState'].rightBlinker |  |  |  |     one_blinker = sm['carState'].leftBlinker != sm['carState'].rightBlinker | 
			
		
	
		
		
			
				
					
					|  |  |  |     below_lane_change_speed = v_ego < LANE_CHANGE_SPEED_MIN |  |  |  |     below_lane_change_speed = v_ego < LANE_CHANGE_SPEED_MIN | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if not active or self.lane_change_timer > LANE_CHANGE_TIME_MAX: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.lane_change_state = LaneChangeState.off |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     else: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if sm['carState'].leftBlinker: |  |  |  |     if sm['carState'].leftBlinker: | 
			
		
	
		
		
			
				
					
					|  |  |  |         lane_change_direction = LaneChangeDirection.left |  |  |  |       self.lane_change_direction = LaneChangeDirection.left | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     elif sm['carState'].rightBlinker: |  |  |  |     elif sm['carState'].rightBlinker: | 
			
		
	
		
		
			
				
					
					|  |  |  |         lane_change_direction = LaneChangeDirection.right |  |  |  |       self.lane_change_direction = LaneChangeDirection.right | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if not active or self.lane_change_timer > LANE_CHANGE_TIME_MAX: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       self.lane_change_state = LaneChangeState.off | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       self.lane_change_direction = LaneChangeDirection.none | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     else: | 
			
		
	
		
		
			
				
					
					|  |  |  |       torque_applied = sm['carState'].steeringPressed and \ |  |  |  |       torque_applied = sm['carState'].steeringPressed and \ | 
			
		
	
		
		
			
				
					
					|  |  |  |                        ((sm['carState'].steeringTorque > 0 and lane_change_direction == LaneChangeDirection.left) or \ |  |  |  |                        ((sm['carState'].steeringTorque > 0 and self.lane_change_direction == LaneChangeDirection.left) or \ | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         (sm['carState'].steeringTorque < 0 and lane_change_direction == LaneChangeDirection.right)) |  |  |  |                         (sm['carState'].steeringTorque < 0 and self.lane_change_direction == LaneChangeDirection.right)) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       lane_change_prob = self.LP.l_lane_change_prob + self.LP.r_lane_change_prob |  |  |  |       lane_change_prob = self.LP.l_lane_change_prob + self.LP.r_lane_change_prob | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -137,7 +138,7 @@ class PathPlanner(): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.prev_one_blinker = one_blinker |  |  |  |     self.prev_one_blinker = one_blinker | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     desire = DESIRES[lane_change_direction][self.lane_change_state] |  |  |  |     desire = DESIRES[self.lane_change_direction][self.lane_change_state] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Turn off lanes during lane change |  |  |  |     # Turn off lanes during lane change | 
			
		
	
		
		
			
				
					
					|  |  |  |     if desire == log.PathPlan.Desire.laneChangeRight or desire == log.PathPlan.Desire.laneChangeLeft: |  |  |  |     if desire == log.PathPlan.Desire.laneChangeRight or desire == log.PathPlan.Desire.laneChangeLeft: | 
			
		
	
	
		
		
			
				
					|  |  | @ -215,7 +216,7 @@ class PathPlanner(): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     plan_send.pathPlan.desire = desire |  |  |  |     plan_send.pathPlan.desire = desire | 
			
		
	
		
		
			
				
					
					|  |  |  |     plan_send.pathPlan.laneChangeState = self.lane_change_state |  |  |  |     plan_send.pathPlan.laneChangeState = self.lane_change_state | 
			
		
	
		
		
			
				
					
					|  |  |  |     plan_send.pathPlan.laneChangeDirection = lane_change_direction |  |  |  |     plan_send.pathPlan.laneChangeDirection = self.lane_change_direction | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     pm.send('pathPlan', plan_send) |  |  |  |     pm.send('pathPlan', plan_send) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |