From cae47a6251d092a8950487db4b930b7ac4e078e0 Mon Sep 17 00:00:00 2001 From: rav4kumar <36933347+rav4kumar@users.noreply.github.com> Date: Fri, 17 Jul 2026 14:37:17 -0700 Subject: [PATCH] Cover low-speed mode changes without MPC faults --- .../lib/longitudinal_mpc_lib/long_mpc.py | 2 +- .../test_accel_controller_closed_loop.py | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py b/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py index d5ea6a8968..c1f516508f 100755 --- a/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py +++ b/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py @@ -58,7 +58,7 @@ STOP_DISTANCE = 6.0 CRUISE_MIN_ACCEL = -1.2 CRUISE_MAX_ACCEL = 1.6 CUSTOM_ACCEL_TRANSITION_FRAMES = 3 -CUSTOM_ACCEL_TRANSITION_MAX_SPEED = 0.3 +CUSTOM_ACCEL_TRANSITION_MAX_SPEED = 2.0 MIN_X_LEAD_FACTOR = 0.5 def get_jerk_factor(personality=log.LongitudinalPersonality.standard): diff --git a/sunnypilot/selfdrive/controls/lib/tests/test_accel_controller_closed_loop.py b/sunnypilot/selfdrive/controls/lib/tests/test_accel_controller_closed_loop.py index 473158704c..1512ab42f4 100644 --- a/sunnypilot/selfdrive/controls/lib/tests/test_accel_controller_closed_loop.py +++ b/sunnypilot/selfdrive/controls/lib/tests/test_accel_controller_closed_loop.py @@ -740,3 +740,28 @@ def test_early_launch_transition_returns_to_stock_without_solver_fault(pre_frame assert controller.mpc_accel_max is None assert plant.planner.mpc.last_solution_status == 0 np.testing.assert_array_equal(plant.planner.mpc.params[:, 1], ACCEL_MAX) + + +@pytest.mark.parametrize("profile", range(3), ids=("eco", "normal", "sport")) +@pytest.mark.parametrize("mode", ("disabled", "e2e")) +def test_launch_transition_after_crossing_standstill_threshold(profile, mode): + _set_params(enabled=True, profile=profile) + plant = Plant(speed=0.29, actuator_delay=0.15, actuator_lag=0.20) + plant.acceleration = 0.5 + plant.planner.a_desired = 0.5 + plant.step(v_cruise=15.0) + assert plant.speed > 0.30 + + if mode == "disabled": + plant.planner.accel_personality_enabled = False + plant.planner._read_accel_controller_params = lambda: None + else: + plant.e2e = True + + for _ in range(4): + plant.step(v_cruise=15.0) + controller = plant.planner.accel_controller_result + assert not controller.active + assert controller.mpc_accel_max is None + assert plant.planner.mpc.last_solution_status == 0 + np.testing.assert_array_equal(plant.planner.mpc.params[:, 1], ACCEL_MAX)