#include "config.h" #include "json_utils.h" #include #include #include // ==================== 配置变量定义 ==================== std::string Leida_IP = "192.168.0.170"; uint16_t Leida_PORT = 2368; int Collect_Duration_S = 6; double Speed_Z = 20.0; bool Log_Flag = true; double Z_RANGE_MM = 50.0; double Y_RANGE_MM = 80.0; double Lidar_Hz = 50.0; int Rect_Width_PX = 8; double Rect_Length_Ratio = 1.5; std::string Run_Mode = "exe"; uint16_t Tcp_Port = 9601; double Floor_Height = 1600.0; double Count_Base_Tolerance = 50.0; double Count_Additional_Tolerance_Per_Level = 20.0; int Point_Dilate = 8; std::string Z_Interpolate_Mode = "none"; int Log_Retain_Days = 15; int Tuo_Wei = 2; int Qian_Chong = 2; int Yuan_Duan = 1; bool Jin_Duan = true; std::vector> Filter_Polygon = { {-650, 0}, {-650, 670}, {650, 670}, {650, 0} }; int Filter_Poly_N = (int)Filter_Polygon.size(); // ==================== 配置加载(JSON + // 注释行) ==================== void load_config(const std::string& path) { std::ifstream fin(path); if (!fin.is_open()) { std::cerr << "[WARN] 未找到配置文件: " << path << std::endl; exit(-1); } // 1. 剔除行首(忽略空白)以 // 开头的注释行,其余拼接为 JSON 文本 std::ostringstream json_oss; std::string line; while (std::getline(fin, line)) { size_t b = line.find_first_not_of(" \t\r\n"); if (b != std::string::npos && line.compare(b, 2, "//") == 0) continue; // 整行注释 json_oss << line << "\n"; } fin.close(); std::string text = json_oss.str(); std::string s; double d; bool bv; std::vector> poly; if (json_get_string(text, "Leida_IP", s)) Leida_IP = s; if (json_get_number(text, "Leida_Port", d)) Leida_PORT = (uint16_t)d; if (json_get_number(text, "Collect_Duration_S", d)) Collect_Duration_S = (int)d; if (json_get_number(text, "Speed_Z", d)) Speed_Z = d; if (json_get_bool(text, "Log_Flag", bv)) Log_Flag = bv; if (json_get_number(text, "Z_Range_MM", d)) Z_RANGE_MM = d; if (json_get_number(text, "Y_Range_MM", d)) Y_RANGE_MM = d; if (json_get_number(text, "Lidar_Hz", d)) Lidar_Hz = d; if (json_get_number(text, "Rect_Width_PX", d)) Rect_Width_PX = (int)d; if (json_get_number(text, "Rect_Length_Ratio", d)) Rect_Length_Ratio = d; if (json_get_string(text, "Run_Mode", s)) Run_Mode = s; if (json_get_number(text, "Tcp_Port", d)) Tcp_Port = (uint16_t)d; if (json_get_number(text, "Floor_Height", d)) Floor_Height = d; if (json_get_number(text, "Count_Base_Tolerance", d)) { Count_Base_Tolerance = d; if (Count_Base_Tolerance < 0) Count_Base_Tolerance = 0; } if (json_get_number(text, "Count_Additional_Tolerance_Per_Level", d)) { Count_Additional_Tolerance_Per_Level = d; if (Count_Additional_Tolerance_Per_Level < 0) Count_Additional_Tolerance_Per_Level = 0; } if (json_get_number(text, "Point_Dilate", d)) { Point_Dilate = (int)d; if (Point_Dilate < 1) Point_Dilate = 1; if (Point_Dilate > 64) Point_Dilate = 64; } if (json_get_string(text, "Z_Interpolate_Mode", s)) { if (s == "CopyTranslation" || s == "AngleBucketInterpolation") Z_Interpolate_Mode = s; else Z_Interpolate_Mode = "none"; } if (json_get_number(text, "Log_Retain_Days", d)) { Log_Retain_Days = (int)d; if (Log_Retain_Days < 1) Log_Retain_Days = 1; } if (json_get_number(text, "Tuo_Wei", d)) Tuo_Wei = (int)d; if (json_get_number(text, "Qian_Chong", d)) Qian_Chong = (int)d; if (json_get_number(text, "Yuan_Duan", d)) Yuan_Duan = (int)d; if (json_get_bool(text, "Jin_Duan", bv)) Jin_Duan = bv; if (json_get_point_array(text, "Filter_Polygon", poly) >= 3) { Filter_Polygon = poly; Filter_Poly_N = (int)poly.size(); } std::cout << "========== 配置已加载 ==========" << std::endl; std::cout << "雷达: " << Leida_IP << ":" << Leida_PORT << " 帧率: " << Lidar_Hz << "Hz" << std::endl; std::cout << "扫描默认时长: " << Collect_Duration_S << "s" << " Z速度: " << Speed_Z << "cm/s(0=时间)" << " 日志保留: " << Log_Retain_Days << "天" << std::endl; std::cout << "运行模式: " << Run_Mode << (Run_Mode == "tcp" ? " (端口 " + std::to_string(Tcp_Port) + ")" : "") << std::endl; std::cout << "分层冗余: 基准" << Count_Base_Tolerance << " + 每层" << Count_Additional_Tolerance_Per_Level << " 膨胀: " << Point_Dilate << " 插值模式: " << Z_Interpolate_Mode << std::endl; std::cout << "过滤多边形(" << Filter_Poly_N << "点):"; for (const auto& p : Filter_Polygon) std::cout << " (" << p.first << "," << p.second << ")"; std::cout << std::endl; std::cout << "================================" << std::endl; }