Files
ozone-tech_owl_prime/vision_classifier/START.md
2026-08-03 01:26:42 +07:00

4.7 KiB
Raw Blame History

Полный запуск системы (трек 3)

Orange PI 192.168.31.225 · MQTT test / 1234 · RPM ленты отрицательный (-200)


Стоп (сначала, если что-то уже крутится)

# 1) убить vision (иначе снова поднимет ленту)
pkill -f 'main.py' || true

# 2) остановить мотор
cd ~/workdir/vision_classifier
.venv/bin/python - <<'PY'
from paho.mqtt.client import Client, CallbackAPIVersion
import time
c = Client(CallbackAPIVersion.VERSION2, client_id='stop')
c.username_pw_set('test', '1234')
c.connect('127.0.0.1', 1883, 60)
c.loop_start(); time.sleep(0.3)
c.publish('motor/control/rpm', '0', qos=1)
time.sleep(0.3); c.loop_stop(); c.disconnect()
print('rpm=0')
PY

Или Ctrl+C в терминале main.py — при выходе сам шлёт rpm=0.


Чеклист перед стартом

  1. Питание конвейера / драйвера / ESP32 включено.
  2. RealSense D415 в USB3 (lsusb | grep -i RealSense).
  3. Mosquitto на Orange PI:
    docker ps | grep mosquitto
    # должно быть 0.0.0.0:1883
    
  4. ESP32 в той же сети, в прошивке MQTT_SERVER = "192.168.31.225" (уже так).
  5. Лента под камерой пустая (пока не стартовали фон/превью).

Запуск — полный контур (камера → B/C/D → MQTT → лента + серво)

cd ~/workdir/vision_classifier

# превью JPEG + мотор + серво (рекомендуется)
PYTHONUNBUFFERED=1 ./run.sh --preview

Что должно появиться в логе:

[camera] RGB: /dev/video4
[camera] depth OK, valid≈…
[mqtt] подключено к 127.0.0.1:1883

После старта vision сам включает драйвер и крутит ленту с motor.rpm: -200 из config.yaml.

Куда смотреть во время работы

Что Где
Кадр RGB debug_frames/live_color.jpg
Depth debug_frames/live_depth.jpg
Решения LOCK stdout + logs/decisions.jsonl
MQTT трафик http://192.168.31.225:3000 (MQTT Explorer)
Зоны vision топики vision/feedback/*

Хвост логов:

tail -f logs/decisions.jsonl
# или фильтр по LOCK:
tail -f logs/decisions.jsonl | while read l; do echo "$l" | .venv/bin/python -c "import sys,json; d=json.loads(sys.stdin.read()); print(d.get('ts'), 'LOCK', d.get('zone'), d.get('dims_mm'), d.get('circle_ratio'), d.get('reason',''))"; done

Зоны

LOCK Смысл Серво (config)
B подходит servo 0 idle
C габариты вне 10…450×320×320 servo 1 → 90°
D круг ratio ≥ 0.8 servo 2 → 90°

Кладите один объект в поле камеры, ждите строку LOCK B/C/D.


Запуск без движения ленты (только зрение)

cd ~/workdir/vision_classifier
PYTHONUNBUFFERED=1 ./run.sh --preview --dry-route --no-motor --no-mqtt

JPEG всё равно обновляются в debug_frames/.


Ручной тест ленты (без vision)

# нужен mosquitto_pub или python из .venv
mosquitto_pub -h 127.0.0.1 -u test -P 1234 -t motor/control/driver -m on
mosquitto_pub -h 127.0.0.1 -u test -P 1234 -t motor/control/tmc/enable -m on
mosquitto_pub -h 127.0.0.1 -u test -P 1234 -t motor/control/rpm -m -200
# стоп:
mosquitto_pub -h 127.0.0.1 -u test -P 1234 -t motor/control/rpm -m 0

SCADA (опционально, параллельно)

cd ~/workdir/backend_control
# MQTT_BROKER = "192.168.31.225" или 127.0.0.1
python gui.py

Если что-то не едет

Проблема Действие
Камера занята pkill -f main.py; fuser /dev/video0
MQTT не коннектится docker ps | grep mosquitto, логин test/1234
ESP молчит одна Wi‑Fi сеть, брокер 192.168.31.225:1883
Лента в другую сторону в config.yaml → motor.rpm: -200 (минус обязателен)
Ложные LOCK на пустой ленте уберите мусор/блики; при необходимости поднимите min_object_height_mm
Серво не те каналы routing.zones в config.yaml

Подробности сети/топиков: INTEGRATION.md. Алгоритм: README.md.