9395d25332464dc71cdb6c6098e91c7a3ac3649e
OZON Tech Sorter Simulation
Инженерный frontend MVP для задачи хакатона OZON Tech: «Интеллектуальная роботизированная система сортировки товаров».
Приложение показывает 2D/SVG dashboard сортировочной линии: конвейер, рабочую зону 6000 x 10000 мм, зоны A/B/C/D, датчики, stop-gate, боковые толкатели, движение товаров, классификацию, маршрутизацию, state machine, метрики, PID-виджет и event log.
Архитектура решения
- Vite + React + TypeScript.
- Доменная логика вынесена в
src/domain. - Mock-данные товаров и сценариев находятся в
src/data. - UI собран из независимых панелей в
src/components. - Визуализация линии выполнена на SVG без Three.js и тяжелой 3D-графики.
Логика классификации
Классификация реализована чистой функцией classifyItem.
- Сначала проверяются допустимые габариты.
- Если товар нарушает min/max размеры, он относится к C.
- Если габариты подходят, проверяется
roundness. - Если
roundness >= 0.8, товар относится к D. - Иначе товар относится к B.
- Если объект одновременно негабаритный и круглый, приоритет остается у C.
Допустимые габариты MVP:
- min: width >= 10 мм, depth >= 10 мм, height >= 2 мм;
- max: width <= 450 мм, depth <= 320 мм, height <= 320 мм;
- roundness threshold: 0.8.
Исполнительная часть
Симуляция отображает:
- камеру с pseudo-CV, bounding box и confidence;
- лазерный датчик высоты;
- ультразвуковой датчик прибытия к stop-gate;
- stop-gate с состояниями open/closed;
- pusher C и pusher D со состояниями idle/extended/retracting;
- маршруты B/C/D с цветовой индикацией;
- предупреждения для close items и low confidence;
- fault/emergency сценарии с остановкой конвейера.
State machine
Состояния MVP:
- IDLE
- MOVING_TO_CAMERA
- DETECTING
- MOVING_TO_GATE
- WAITING_AT_GATE
- CLASSIFYING
- ROUTE_TO_B
- ROUTE_TO_C
- ROUTE_TO_D
- RETURN_HOME
- FAULT
- EMERGENCY_STOP
Сценарии
normal_flow— обычный поток товаров B/C/D.oversized_item— товар выходит за max dimensions и уходит в C.round_object— товар проходит по габаритам, но имеет roundness >= 0.8 и уходит в D.boundary_dimensions— товары на границах допустимых размеров.close_items— два товара близко друг к другу, появляется warning queue/spacing.low_confidence— confidence ниже 0.65, решение принимается rule-based.jam— застревание у stop-gate, state FAULT, conveyor stopped.emergency_stop— аварийная остановка, state EMERGENCY_STOP.
Метрики
Dashboard показывает:
- processed count;
- success count;
- error count;
- avg cycle time;
- throughput items/min;
- cv latency;
- actuator latency;
- queue length;
- conveyor speed;
- PID target speed;
- PID actual speed.
Локальный запуск
npm install
npm run dev
Открыть: http://127.0.0.1:3100/
Запуск на сервере
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/
Ограничения MVP
- Физика движения упрощена до дискретной state-machine симуляции.
- PID-регулятор имитационный, без точной модели двигателя и нагрузки.
- CV, laser и ultrasound генерируют псевдоизмерения на основе mock-данных.
- Нет backend, real-time API и сохранения событий.
- Нет Three.js и полноценного digital twin в 3D.
Что улучшить дальше
- Добавить backend с WebSocket-телеметрией.
- Подключить реальные ML/CV модели или replay датасетов.
- Сделать режим ручного управления исполнительными механизмами.
- Добавить тесты доменной логики и сценариев.
- Расширить физическую модель очереди, зазоров и jam recovery.
- Добавить экспорт event log и отчеты по SLA сортировки.
Description
Languages
TypeScript
66.6%
Python
23.5%
CSS
9.6%
Dockerfile
0.1%
Shell
0.1%