Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion core/calibration/loader/DeviceCalibrationJson.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ std::optional<DeviceCalibration> deviceCalibrationFromJson(const std::string& ca
deviceSubtype = json["DeviceClassInfo"]["BuildVersion"];
}

// Create a Camera Config builder to parse in camera config information
// Create a Camera Config builder to parse in camera default config information
CameraConfigBuilder cameraConfigBuilder(deviceVersion);

std::map<std::string, CameraCalibration> cameraCalibs;
Expand Down Expand Up @@ -206,6 +206,15 @@ nlohmann::json cameraCalibrationToJson(const CameraCalibration& camCalib) {
camJson["TimeOffsetSec_Device_Camera"] = camCalib.getTimeOffsetSecDeviceCamera();
}

// Store config, so we can correctly load an already configured camera without re-applying
auto& jsonConfig = camJson["ConfigData"];
jsonConfig["ImageWidth"] = camCalib.getImageSize().x();
jsonConfig["ImageHeight"] = camCalib.getImageSize().y();
jsonConfig["MaxSolidAngle"] = camCalib.getMaxSolidAngle();
if(camCalib.getValidRadius().has_value()) {
jsonConfig["ValidRadius"] = *camCalib.getValidRadius();
}

return camJson;
}

Expand Down
26 changes: 21 additions & 5 deletions core/calibration/loader/SensorCalibrationJson.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,27 @@ CameraCalibration parseCameraCalibrationFromJson(
? static_cast<double>(json["TimeOffsetSec_Device_Camera"])
: 0.0;

// Obtain camera config from builder
const auto maybeConfig = configBuilder.getCameraConfigData(label);
if (!maybeConfig.has_value()) {
throw std::runtime_error(
fmt::format("No config found for camera {} from Config builder", label));
// load saved config, if available - if not, then defaults will be loaded
std::optional<CameraConfigData> maybeConfig;
if(json.contains("ConfigData")) {
auto jsonConfig = json["ConfigData"];
maybeConfig = CameraConfigData {
.imageWidth = jsonConfig["ImageWidth"],
.imageHeight = jsonConfig["ImageHeight"],
.maxSolidAngle = jsonConfig["MaxSolidAngle"],
};
if(jsonConfig.contains("ValidRadius")) {
maybeConfig->maybeValidRadius = static_cast<double>(jsonConfig["ValidRadius"]);
}
}

// Obtain default camera config from builder
if(!maybeConfig.has_value()) {
maybeConfig = configBuilder.getCameraConfigData(label);
if (!maybeConfig.has_value()) {
throw std::runtime_error(
fmt::format("No config found for camera {} from Config builder", label));
}
}

CameraCalibration camCalib(
Expand Down
Loading