feat: engineering measurement architecture in 3D demo
- Stepper motor length measurement (step counting) - Laser rangefinder height measurement - Stereo camera width/shape analysis - PLC decision logic with C-priority - Actuator pusher animation - Full measurement overlay with live data
This commit is contained in:
162
docs/MEASUREMENT_SYSTEM_REPORT.md
Normal file
162
docs/MEASUREMENT_SYSTEM_REPORT.md
Normal file
@@ -0,0 +1,162 @@
|
||||
# Measurement System Report
|
||||
|
||||
## Summary
|
||||
|
||||
Добавлена инженерная архитектура измерения в full-screen 3D demo:
|
||||
- Шаговый двигатель измеряет длину через подсчёт шагов
|
||||
- Лазерный дальномер измеряет высоту
|
||||
- Стереокамера измеряет ширину и форму
|
||||
- PLC контроллер принимает решение и управляет actuator
|
||||
|
||||
## Инженерная логика
|
||||
|
||||
### 1. Измерение длины (Stepper Motor)
|
||||
|
||||
```
|
||||
Длина = stepCount × mmPerStep
|
||||
|
||||
Параметры:
|
||||
- Step angle: 1.8° (200 steps/rev)
|
||||
- Microstep: 16x (3200 steps/rev)
|
||||
- Drive roller: Ø120mm
|
||||
- mmPerStep ≈ 0.118 mm
|
||||
|
||||
Пример: 300mm depth → stepCount ≈ 2540 pulses
|
||||
```
|
||||
|
||||
### 2. Измерение высоты (Laser Rangefinder)
|
||||
|
||||
```
|
||||
Высота = laserMountHeight - laserDistance
|
||||
|
||||
Параметры:
|
||||
- Laser mount: 1150mm
|
||||
- Belt surface: 700mm
|
||||
- Max item height: 320mm
|
||||
- Laser distance: mount - (belt + itemHeight)
|
||||
```
|
||||
|
||||
### 3. Измерение ширины и формы (Stereo Camera)
|
||||
|
||||
```
|
||||
Стереокамера:
|
||||
- Baseline: 120mm между линзами
|
||||
- FOV: 60°
|
||||
- Mount: 1100mm
|
||||
|
||||
Roundness K:
|
||||
- K ≥ 0.7 → round shape → D
|
||||
- K < 0.7 → box/irregular → B or C
|
||||
```
|
||||
|
||||
### 4. C-Priority Logic
|
||||
|
||||
```
|
||||
if (dimensionsFail) {
|
||||
category = 'C'; // Overrides roundness
|
||||
if (roundness >= 0.7) {
|
||||
cPriorityApplied = true;
|
||||
warning = "Dims fail overrides roundness → C";
|
||||
}
|
||||
} else if (roundness >= 0.7) {
|
||||
category = 'D';
|
||||
} else {
|
||||
category = 'B';
|
||||
}
|
||||
```
|
||||
|
||||
## Файлы созданы/изменены
|
||||
|
||||
| Файл | Действие |
|
||||
|------|----------|
|
||||
| `src/domain/physicalLayout.ts` | Добавлены stepper/laser/stereo параметры |
|
||||
| `src/domain/measurementSystem.ts` | **Создан** — полная measurement логика |
|
||||
| `src/domain/measurementSystem.test.ts` | **Создан** — unit tests |
|
||||
| `src/components/CVInspectionOverlay.tsx` | Обновлён — MEASUREMENT overlay |
|
||||
| `src/components/ThreeD/SorterDigitalTwinContinuous.tsx` | Добавлены LaserBeam, StereoCameraLenses, PointCloud, ActuatorPusher |
|
||||
| `src/pages/MainPage.tsx` | Использует measurementSystem |
|
||||
| `src/styles.css` | Новые стили для measurement overlay |
|
||||
|
||||
## Визуальные элементы 3D
|
||||
|
||||
### Stepper Motor
|
||||
- Pulse indicator LED на моторе
|
||||
- Вращающийся вал при активном измерении
|
||||
|
||||
### Laser Beam
|
||||
- Вертикальный cyan луч от датчика к товару
|
||||
- Laser dot на верхней поверхности товара
|
||||
- Laser emitter подсвечивается при измерении
|
||||
|
||||
### Stereo Camera
|
||||
- Два объектива на overhead rig (baseline 120mm)
|
||||
- View cones к товару при активном измерении
|
||||
|
||||
### Point Cloud
|
||||
- 12 точек вокруг контура товара
|
||||
- Форма зависит от roundness (круглая/квадратная)
|
||||
|
||||
### Actuator Pusher
|
||||
- Animated pusher при routing в C/D
|
||||
- Цвет соответствует категории
|
||||
|
||||
## Measurement Overlay
|
||||
|
||||
Секции:
|
||||
1. **STEPPER LENGTH** — Pulses, mm/step, Length
|
||||
2. **LASER HEIGHT** — Mount, Distance, Height
|
||||
3. **STEREO WIDTH/SHAPE** — Width, Shape, Roundness K
|
||||
4. **PLC DECISION** — Dims pass/fail, Confidence, CLASS, CMD
|
||||
|
||||
Warnings:
|
||||
- C-priority: "Dims fail overrides roundness → C"
|
||||
- Low confidence: "Low confidence, rule-based fallback"
|
||||
|
||||
## Скриншоты
|
||||
|
||||
`docs/measurement_system_screenshots/`:
|
||||
- `stepper_counting.png` — overlay с данными stepper
|
||||
- `laser_height_measurement.png` — лазерный луч на товаре
|
||||
- `stereo_shape_measurement.png` — анализ формы
|
||||
- `c_priority_decision.png` — C-priority warning
|
||||
- `route_command_sent.png` — команда маршрутизации
|
||||
- `mobile_compact_overlay.png` — mobile view (overlay hidden)
|
||||
|
||||
## Проверки
|
||||
|
||||
| Проверка | Результат |
|
||||
|----------|-----------|
|
||||
| `npm run build` | ✅ Успешно |
|
||||
| `npm run test` | ✅ 74 тестов |
|
||||
| Docker rebuild | ✅ Успешно |
|
||||
| Production QA | ✅ Работает |
|
||||
| Console errors | ✅ Нет ошибок |
|
||||
| /details | ✅ Не сломан |
|
||||
|
||||
## Что осталось
|
||||
|
||||
- Можно добавить более детальную анимацию point cloud
|
||||
- Можно добавить визуальный encoder на drive roller
|
||||
- Actuator pusher может быть более механистичным
|
||||
|
||||
## Команды commit/push
|
||||
|
||||
```bash
|
||||
git add -A
|
||||
git commit -m "feat: engineering measurement architecture in 3D demo
|
||||
|
||||
- Stepper motor length measurement (step counting)
|
||||
- Laser rangefinder height measurement
|
||||
- Stereo camera width/shape analysis
|
||||
- PLC decision logic with C-priority
|
||||
- Actuator pusher animation
|
||||
- Full measurement overlay with live data
|
||||
|
||||
Technical details:
|
||||
- mmPerStep = 0.118mm (1.8° step, 16x microstep, Ø120mm roller)
|
||||
- Laser mount at 1150mm
|
||||
- Stereo baseline 120mm, FOV 60°
|
||||
|
||||
All measurements derived from item dimensions, no random values."
|
||||
git push origin dan_branch
|
||||
```
|
||||
BIN
docs/measurement_system_screenshots/c_priority_decision.png
Normal file
BIN
docs/measurement_system_screenshots/c_priority_decision.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 346 KiB |
BIN
docs/measurement_system_screenshots/laser_height_measurement.png
Normal file
BIN
docs/measurement_system_screenshots/laser_height_measurement.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 267 KiB |
BIN
docs/measurement_system_screenshots/mobile_compact_overlay.png
Normal file
BIN
docs/measurement_system_screenshots/mobile_compact_overlay.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 87 KiB |
BIN
docs/measurement_system_screenshots/route_command_sent.png
Normal file
BIN
docs/measurement_system_screenshots/route_command_sent.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 346 KiB |
BIN
docs/measurement_system_screenshots/stepper_counting.png
Normal file
BIN
docs/measurement_system_screenshots/stepper_counting.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 339 KiB |
BIN
docs/measurement_system_screenshots/stereo_shape_measurement.png
Normal file
BIN
docs/measurement_system_screenshots/stereo_shape_measurement.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 337 KiB |
Reference in New Issue
Block a user