Добавил:
У меня есть канал с приколами: t.me/urmipies_garbage Подпишитесь пж-пж!!!! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Я получил 5 за защиту кста.docx
Скачиваний:
0
Добавлен:
02.09.2026
Размер:
352 Кб
Скачать

3. Моделирование системы

3.1 Архитектура системы

Архитектура разрабатываемой системы следует паттерну «клиент–сервер» с асинхронной обработкой на серверной стороне и событийно-управляемой логикой на клиенте. Компоненты системы представлены на рисунке 3.1.

Рисунок 3.1 – Схема архитектуры системы

Компоненты серверной части:

Видеообработка: два независимых потока, каждый инициирует cv2.VideoCapture() с URL камеры, в цикле вызывает read(), извлекает временную метку из RTP-пакета (используется системное время с коррекцией по задержке сети), помещает кадр и метку в потокобезопасную очередь queue.Queue();

Синхронизация и ратификация: модуль извлекает кадры из обеих очередей, сравнивает временные метки, выбирает пару с разницей < 5 мс (если превышено, отбрасывает более ранний кадр), применяет ректификацию cv2.remap() с заранее загруженными картами (map1_left, map2_left, map1_right, map2_right), передает ректифицированные кадры следующему модулю;

Stereo Matching: применяет StereoBM.compute() к левому и правому ректифицированным изображениям (преобразованным в оттенки серого cv2.cvtColor(…, cv2.COLOR_BGR2GRAY)), получает карту диспаратности (массив int16, значения в пикселях × 16), преобразует в float32 (деление на 16.0);

Triangulation & Object Detection: детектирует маркер ArUco на левом ректифицированном изображении (cv2.aruco.detectMarkers()), вычисляет центр маркера (u, v), извлекает диспаратность d из карты, пересчитывает в 3D-координаты (X, Y, Z) функцией cv2.reprojectImageTo3D() либо прямыми формулами, формирует JSON-RPC-сообщение;

WebSocket Server: асинхронный сервер на websockets.serve(), обрабатывает входящие команды от клиента (start_tracking, stop_tracking), рассылает уведомления update_position всем подключенным клиентам при каждом новом кадре.

Компоненты клиентской части (Godot):

WebSocketClient: класс Godot, подключается к серверу методом connect_to_url(), вызывает poll() в методе process(delta) для обработки входящих фреймов, слушает сигналы connection_established, connection_closed, data_received;

3D Scene Update: изменяет свойство translation узла MeshInstance3D (маркер — сфера) на новые координаты, отрисовка происходит автоматически движком (60 FPS по умолчанию).

3.2 Среда виртуализации стереопары

Разработка и отладка алгоритмов стереозрения на реальных IP-камерах сопряжена с рядом трудностей: необходимость физического размещения двух камер с контролируемым базисом, обеспечение стабильного освещения, синхронизация захвата и повторяемость экспериментов. Для решения этих проблем в данной работе используется среда виртуализации стереопары на базе игрового движка Godot 4. Виртуальный стенд позволяет генерировать синхронизированные пары изображений с точным знанием геометрии сцены, что критически важно для верификации алгоритмов вычитания фона и триангуляции.

Godot 4 предоставляет узлы `Camera3D`, которые моделируют перспективную камеру с настраиваемыми параметрами: поле зрения (FOV), ближняя и дальняя плоскости отсечения, режим проекции (перспективная или ортогональная). Для создания виртуальной стереопары на сцену помещаются два узла `Camera3D`, разнесённые вдоль горизонтальной оси X на расстояние, равное базису B. В данной работе используется базис B = 150 мм, что соответствует типичным значениям для промышленных стереосистем.

Камеры позиционируются относительно мировой системы координат следующим образом:

- Левая камера: координаты (0, 0, 0), ориентация — взгляд вдоль оси Z (вперёд).

- Правая камера: координаты (B, 0, 0), ориентация — также вдоль оси Z.

Для имитации реальных оптических характеристик фокусное расстояние f (в пикселях) пересчитывается из поля зрения камеры. Godot использует угол поля зрения по вертикали (FOV), который связан с фокусным расстоянием соотношением:

, (3.1)

где H — высота изображения в пикселях. При стандартном FOV = 70° и разрешении 1920 × 1080 фокусное расстояние составляет приблизительно 770 пикселей.

Для тестирования алгоритмов позиционирования в виртуальной среде создаётся тестовый объект — сфера радиусом 50 мм с текстурой ярко-красного цвета (для облегчения визуальной верификации). Объект может перемещаться по сцене по заданной траектории. В Godot реализованы два режима движения:

  1. Ручное управление – объект перемещается клавишами-стрелками (вперёд/назад по Z, влево/вправо по X). Это позволяет оператору в реальном времени наблюдать реакцию системы.

  2. Программная траектория – объект движется по синусоидальной траектории в горизонтальной плоскости: X(t) = X_0 + A sin(2 π f t), Z(t) = Z_0 + V t. Такой режим позволяет автоматизировать сбор экспериментальных данных.

  3. Координаты объекта известны в мировой системе координат (поскольку Godot управляет его положением). Эти «истинные» координаты могут быть экспортированы вместе с изображениями (в отдельном UDP-канале или в метаданных файлов) для сравнения с результатами триангуляции. Это обеспечивает возможность количественной оценки точности разработанных алгоритмов без привлечения внешних измерительных систем.

Использование Godot в качестве среды виртуализации стереопары имеет следующие преимущества:

  1. Полный контроль над геометрией - базис, фокусное расстояние, ориентация камер задаются точно и воспроизводимо.

  2. Идеальная синхронизация - отсутствует десинхронизация кадров, что позволяет оценивать алгоритмы в условиях, приближенных к идеалу.

  3. Отсутствие шумов и искажений - изображения, генерируемые движком, не содержат теплового шума, дисторсии или артефактов сжатия (если отключена постобработка). Это позволяет изолированно тестировать алгоритмы триангуляции.

  4. Быстрое прототипирование - изменение параметров сцены (добавление новых объектов, изменение освещения) выполняется в графическом редакторе без физических манипуляций с камерами.

ью конечных результатов.

Соседние файлы в предмете Дипломная работа (подготовка и защита)