Add D455 sensor host and shared Node/Core preparation surface
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# Сенсорный контур Node и два интерфейса управления
|
||||
|
||||
Решение владельца от 05.09.2026. Развивает исходные требования MISSIONCOR-76.
|
||||
Первый адаптер — RealSense D455; K1 остаётся отдельным следующим адаптером,
|
||||
только Wi-Fi Bridge общей сети. USB-инвентаризация системы не равна устройству,
|
||||
готовому к захвату.
|
||||
|
||||
## Операторский сценарий
|
||||
|
||||
Ручное сопряжение БК с Core обязательно и предшествует удалённому управлению.
|
||||
Node обнаруживает поддерживаемую модель, даже если её драйвер ещё не развёрнут.
|
||||
В «Устройствах» Node и внутри аппарата Core отображается одна и та же строка:
|
||||
название, модель, фактическое состояние, круглая кнопка «Подготовить и проверить»
|
||||
(download), отдельные настройки (settings), переход к просмотру (eye).
|
||||
Подготовка запускается непосредственно из строки, без предварительной модалки.
|
||||
Настройки имени остаются компактным окном. Глазик открывает следующий уровень
|
||||
с камерой и её слоями; это основной экран, а не модальное окно.
|
||||
|
||||
Это согласованная владельцем предметная композиция list/detail внутри уже
|
||||
принятого раздела. Вариант с подготовкой только в модалке отвергнут владельцем:
|
||||
он добавляет лишнее действие. Полноценный просмотр в модалке не подходит для
|
||||
постоянной работы с захватом и слоями. ResourceRow/List, IconButton, Window,
|
||||
SettingsCard, Select, SegmentedControl, ActivityIndicator и StatusBadge берутся
|
||||
из Design Guideline. Общий предметный React-модуль используется обоими
|
||||
приложениями через транспортный адаптер; визуальные компоненты не дублируются.
|
||||
|
||||
## Единственный владелец состояния
|
||||
|
||||
Node владеет обнаружением, подготовкой драйвера, конфигурацией, сеансом,
|
||||
захватом и исходной записью. Core является вторым авторизованным клиентом.
|
||||
Оба интерфейса читают один результат. Открытие глазика, обновление страницы,
|
||||
переподключение и heartbeat никогда не запускают захват. START/STOP требуют
|
||||
явного действия, идентификатора операции и дедупликации на борту. Потерянный
|
||||
ответ не означает ошибку выполнения: неопределённый исход не повторяется
|
||||
автоматически. Отзыв сопряжения прекращает приём новых команд от Core.
|
||||
|
||||
Обнаружение, enrollment, connectivity, acquisition, DeviceInstanceRef,
|
||||
DeviceSessionSnapshot и ExecutionBinding используют SDK v0alpha2. Адрес USB
|
||||
является transport alias. Стабильная идентичность D455 выводится из аппаратного
|
||||
серийного номера; сами серийные номера и реальные кадры не попадают в Git/Ops.
|
||||
|
||||
## Подготовка модели
|
||||
|
||||
Общая «Настройка окружения» готовит БК. Поддерживаемая модель имеет отдельный
|
||||
версионный профиль подготовки, фиксированные зависимости с хешами и проверки.
|
||||
Драйверный payload входит в .deb; оператор не выбирает пакеты, URL и команды.
|
||||
Кнопка работает и локально, и через сопряжённый Core. Привилегия ограничена
|
||||
запуском одного фиксированного systemd-задания подготовки модели. Node остаётся
|
||||
без capabilities, с PrivateDevices и NoNewPrivileges. Драйвер работает отдельным
|
||||
пользователем и получает доступ к D455 через узкие udev-правила. Нет глобального
|
||||
pip, chmod 666 для всех камер, firmware-update или патча ядра.
|
||||
|
||||
Этапы и ошибки сохраняются. Повторное действие проверяет установленный payload
|
||||
и результат; две панели не запускают две установки. Успех установки отдельно
|
||||
от успеха проверки камеры. «Готово» требует открытия SDK и получения реальных
|
||||
кадров выбранного устройства; отсутствие камеры/профиля/прав даёт конкретный
|
||||
неуспех. Закрытие UI не обрывает системное задание или запись.
|
||||
|
||||
## Данные и просмотр
|
||||
|
||||
RGB, depth, IR1/IR2 и IMU перечисляются из реального SDK. Профили, доступность
|
||||
параметров и диапазоны получаются у камеры, несовместимые комбинации отвергаются
|
||||
до START. Глубина остаётся метрической исходной Z16; цветная глубина и облако
|
||||
точек — производные представления с калибровкой. Preview ограничен по частоте
|
||||
и плотности; исходная запись не подменяется видеокодеком или предпросмотром.
|
||||
|
||||
Управляющий канал отделён от WebRTC. Сигналинг проходит через локальную сессию
|
||||
Node либо существующее mTLS-доверие Core. Нет публичного rendezvous/STUN/TURN;
|
||||
используются частные адреса LAN/tailnet. Tailscale — сменный транспорт, а не
|
||||
идентичность оборудования. WebRTC не инициирует аппаратный захват.
|
||||
|
||||
## Приёмка
|
||||
|
||||
Настройка из строки, прогресс и повторное открытие, одинаковое состояние в
|
||||
Node/Core, переименование, глазик, профили, действительные кадры и все доступные
|
||||
слои проверяются через интерфейс. Проверки кода и SSH-диагностика дополняют GUI,
|
||||
но не заменяют её. Реальные эксперименты имеют приватный manifest с UTC,
|
||||
monotonic, границами и SHA-256. Чистая установка остаётся отложенным владельцем
|
||||
критерием; текущий подготовленный Mini не выдаётся за чистую систему.
|
||||
Reference in New Issue
Block a user