Driving Model Selector: Handle default model loading

This commit is contained in:
Jason Wen
2024-02-12 20:38:27 -05:00
parent f44a04056e
commit 5ea1d4416b
7 changed files with 22 additions and 20 deletions
+1 -1
View File
@@ -237,6 +237,7 @@ std::unordered_map<std::string, uint32_t> keys = {
{"DisableOnroadUploads", PERSISTENT},
{"DisengageLateralOnBrake", PERSISTENT},
{"DrivingModelGeneration", PERSISTENT},
{"DrivingModelMetadataText", PERSISTENT},
{"DrivingModelName", PERSISTENT},
{"DrivingModelText", PERSISTENT},
{"DrivingModelUrl", PERSISTENT},
@@ -272,7 +273,6 @@ std::unordered_map<std::string, uint32_t> keys = {
{"MaxTimeOffroad", PERSISTENT},
{"NavModelText", PERSISTENT},
{"NavModelUrl", PERSISTENT},
{"ModelMetadataText", PERSISTENT},
{"NNFF", PERSISTENT},
{"NNFFCarModel", PERSISTENT},
{"OnroadScreenOff", PERSISTENT},
+1
View File
@@ -61,6 +61,7 @@ def manager_init() -> None:
("DevUIInfo", "0"),
("DisableOnroadUploads", "0"),
("DisengageLateralOnBrake", "0"),
("DrivingModelGeneration", "0"),
("DynamicLaneProfile", "1"),
("EnableMads", "1"),
("EnhancedScc", "0"),
+10 -9
View File
@@ -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, :]
@@ -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 = "";
@@ -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("<font color='yellow'>" + driving_model_name + "</font>");
dlp_settings->setEnabled(model_use_lateral_planner);
toggles["VisionCurveLaneless"]->setVisible(model_use_lateral_planner);
-1
View File
@@ -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;
+1
View File
@@ -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) {