From e9d7279bf7fc42a99c8465df1f9db1bd84464005 Mon Sep 17 00:00:00 2001 From: Freeman Helmuth Date: Fri, 9 May 2025 22:41:42 -0400 Subject: [PATCH] Use substitute.toml for fallback NNLC model & use 20-22 Palisade/Telluride NNLC model for 2023-2024 Palisade (#509) * Use 2020-2022 Palisade/Telluride model for 2023-2023 Palisade/Telluride * Fix model name on HYUNDAI PALISADE 2020 * Update interfaces.py - use comma substitute.toml * Update substitute.toml * Update interfaces.py - fix indentation error * Update substitute.toml --- selfdrive/car/interfaces.py | 33 +++++++++++++++-------- selfdrive/car/torque_data/substitute.toml | 1 + 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 0ef758cafe..d5a0b982c7 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -167,19 +167,30 @@ def get_nn_model_path(_car, eps_firmware) -> tuple[str | None, float]: _max_similarity = similarity_score _model_path = os.path.join(TORQUE_NN_MODEL_PATH, f) return _model_path, _max_similarity - - if len(eps_firmware) > 3: - eps_firmware = eps_firmware.replace("\\", "") - check_model = f"{_car} {eps_firmware}" - else: - check_model = _car - model_path, max_similarity = check_nn_path(check_model) - if _car not in model_path or 0.0 <= max_similarity < 0.9: - check_model = _car + + def check_candidate(_car, eps_firmware): + if len(eps_firmware) > 3: + eps_firmware = eps_firmware.replace("\\", "") + check_model = f"{_car} {eps_firmware}" + else: + check_model = _car model_path, max_similarity = check_nn_path(check_model) if _car not in model_path or 0.0 <= max_similarity < 0.9: - model_path = None - return model_path, max_similarity + check_model = _car + model_path, max_similarity = check_nn_path(check_model) + if _car not in model_path or 0.0 <= max_similarity < 0.9: + model_path = None + return model_path, max_similarity + + with open(TORQUE_SUBSTITUTE_PATH, 'rb') as f: + sub = tomllib.load(f) + sub_candidate = sub.get(_car, _car) + + for candidate in [_car, sub_candidate]: + model, similarity_score = check_candidate(candidate, eps_firmware) + if model is not None: + return model, similarity_score + return None, 0.0 def get_nn_model(_car, eps_firmware) -> tuple[FluxModel | None, float]: diff --git a/selfdrive/car/torque_data/substitute.toml b/selfdrive/car/torque_data/substitute.toml index f0787247bb..0d409d72f4 100644 --- a/selfdrive/car/torque_data/substitute.toml +++ b/selfdrive/car/torque_data/substitute.toml @@ -37,6 +37,7 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "HYUNDAI ELANTRA HYBRID 2021" = "HYUNDAI SONATA 2020" "HYUNDAI TUCSON 2019" = "HYUNDAI SANTA FE 2019" "HYUNDAI SANTA FE 2022" = "HYUNDAI SANTA FE HYBRID 2022" +"HYUNDAI_PALISADE_2023" = "HYUNDAI PALISADE 2020" "KIA K5 HYBRID 2020" = "KIA K5 2021" "KIA STINGER 2022" = "KIA STINGER GT2 2018" "GENESIS G90 2017" = "GENESIS G70 2018"