Files
ozone-tech_owl_prime/docs/PHYSICAL_CONVEYOR_REPORT.md
root fa770f9da9 fix: physical conveyor realism - belt at 0.7m, item rides ON belt
- Create physicalLayout.ts with all dimensions
- Update conveyorPath.ts to use correct belt height
- Rebuild ConveyorBelt with support legs, rollers, drive motor
- Item Y = BELT_TOP_Y + itemHeight/2
2026-07-09 14:21:00 +02:00

125 lines
4.6 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.
# Physical Conveyor Report
## Summary
Исправлена физическая правдоподобность 3D demo на главной странице.
## Проблема
Товар выглядел так, будто "летит" выше конвейера:
- `beltY` был 0.35м вместо 0.7м
- `itemOffsetY` добавлял ещё смещение
- Итоговая высота товара: 0.5м — неправильно
- Конвейер не имел реалистичной структуры (без опор до пола)
## Root Cause
В `conveyorPath.ts` были hardcoded значения:
```typescript
beltY: 0.35, // Должно быть 0.7м
itemOffsetY: 0.15, // Добавлялось без учёта размера товара
```
В `SorterDigitalTwinContinuous.tsx` belt surface был на 0.32м.
## Решение
### 1. Создан единый файл размеров
`src/domain/physicalLayout.ts` — единый источник правды:
| Параметр | Значение | Описание |
|----------|----------|----------|
| `CONVEYOR_WIDTH_M` | 0.5м | Ширина полотна |
| `CONVEYOR_HEIGHT_M` | 0.7м | Высота верха полотна |
| `CONVEYOR_SPEED_MPS` | 1.0 м/с | Скорость ленты |
| `BELT_THICKNESS_M` | 0.015м | Толщина полотна |
| `ROLLER_RADIUS_M` | 0.04м | Радиус ролика |
| `ROLLER_SPACING_M` | 0.15м | Шаг роликов |
### 2. Формула высоты товара
```typescript
// Товар сидит НА ленте: верх полотна + половина высоты товара
itemY = BELT_TOP_Y + itemVisualHeight / 2
// BELT_TOP_Y = 0.7м
```
### 3. Реалистичный конвейер
Добавлены компоненты:
- **Belt surface** — верхняя рабочая поверхность на 0.7м
- **Side guards** — боковые направляющие выше полотна
- **Frame rails** — рама под полотном
- **Rollers** — вращающиеся ролики под лентой
- **Drive roller** — приводной ролик (увеличенный)
- **Tension roller** — натяжной ролик
- **Support legs** — опоры от пола до рамы
- **Stepper motor** — шаговый двигатель у приводного ролика
### 4. Позиции зон
```typescript
ZONES = {
A: { x: -4.0, z: 0 }, // Spawn
CAMERA: { x: -1.5, z: 0 }, // Detection
GATE: { x: 1.5, z: 0 }, // Diverter
B: { x: 4.0, z: 0 }, // Main exit
C: { x: 2.0, z: 2.0 }, // Oversized
D: { x: 2.0, z: -2.0 }, // Round
}
```
## Файлы изменены
| Файл | Изменения |
|------|-----------|
| `src/domain/physicalLayout.ts` | **Создан** — все физические размеры |
| `src/domain/conveyorPath.ts` | Импорт из physicalLayout, правильный расчёт itemY |
| `src/components/ThreeD/SorterDigitalTwinContinuous.tsx` | Новый ConveyorBelt с правильными размерами |
## Скриншоты
`docs/physical_conveyor_screenshots/`:
- `conveyor_side_view.png` — боковой вид с опорами
- `item_on_belt.png` — товар на полотне
- `running_item_on_belt.png` — товар движется
- `motor_drive.png` — виден stepper motor
- `conveyor_top_angle.png` — вид сверху
- `details_page.png` — /details не сломан
## Проверки
| Проверка | Результат |
|----------|-----------|
| `npm run build` | ✅ Успешно |
| `npm run test` | ✅ 59 тестов |
| Docker rebuild | ✅ Успешно |
| Production QA | ✅ Работает |
| Console errors | ✅ Нет ошибок |
## Что осталось
- Визуально stepper motor небольшой — это правильно для масштаба
- Можно добавить более детальную геометрию роликов (низкий приоритет)
- Roll-cages для C/D зон можно добавить отдельно
## Команды для commit/push
```bash
git add -A
git commit -m "fix: physical conveyor realism - belt at 0.7m, item rides ON belt
- Create physicalLayout.ts with all dimensions
- Update conveyorPath.ts to use correct belt height
- Rebuild ConveyorBelt with proper structure:
- Support legs from floor
- Rollers under belt
- Drive/tension rollers
- Stepper motor at drive end
- Item Y = BELT_TOP_Y + itemHeight/2
Closes: item floating above conveyor"
git push origin dan_branch
```