From 6d92a8e5adaa66ecd534816cdd7a3db3473f91b8 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Mon, 20 Jul 2026 16:48:50 -0500 Subject: [PATCH] no pid --- .../opendbc/car/toyota/tests/test_toyota.py | 15 +++++++++++++++ starpilot/common/starpilot_variables.py | 5 ++++- .../common/tests/test_starpilot_variables.py | 10 ++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/opendbc_repo/opendbc/car/toyota/tests/test_toyota.py b/opendbc_repo/opendbc/car/toyota/tests/test_toyota.py index 62fbf2dcc..e66ca9e44 100644 --- a/opendbc_repo/opendbc/car/toyota/tests/test_toyota.py +++ b/opendbc_repo/opendbc/car/toyota/tests/test_toyota.py @@ -39,6 +39,21 @@ class TestToyotaInterfaces: # At this time, only RAV4 2023 is expected to use LTA/angle control assert ANGLE_CONTROL_CAR == {CAR.TOYOTA_RAV4_TSS2_2023} + def test_rav4_prime_force_torque_controller(self): + fingerprint = {bus: {} for bus in range(8)} + + default_params = CarInterface.get_params( + CAR.TOYOTA_RAV4_PRIME, fingerprint, [], False, False, False, + SimpleNamespace(force_torque_controller=False, nnff=False, nnff_lite=False), + ) + forced_params = CarInterface.get_params( + CAR.TOYOTA_RAV4_PRIME, fingerprint, [], False, False, False, + SimpleNamespace(force_torque_controller=True, nnff=False, nnff_lite=False), + ) + + assert default_params.lateralTuning.which() == "pid" + assert forced_params.lateralTuning.which() == "torque" + def test_tss2_dbc(self): # We make some assumptions about TSS2 platforms, # like looking up certain signals only in this DBC diff --git a/starpilot/common/starpilot_variables.py b/starpilot/common/starpilot_variables.py index f0e7474ca..70c7a24a3 100644 --- a/starpilot/common/starpilot_variables.py +++ b/starpilot/common/starpilot_variables.py @@ -359,6 +359,9 @@ def get_starpilot_toggles(sm=messaging.SubMaster(["starpilotPlan"])): toggles.force_offroad = get_starpilot_toggles._params.get_bool("ForceOffroad") toggles.force_onroad = get_starpilot_toggles._params.get_bool("ForceOnroad") + # Controller selection happens before the first live StarPilot broadcast. Do + # not let a cached CarParams/controller type hide the persisted user request. + toggles.force_torque_controller = get_starpilot_toggles._params.get_bool("ForceTorqueController") return toggles @cache @@ -1064,7 +1067,7 @@ class StarPilotVariables: toggle.lane_change_time_max = 10.0 + (10 - pace) * 2.0 / 9.0 lateral_tuning = self.get_value("LateralTune") - toggle.force_torque_controller = self.get_value("ForceTorqueController", condition=lateral_tuning and not is_torque_car and not is_angle_car) + toggle.force_torque_controller = self.get_value("ForceTorqueController", condition=lateral_tuning and not is_angle_car) toggle.nnff = self.get_value("NNFF", condition=lateral_tuning and has_nnff and not is_angle_car) toggle.nnff_lite = self.get_value("NNFFLite", condition=not toggle.nnff and lateral_tuning and not is_angle_car) toggle.nav_desires_allowed = self.get_value("NavDesiresAllowed") diff --git a/starpilot/common/tests/test_starpilot_variables.py b/starpilot/common/tests/test_starpilot_variables.py index 5201b9fba..d3391e89f 100644 --- a/starpilot/common/tests/test_starpilot_variables.py +++ b/starpilot/common/tests/test_starpilot_variables.py @@ -36,6 +36,16 @@ def test_get_starpilot_toggles_uses_last_non_empty_broadcast(monkeypatch): assert second.vision_speed_limit_detection is True +def test_get_starpilot_toggles_uses_persisted_force_torque_request(monkeypatch): + params = SimpleNamespace(get_bool=lambda key: key == "ForceTorqueController") + monkeypatch.setattr(spv.get_starpilot_toggles, "_params", params, raising=False) + + payload = '{"force_torque_controller": false}' + toggles = spv.get_starpilot_toggles({"starpilotPlan": SimpleNamespace(starpilotToggles=payload)}) + + assert toggles.force_torque_controller is True + + class _FakeParams: def __init__(self, floats=None, ints=None, bools=None): self.floats = dict(floats or {})