|
|
// 全局配置文件(根级 map 结构)
|
|
|
// 注:注释须整行且以 // 开头;键值保持全局可读(不同雷达里同名 key 不要重复语义)
|
|
|
// 结构:
|
|
|
// "server" / "log" → 进程级全局配置
|
|
|
// 其它一级键 → 一个"雷达标识"(通信时用 "radar":"xxx" 指定操作哪台雷达),
|
|
|
// 每个标识下是一份完整参数:radar / scan / detect / count / filter
|
|
|
{
|
|
|
// ==================== server: 运行模式(全局) ====================
|
|
|
"server": {
|
|
|
//运行模式 exe=直接检测 / tcp=服务端模式 / http=HTTP服务端
|
|
|
"mode": "http",
|
|
|
//TCP/HTTP服务端监听端口
|
|
|
"port": 9601
|
|
|
},
|
|
|
|
|
|
// ==================== log: 日志(全局) ====================
|
|
|
"log": {
|
|
|
//日志打印使能 true/false
|
|
|
"enable": true,
|
|
|
//日志(任务目录)保留天数, 超出自动删除更早的目录
|
|
|
"retain_days": 1,
|
|
|
//每日日志定时清理时刻, 格式 "HH:MM:SS"
|
|
|
"clean_time": "06:01:30"
|
|
|
},
|
|
|
|
|
|
// ==================== radar1: 第1台雷达(完整参数) ====================
|
|
|
"radar1": {
|
|
|
// ---- radar: 雷达连接与雷达内置滤波 ----
|
|
|
"10.43.26.114": {
|
|
|
//雷达IP
|
|
|
"ip": "10.43.26.114",
|
|
|
//雷达数据端口
|
|
|
"port": 2368,
|
|
|
//雷达帧率 Hz (矩形长 = 速度/帧率)
|
|
|
"hz": 50,
|
|
|
//拖尾滤波 0=关, 1=弱, 2=中, 3=强
|
|
|
"tail_filter": 3,
|
|
|
//前冲滤波 0=关, 1=弱, 2=中, 3=强
|
|
|
"front_filter": 3,
|
|
|
//远端高反滤波 0=关, 1=弱, 2=强
|
|
|
"far_hr_filter": 2,
|
|
|
//近端高反识别 true开,false关
|
|
|
"near_hr_filter": true
|
|
|
},
|
|
|
|
|
|
// ---- scan: 扫描采集与走行 ----
|
|
|
"scan": {
|
|
|
//z轴速度模式: uniformSpeed=匀速(用下方z_speed), configuration=变速(用config/speed.txt)
|
|
|
"z_speed_type": "uniformSpeed",
|
|
|
//z轴速度 厘米/秒 (0=z轴为时间ms, >0=z轴为移动距离mm)
|
|
|
"z_speed": 20,
|
|
|
//exe模式/默认扫描时长 秒 (tcp/http 模式可被请求中的 scanTime 覆盖)
|
|
|
"collect_duration_s": 6
|
|
|
},
|
|
|
|
|
|
// ---- detect: 截面分析 ----
|
|
|
"detect": {
|
|
|
//Z截面区间长度 毫米
|
|
|
"z_range_mm": 50,
|
|
|
//Y截面区间长度 毫米
|
|
|
"y_range_mm": 80,
|
|
|
//截面矩形宽度 像素
|
|
|
"rect_width_px": 12,
|
|
|
//截面矩形长度倍率 (矩形长=速度/帧率×倍率)
|
|
|
"rect_length_ratio": 1.5
|
|
|
},
|
|
|
|
|
|
// ---- count: 分层计数 ----
|
|
|
"count": {
|
|
|
//地板高度 毫米 (物品高度 = floor_height - Y轴, count计数用)
|
|
|
"floor_height": 1600,
|
|
|
//count分层冗余 初始冗余 毫米 (第1层容差)上下各base_tolerance
|
|
|
"base_tolerance": 40,
|
|
|
//count分层冗余 每层增加 毫米
|
|
|
"per_level_tolerance": 1,
|
|
|
//count画layer图: 每个点膨胀像素 (point_dilate×point_dilate)
|
|
|
"point_dilate": 8,
|
|
|
//count z轴空隙插值模式: none / CopyTranslation / AngleBucketInterpolation
|
|
|
"z_interpolate_mode": "CopyTranslation",
|
|
|
//count层数算法:
|
|
|
// LevelTolerance = level=round(高度/层高), 判定 |高度-level×层高| <= 容差
|
|
|
// HalfMax = 两步判定: ①本层中间~下一层中间[(level-0.5)层高,(level+0.5)层高]粗筛 ②取①内最高点top, 有效区间=[top-容差, top]
|
|
|
// KdePeak = 两步判定: ①同上粗筛 ②对①内高度做KDE密度曲线取峰值peak, 有效区间=[peak-容差, peak+容差]
|
|
|
// 容差 = base_tolerance + 层号×per_level_tolerance
|
|
|
"layer_algorithm": "HalfMax",
|
|
|
//KDE(KdePeak算法): 高斯核带宽 毫米 (0=按Silverman经验法则自动取)
|
|
|
"kde_bandwidth": 0,
|
|
|
//KDE(KdePeak算法): 密度曲线扫描步长 毫米 (越小越精细但越慢)
|
|
|
"kde_step": 1
|
|
|
},
|
|
|
|
|
|
// ---- filter: 软件滤波(多边形 + 拖影) ----
|
|
|
"filter": {
|
|
|
//过滤多边形(mm), 至少3个顶点
|
|
|
"polygon": [[-550,0],[-550,1600],[500,1600],[500,0]],
|
|
|
|
|
|
//连续段尾部减除(图片级旧方案, 已由点云级 sparse_cut 取代, 建议保持 false)
|
|
|
"tail_cut": {
|
|
|
"enable": false,
|
|
|
"max_tail_length": 30,
|
|
|
"y_delta": 30,
|
|
|
"min_run_length": 5,
|
|
|
"core_min_len": 5,
|
|
|
"support_rows": 0
|
|
|
},
|
|
|
|
|
|
//点云级稀疏拖影过滤(推荐, 默认开)
|
|
|
"sparse_cut": {
|
|
|
"enable": true,
|
|
|
//同圈X邻域半径mm: 调大→删得狠; 调小→保守
|
|
|
"x_radius": 30,
|
|
|
//同圈连续: 同一圈内稀疏点数≥此值即删
|
|
|
"circle_min": 2,
|
|
|
//跨圈连续: 同一X位置在z方向连续出现≥此圈即删
|
|
|
"run_min": 2
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// ==================== 追加更多雷达:复制下面一段并改标识/IP/参数即可 ====================
|
|
|
// 通信时用 "radar":"radar2" 指定;不带 radar 字段的请求默认操作第一个雷达(radar1)
|
|
|
,
|
|
|
"10.43.26.113": {
|
|
|
"radar": { "ip": "10.43.26.113", "port": 2368, "hz": 50,
|
|
|
"tail_filter": 3, "front_filter": 3, "far_hr_filter": 2, "near_hr_filter": true },
|
|
|
"scan": { "z_speed_type": "uniformSpeed", "z_speed": 20, "collect_duration_s": 6 },
|
|
|
"detect":{ "z_range_mm": 50, "y_range_mm": 80, "rect_width_px": 12, "rect_length_ratio": 1.5 },
|
|
|
"count": { "floor_height": 1600, "base_tolerance": 30, "per_level_tolerance": 1,
|
|
|
"point_dilate": 8, "z_interpolate_mode": "CopyTranslation",
|
|
|
"layer_algorithm": "HalfMax", "kde_bandwidth": 0, "kde_step": 1 },
|
|
|
"filter":{ "polygon": [[-550,0],[-550,1600],[500,1600],[500,0]],
|
|
|
"tail_cut": { "enable": false, "max_tail_length": 30, "y_delta": 30,
|
|
|
"min_run_length": 5, "core_min_len": 5, "support_rows": 0 },
|
|
|
"sparse_cut": { "enable": true, "x_radius": 30, "circle_min": 2, "run_min": 2 } }
|
|
|
},
|
|
|
"10.43.26.110": {
|
|
|
"radar": { "ip": "10.43.26.110", "port": 2368, "hz": 50,
|
|
|
"tail_filter": 3, "front_filter": 3, "far_hr_filter": 2, "near_hr_filter": true },
|
|
|
"scan": { "z_speed_type": "uniformSpeed", "z_speed": 20, "collect_duration_s": 6 },
|
|
|
"detect":{ "z_range_mm": 50, "y_range_mm": 80, "rect_width_px": 12, "rect_length_ratio": 1.5 },
|
|
|
"count": { "floor_height": 1600, "base_tolerance": 30, "per_level_tolerance": 1,
|
|
|
"point_dilate": 8, "z_interpolate_mode": "CopyTranslation",
|
|
|
"layer_algorithm": "HalfMax", "kde_bandwidth": 0, "kde_step": 1 },
|
|
|
"filter":{ "polygon": [[-550,0],[-550,1600],[500,1600],[500,0]],
|
|
|
"tail_cut": { "enable": false, "max_tail_length": 30, "y_delta": 30,
|
|
|
"min_run_length": 5, "core_min_len": 5, "support_rows": 0 },
|
|
|
"sparse_cut": { "enable": true, "x_radius": 30, "circle_min": 2, "run_min": 2 } }
|
|
|
},
|
|
|
"10.43.26.111": {
|
|
|
"radar": { "ip": "10.43.26.111", "port": 2368, "hz": 50,
|
|
|
"tail_filter": 3, "front_filter": 3, "far_hr_filter": 2, "near_hr_filter": true },
|
|
|
"scan": { "z_speed_type": "uniformSpeed", "z_speed": 20, "collect_duration_s": 6 },
|
|
|
"detect":{ "z_range_mm": 50, "y_range_mm": 80, "rect_width_px": 12, "rect_length_ratio": 1.5 },
|
|
|
"count": { "floor_height": 1600, "base_tolerance": 30, "per_level_tolerance": 1,
|
|
|
"point_dilate": 8, "z_interpolate_mode": "CopyTranslation",
|
|
|
"layer_algorithm": "HalfMax", "kde_bandwidth": 0, "kde_step": 1 },
|
|
|
"filter":{ "polygon": [[-550,0],[-550,1600],[500,1600],[500,0]],
|
|
|
"tail_cut": { "enable": false, "max_tail_length": 30, "y_delta": 30,
|
|
|
"min_run_length": 5, "core_min_len": 5, "support_rows": 0 },
|
|
|
"sparse_cut": { "enable": true, "x_radius": 30, "circle_min": 2, "run_min": 2 } }
|
|
|
},
|
|
|
"10.43.26.108": {
|
|
|
"radar": { "ip": "10.43.26.108", "port": 2368, "hz": 50,
|
|
|
"tail_filter": 3, "front_filter": 3, "far_hr_filter": 2, "near_hr_filter": true },
|
|
|
"scan": { "z_speed_type": "uniformSpeed", "z_speed": 20, "collect_duration_s": 6 },
|
|
|
"detect":{ "z_range_mm": 50, "y_range_mm": 80, "rect_width_px": 12, "rect_length_ratio": 1.5 },
|
|
|
"count": { "floor_height": 1600, "base_tolerance": 30, "per_level_tolerance": 1,
|
|
|
"point_dilate": 8, "z_interpolate_mode": "CopyTranslation",
|
|
|
"layer_algorithm": "HalfMax", "kde_bandwidth": 0, "kde_step": 1 },
|
|
|
"filter":{ "polygon": [[-550,0],[-550,1600],[500,1600],[500,0]],
|
|
|
"tail_cut": { "enable": false, "max_tail_length": 30, "y_delta": 30,
|
|
|
"min_run_length": 5, "core_min_len": 5, "support_rows": 0 },
|
|
|
"sparse_cut": { "enable": true, "x_radius": 30, "circle_min": 2, "run_min": 2 } }
|
|
|
},
|
|
|
"10.43.26.107": {
|
|
|
"radar": { "ip": "10.43.26.107", "port": 2368, "hz": 50,
|
|
|
"tail_filter": 3, "front_filter": 3, "far_hr_filter": 2, "near_hr_filter": true },
|
|
|
"scan": { "z_speed_type": "uniformSpeed", "z_speed": 20, "collect_duration_s": 6 },
|
|
|
"detect":{ "z_range_mm": 50, "y_range_mm": 80, "rect_width_px": 12, "rect_length_ratio": 1.5 },
|
|
|
"count": { "floor_height": 1600, "base_tolerance": 30, "per_level_tolerance": 1,
|
|
|
"point_dilate": 8, "z_interpolate_mode": "CopyTranslation",
|
|
|
"layer_algorithm": "HalfMax", "kde_bandwidth": 0, "kde_step": 1 },
|
|
|
"filter":{ "polygon": [[-550,0],[-550,1600],[500,1600],[500,0]],
|
|
|
"tail_cut": { "enable": false, "max_tail_length": 30, "y_delta": 30,
|
|
|
"min_run_length": 5, "core_min_len": 5, "support_rows": 0 },
|
|
|
"sparse_cut": { "enable": true, "x_radius": 30, "circle_min": 2, "run_min": 2 } }
|
|
|
}
|
|
|
}
|