// 全局配置文件（分组嵌套结构）
// 注：注释须整行且以 // 开头；键值保持全局可读
{
  // ==================== radar: 雷达连接与雷达内置滤波 ====================
  "radar": {
    //雷达IP
    "ip": "192.168.1.170",
    //雷达数据端口
    "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, 每行"时间ms 距离mm", 无此文件时回退z_speed)
    "z_speed_type": "uniformSpeed",
    //z轴速度 厘米/秒 (0=z轴为时间ms, >0=z轴为移动距离mm; 仅在z_speed_type=uniformSpeed时直接生效)
    "z_speed": 20,
    //exe模式/默认扫描时长 秒 (tcp/http 模式可被请求中的 scanTime 覆盖)
    "collect_duration_s": 6
  },

  // ==================== detect: 截面分析 ====================
  "detect": {
    //Z截面区间长度 毫米
    "z_range_mm": 50,
    //Y截面区间长度 毫米 (只取 Y最小 ~ 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": 15,
    //count分层冗余 每层增加 毫米
    "per_level_tolerance": 1,
    //count画layer图: 每个点膨胀像素 (point_dilate×point_dilate)
    "point_dilate": 8,
    //count z轴空隙插值模式: none / CopyTranslation / AngleBucketInterpolation
    "z_interpolate_mode": "CopyTranslation"
  },

  // ==================== filter: 软件滤波(多边形 + 拖影) ====================
  "filter": {
    //过滤多边形(mm), 至少3个顶点
    "polygon": [[-550,0],[-550,1600],[500,1600],[500,0]],

    //连续段尾部减除(图片级旧方案, 已由点云级 sparse_cut 取代, 建议保持 false)
    "tail_cut": {
      //是否启用尾部减除
      "enable": false,
      //每端最多保留的尾部长度(px≈mm): 越小剪得越狠, 太大会误剪真实物体边缘
      "max_tail_length": 30,
      //尾部像素Y比段核心Y高出的阈值(mm): 越小越激进剪拖影, 太大剪不干净
      "y_delta": 30,
      //连续段长度低于此值(px)整段删除(孤立噪点)
      "min_run_length": 5,
      //主体核心最小长度(px), 保护小物体不被整体剪掉
      "core_min_len": 5,
      //上下几行同列有点视为竖直主体边缘则豁免不剪(0=不使用)
      "support_rows": 0
    },

    //点云级稀疏拖影过滤(推荐, 默认开): 删除每圈边缘外脱离主体的稀疏外伸点(胡须状拖影)
    //稀疏点 = 同一扫描圈(z相同)内 X±XRadius mm 无其它点(不同圈同X不算邻居)
    "sparse_cut": {
      //总开关
      "enable": true,
      //同圈X邻域半径mm: 调大→删得狠; 调小→保守
      "x_radius": 30,
      //同圈连续: 同一圈内稀疏点数≥此值即删 (对应某圈边缘外伸了N个点的情况)
      "circle_min": 2,
      //跨圈连续: 同一X位置在z方向连续出现≥此圈即删 (对应每圈外伸1~2个点、跨几十圈稳定)
      "run_min": 2
    }
  },

  // ==================== server: 运行模式 ====================
  "server": {
    //运行模式 exe=直接检测 / tcp=服务端模式 / http=HTTP服务端
    "mode": "tcp",
    //TCP/HTTP服务端监听端口 (仅tcp/http模式有效)
    "port": 9601
  },

  // ==================== log: 日志 ====================
  "log": {
    //日志打印使能 true/false
    "enable": true,
    //日志(任务目录)保留天数, 超出自动删除更早的目录
    "retain_days": 1,
    //每日日志定时清理时刻, 格式 "HH:MM:SS" (24小时制, 秒可省略, 如 "06:01" 或 "01:00:00")
    "clean_time": "06:01:30"
  }
}
