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

141 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Полный запуск системы (трек 3)
Orange PI **192.168.31.225** · MQTT `test` / `1234` · RPM ленты **отрицательный** (`-200`)
---
## Стоп (сначала, если что-то уже крутится)
```bash
# 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:
```bash
docker ps | grep mosquitto
# должно быть 0.0.0.0:1883
```
4. **ESP32** в той же сети, в прошивке `MQTT_SERVER = "192.168.31.225"` (уже так).
5. Лента под камерой **пустая** (пока не стартовали фон/превью).
---
## Запуск — полный контур (камера → B/C/D → MQTT → лента + серво)
```bash
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/*` |
Хвост логов:
```bash
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`.
---
## Запуск без движения ленты (только зрение)
```bash
cd ~/workdir/vision_classifier
PYTHONUNBUFFERED=1 ./run.sh --preview --dry-route --no-motor --no-mqtt
```
JPEG всё равно обновляются в `debug_frames/`.
---
## Ручной тест ленты (без vision)
```bash
# нужен 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 (опционально, параллельно)
```bash
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](INTEGRATION.md). Алгоритм: [README.md](README.md).