|
|
|
@ -105,42 +105,44 @@ class LateralPlanner(): |
|
|
|
|
self.lane_change_state = LaneChangeState.off |
|
|
|
|
self.lane_change_direction = LaneChangeDirection.none |
|
|
|
|
else: |
|
|
|
|
torque_applied = sm['carState'].steeringPressed and \ |
|
|
|
|
((sm['carState'].steeringTorque > 0 and self.lane_change_direction == LaneChangeDirection.left) or |
|
|
|
|
(sm['carState'].steeringTorque < 0 and self.lane_change_direction == LaneChangeDirection.right)) |
|
|
|
|
|
|
|
|
|
blindspot_detected = ((sm['carState'].leftBlindspot and self.lane_change_direction == LaneChangeDirection.left) or |
|
|
|
|
(sm['carState'].rightBlindspot and self.lane_change_direction == LaneChangeDirection.right)) |
|
|
|
|
|
|
|
|
|
lane_change_prob = self.LP.l_lane_change_prob + self.LP.r_lane_change_prob |
|
|
|
|
|
|
|
|
|
# State transitions |
|
|
|
|
# off |
|
|
|
|
# LaneChangeState.off |
|
|
|
|
if self.lane_change_state == LaneChangeState.off and one_blinker and not self.prev_one_blinker and not below_lane_change_speed: |
|
|
|
|
self.lane_change_state = LaneChangeState.preLaneChange |
|
|
|
|
self.lane_change_ll_prob = 1.0 |
|
|
|
|
|
|
|
|
|
# LaneChangeState.preLaneChange |
|
|
|
|
elif self.lane_change_state == LaneChangeState.preLaneChange: |
|
|
|
|
# Set lane change direction |
|
|
|
|
if sm['carState'].leftBlinker: |
|
|
|
|
self.lane_change_direction = LaneChangeDirection.left |
|
|
|
|
elif sm['carState'].rightBlinker: |
|
|
|
|
self.lane_change_direction = LaneChangeDirection.right |
|
|
|
|
else: # If there are no blinkers we will go back to LaneChangeState.off |
|
|
|
|
self.lane_change_direction = LaneChangeDirection.none |
|
|
|
|
|
|
|
|
|
self.lane_change_state = LaneChangeState.preLaneChange |
|
|
|
|
self.lane_change_ll_prob = 1.0 |
|
|
|
|
torque_applied = sm['carState'].steeringPressed and \ |
|
|
|
|
((sm['carState'].steeringTorque > 0 and self.lane_change_direction == LaneChangeDirection.left) or |
|
|
|
|
(sm['carState'].steeringTorque < 0 and self.lane_change_direction == LaneChangeDirection.right)) |
|
|
|
|
|
|
|
|
|
blindspot_detected = ((sm['carState'].leftBlindspot and self.lane_change_direction == LaneChangeDirection.left) or |
|
|
|
|
(sm['carState'].rightBlindspot and self.lane_change_direction == LaneChangeDirection.right)) |
|
|
|
|
|
|
|
|
|
# pre |
|
|
|
|
elif self.lane_change_state == LaneChangeState.preLaneChange: |
|
|
|
|
if not one_blinker or below_lane_change_speed: |
|
|
|
|
self.lane_change_state = LaneChangeState.off |
|
|
|
|
elif torque_applied and not blindspot_detected: |
|
|
|
|
self.lane_change_state = LaneChangeState.laneChangeStarting |
|
|
|
|
|
|
|
|
|
# starting |
|
|
|
|
# LaneChangeState.laneChangeStarting |
|
|
|
|
elif self.lane_change_state == LaneChangeState.laneChangeStarting: |
|
|
|
|
# fade out over .5s |
|
|
|
|
self.lane_change_ll_prob = max(self.lane_change_ll_prob - 2*DT_MDL, 0.0) |
|
|
|
|
|
|
|
|
|
# 98% certainty |
|
|
|
|
lane_change_prob = self.LP.l_lane_change_prob + self.LP.r_lane_change_prob |
|
|
|
|
if lane_change_prob < 0.02 and self.lane_change_ll_prob < 0.01: |
|
|
|
|
self.lane_change_state = LaneChangeState.laneChangeFinishing |
|
|
|
|
|
|
|
|
|
# finishing |
|
|
|
|
# LaneChangeState.laneChangeFinishing |
|
|
|
|
elif self.lane_change_state == LaneChangeState.laneChangeFinishing: |
|
|
|
|
# fade in laneline over 1s |
|
|
|
|
self.lane_change_ll_prob = min(self.lane_change_ll_prob + DT_MDL, 1.0) |
|
|
|
|