4.7 KiB
4.7 KiB
Полный запуск системы (трек 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.
Чеклист перед стартом
- Питание конвейера / драйвера / ESP32 включено.
- RealSense D415 в USB3 (
lsusb | grep -i RealSense). - Mosquitto на Orange PI:
docker ps | grep mosquitto # должно быть 0.0.0.0:1883 - ESP32 в той же сети, в прошивке
MQTT_SERVER = "192.168.31.225"(уже так). - Лента под камерой пустая (пока не стартовали фон/превью).
Запуск — полный контур (камера → 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.