diff --git a/openpilot/common/libparams_c.so b/openpilot/common/libparams_c.so index f866d07d12..686013fab6 100755 Binary files a/openpilot/common/libparams_c.so and b/openpilot/common/libparams_c.so differ diff --git a/openpilot/common/params_keys.h b/openpilot/common/params_keys.h index c8e608028f..8cbbd95b9f 100644 --- a/openpilot/common/params_keys.h +++ b/openpilot/common/params_keys.h @@ -123,7 +123,7 @@ inline static std::unordered_map keys = { {"TryChubbsLaneCentering", {PERSISTENT, BOOL, "0"}}, {"LaneCenteringPauseOnSignal", {PERSISTENT, BOOL, "1"}}, {"LaneCenterOffset", {PERSISTENT, FLOAT, "0.0"}}, - {"LaneCenteringE2EAuthority", {PERSISTENT, FLOAT, "1.0"}}, + {"LaneCenteringE2EAuthority", {PERSISTENT, FLOAT, "0.5"}}, {"LaneCenteringStrength", {PERSISTENT, FLOAT, "1.5"}}, {"StarPortEnabled", {PERSISTENT | DONT_LOG, BOOL, "0"}}, {"AdvancedLateralTune", {PERSISTENT, BOOL}}, diff --git a/openpilot/starpilot/lateral/lane_centering.py b/openpilot/starpilot/lateral/lane_centering.py index 2dea21349c..45e2285a07 100644 --- a/openpilot/starpilot/lateral/lane_centering.py +++ b/openpilot/starpilot/lateral/lane_centering.py @@ -54,7 +54,7 @@ class ControlMode(StrEnum): class LaneCenteringSettings: enabled: bool = False offset_m: float = 0.0 - e2e_authority: float = 1.0 + e2e_authority: float = 0.5 pause_on_signal: bool = True strength: float = STRENGTH_BASELINE diff --git a/openpilot/starpilot/lateral/lane_runtime.py b/openpilot/starpilot/lateral/lane_runtime.py index 1de58cf845..5bd4752778 100644 --- a/openpilot/starpilot/lateral/lane_runtime.py +++ b/openpilot/starpilot/lateral/lane_runtime.py @@ -29,7 +29,7 @@ def read_settings(params) -> LaneCenteringSettings: enabled = boolean('LaneCentering', b'0') pause = boolean('LaneCenteringPauseOnSignal', b'1') offset = float(raw('LaneCenterOffset', b'0.0')) - authority = float(raw('LaneCenteringE2EAuthority', b'1.0')) + authority = float(raw('LaneCenteringE2EAuthority', b'0.5')) try: strength = float(raw('LaneCenteringStrength', str(STRENGTH_BASELINE).encode())) except UnknownKeyName: diff --git a/openpilot/starpilot/lateral/tests/test_lane_runtime.py b/openpilot/starpilot/lateral/tests/test_lane_runtime.py index a6cd5855f3..20da3d7b1f 100644 --- a/openpilot/starpilot/lateral/tests/test_lane_runtime.py +++ b/openpilot/starpilot/lateral/tests/test_lane_runtime.py @@ -988,6 +988,28 @@ class LaneRuntimeTests(unittest.TestCase): self.assertEqual(predicted.lane_centering_applied, 0.) self.assertEqual(predicted.CP.to_dict(), ordinary.CP.to_dict()) + def test_half_breakaway_defaults_reset_and_preserve_saved_preferences(self): + from openpilot.starpilot.lateral.lane_centering import LaneCenteringSettings + from openpilot.starpilot.ui.controller_feature import SETUP_DEFAULTS + with OpenpilotPrefix(): + params = Params() + key = 'LaneCenteringE2EAuthority' + self.assertIsNone(params.get(key)) + self.assertEqual(params.get_default_value(key), .5) + self.assertEqual(LaneCenteringSettings().e2e_authority, .5) + self.assertEqual(read_settings(params).e2e_authority, .5) + self.assertEqual(SETUP_DEFAULTS[key], b'0.5') + self.assertIsNone(params.get(key)) + for value in (0., .3, 1.): + params.put(key, value, block=True) + before = Path(params.get_param_path(key)).read_bytes() + self.assertEqual(read_settings(params).e2e_authority, value) + self.assertEqual(Path(params.get_param_path(key)).read_bytes(), before) + self.assertEqual(params.get_default_value(key), .5) + params.remove(key) + self.assertEqual(read_settings(params).e2e_authority, .5) + self.assertIsNone(params.get(key)) + def test_saved_settings_bounds_and_corruption(self): with OpenpilotPrefix(): params = Params() diff --git a/openpilot/starpilot/ui/controller_feature.py b/openpilot/starpilot/ui/controller_feature.py index 040751f9c5..20ab91ec08 100644 --- a/openpilot/starpilot/ui/controller_feature.py +++ b/openpilot/starpilot/ui/controller_feature.py @@ -27,7 +27,7 @@ TUNING_GUIDANCE = ("StarPilot's torque controller can provide higher low-speed s SETUP_ACTION = 'torque_prepare_firestar' SETUP_QUESTION = 'Change tuning preparation? Turning it off restores your previous steering preferences.' SETUP_DEFAULTS = {'TurnAssist': b'0', LEARNING_OFF_KEY: b'1', 'LaneCentering': b'0', - 'LaneCenterOffset': b'0.0', 'LaneCenteringE2EAuthority': b'1.0', 'LaneCenteringPauseOnSignal': b'1'} + 'LaneCenterOffset': b'0.0', 'LaneCenteringE2EAuthority': b'0.5', 'LaneCenteringPauseOnSignal': b'1'} SETUP_LIMITS = {**dict.fromkeys(SETUP_DEFAULTS, 128), LEARNING_PREFERENCES_KEY: LEARNING_PREFERENCES_LIMIT, LANE_CHANGE_KEY: LANE_CHANGE_LIMIT, DOCUMENT_KEY: MAX_DOCUMENT_BYTES} diff --git a/openpilot/starpilot/ui/tests/test_feature_settings_owner.py b/openpilot/starpilot/ui/tests/test_feature_settings_owner.py index 4e910decc3..cac28048c6 100644 --- a/openpilot/starpilot/ui/tests/test_feature_settings_owner.py +++ b/openpilot/starpilot/ui/tests/test_feature_settings_owner.py @@ -519,9 +519,15 @@ class FeatureSettingsOwnerTests(unittest.TestCase): self.assertTrue(self.owner.apply(required_change(parent))) self.assertTrue(self.params.get_bool('SLCConfirmation')) authority = self._row("lane", "LaneCenteringE2EAuthority") - self.assertEqual(authority.value, "100.0") + self.assertEqual(authority.value, "50.0") self.assertTrue(self.owner.apply(required_change(authority, -1))) - self.assertAlmostEqual(self.params.get("LaneCenteringE2EAuthority"), 0.95) + self.assertAlmostEqual(self.params.get("LaneCenteringE2EAuthority"), 0.45) + authority = self._row("lane", "LaneCenteringE2EAuthority") + self.assertEqual(authority.default_value, "50.0") + reset = row_default(authority) + assert reset is not None + self.assertTrue(self.owner.apply(reset)) + self.assertEqual(self.params.get("LaneCenteringE2EAuthority"), 0.5) offset = self._row("slc", "slc:offset:1") self.assertTrue(offset.available) self.assertFalse(self.owner.apply(FeatureSettingsRequest("slc:offset:1", offset.source, "5", vehicle_fingerprint=offset.vehicle_fingerprint))) diff --git a/prebuilt.json b/prebuilt.json index 50d4489222..e03c26d2e0 100644 --- a/prebuilt.json +++ b/prebuilt.json @@ -1 +1 @@ -{"protected_inventory_sha256": "ff068e317667b963790c7cc53ad458af1adeeff7e991e4c16c0fd11bb6840bff", "schema_version": 1} +{"protected_inventory_sha256": "83f3f3f137084506eb99bd5c1210e8560ebf88d839c673f6db4d796995a1c9d5", "schema_version": 1}