Determine lane chane direction in preLaneChange state (#21119)

* Determine lane chane direction in preLaneChange state

* cleanup

* update refs

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
old-commit-hash: de34d1a527
commatwo_master
Willem Melching 4 years ago committed by GitHub
parent e59eb8bbfe
commit 51eb52fec4
  1. 36
      selfdrive/controls/lib/lateral_planner.py
  2. 2
      selfdrive/test/process_replay/ref_commit

@ -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
# starting # LaneChangeState.laneChangeStarting
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
# finishing # LaneChangeState.laneChangeFinishing
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)

@ -1 +1 @@
32ee8c7581957064cc24b6c11e1ccf80295a71ae 1b2f2fdaf6b2fa886f62ef62dd91d5e6a8546a9e
Loading…
Cancel
Save