diff --git a/selfdrive/controls/lib/latcontrol_vehicle_tunes.py b/selfdrive/controls/lib/latcontrol_vehicle_tunes.py index 0cf571b57..72537ebff 100644 --- a/selfdrive/controls/lib/latcontrol_vehicle_tunes.py +++ b/selfdrive/controls/lib/latcontrol_vehicle_tunes.py @@ -662,6 +662,10 @@ KIA_EV6_UNWIND_TAPER_LEFT = 0.56 KIA_EV6_UNWIND_TAPER_RIGHT = 0.54 KIA_EV6_BASE_UNWIND_TAPER_LEFT = 0.06 KIA_EV6_BASE_UNWIND_TAPER_RIGHT = 0.05 +KIA_EV6_JWARM_BASE_TURN_IN_BOOST_LEFT = 0.12 +KIA_EV6_JWARM_BASE_TURN_IN_BOOST_RIGHT = 0.14 +KIA_EV6_JWARM_BASE_UNWIND_TAPER_LEFT = 0.15 +KIA_EV6_JWARM_BASE_UNWIND_TAPER_RIGHT = 0.16 KIA_EV6_FRICTION_MULT = 1.01 KIA_EV6_FRICTION_LAT_RISE = 0.18 KIA_EV6_FRICTION_JERK_RISE = 0.22 @@ -2419,12 +2423,20 @@ def get_kia_ev6_ff_scale(desired_lateral_accel: float, desired_lateral_jerk: flo _flm_vehicle_knob("hyundai_kia_ev6.unwind_taper_right", KIA_EV6_UNWIND_TAPER_RIGHT), ) * unwind_weight * (0.35 + 0.65 * low_speed_factor)) + jwarm_tune = kia_ev6_lateral_testing_ground_active() + base_turn_in_boost = 1.0 + ((_kia_ev6_side_value( + desired_lateral_accel, + KIA_EV6_JWARM_BASE_TURN_IN_BOOST_LEFT, + KIA_EV6_JWARM_BASE_TURN_IN_BOOST_RIGHT, + ) if jwarm_tune else 0.0) * turn_in_weight * onset * cutoff) base_unwind_taper = 1.0 - (_kia_ev6_side_value( desired_lateral_accel, - _flm_vehicle_knob("hyundai_kia_ev6.base_unwind_taper_left", KIA_EV6_BASE_UNWIND_TAPER_LEFT), - _flm_vehicle_knob("hyundai_kia_ev6.base_unwind_taper_right", KIA_EV6_BASE_UNWIND_TAPER_RIGHT), + KIA_EV6_JWARM_BASE_UNWIND_TAPER_LEFT if jwarm_tune else + _flm_vehicle_knob("hyundai_kia_ev6.base_unwind_taper_left", KIA_EV6_BASE_UNWIND_TAPER_LEFT), + KIA_EV6_JWARM_BASE_UNWIND_TAPER_RIGHT if jwarm_tune else + _flm_vehicle_knob("hyundai_kia_ev6.base_unwind_taper_right", KIA_EV6_BASE_UNWIND_TAPER_RIGHT), ) * unwind_weight * onset * cutoff) - return base_unwind_taper + (extra_scale * turn_in_boost * max(unwind_taper, 0.0)) + return (base_unwind_taper * base_turn_in_boost) + (extra_scale * turn_in_boost * max(unwind_taper, 0.0)) def get_kia_ev6_friction_threshold(v_ego: float, desired_lateral_accel: float = 0.0, desired_lateral_jerk: float = 0.0) -> float: diff --git a/selfdrive/controls/tests/test_latcontrol.py b/selfdrive/controls/tests/test_latcontrol.py index 1695e2489..2a44188fd 100644 --- a/selfdrive/controls/tests/test_latcontrol.py +++ b/selfdrive/controls/tests/test_latcontrol.py @@ -5,6 +5,7 @@ from types import SimpleNamespace from cereal import car, custom, log import openpilot.selfdrive.controls.lib.latcontrol_torque as latcontrol_torque import openpilot.selfdrive.controls.lib.latcontrol_pid as latcontrol_pid +import openpilot.selfdrive.controls.lib.latcontrol_vehicle_tunes as latcontrol_vehicle_tunes from opendbc.car.car_helpers import interfaces from opendbc.car.interfaces import CarInterfaceBase from opendbc.car.honda.values import CAR as HONDA, HondaFlags @@ -1136,6 +1137,22 @@ class TestLatControl: assert unwind_left < 1.03 assert unwind_right < 1.07 + def test_kia_ev6_jwarm_testing_ground_phase_correction(self, monkeypatch): + clear_flm_runtime_overrides() + monkeypatch.setattr(latcontrol_vehicle_tunes, "kia_ev6_lateral_testing_ground_active", lambda: False) + normal_steady = get_kia_ev6_ff_scale(0.45, 0.0, 10.0) + normal_turn_in_left = get_kia_ev6_ff_scale(0.45, 0.7, 10.0) + normal_turn_in_right = get_kia_ev6_ff_scale(-0.45, -0.7, 10.0) + normal_unwind_left = get_kia_ev6_ff_scale(0.45, -0.7, 10.0) + normal_unwind_right = get_kia_ev6_ff_scale(-0.45, 0.7, 10.0) + + monkeypatch.setattr(latcontrol_vehicle_tunes, "kia_ev6_lateral_testing_ground_active", lambda: True) + assert get_kia_ev6_ff_scale(0.45, 0.0, 10.0) == pytest.approx(normal_steady) + assert get_kia_ev6_ff_scale(0.45, 0.7, 10.0) > normal_turn_in_left + 0.08 + assert get_kia_ev6_ff_scale(-0.45, -0.7, 10.0) > normal_turn_in_right + 0.10 + assert get_kia_ev6_ff_scale(0.45, -0.7, 10.0) < normal_unwind_left - 0.07 + assert get_kia_ev6_ff_scale(-0.45, 0.7, 10.0) < normal_unwind_right - 0.08 + def test_kia_ev6_center_taper_curve(self): assert get_kia_ev6_center_taper_scale(0.0, 25.0) < get_kia_ev6_center_taper_scale(0.0, 10.0) assert get_kia_ev6_center_taper_scale(0.0, 25.0) < get_kia_ev6_center_taper_scale(0.20, 25.0) <= 1.0 diff --git a/starpilot/common/testing_grounds.py b/starpilot/common/testing_grounds.py index d664d03e8..de8f65ee1 100644 --- a/starpilot/common/testing_grounds.py +++ b/starpilot/common/testing_grounds.py @@ -69,8 +69,8 @@ TESTING_GROUNDS_SLOT_DEFINITIONS = ( }, { "id": TESTING_GROUND_6, - "name": "Kia EV6 Lateral", - "description": "Kia EV6 lateral sandbox.", + "name": "Jwarm EV6", + "description": "Jwarm's Kia EV6 lateral sandbox.", "aLabel": "A - Installed tune", "cLabel": "C - Firestar Tune", },