vision model
This commit is contained in:
187
vision_classifier/INTEGRATION.md
Normal file
187
vision_classifier/INTEGRATION.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# Полная инструкция: 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](START.md)**.
|
||||
|
||||
Проверка с Orange PI:
|
||||
|
||||
```bash
|
||||
# локальный брокер на 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` есть):
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
1. USB3 (скорость 5000M в `lsusb -t`).
|
||||
2. Камера **сверху** над лентой, **0.5–1.5 м**.
|
||||
3. В `config.yaml` задайте `belt_distance_mm` = реальная высота в мм.
|
||||
|
||||
```bash
|
||||
lsusb | grep -i RealSense
|
||||
v4l2-ctl --list-devices
|
||||
```
|
||||
|
||||
## 4. Запуск vision (Orange PI)
|
||||
|
||||
```bash
|
||||
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.jpg`
|
||||
- `debug_frames/live_depth.jpg`
|
||||
|
||||
Откройте их в Cursor/VS Code или:
|
||||
|
||||
```bash
|
||||
eog debug_frames/live_color.jpg &
|
||||
# или периодически обновлять в браузере/просмотрщике
|
||||
```
|
||||
|
||||
## 5. Настройка зон под вашу механику
|
||||
|
||||
В `config.yaml` → `routing.zones` и `motor`:
|
||||
|
||||
```yaml
|
||||
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 открытым для телеметрии:
|
||||
|
||||
```bash
|
||||
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 (опционально)
|
||||
|
||||
```bash
|
||||
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. Чеклист «всё связано»
|
||||
|
||||
1. [ ] `mosquitto` Up (`docker ps`)
|
||||
2. [ ] ESP32 в Wi‑Fi, в MQTT Explorer видны `motor/feedback/*`
|
||||
3. [ ] Из SCADA крутится шаговик и двигаются серво
|
||||
4. [ ] `config.yaml`: `mqtt.broker` = тот же брокер
|
||||
5. [ ] `belt_distance_mm` и углы серво подогнаны
|
||||
6. [ ] `./run.sh` печатает зону B/C/D и в Explorer появляются `vision/feedback/*`
|
||||
7. [ ] При объекте срабатывает нужный серво, лента крутится
|
||||
Reference in New Issue
Block a user