# Конфиг алгоритмической части трека 3 (RealSense D415 → классификация → MQTT) camera: depth_device: /dev/video0 color_device: /dev/video4 width: 640 height: 480 fps: 30 depth_scale_mm: 1.0 # Intrinsics депта D415 @ 640x480 (кроп 4:3 из 1280x720, HFOV 65°): fx=fy≈670. # Старое значение 430 завышало габариты в ~1.56 раза! # Уточнить под свою камеру: .venv/bin/python calibrate.py --length 300 --width 200 fx: 564.0 fy: 564.0 cx: 320.0 cy: 240.0 # Совмещение RGB с depth в демо (сенсоры D415 разнесены ~55 мм). # Подбор: .venv/bin/python align_color.py (нужен объект с чёткими краями) color_dx: -40.0 color_dy: -8.0 color_scale: 1.030 # Высота камеры над пустой лентой, мм (оценка по боковым полосам ленты: ~594) belt_distance_mm: 594 belt_tolerance_mm: 25 min_object_height_mm: 20 min_object_area_px: 800 # Игнор краёв кадра (ролики/борта/плата справа), доля от размера кадра roi_margin: top: 0.12 bottom: 0.02 left: 0.05 right: 0.12 # Сколько объектов одновременно искать в кадре max_objects_in_frame: 3 # RGB-картинка в демо (измерения всё равно по depth) use_color: true # Фоновая карта глубины: в main.py при старте; в demo — только кнопка «Авто-высота» # false пока тестируем с объектом на ленте (карту снимать только на ПУСТОЙ ленте) use_background_map: false # RGB-поиск плоских товаров (телефон). ВЫКЛ по умолчанию — тени/шум давали ложные C. # Включить: true + «Авто-высота» на пустой ленте. detect_flat_rgb: false rgb_diff_threshold: 35 classification: min_mm: [10, 10, 10] max_mm: [450, 320, 320] circle_ratio_threshold: 0.8 # Пограничные случаи: нет консенсуса N кадров (~4 с при 12 fps обработки) # → товар помечается «неуверенно» и уходит в безопасную зону (по умолчанию C). uncertain_after_frames: 45 uncertain_fallback_zone: C # MQTT — тот же брокер, что слушает ESP32 и SCADA (backend_control) # На этом Orange PI mosquitto уже слушает :1883 → используйте 127.0.0.1 # ESP32 в прошивке ждёт 192.168.0.200 — см. INTEGRATION.md mqtt: broker: "127.0.0.1" port: 1883 user: "test" password: "1234" client_id: "vision_classifier_opi" topic_result: "vision/feedback/category" topic_dims: "vision/feedback/dimensions" topic_circle: "vision/feedback/circle_ratio" topic_debug: "vision/feedback/debug" enabled: true # Шаговик ленты — те же топики, что SCADA (arduino_code не меняем) motor: enabled: true rpm: -200 # скорость ленты; у вас направление — с минусом current_percent: 50 microsteps: 16 stealthchop: true disable_on_stop: false # при Ctrl+C только rpm=0, драйвер не гасим # Серво-селекторы зон B/C/D — подставьте свои каналы/углы routing: enabled: true zones: B: # Подходит для сортировки — пропуск servo: 0 idle_angle: 0 divert_angle: 0 hold_ms: 500 C: # Не подходит по габаритам servo: 1 idle_angle: 0 divert_angle: 90 hold_ms: 800 D: # Без доупаковки (круг) servo: 2 idle_angle: 0 divert_angle: 90 hold_ms: 800 cooldown_ms: 1500 runtime: show_preview: false save_debug_frames: false debug_dir: "debug_frames" # JSONL-журнал всех LOCK-решений (метрики для отчёта) decisions_log: "logs/decisions.jsonl" preview_every_n: 3 process_every_n: 1 confirm_frames: 8