141 lines
4.7 KiB
Markdown
141 lines
4.7 KiB
Markdown
# Полный запуск системы (трек 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).
|