OZON Tech Sorter Simulation
Инженерный frontend MVP для задачи хакатона OZON Tech: «Интеллектуальная роботизированная система сортировки товаров».
Проект показывает 2D/SVG dashboard сортировочной линии: рабочую зону 6000 x 10000 мм, конвейер шириной 500 мм, зоны A/B/C/D, roll-cage C/D, датчики, stop-gate, толкатели, классификацию, маршрутизацию, timeline цикла, PID-имитацию, метрики и event log.
Стек
- Vite
- React
- TypeScript
- SVG/CSS для инженерной 2D-сцены
- Vitest для доменных тестов
- Docker + nginx для production static hosting
Нет Three.js, backend, реального ML и тяжелых UI-библиотек.
Запуск локально
npm install
npm run dev
Открыть: http://127.0.0.1:3100/
Запуск через Docker
docker compose -p owl -f docker-compose.server.yml up -d --build
Compose публикует только loopback-порт:
127.0.0.1:3100:80
Проверка домена
curl -I http://127.0.0.1:3100/
curl -I https://arhipovdan.ru/
curl -I https://www.arhipovdan.ru/
Сценарии
normal_flow— обычный поток B/C/D.oversized_item— max dimensions нарушены, маршрут C.round_object— габариты проходят, roundness >= 0.8, маршрут D.boundary_dimensions— проверка min/max границ.close_items— предупреждение spacing/queue, последовательная обработка.low_confidence— низкий CV confidence, rule-based fallback.jam— застревание у gate, FAULT, остановка конвейера.emergency_stop— EMERGENCY_STOP, остановка всех движений.
Классификация
Классификация реализована чистой функцией classifyItem.
- Проверяются габариты.
- Если нарушены min/max размеры, категория C.
- Если габариты подходят, проверяется
roundness. - Если
roundness >= 0.8, категория D. - Иначе категория B.
- Если товар одновременно негабаритный и круглый, приоритет у C, потому что dimensions check идет первым.
Границы MVP:
- min: width >= 10 мм, depth >= 10 мм, height >= 2 мм;
- max: width <= 450 мм, depth <= 320 мм, height <= 320 мм;
- roundness threshold: 0.8.
Исполнительная часть
State machine управляет циклом:
MOVING_TO_CAMERADETECTINGMOVING_TO_GATEWAITING_AT_GATECLASSIFYINGROUTE_TO_B/C/DRETURN_HOMEFAULTEMERGENCY_STOP
Датчики имитируются по mock-данным: camera bbox/confidence/CV latency, laser measured height, ultrasonic gate detection. Stop-gate закрывается перед классификацией, открывается для B и удерживает товар для C/D перед толкателями.
Simplified PID
PID-панель показывает упрощенную имитацию control loop:
- target speed;
- actual speed;
- error;
- correction;
- mini graph последних тиков скорости.
В normal flow actual speed приближается к target. В jam и emergency_stop target становится 0, actual speed визуально падает к 0.
Тесты
npm run test
Покрыты classifier, PID и целостность сценариев.
Документация
docs/ARCHITECTURE.md— модули и поток данных.docs/DEMO_SCRIPT.md— 3-5 минутный сценарий защиты.docs/SCENARIOS.md— ожидаемые результаты сценариев.docs/JURY_QA.md— короткие ответы на вопросы жюри.
Ограничения MVP
- Физика движения дискретная, без динамической модели массы/трения.
- CV является pseudo-CV по mock-данным.
- PID упрощен до демонстрации стабилизации скорости.
- Нет backend, real-time API, сохранения событий и реального ML.
- Нет 3D digital twin.
Что улучшить дальше
- Добавить WebSocket-телеметрию и replay реальных событий.
- Подключить реальные CV-модели или датасеты.
- Добавить режим manual override для gate/pushers.
- Расширить модель очереди, spacing и recovery после jam.
- Экспортировать event log в отчет смены.