Тест латентности камер с помощью GPIOАвтор: Серженко Фёдор
В приложениях робототехники даже небольшая задержка может стать серьёзной проблемой. Часто требуется иметь время отклика менее 50 миллисекунд, поэтому приходится оптимизировать работу Jetson и других компонент всей системы, а не фокусироваться исключительно на пропускной способности. Тест G2G (glass-to-glass, "от экрана до экрана") широко используется для оценки времени задержки. Он измеряет время между двумя "экранами". В этом тесте мы обычно выводим на монитор таймер высокого разрешения, снимаем кадр с монитора, отправляем данные на компьютер для вычислений и снова выводим обработанное изображение на монитор. При остановке программы на мониторе видны два изображения - текущее время и время таймера в момент захвата кадра. Их разность и есть латентность системы. Этот метод включает в себя время экспозиции, передачу данных, кодирование, передачу по сети, декодирование и отображение на мониторе. Таким образом, бенчмаркинг должен изолировать каждый этап, чтобы выявить узкие место во всем конвейере.
![]()
Каковы наиболее важные ограничения для тестов с низкой задержкой?Чтобы выявить основные ограничения на пути к минимальной задержке, мы провели следующий G2G-тест с использованием самого короткого конвейера:
Для тестирования мы использовали Jetson Orin NX 16 ГБ с подключенной камерой XIMEA MC031CG-SY. Камера имеет интерфейс USB3 и мы установили частоту кадров 150 кадров в секунду, разрешение ROI 1920×1080 при 8 битах и время экспозиции 0.2 миллисекунды. Частота кадров на мониторе составляла всего 60 кадров в секунду, поскольку с помощью Jetson невозможно добиться более высокой частоты кадров. Оказалось, что минимальная задержка для теста G2G составила 70 мс и более. Как видно из условий теста, передача данных происходит очень быстро. Графический процессор не выполняет обработку, частота кадров камеры высокая, а время экспозиции низкое. Неудовлетворительный результат теста G2G может быть вызван следующими причинами - это либо задержка в USB3, либо задержка в OpenGL. Тест задержки GPIO без монитора и без OpenGLДля измерения задержки попробуем обойтись без монитора и без вывода картинки через OpenGL. Это имеет смысл, поскольку для многих приложений робототехники монитор не требуется. Очень часто нужно лишь захватить изображение с помощью камеры, передать его на Jetson или другое оборудование, сделать расчёты или передать на обработку в приложение ИИ для принятия решения, и отправить команду исполнительному механизму. Мы провели этот тест, используя GPIO от Jetson и светодиод. Мы можем программно включать и выключать светодиод с помощью GPIO и видеть, включен ли светодиод на полученном от камеры изображении. Мы использовали следующий сценарий:
Мы провели многочисленные тесты с использованием камеры XIMEA MC031CG-SY с интерфейсом USB3 на частоте кадров от 30 до 200 кадров в секунду. Во всех случаях интервал между последним чёрным кадром, после получения которого включали светодиод, и первым белым кадром, неизменно составлял один кадр. При разрешении 1920×1080 при 150 кадрах в секунду задержка составила менее 6,5 мс в случае отсутствия OpenGL. Стоит отметить, что конечный результат включает в себя задержку интерфейса USB3, поэтому отсюда следует, что задержка, связанная с USB3 не является узким местом, по крайней мере, для этой камеры XIMEA. Фактическая задержка для этого эксперимента осталась неизвестной, мы определили лишь верхнюю границу. Мы также использовали меньшие разрешения, такие как 640×640, для достижения скорости 200 кадров в секунду, но задержка также составила всего один кадр. При этом, мы всегда проверяли, что потерь кадров не было. Схема обработки изображений на Jetson Orin NX (CUDA)Пример с кратчайшим конвейером обработки изображений от камеры подходит только для оценки латентности. Рассмотрим реальный пример использования видеокамеры в робототехнике. Следующий конвейер обработки кадров от видеокамеры обеспечивает предварительную обработку данных перед использованием в ИИ приложении:
Исходя из того, что мы работаем с 8-битными RAW изображениями Bayer с разрешением 1920×1080 и частотой 150 кадров в секунду на Jetson Orin NX 8GB, общая задержка для этого конвейера составляет до 13 мс. После включения светодиода следующий кадр становится черным, а следующий - белым. Таким образом, для получения и передачи необработанного кадра с сенсора на Jetson требуется до 6,5 мс, а время работы на GPU вышеуказанного конвейера составляет около 4-5 мс, так что мы можем увидеть результат через 13 мс. В этом случае общая загрузка графического процессора Orin NX составляет около 75%. Мы провели аналогичный тест с 8-битными необработанными изображениями Bayer с разрешением 720×576 и частотой 200 кадров в секунду на Jetson Orin NX 8GB, и в этом случае общая задержка составила до 5 мс, включая время обработки на GPU. Это означает, что следующий кадр после включения светодиода будет белым. Общая загрузка графического процессора Orin NX составляет около 60%. Как мы можем видеть, задержка находится в диапазоне 1-2 кадров при условии отказа от OpenGL, причём это оценка сверху. Как можно настроить OpenGL для достижения меньшей задержки?Поскольку мы определили, что интерфейс USB3 камеры XIMEA не оказывает существенного влияния на задержку, то можно сделать вывод, что основной проблемой при тестировании G2G является OpenGL. Ниже рассмотрим подробности работы OpenGL. Это основные этапы обработки данных - от памяти графического процессора до монитора:
Таким образом, для достижения оптимальной производительности OpenGL при тестировании G2G нам требуется монитор с высокой частотой кадров, камера с высокой частотой кадров и интерфейсом с высокой пропускной способностью, малое время экспозиции сенсора, отключенный VSync, высокопроизводительный графический процессор и быстрая панель. Тест G2G вполне жизнеспособен, но нужно уделять дополнительное внимание реализации и использованию OpenGL. Дополнительная информация: |