Files
ozone-tech_owl_prime/docs/PHYSICS_FIDELITY_AUDIT.md
Даня Архипов 985f7c327d feat: maximize sorter demo realism and add safe agent MVP
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>
2026-07-15 16:53:35 +00:00

6.9 KiB
Raw Blame History

Аудит физической достоверности

Дата: 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. Рекомендации (без иллюзий)

  1. Не подключать тяжёлый physics engine перед живым показом — риск FPS.
  2. Держать честные подписи: «псевдо-CV», «кинематика».
  3. При желании повысить fidelity: лёгкие contact constraints только на gate/pusher (opt-in demo mode).
  4. Унифицировать twin, чтобы physics story не расходилась визуально между страницами.

9. Вывод

Проект честно находится в зоне deterministic kinematic digital twin с реальной rule-based классификацией. Это достаточно для Track 3 MVP и жюри, если proof-слой включён. Называть систему «физическим симулятором с CV» без оговорок — нельзя.