111 lines
4.2 KiB
YAML
111 lines
4.2 KiB
YAML
# Конфиг алгоритмической части трека 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
|