7.2 KiB
Полная инструкция: Vision + Arduino + шаговик (трек 3)
Код в arduino_code/Test не меняем. Связка идёт только через MQTT — те же топики, что уже использует SCADA (backend_control/gui.py).
Архитектура
RealSense D415 ──► Orange PI (vision_classifier)
│
▼ MQTT
┌──── mosquitto :1883 ────┐
│ │
▼ ▼
ESP32 (уже прошит) SCADA gui.py
• motor/control/* (опционально)
• servo/control/*
│
▼
TMC2209 + шаговик ленты
серво-селекторы зон B/C/D
1. Сеть и MQTT (важно)
На Orange PI уже крутится Docker-контейнер mosquitto на порту 1883
(логин/пароль: test / 1234 — как в SCADA).
| Кто | Куда подключается |
|---|---|
vision_classifier |
127.0.0.1:1883 (уже в config.yaml) |
SCADA gui.py |
192.168.31.225 или 127.0.0.1 |
| ESP32 (прошивка) | MQTT_SERVER = "192.168.31.225" (уже в arduino_code/Test) |
Orange PI в сети: 192.168.31.225. Vision ходит на локальный брокер 127.0.0.1; ESP и SCADA — на 192.168.31.225:1883.
Краткая шпаргалка запуска/стопа: START.md.
Проверка с Orange PI:
# локальный брокер на OPI
python3 -c "
import paho.mqtt.client as m, time
c=m.Client(m.CallbackAPIVersion.VERSION2); c.username_pw_set('test','1234')
c.connect('127.0.0.1',1883); c.loop_start(); time.sleep(0.5); print('MQTT OK'); c.disconnect()
"
MQTT Explorer: http://localhost:3000 (контейнер mqtt-explorer).
2. Что уже должно работать на Arduino
Не трогая arduino_code/Test, убедитесь что ESP32 в сети и отвечает на команды (через SCADA или mosquitto):
| Действие | Топик | Payload |
|---|---|---|
| Вкл. драйвер | motor/control/driver |
on |
| Вкл. TMC | motor/control/tmc/enable |
on |
| Ток % | motor/control/tmc/current_percent |
50 |
| Микрошаг | motor/control/tmc/microsteps |
16 |
| Скорость RPM | motor/control/rpm |
-200 (у вас направление с минусом; диапазон примерно −1000…1000) |
| Серво угол | servo/control/{N}/angle |
0…180 |
| Серво вкл | servo/control/{N}/enable |
on |
Телеметрия: motor/feedback/#, servo/+/feedback/#.
Ручной тест ленты (если mosquitto_pub есть):
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
Или откройте backend_control/gui.py (MQTT_BROKER = "192.168.31.225").
3. Камера RealSense D415
- USB3 (скорость 5000M в
lsusb -t). - Камера сверху над лентой, 0.5–1.5 м.
- В
config.yamlзадайтеbelt_distance_mm= реальная высота в мм.
lsusb | grep -i RealSense
v4l2-ctl --list-devices
4. Запуск vision (Orange PI)
cd ~/workdir/vision_classifier
# один кадр без железа
./run.sh --once --no-mqtt --no-motor
# превью без движения (JPEG обновляются на диске)
./run.sh --preview --dry-route --no-motor
# смотреть: debug_frames/live_color.jpg и live_depth.jpg
# полный контур: камера → класс → MQTT → мотор + серво
PYTHONUNBUFFERED=1 ./run.sh --preview
# стоп: Ctrl+C (rpm сбросится в 0)
Превью не открывает окна (у вас OpenCV headless) — пишет файлы:
debug_frames/live_color.jpgdebug_frames/live_depth.jpg
Откройте их в Cursor/VS Code или:
eog debug_frames/live_color.jpg &
# или периодически обновлять в браузере/просмотрщике
5. Настройка зон под вашу механику
В config.yaml → routing.zones и motor:
motor:
enabled: true
rpm: -200 # у вас направление ленты — отрицательный RPM
mqtt:
broker: "127.0.0.1" # mosquitto на Orange PI; ESP и SCADA → 192.168.31.225
routing:
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 }
Подставьте номера каналов PCA9685 и углы, которые уже проверены в SCADA.
Логика ТЗ:
| Класс | Зона | Действие |
|---|---|---|
| Подходит | B | лента едет, серво idle |
| Не по габаритам | C | серво C на divert_angle, потом idle |
| Круг (доупаковка) | D | серво D на divert_angle, потом idle |
6. SCADA параллельно
Можно держать GUI открытым для телеметрии:
cd ~/workdir/backend_control
# в gui.py: MQTT_BROKER = "192.168.31.225" (или 127.0.0.1 с OPI)
source testing/bin/activate # или свой venv
python gui.py
Vision и SCADA могут работать вместе на одном брокере.
7. Docker (опционально)
cd ~/workdir/vision_classifier
sudo docker compose up -d --build
sudo docker compose logs -f
8. Типичные проблемы
| Симптом | Что сделать |
|---|---|
cv2.imshow / GTK error |
уже исправлено: --preview пишет JPEG |
mqtt timed out |
брокер на OPI → broker: "127.0.0.1"; ESP → 192.168.31.225 |
| ESP не реагирует | одна Wi‑Fi сеть, брокер 192.168.31.225:1883, логин test/1234 |
| depth valid < 30% | USB3, высота 0.5–1.5 м, не чёрная лента в упор |
| серво не те | поправьте routing.zones.*.servo под SCADA |
| лента не едет | motor.enabled: true, проверьте SCADA rpm вручную |
9. Чеклист «всё связано»
mosquittoUp (docker ps)- ESP32 в Wi‑Fi, в MQTT Explorer видны
motor/feedback/* - Из SCADA крутится шаговик и двигаются серво
config.yaml:mqtt.broker= тот же брокерbelt_distance_mmи углы серво подогнаны./run.shпечатает зону B/C/D и в Explorer появляютсяvision/feedback/*- При объекте срабатывает нужный серво, лента крутится