From 5ea1d4416b34e28abf2acafe40bc6809bb70f985 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Mon, 12 Feb 2024 20:38:27 -0500 Subject: [PATCH] Driving Model Selector: Handle default model loading --- common/params.cc | 2 +- selfdrive/manager/manager.py | 1 + selfdrive/modeld/modeld.py | 19 ++++++++++--------- .../sunnypilot/software_settings_sp.cc | 16 ++++++++-------- .../offroad/sunnypilot/sunnypilot_settings.cc | 2 +- selfdrive/ui/qt/onroad_settings.cc | 1 - selfdrive/ui/ui.cc | 1 + 7 files changed, 22 insertions(+), 20 deletions(-) diff --git a/common/params.cc b/common/params.cc index 85447ab22b..354f6b400f 100644 --- a/common/params.cc +++ b/common/params.cc @@ -237,6 +237,7 @@ std::unordered_map keys = { {"DisableOnroadUploads", PERSISTENT}, {"DisengageLateralOnBrake", PERSISTENT}, {"DrivingModelGeneration", PERSISTENT}, + {"DrivingModelMetadataText", PERSISTENT}, {"DrivingModelName", PERSISTENT}, {"DrivingModelText", PERSISTENT}, {"DrivingModelUrl", PERSISTENT}, @@ -272,7 +273,6 @@ std::unordered_map keys = { {"MaxTimeOffroad", PERSISTENT}, {"NavModelText", PERSISTENT}, {"NavModelUrl", PERSISTENT}, - {"ModelMetadataText", PERSISTENT}, {"NNFF", PERSISTENT}, {"NNFFCarModel", PERSISTENT}, {"OnroadScreenOff", PERSISTENT}, diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index 37d7282fed..cd7e14a8e3 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -61,6 +61,7 @@ def manager_init() -> None: ("DevUIInfo", "0"), ("DisableOnroadUploads", "0"), ("DisengageLateralOnBrake", "0"), + ("DrivingModelGeneration", "0"), ("DynamicLaneProfile", "1"), ("EnableMads", "1"), ("EnhancedScc", "0"), diff --git a/selfdrive/modeld/modeld.py b/selfdrive/modeld/modeld.py index 846bf22e9e..9a1b7d880c 100755 --- a/selfdrive/modeld/modeld.py +++ b/selfdrive/modeld/modeld.py @@ -68,7 +68,7 @@ class ModelState: 'lateral_control_params': np.zeros(ModelConstants.LATERAL_CONTROL_PARAMS_LEN, dtype=np.float32), 'prev_desired_curv': np.zeros(ModelConstants.PREV_DESIRED_CURV_LEN * (ModelConstants.HISTORY_BUFFER_LEN+1), dtype=np.float32), } - if self.custom_model: + if self.custom_model and self.model_gen != 0: if self.model_gen == 1: _inputs = { 'lat_planner_state': np.zeros(ModelConstants.LAT_PLANNER_STATE_LEN, dtype=np.float32), @@ -88,10 +88,10 @@ class ModelState: 'features_buffer': np.zeros(ModelConstants.HISTORY_BUFFER_LEN * ModelConstants.FEATURE_LEN, dtype=np.float32), } - if self.param_s.get_bool("CustomDrivingModel"): + if self.custom_model and self.model_gen != 0: _model_name = self.param_s.get("DrivingModelText", encoding="utf8") _model_paths = {ModelRunner.THNEED: f"{CUSTOM_MODEL_PATH}/supercombo-{_model_name}.thneed"} - _metadata_name = self.param_s.get("ModelMetadataText", encoding="utf8") + _metadata_name = self.param_s.get("DrivingModelMetadataText", encoding="utf8") _metadata_path = f"{CUSTOM_MODEL_PATH}/supercombo_metadata_{_metadata_name}.pkl" if _model_name else METADATA_PATH else: _model_paths = MODEL_PATHS @@ -144,12 +144,13 @@ class ModelState: self.inputs['features_buffer'][:-ModelConstants.FEATURE_LEN] = self.inputs['features_buffer'][ModelConstants.FEATURE_LEN:] self.inputs['features_buffer'][-ModelConstants.FEATURE_LEN:] = outputs['hidden_state'][0, :] - if self.custom_model and self.model_gen == 1: - self.inputs['lat_planner_state'][2] = interp(DT_MDL, ModelConstants.T_IDXS, outputs['lat_planner_solution'][0, :, 2]) - self.inputs['lat_planner_state'][3] = interp(DT_MDL, ModelConstants.T_IDXS, outputs['lat_planner_solution'][0, :, 3]) - elif self.custom_model and self.model_gen == 2: - self.inputs['prev_desired_curvs'][:-1] = self.inputs['prev_desired_curvs'][1:] - self.inputs['prev_desired_curvs'][-1] = outputs['desired_curvature'][0, 0] + if self.custom_model and self.model_gen != 0: + if self.model_gen == 1: + self.inputs['lat_planner_state'][2] = interp(DT_MDL, ModelConstants.T_IDXS, outputs['lat_planner_solution'][0, :, 2]) + self.inputs['lat_planner_state'][3] = interp(DT_MDL, ModelConstants.T_IDXS, outputs['lat_planner_solution'][0, :, 3]) + elif self.model_gen == 2: + self.inputs['prev_desired_curvs'][:-1] = self.inputs['prev_desired_curvs'][1:] + self.inputs['prev_desired_curvs'][-1] = outputs['desired_curvature'][0, 0] else: self.inputs['prev_desired_curv'][:-ModelConstants.PREV_DESIRED_CURV_LEN] = self.inputs['prev_desired_curv'][ModelConstants.PREV_DESIRED_CURV_LEN:] self.inputs['prev_desired_curv'][-ModelConstants.PREV_DESIRED_CURV_LEN:] = outputs['desired_curvature'][0, :] diff --git a/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.cc b/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.cc index c822bf1af3..616bee253d 100644 --- a/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.cc +++ b/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.cc @@ -17,17 +17,17 @@ SoftwarePanelSP::SoftwarePanelSP(QWidget *parent) : SoftwarePanel(parent) { connect(&metadata_fetcher, &ModelsFetcher::downloadProgress, this, [this](const double progress) { handleDownloadProgress(progress, "metadata"); }); - + connect(&models_fetcher, &ModelsFetcher::downloadComplete, this, [this](const QByteArray&data, bool fromCache = false) { modelFromCache = fromCache; updateLabels(); }); - + connect(&nav_models_fetcher, &ModelsFetcher::downloadComplete, this, [this](const QByteArray&data, bool fromCache = false) { navModelFromCache = fromCache; updateLabels(); }); - + connect(&metadata_fetcher, &ModelsFetcher::downloadComplete, this, [this](const QByteArray&data, bool fromCache = false) { metadataFromCache = fromCache; updateLabels(); @@ -59,7 +59,7 @@ void SoftwarePanelSP::handleDownloadProgress(const double progress, const QStrin } else if (modelType == "metadata") { metadataDownloadProgress = progress; } - + HandleModelDownloadProgressReport(); } @@ -90,7 +90,7 @@ QString SoftwarePanelSP::GetMetadataName() { } // Return a default name or an empty string if there's no metadata selected - return QString::fromStdString(params.get("ModelMetadataText")); + return QString::fromStdString(params.get("DrivingModelMetadataText")); } void SoftwarePanelSP::HandleModelDownloadProgressReport() { @@ -166,7 +166,7 @@ void SoftwarePanelSP::HandleModelDownloadProgressReport() { } if (!isDownloadingMetadata() && metadataDownloadProgress.has_value()) { - params.put("ModelMetadataText", selectedMetadataToDownload->fullNameMetadata.toStdString()); + params.put("DrivingModelMetadataText", selectedMetadataToDownload->fullNameMetadata.toStdString()); LOGD("Resetting selectedMetadataToDownload"); selectedMetadataToDownload.reset(); metadataDownloadProgress.reset(); @@ -238,7 +238,7 @@ void SoftwarePanelSP::handleCurrentModelLblBtnClicked() { // Disable select button until download completes currentModelLblBtn->setEnabled(false); - showResetParamsDialog(); + showResetParamsDialog(); } updateLabels(); } @@ -255,7 +255,7 @@ void SoftwarePanelSP::updateLabels() { if (!isVisible()) { return; } - + if(!model_download_failed) failed_downloads_description = ""; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.cc index 7cf1cd2f8c..ef95855722 100644 --- a/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.cc +++ b/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.cc @@ -438,7 +438,7 @@ void SunnypilotPanel::updateToggles() { bool custom_driving_model = params.getBool("CustomDrivingModel"); auto driving_model_gen = QString::fromStdString(params.get("DrivingModelGeneration")); bool model_use_lateral_planner = custom_driving_model && driving_model_gen == "1"; - auto driving_model_name = custom_driving_model ? QString::fromStdString(params.get("DrivingModelName")) : CURRENT_MODEL; + auto driving_model_name = custom_driving_model && driving_model_gen != "0" ? QString::fromStdString(params.get("DrivingModelName")) : CURRENT_MODEL; QString driving_model_text = QString("" + driving_model_name + ""); dlp_settings->setEnabled(model_use_lateral_planner); toggles["VisionCurveLaneless"]->setVisible(model_use_lateral_planner); diff --git a/selfdrive/ui/qt/onroad_settings.cc b/selfdrive/ui/qt/onroad_settings.cc index e716030c45..e33e769f7e 100644 --- a/selfdrive/ui/qt/onroad_settings.cc +++ b/selfdrive/ui/qt/onroad_settings.cc @@ -185,7 +185,6 @@ void OnroadSettings::refresh() { scene.dynamic_experimental_control = params.getBool("DynamicExperimentalControl"); scene.speed_limit_control_enabled = params.getBool("EnableSlc"); scene.speed_limit_control_policy = std::atoi(params.get("SpeedLimitControlPolicy").c_str()); - scene.driving_model_gen = std::atoi(params.get("DrivingModelGeneration").c_str()); if (!isVisible()) return; diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 79f8880697..b5f1d67fd9 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -263,6 +263,7 @@ void ui_update_params(UIState *s) { s->scene.speed_limit_warning_flash = params.getBool("SpeedLimitWarningFlash"); s->scene.speed_limit_warning_type = std::atoi(params.get("SpeedLimitWarningType").c_str()); s->scene.speed_limit_warning_value_offset = std::atoi(params.get("SpeedLimitWarningValueOffset").c_str()); + s->scene.driving_model_gen = std::atoi(params.get("DrivingModelGeneration").c_str()); // Handle Onroad Screen Off params if (s->scene.onroadScreenOff > 0) {