mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-07-19 10:22:08 +08:00
Driving Model Selector: Handle default model loading
This commit is contained in:
+1
-1
@@ -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},
|
||||
|
||||
@@ -61,6 +61,7 @@ def manager_init() -> None:
|
||||
("DevUIInfo", "0"),
|
||||
("DisableOnroadUploads", "0"),
|
||||
("DisengageLateralOnBrake", "0"),
|
||||
("DrivingModelGeneration", "0"),
|
||||
("DynamicLaneProfile", "1"),
|
||||
("EnableMads", "1"),
|
||||
("EnhancedScc", "0"),
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user