К содержимому
  1. Главная
  2. Блог
  3. Синхронны ли камеры? Проблемы и решения для двух разъёмов камер (J13 и J49) на Jetson Nano B01

Синхронны ли камеры? Проблемы и решения для двух разъёмов камер (J13 и J49) на Jetson Nano B01

10 апреля 2020 · По материалам Arducam

В новой ревизии Jetson Nano есть несколько аппаратных изменений, в том числе дополнительный слот камеры — подробнее в разборе изменений несущей платы B01. Похоже, в NVIDIA, как и в Arducam, видят, насколько пользователям нужна полноценная стереокамера для Jetson Nano.

Комплект разработчика Jetson Nano B01

Arducam специализируется на решениях с несколькими камерами для популярных встраиваемых систем и сделала синхронизированную пару камер на Jetson Nano ещё до появления официальной поддержки. Ниже — подробнее о стереокамере на Jetson Nano и о проблемах синхронизации.

Два способа запустить обе камеры на новом Jetson Nano

Сначала о вопросах, с которыми сталкивается каждый, кто берётся за стереокамеру на Jetson Nano: как запустить обе камеры и чем это отличается от прежних команд? Оба слота камер на несущей плате B01 одинаковы и по электрическим характеристикам, и по программным возможностям. Подключите обе камеры — при загрузке они появятся в каталоге /dev как устройства video0 и video1. Использовать их можно двумя способами.

Через драйвер V4L2

Первый и самый простой способ — запустить обе камеры через фреймворк драйверов камер V4L2 и его API. В этом случае каждая камера открывается и инициализируется независимо.

Через программы NVIDIA для камер

Второй способ — проприетарная программная архитектура NVIDIA для камер и её API, например libargus и nvarguscamerasrc. Подробнее о них — в документации NVIDIA.

Пример запуска камеры через инструмент NVIDIA. Параметр sensor-id задаёт, какую камеру открыть:

gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! ‘video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12’ ! nvvidconv flip-method=0 ! ‘video/x-raw,width=960, height=616’ ! nvvidconv ! nvegltransform ! nveglglessink -e

Чтобы открыть две камеры одновременно, попробуйте такую команду:

gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! ‘video/x-raw(memory:NVMM),width=1920,height=1080’ ! nvvidconv ! xvimagesink sync=false & gst-launch-1.0 nvarguscamerasrc sensor-id=1 ! ‘video/x-raw(memory:NVMM),width=1920,height=1080,’ ! nvvidconv ! xvimagesink sync=false

Как синхронизировать две камеры: способ Jetson Nano и способ Arducam

В API mmal на Raspberry Pi есть параметр режима 3D, который открывает две камеры бок о бок. NVIDIA предлагает другой, программный подход — пример syncSensor. В нём несколько сенсоров работают в одном сеансе, и один запрос на захват дублируется на обе камеры.

Однако результаты захвата получаются лишь близкими по времени. Изучив новую несущую плату Jetson Nano B01, в Arducam выяснили, что по сравнению с прежней ревизией на ней просто добавлен ещё один слот камеры MIPI CSI-2 на 15 контактов, без серьёзных изменений. Для камер со скользящим затвором, например IMX219 со штатной поддержкой в драйвере, идеальная синхронизация в таком случае не гарантирована.

Плата стереокамеры OV9281, подключённая к плате Stereo Camera HAT

Решение Arducam для стереокамер обеспечивает синхронизацию на аппаратном уровне: камеры работают от общего тактового сигнала, а команды I2C передаются обеим широковещательно. В этом принципиальное отличие от официального решения. По данным Arducam, такой подход выдерживает гораздо более жёсткие требования к синхронизации стереокамер с любыми сенсорами.

Начало накопления — ключевой фактор синхронизации

Прежде чем разбираться в причинах, сразу вывод: даже с официальным примером кода для стереокамеры две камеры на Jetson Nano не синхронизированы полностью, потому что накопление заряда в них начинается не строго одновременно.

Диаграмма экспозиции и считывания двух камер на Jetson Nano

Что такое накопление? Захват изображения сенсором можно сравнить с наполнением ведра водой из-под крана. Вы открываете кран и ждёте, пока вода льётся в ведро, а набрав нужное количество, закрываете кран и уносите ведро.

Анимация: синхронная работа камер

Сенсор работает так же, только в КМОП-матрицу «льются» фотоны. Накопление похоже на наполнение ведра: оно начинается, когда открывают кран, и заканчивается, когда его закрывают. А перенос ведра можно сравнить со считыванием данных изображения.

Настоящая синхронная стереосъёмка: подход Arducam

Чтобы две камеры были полностью синхронизированы, они должны одновременно начинать накопление и одновременно отдавать данные изображения. С текущим драйвером камер Jetson Nano не может запустить две камеры строго в один момент, а тактовые генераторы камер работают на немного разных частотах. Поэтому со временем тайминги камер расходятся, а вслед за ними плывёт и время экспозиции.

Решение Arducam — общий тактовый сигнал и широковещательная передача по I2C. Общий тактовый сигнал устраняет дрейф таймингов со временем, а широковещательная передача по I2C гарантирует, что камеры выдают данные строго одновременно и, значит, одновременно начинают накопление. Эти два приёма позволяют полностью синхронизировать две камеры с минимальными затратами на разработку драйвера и минимальным усложнением аппаратной части.

Проверка синхронизации камер осциллографом

Проверить, синхронизированы ли камеры, проще всего осциллографом: измерьте выходной сигнал каждого модуля камеры и посмотрите на экран. Если камеры полностью синхронизированы, обе дают одинаковую, практически неподвижную картинку. Если нет, различия хорошо заметны.

Arducam сняла об этом видео (есть на YouTube). На нём хорошо видно, что две камеры на Jetson Nano не синхронизированы строго, а решение на плате Arducam Stereo Camera HAT — синхронизировано.

Синхронизации помогают камеры с глобальным затвором и внешним запуском

Раз речь зашла о времени накопления, есть и другой способ синхронного захвата на Jetson Nano B01 — камеры с глобальным затвором и входом внешнего запуска (trigger). В режиме потоковой передачи такие камеры тоже не полностью синхронизированы, но в режиме внешнего запуска накопление начинается одновременно, а время считывания очень близко. Как работать с камерами с внешним запуском на Jetson Nano, показано в другом проекте Arducam — Jetvariety (видео на YouTube).

В планах Arducam — до 8 синхронизированных модулей камер на Jetson Nano B01

Плата Arducam Stereo Camera HAT не призвана заменить штатное решение Jetson Nano для стереокамер — она расширяет его возможности. Плата удваивает число слотов камер и добавляет синхронизированные стереокамеры MIPI. Она не ограничена определённым типом камер, ревизией Jetson Nano и даже платформой Jetson.

Arducam сделала стереокамеру возможной ещё тогда, когда у Jetson Nano был один слот камеры, и теперь работает над системами с бо́льшим числом синхронизированных камер. На ревизии B01 с платой Arducam Stereo Camera HAT уже можно запустить две пары синхронизированных модулей камер — всего четыре.

Следующий шаг — плата Camarray HAT: её прототип уже готов. Она вдвое увеличивает число объединяемых камер и подключает четыре синхронизированные камеры к одному штатному слоту MIPI. В планах Arducam — подключение 8 синхронизированных модулей камер к Jetson Nano B01.

Ещё по теме

Запросить цену

Укажите количество — пришлём коммерческое предложение.