Skip to main content

Серверные модули

Серверная часть ARTEX состоит из независимых сервисов на Go и C++. Каждый сервис упакован в Docker-контейнер, оркестрация и масштабирование выполняются Kubernetes. Сервисы взаимодействуют через общую шину gRPC, внешние клиенты — через REST API и WebSocket.

Сервисы платформы

┌──────────────────────────────── Docker + Kubernetes ─────────────────────────────────┐
│                                                                                       │
│  ┌────────────┐ ┌──────────────┐ ┌───────────────┐ ┌─────────────┐ ┌───────────────┐ │
│  │  Gateway   │ │ Stream Engine│ │ Device Manager│ │ AI Runtime  │ │ Data Pipeline │ │
│  └─────┬──────┘ └──────┬───────┘ └───────┬───────┘ └──────┬──────┘ └───────┬───────┘ │
│        └───────────────┴─────── gRPC межсервисная шина ───┴────────────────┘         │
└───────────────────────────────────────────────────────────────────────────────────────┘
Сервис Назначение Основные функции
Gateway (API Gateway) Единая точка входа для внешних клиентов REST API и WebSocket; JWT-авторизация; ограничение частоты запросов (rate limiting)
Stream Engine Коммутатор видео Приём RTSP и кадров, преобразование RTSP → WebRTC, мультиплексирование видео и данных, транскодирование
Device Manager Управление устройствами Реестр устройств, подключение устройств, передача команд, контроль статуса и heartbeat
AI Runtime Среда исполнения моделей Загрузка моделей (YOLO / RL / Custom), распределение GPU, ведение входов, выходов и логов моделей
Data Pipeline Запись данных Сохранение в S3, Time Series DB, PostgreSQL; горячий кэш Redis

Модульный конвейер (pipeline)

Прикладная логика обработки данных собирается из модулей в визуальном редакторе. Каждый модуль отвечает за одну задачу и имеет именованные порты — входы и выходы. Пользователь перетаскивает модули на рабочее поле и соединяет порты, формируя конвейер. Изменения применяются без перезапуска сервера (hot reload).

Типовой конвейер автономного управления:

 Захват видео ──▶ Детекция (YOLO) ──▶ Трекинг объектов ──▶ Принятие решения ──▶ Команда устройству
                                                                    │
                                                                    └──▶ Логирование (S3 + DB)

Реализованные модули

Модуль Назначение Порты
ClientIOModule Хостит веб-интерфейс управления устройствами robot.connected, robot.disconnected, robot.telemetry, robot.video
ConsoleLogModule Вывод всех проходящих данных в консоль сервера для отладки —
RobotWSModule Мост между физическим устройством и платформой (WebSocket) robot.command (выход к устройству), robot.telemetry, robot.video, robot.connected, robot.disconnected
RobotsModule Источник данных от группы роботов (используется аналогично RobotWSModule) robot.telemetry, robot.video и др.
YoloModule Детекция объектов на видеопотоке в реальном времени robot.video (вход), yolo.detect (выход)
VideoRecordModule Запись видеопотока в файл по командам video_start_record / video_stop_record robot.video, команды

Подробное описание модулей и их использования в интерфейсе — на странице «Веб-интерфейс управления роботами» книги «Управление роботами с помощью ИИ», примеры конвейеров — на странице Конвейеры модулей.

Правила соединения портов

  • Выход можно соединить с несколькими входами — данные будут доставлены всем получателям.
  • Порты соединяются по типу данных: robot.video ↔ robot.video, robot.telemetry ↔ robot.telemetry.
  • ConsoleLogModule можно подключить к любому порту для отладки.
  • Для записи данных используйте модули записи (VideoRecordModule) или сервис Data Pipeline.

Внешние интерфейсы сервера

Интерфейс Клиенты Назначение
Socket.IO (namespace /robot) Роботы (SDK) Регистрация, телеметрия, видео, команды
WebSocket Web UI оператора, модели ИИ Данные в реальном времени и команды
WebRTC Браузер оператора, модели ИИ Видео с малой задержкой
REST API Web UI, портал управления, внешние системы Пользователи, устройства, сессии, настройки
gRPC Внутренние сервисы Межсервисное взаимодействие
SSH Администраторы Обслуживание серверов