Серверные модули
Серверная часть 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 | Администраторы | Обслуживание серверов |