Wire live classifyItem into continuous playback, add jam/E-stop cases, presenter controls (seek/speed/hotkeys), quality modes, demo scripts, audit docs, and a verify-only autonomous agent CLI with hard safety limits. Co-authored-by: Cursor <cursoragent@cursor.com>
6.9 KiB
Аудит физической достоверности
Дата: 2026-07-15
Принцип: не выдавать красивую анимацию за физическую симуляцию.
Разделение слоёв:
| Слой | Реализация в проекте |
|---|---|
| Визуальный реализм | R3F materials / STL / camera |
| Физическая достоверность | Детерминированная кинематика (physicalItemMotion, conveyor network) |
| Логика системы | classifyItem, FSM simulation, measurement stages |
| Презентационный слой | Playlist, hotkeys, presentation mode, Proof HUD |
1. Единицы и layout
| Величина | Источник | Статус |
|---|---|---|
| мм / м | physicalLayout.ts (MM_PER_STEP, высоты лазера, BELT_TOP_Y) |
Измерено |
| Сеть конвейера | conveyorNetwork.ts / path |
Измерено |
| Габариты SKU | items.ts + resolveItem (в т.ч. SKU-*-LC) |
Измерено |
| Лимиты габаритов | DIMENSION_LIMITS в classifier.ts |
Измерено |
Вывод: единицы согласованы в domain-слое. Это кинематическая согласованность, не динамика Ньютона.
2. Что является «настоящей» логикой vs аппроксимацией
| Узел контура | Реальность в MVP | Тип |
|---|---|---|
| Поступление объекта | Playlist / scenario spawn | Детерминированные данные |
| Обнаружение | Phase/sensor flags + pseudo-CV | Аппроксимация |
| Измерения | Модель stepper/laser/stereo из известных размеров | Аппроксимация (честно показана в UI) |
| Классификация | classifyItem правила + приоритет C>D |
Реальная логика |
| Управляющий сигнал | Gate/pusher commands | Реальная логика FSM / playback phases |
| Перемещение | Параметрический путь + speed + fault freeze | Кинематика |
| Столкновения / трение | Нет rigid-body | Отсутствует |
| Подтверждение результата | Category + event log + metrics | Реальная логика учёта |
| Jam / E-stop | Fault timelines + freeze/recover | Симулированные safety-сценарии |
3. Кинематика предметов
Модуль physicalItemMotion.ts:
| Свойство | Поведение | Зачем |
|---|---|---|
| Path following | Движение по сегментам сети | Промышленный маршрут |
| Fault freeze | Остановка при jam/e-stop | Safety demo |
| Recover | Возобновление после reset-потока | Живой показ не «умирает» |
| Seeded jitter | Воспроизводимый шум позиции | Меньше «робот-идеал» |
| Speed scale | 0.5–2× от demo controls | Презентация |
Нет: импульсов, restitution, stacking, проскальзывания ленты как friction model, расчёта момента инерции.
4. Измерительная подсистема
measurementSystem.ts моделирует стадии:
idle → leading_edge → step_counting → laser_height → stereo_width_shape → decision_ready → command_sent
После доработки:
- использует
DIMENSION_LIMITS+classifyItem; - исправлены min dimensions;
- confidence 0.65 (зафиксировано в реализации measurement path);
- наружу отдаётся
classificationReasonдля Proof HUD.
Это инженерная визуализация измерений, а не поток с реальной камеры.
5. Fault physics vs fault logic
| Сценарий | Логика | Физика движения |
|---|---|---|
| Jam | Playlist faultType: jam + tests |
Freeze на конвейере |
| Emergency stop | emergency_stop |
Freeze; требуется recover/reset narrative |
| C priority | classifyItem + sim tests |
Маршрут C даже при roundness |
Тесты: simulation.test.ts покрывает jam / estop / c_priority (Измерено: рост 144→153 тестов).
6. Инварианты, которые должны держаться
| Инвариант | Статус |
|---|---|
Решение на continuous = classifyItem(item) |
Wired (Done) |
| C приоритетнее D при oversized+round | Покрыто тестами |
| Min/max dimensions согласованы с UI Proof | Done (DIMENSION_LIMITS) |
| При fault скорость транспорта = 0 (freeze) | Done |
| Jitter детерминирован seed’ом | Done |
| Нет «телепорта» вне path network | Ожидается; регрессии ловятся visual QA вручную |
7. Оценка fidelity
| Категория | Балл (0–100) | Тип | Пояснение |
|---|---|---|---|
| Logical fidelity | 85 | Оценка | Сильный classifier + FSM |
| Kinematic fidelity | 70 | Оценка | Хороший path, слабые контакты |
| Dynamic fidelity | 25 | Оценка | Нет physics engine |
| Sensor fidelity | 55 | Оценка | Стадии есть, данные synthetic |
| Safety fidelity | 75 | Оценка | Jam/e-stop видимы и тестируются |
(Баллы — экспертная оценка, не бенчмарк.)
8. Рекомендации (без иллюзий)
- Не подключать тяжёлый physics engine перед живым показом — риск FPS.
- Держать честные подписи: «псевдо-CV», «кинематика».
- При желании повысить fidelity: лёгкие contact constraints только на gate/pusher (opt-in demo mode).
- Унифицировать twin, чтобы physics story не расходилась визуально между страницами.
9. Вывод
Проект честно находится в зоне deterministic kinematic digital twin с реальной rule-based классификацией. Это достаточно для Track 3 MVP и жюри, если proof-слой включён. Называть систему «физическим симулятором с CV» без оговорок — нельзя.