From 1bf752fc79611a9a73876ad5d5dfb50adce4e26f Mon Sep 17 00:00:00 2001 From: Kumar <36933347+rav4kumar@users.noreply.github.com> Date: Sat, 19 Apr 2025 12:15:28 -0700 Subject: [PATCH] bugfix: Auto lane change - Add mode to disable lane changes (#826) * off is off * sugg * line * Update sunnypilot/selfdrive/controls/lib/tests/test_auto_lane_change.py --------- Co-authored-by: Jason Wen Co-authored-by: Discountchubbs <159560811+Discountchubbs@users.noreply.github.com> Co-authored-by: DevTekVE --- selfdrive/controls/lib/desire_helper.py | 4 ++-- .../controls/lib/tests/test_auto_lane_change.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/selfdrive/controls/lib/desire_helper.py b/selfdrive/controls/lib/desire_helper.py index 34ea4ff1b..23386e2ad 100644 --- a/selfdrive/controls/lib/desire_helper.py +++ b/selfdrive/controls/lib/desire_helper.py @@ -1,7 +1,7 @@ from cereal import log from openpilot.common.conversions import Conversions as CV from openpilot.common.realtime import DT_MDL -from openpilot.sunnypilot.selfdrive.controls.lib.auto_lane_change import AutoLaneChangeController +from openpilot.sunnypilot.selfdrive.controls.lib.auto_lane_change import AutoLaneChangeController, AutoLaneChangeMode LaneChangeState = log.LaneChangeState LaneChangeDirection = log.LaneChangeDirection @@ -48,7 +48,7 @@ class DesireHelper: one_blinker = carstate.leftBlinker != carstate.rightBlinker below_lane_change_speed = v_ego < LANE_CHANGE_SPEED_MIN - if not lateral_active or self.lane_change_timer > LANE_CHANGE_TIME_MAX: + if not lateral_active or self.lane_change_timer > LANE_CHANGE_TIME_MAX or self.alc.lane_change_set_timer == AutoLaneChangeMode.OFF: self.lane_change_state = LaneChangeState.off self.lane_change_direction = LaneChangeDirection.none else: diff --git a/sunnypilot/selfdrive/controls/lib/tests/test_auto_lane_change.py b/sunnypilot/selfdrive/controls/lib/tests/test_auto_lane_change.py index c1b305320..5d1fa360e 100644 --- a/sunnypilot/selfdrive/controls/lib/tests/test_auto_lane_change.py +++ b/sunnypilot/selfdrive/controls/lib/tests/test_auto_lane_change.py @@ -51,6 +51,7 @@ class TestAutoLaneChangeController: assert not self.alc.prev_brake_pressed @parameterized.expand([(AutoLaneChangeMode.OFF, ), (AutoLaneChangeMode.NUDGE, )]) + def test_off_and_nudge_mode(self, timer_state): """Test the default OFF and NUDGE mode behavior.""" self._reset_states() @@ -196,3 +197,17 @@ class TestAutoLaneChangeController: self.alc.update_lane_change(blindspot_detected=False, brake_pressed=False) assert not self.alc.auto_lane_change_allowed + + def test_auto_lane_change_mode_off_disallows_lane_change(self): + """Test that OFF mode never allows auto lane change.""" + self._reset_states() + self.alc.lane_change_bsm_delay = False + self.alc.lane_change_set_timer = AutoLaneChangeMode.OFF + + # Simulate updates for a long period of time (e.g., 10 seconds) + num_updates = int(10.0 / DT_MDL) + for _ in range(num_updates): + self.alc.update_lane_change(blindspot_detected=False, brake_pressed=False) + + # Lane change should never be allowed + assert not self.alc.auto_lane_change_allowed