@ -105,42 +105,44 @@ class LateralPlanner():
self . lane_change_state = LaneChangeState . off
self . lane_change_state = LaneChangeState . off
self . lane_change_direction = LaneChangeDirection . none
self . lane_change_direction = LaneChangeDirection . none
else :
else :
torque_applied = sm [ ' carState ' ] . steeringPressed and \
# LaneChangeState.off
( ( 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
if self . lane_change_state == LaneChangeState . off and one_blinker and not self . prev_one_blinker and not below_lane_change_speed :
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 :
if sm [ ' carState ' ] . leftBlinker :
self . lane_change_direction = LaneChangeDirection . left
self . lane_change_direction = LaneChangeDirection . left
elif sm [ ' carState ' ] . rightBlinker :
elif sm [ ' carState ' ] . rightBlinker :
self . lane_change_direction = LaneChangeDirection . right
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
torque_applied = sm [ ' carState ' ] . steeringPressed and \
self . lane_change_ll_prob = 1.0
( ( 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 :
if not one_blinker or below_lane_change_speed :
self . lane_change_state = LaneChangeState . off
self . lane_change_state = LaneChangeState . off
elif torque_applied and not blindspot_detected :
elif torque_applied and not blindspot_detected :
self . lane_change_state = LaneChangeState . laneChangeStarting
self . lane_change_state = LaneChangeState . laneChangeStarting
# s tarting
# LaneChangeState.laneChangeS tarting
elif self . lane_change_state == LaneChangeState . laneChangeStarting :
elif self . lane_change_state == LaneChangeState . laneChangeStarting :
# fade out over .5s
# fade out over .5s
self . lane_change_ll_prob = max ( self . lane_change_ll_prob - 2 * DT_MDL , 0.0 )
self . lane_change_ll_prob = max ( self . lane_change_ll_prob - 2 * DT_MDL , 0.0 )
# 98% certainty
# 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 :
if lane_change_prob < 0.02 and self . lane_change_ll_prob < 0.01 :
self . lane_change_state = LaneChangeState . laneChangeFinishing
self . lane_change_state = LaneChangeState . laneChangeFinishing
# f inishing
# LaneChangeState.laneChangeF inishing
elif self . lane_change_state == LaneChangeState . laneChangeFinishing :
elif self . lane_change_state == LaneChangeState . laneChangeFinishing :
# fade in laneline over 1s
# fade in laneline over 1s
self . lane_change_ll_prob = min ( self . lane_change_ll_prob + DT_MDL , 1.0 )
self . lane_change_ll_prob = min ( self . lane_change_ll_prob + DT_MDL , 1.0 )