projector version
This commit is contained in:
@@ -90,6 +90,21 @@ struct ProcessingLiveConfig {
|
||||
float gpr_visible_x_max_m = 2.0F;
|
||||
float gpr_visible_z_min_m = 0.0F;
|
||||
float gpr_visible_z_max_m = 14.0F;
|
||||
// 3D SAR (sar3d processor) parameters; defaults mirror VNA_AlGo gpr_core.
|
||||
// Frequency band, depth gate, antenna selection and motion (speed, look
|
||||
// angle, direction, phase correction) are shared with the gpr_* fields.
|
||||
std::uint32_t sar3d_frame_radius = 6U;
|
||||
float sar3d_edge_frame_weight = 0.75F;
|
||||
float sar3d_pitch_deg = 6.0F;
|
||||
float sar3d_center_depth_m = 5.6F;
|
||||
float sar3d_half_width_x_m = 1.8F;
|
||||
float sar3d_half_width_y_m = 1.0F;
|
||||
float sar3d_half_width_z_m = 1.8F;
|
||||
std::uint32_t sar3d_grid_nx = 150U;
|
||||
std::uint32_t sar3d_grid_ny = 120U;
|
||||
std::uint32_t sar3d_grid_nz = 160U;
|
||||
bool sar3d_use_compensation = true;
|
||||
bool sar3d_normalize_pairs = true;
|
||||
// When true, the data_processor ignores socket-supplied `vlc` updates and
|
||||
// keeps using `gpr_speed_m_s` from this file. Mirrored from the GUI's
|
||||
// "ignore socket speed" checkbox.
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "bscan_processor.hpp"
|
||||
#include "gpr_processor.hpp"
|
||||
#include "passthrough_processor.hpp"
|
||||
#include "sar3d_processor.hpp"
|
||||
|
||||
namespace radar::processing {
|
||||
namespace {
|
||||
@@ -280,6 +281,10 @@ auto create_default_processors() -> ProcessorRegistry {
|
||||
auto processor = std::make_unique<LegacyGprProcessor>();
|
||||
processors.emplace(processor->name(), std::move(processor));
|
||||
}
|
||||
{
|
||||
auto processor = std::make_unique<Sar3dProcessor>();
|
||||
processors.emplace(processor->name(), std::move(processor));
|
||||
}
|
||||
return processors;
|
||||
}
|
||||
|
||||
|
||||
@@ -386,6 +386,45 @@ void apply_legacy_gpr_algorithm_alias(ProcessingLiveConfig& config, const std::s
|
||||
config.gpr_object_approach_min_frames =
|
||||
parse_u32_number(*found, "processing.gpr_object_approach_min_frames");
|
||||
}
|
||||
if (const auto found = root.find("sar3d_frame_radius"); found != root.end()) {
|
||||
config.sar3d_frame_radius = parse_u32_number(*found, "processing.sar3d_frame_radius");
|
||||
}
|
||||
for (const auto& [key, target] : {
|
||||
std::pair{"sar3d_edge_frame_weight", &config.sar3d_edge_frame_weight},
|
||||
std::pair{"sar3d_pitch_deg", &config.sar3d_pitch_deg},
|
||||
std::pair{"sar3d_center_depth_m", &config.sar3d_center_depth_m},
|
||||
std::pair{"sar3d_half_width_x_m", &config.sar3d_half_width_x_m},
|
||||
std::pair{"sar3d_half_width_y_m", &config.sar3d_half_width_y_m},
|
||||
std::pair{"sar3d_half_width_z_m", &config.sar3d_half_width_z_m},
|
||||
}) {
|
||||
if (const auto found = root.find(key); found != root.end()) {
|
||||
if (!found->is_number()) {
|
||||
throw std::runtime_error(std::string("processing.") + key + " must be number");
|
||||
}
|
||||
*target = static_cast<float>(found->get<double>());
|
||||
}
|
||||
}
|
||||
for (const auto& [key, target] : {
|
||||
std::pair{"sar3d_grid_nx", &config.sar3d_grid_nx},
|
||||
std::pair{"sar3d_grid_ny", &config.sar3d_grid_ny},
|
||||
std::pair{"sar3d_grid_nz", &config.sar3d_grid_nz},
|
||||
}) {
|
||||
if (const auto found = root.find(key); found != root.end()) {
|
||||
*target = parse_u32_number(*found, std::string("processing.") + key);
|
||||
}
|
||||
}
|
||||
if (const auto found = root.find("sar3d_use_compensation"); found != root.end()) {
|
||||
if (!found->is_boolean()) {
|
||||
throw std::runtime_error("processing.sar3d_use_compensation must be bool");
|
||||
}
|
||||
config.sar3d_use_compensation = found->get<bool>();
|
||||
}
|
||||
if (const auto found = root.find("sar3d_normalize_pairs"); found != root.end()) {
|
||||
if (!found->is_boolean()) {
|
||||
throw std::runtime_error("processing.sar3d_normalize_pairs must be bool");
|
||||
}
|
||||
config.sar3d_normalize_pairs = found->get<bool>();
|
||||
}
|
||||
if (const auto found = root.find("ignore_socket_speed"); found != root.end()) {
|
||||
if (!found->is_boolean()) {
|
||||
throw std::runtime_error("processing.ignore_socket_speed must be bool");
|
||||
|
||||
Reference in New Issue
Block a user