Files
ozone-tech_owl_prime/specification/mvp_1.md

114 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Наброски будущей схемы конвейера
![](mvp_1.jpg)
## Пояснение к схеме
### todo
## Список материалов:
В этот список необходимо доложить энкодер для двигателя!
| Название | Сумма, ₽ | Количество |
| :--- | :--- | :--- |
| Медная лента для удаления припоя / Оплетка для выпайки диаметр 2 мм длина 1.5 м | 164 | 1 |
| Набор проводов для пайки | 1 030 | 1 |
| Набор проводов для пайки | 855 | 1 |
| Флюс гель универсальный безотмывочный, для пайки микросхем и компонентов Flux RMA-223-UV-10г | 162 | 1 |
| Припой для пайки с канифолью 1мм 50гр ПОС-61 на катушке (ГОСТ) | 423 | 1 |
| ALIENTEK Паяльник 140 Вт, 7 предметов | 4 985 | 1 |
| Преобразователь DC-DC понижающий с 8-60V до 1-36V 15A max | 805 | 1 |
| Беспаечная макетная плата (breadboard) MB-102, 830 точек, для Arduino и прочих устройств | 1 112 | 2 |
| 120 шт. Провода перемычки для макетных плат, соединительные провода для модулей, контроллеров arduino (10 см) 3 вида по 40 шт папа-папа, мама-мама, папа-мама | 636 | 3 |
| Homeled, Блок питания, 12V, 200W, 180-265 вольт. С клеммами. Импульсный для светодиодных лент и светильников | 599 | 1 |
| Двигатель для шуруповерта 12v без шестерни | 834 | 2 |
| Сервопривод MG996R, 10 шт, 180 , металлические шестерни, для Arduino, роботов и RC, размеры стандарт | 2 990 | 1 |
| PWM PCA9685 драйвер на 16 сервоприводов расширитель портов с I2C интерфейсом для Led и Servo (12 bit, I2C) в IIC/I2C/TWI/SPI c тестером сервоприводов 3 режима, набор | 1 178 | 2 |
| Датчик расстояния ультразвуковой HY-SRF05 для Arduino | 1 310 | 5 |
| Модуль MOSFET силовой ключ, опторазвязка, 40В, 50А, AOD4184 | 898 | 4 |
| Arduino UNO R3 Atmega328P (CH340G), с кабелем | 1 377 | 3 |
| Плата расширения Ethernet Shield W5100 | 1 376 | 2 |
| ИТОГО | 20 732 | |
[Ссылка на товары](https://www.ozon.ru/cart?share=IxNShaU)
## Возможные проблемы в программно-аппаратной автоматической сортировке товаров на конвейерной линии
### 1. Проблемы визуального распознавания
- Сложность освещения: Непредсказуемое освещение может затруднить распознавание объектов
- Схожие внешние признаки: Товары с похожими формами/цветами могут быть распознаны неправильно
- Неправильная калибровка камер: Ошибки в определении координат объектов
### 2. Проблемы сенсорной системы
- Недостаточная чувствительность датчиков: Пропуск объектов или ложные срабатывания
- Влияние пыли/влаги: Затруднение работы сенсоров
- Нестабильность работы датчиков: Необходимость постоянной калибровки
### 3. Проблемы управления движением
- Неправильная синхронизация: Несовпадение времени сортировки и движения конвейера
- Недостаточная мощность приводов: Задержки в перемещении
- Конфликты в движении: Пересечение траекторий сортировщиков
### 4. Проблемы программного обеспечения
- Недостаточная обработка ошибок: Простой системы при возникновении проблем
- Неправильная логика принятия решений: Неправильная классификация объектов
- Проблемы с обновлением модели ИИ: Устаревшие алгоритмы распознавания
### 5. Проблемы механики
- Недостаточная прочность конструкции: Повреждение при высоких скоростях
- Неправильное размещение сортировщиков: Конфликты при перемещении
- Проблемы с удержанием объектов: Потеря товаров при сортировке
## Решения от ИИ:
Когда мы переходим к прототипу на **Arduino + отдельный сервер**, архитектура меняется. Теперь у нас есть «Мозг» (сервер), который видит и думает, и «Руки» (Arduino), которые исполняют.
Главная проблема здесь — **задержка (latency)** при передаче данных между сервером и контроллером. Если сервер скажет «толкай» в тот момент, когда объект уже проехал, система провалится.
Вот как я бы решил эти проблемы в контексте такого прототипа:
### 1. Визуальное распознавание (Серверная часть)
Поскольку сервер мощный, мы можем использовать тяжелые модели (YOLO, TensorFlow), но должны ограничить влияние среды.
* **Освещение:** Для прототипа я бы сделал «световой короб» из белого пластика или картона с LED-лентой внутри. Это создаст мягкий свет без теней, что критично для дешевых веб-камер.
* **Схожие признаки:** На сервере я бы реализовал многоэтапную проверку: сначала определение класса объекта, затем — анализ его геометрии (площадь, периметр), чтобы отличить, например, красный кубик от красного шарика.
* **Калибровка:** Чтобы сервер понимал, где находится объект в реальном мире, я бы использовал «маркеры привязки» (например, черные метки по углам ленты). Сервер видит метку -> понимает масштаб -> вычисляет координаты объекта в миллиметрах.
### 2. Сенсорная система (Arduino часть)
Датчики на Arduino будут служить «триггерами» для сервера.
* **Чувствительность:** Я бы добавил ИК-датчик в начале линии. Как только объект пересекает его, Arduino посылает сигнал на сервер: «Объект в зоне, сделай фото!». Это избавит сервер от необходимости анализировать видеопоток 24/7.
* **Пыль/Влага:** В прототипе это менее критично, но я бы использовал простые пластиковые колпачки-козырьки над датчиками, чтобы на них не оседал мусор.
* **Нестабильность:** Программный «антидребезг» (debouncing) в коде Arduino, чтобы один объект не засчитывался как несколько из-за помех.
### 3. Управление движением (Arduino часть)
Здесь решается проблема рассинхронизации между «медленным» сервером и «быстрым» конвейером.
* **Синхронизация (Критический узел):** Я бы **не** использовал команду «Толкай сейчас». Вместо этого сервер отправляет пакет данных: `ID объекта` и `Тип (куда сортировать)`. Arduino записывает этот объект в очередь (массив) и отслеживает его движение с помощью энкодера на моторе или датчика прохождения.
* *Логика:* «Я знаю, что объект №5 — это 'Красный', и он должен быть сброшен через 500 импульсов энкодера».
* **Мощность приводов:** Использование внешнего блока питания для моторов (не от Arduino!), чтобы избежать просадок напряжения и перезагрузок контроллера при старте ленты.
* **Конфликты:** Ограничение скорости подачи. В прототипе проще всего реализовать «дискретную подачу»: один объект заходит в систему -> обрабатывается -> вылетает -> только тогда подается следующий.
### 4. Программное обеспечение (Взаимодействие)
Разделение ответственности между Python (сервер) и C++ (Arduino).
* **Обработка ошибок:** Внедрение «контрольного сигнала» (Heartbeat). Если Arduino не получает сигнал от сервера в течение 2 секунд, он останавливает конвейер, чтобы товары не улетели в пустоту.
* **Логика принятия решений:** Сервер отправляет не просто команду, а структуру данных. Например: `{"id": 12, "action": "divert", "target": 2, "confidence": 0.98}`. Если `confidence` низкий, Arduino отправляет объект в корзину «Ошибка».
* **Обновление модели:** Преимущество сервера в том, что я могу обновлять модель ИИ, не перепрошивая Arduino. Весь «интеллект» живет в Python-скрипте.
### 5. Механика (Прототип)
Для прототипа важна модульность и легкость замены деталей.
* **Прочность:** Использование 3D-печатных деталей с заполнением (infill) более 40% в точках крепления моторов и использование подшипников в осях, чтобы избежать люфта.
* **Размещение:** Установка сортировщиков (сервоприводов) на стандартных профилях или рельсах, чтобы их можно было сдвинуть на пару сантиметров вперед/назад для точной подстройки под камеру.
* **Удержание объектов:** Вместо жестких толкателей я бы использовал «мягкие» лапки из силикона или резины на сервоприводах. Это предотвратит опрокидывание легких предметов и снизит ударную нагрузку на пластиковые детали.
**Резюме по архитектуре:**
`Датчик (Arduino) -> Триггер (Сервер) -> Распознавание (Сервер) -> Команда в очередь (Arduino) -> Отсчет расстояния (Arduino) -> Сброс (Механика)`.