К содержимому
  1. Главная
  2. Блог
  3. Camarray: синхронизированный стереокомплект Arducam 12 Мп на IMX477

Camarray: синхронизированный стереокомплект Arducam 12 Мп на IMX477

6 декабря 2022 · По материалам Arducam

Введение

Синхронизированный стереокомплект Arducam 12 Мп позволяет одновременно работать с двумя модулями камер IMX477 12 Мп через один разъём камеры MIPI CSI-2 на Raspberry Pi. В комплект входят два модуля камер IMX477 12 Мп класса High Quality и плата HAT для стереокамеры Arducam. Благодаря чипу ArduChip плата HAT выдаёт две камеры за одну, и одноплатный компьютер принимает такое подключение. На этом комплекте можно собрать стереосистему для задач, связанных с глубиной, или обновить стереосистему на IMX219.

Что такое Camarray

Camarray — серия встраиваемых стереокамер и решений для нескольких камер от Arducam. Camarray пришла на смену плате Arducam Sync Stereo Camera HAT: она выдаёт до 4 синхронизированных модулей камер за одно подключение к разъёму камеры встраиваемой системы — Raspberry Pi, Jetson Nano или Xavier NX. С Arducam Camarray число камер больше не ограничено разъёмами на основной или несущей плате. А драйверы камер от Arducam делают приложения с несколькими камерами ещё гибче.

ПримечаниеОграничения платы Camarray HAT:
  1. Camarray HAT не поддерживает цифровое панорамирование в режиме объединения с половинным разрешением и программное управление скоростью панорамирования.
  2. Camarray HAT не обрезает кадр наполовину (половина горизонтального разрешения каждой камеры и половина угла обзора), а сжимает его вдвое (половина горизонтального разрешения каждой камеры при неизменном угле обзора), поэтому режим сканирования ей не нужен.
Важно: линии MIPI у модуля IMX477Аппаратно модуль камеры IMX477 от Arducam поддерживает 4 линии, но драйвер камеры для 4 линий требует дополнительной доработки. Причины:
  1. Стандартные Raspberry Pi и Jetson Nano/Xavier NX физически не поддерживают подключение по 4 линиям: у обеих платформ разъёмы CSI только на 2 линии. Аппаратная поддержка 4 линий есть только у Raspberry Pi Compute Module и у некоторых несущих плат для Jetson от сторонних производителей. Поэтому массовой потребности в таком подключении нет.
  2. Кроме физического разъёма на 4 линии, нужна дополнительная работа — прежде всего драйверы камеры. А драйверы ограничены возможностями самой платформы. Например, 4 линии не дадут видео 4K на Raspberry Pi: VideoCore его пока не поддерживает. Jetson Nano тоже отчасти ограничен возможностями кодирования. Убедитесь, что 4 линии вам действительно нужны.

Общие характеристики

Сенсор

Модель сенсораIMX477
Тип затвораСкользящий затвор
Активная область4056 × 3040
Разрешение12,3 Мп × 2
Оптический формат1/2.3″
Размер пикселя1,55 × 1,55 мкм
Цветной фильтр650 нм
Блок-схема сенсора IMX477
Блок-схема IMX477

Объектив

Крепление объективаCSM12
Сменный объективДаДа
ДиафрагмаF1.2F2.8
ФокусировкаРучнаяРучная
Дистанция фокусировкиОт 20 см до бесконечности (при фокусировке на бесконечность)От 5 см до бесконечности (при фокусировке на бесконечность)
Фокусное расстояние6 мм3,9 мм
Угол обзора65° по горизонтали75° по горизонтали
Чувствительность к ИКТолько видимый светТолько видимый свет
Объектив CS с углом обзора 65° по горизонтали

Платы

Размер платы камеры38 × 38 мм
Размер платы HAT65 × 56 мм
Чертёж платы камеры с размерами
Механический чертёж платы камеры OV9281
Чертёж платы HAT с размерами
Механический чертёж платы HAT
№ выводаНазваниеТипОписание
13V3ПитаниеПитание 3,3 В
2FSINВходВход синхронизации кадров
3STBВыходВыход строба для светодиода
4GNDЗемляЗемля
53V3ПитаниеПитание 3,3 В
6SDAВход/выходДанные последовательного интерфейса SCCB (вход/выход)
7SCLВходТактовый вход последовательного интерфейса SCCB
8GNDЗемляЗемля

Разъём и шлейф

Интерфейс разъёмаMIPI CSI-2, 15 контактов, 2 линии
Длина шлейфа150 мм (22 контакта), 80 мм (22 контакта), 73 мм (15–22 контакта)
№ выводаНазваниеТипОписание
1GNDЗемляОбщий провод питания
2CAM_D0_NВыходЛиния пиксельных данных 0 (−)
3CAM_D0_PВыходЛиния пиксельных данных 0 (+)
4GNDЗемляОбщий провод питания
5CAM_D1_NВыходЛиния пиксельных данных 1 (−)
6CAM_D1_PВыходЛиния пиксельных данных 1 (+)
7GNDЗемляОбщий провод питания
8CAM_CK_NВыходПиксельный тактовый сигнал с сенсора (−)
9CAM_CK_PВыходПиксельный тактовый сигнал с сенсора (+)
10GNDЗемляОбщий провод питания
11CAM_D2_NВыходЛиния пиксельных данных 2 (−)
12CAM_D2_PВыходЛиния пиксельных данных 2 (+)
13GNDЗемляОбщий провод питания
14CAM_D3_NВыходЛиния пиксельных данных 3 (−)
15CAM_D3_PВыходЛиния пиксельных данных 3 (+)
16GNDЗемляОбщий провод питания
17POWER-ENВходВключение питания
18LED-ENВход/выходВключение светодиода / XCLK
19GNDЗемляОбщий провод питания
20SCLВходТактовый вход последовательного интерфейса SCCB
21SDAВход/выходДанные последовательного интерфейса SCCB (вход/выход)
22VCCПитаниеПитание 3,3 В

Возможности драйвера

ВидеоформатGREY (8 бит) / Y10P (10 бит)
Выходной интерфейсПоследовательный выход MIPI, 2 линии
Форматы выводаRAW, 8/10 бит
Частота кадров2028 × 1522 при 30 к/с (официальный драйвер Raspberry Pi); 4056 × 2 × 3040 при 6 к/с (драйвер MIPI-камеры от Arducam)

Быстрый старт

Видеоинструкция по быстрому старту опубликована на YouTube.

Подключение оборудования

Стереокомплект Arducam B0265R в сборе
Состав стереокомплекта Arducam B0265R
ПримечаниеСоблюдайте два правила:
  1. Любые операции с оборудованием на плате HAT выполняйте только при выключенном питании.
  2. Следите, чтобы платы камер не касались выводов GPIO на Raspberry Pi и Jetson: иначе возможно короткое замыкание.

Как использовать камеру (для Bullseye)

Если у вас последняя версия Raspberry Pi OS (выпуски от 28 января 2022 года и новее, Debian 11 Bullseye), обновите файл конфигурации и используйте libcamera-apps.

  • Для Raspberry Pi OS Bullseye на Pi 4 сделайте следующее:
sudo nano /boot/config.txt 
Find the line: camera_auto_detect=1, update it to:
camera_auto_detect=0
dtoverlay=imx477
Save and reboot.
  • На Pi 0–3 с Bullseye дополнительно сделайте следующее:
Open a terminal 
Run sudo raspi-config
Navigate to Advanced Options 
Enable Glamor graphic acceleration 
Reboot your Pi

Если возникнут проблемы с выводом изображения на экран, также выполните следующие шаги:

Open a terminal
Run sudo raspi-config
Navigate to Advanced Options
Navigate to GL Driver
Select GL (Full KMS)
Reboot your Pi
  • Для Raspberry Pi Compute Module 3/4

Текущая версия ПО поддерживает только одну камеру; CM4 по умолчанию использует CAM1.

ПримечаниеНовая версия камеры работает только в Bullseye. Если камера нужна в устаревшей системе, напишите нам на quote@arducam-russia.ru.

Если у вас система предыдущего поколения (Buster и более ранние), выполните следующие шаги:

Базовое использование в устаревшей системе

Для Raspberry Pi есть 3 драйвера:

  • официальный драйвер;
  • драйвер MIPI-камеры от Arducam;
  • драйвер V4L2 от Arducam.

Драйвер MIPI-камеры не конфликтует с официальным драйвером, а драйвер V4L2 — конфликтует. Синхронизированная стереокамера Arducam 12 Мп работает с официальным драйвером или с драйвером MIPI-камеры. Чтобы пользоваться официальными командами, например raspistill и raspivid, сначала проверьте, не установлен ли драйвер V4L2, и если установлен — удалите его.

1. Выполните команду:

sudo nano /boot/config.txt

2. Несколько раз нажмите PageDown или прокрутите колесо мыши вниз и проверьте, есть ли в файле строка dtoverlay=arducam.

Строка dtoverlay=arducam в файле config.txt

1) Если строка dtoverlay=arducam есть, измените её на #dtoverlay=arducam — так драйвер V4L2 будет отключён. Нажмите Ctrl+X, Y, Enter, чтобы сохранить изменения и выйти. Затем перезагрузите систему командой:

sudo reboot

2) Если строки dtoverlay=arducam нет, драйвер V4L2 не установлен. Переходите к следующим шагам.

3) Если вы видите #dtoverlay=arducam, драйвер V4L2 от Arducam уже устанавливали, но он удалён. Переходите к следующим шагам.

Проверка камеры

1. Откройте главное меню и запустите утилиту Raspberry Pi Configuration.

Запуск Raspberry Pi Configuration из главного меню

2. Перейдите на вкладку Interfaces и убедитесь, что камера включена:

Камера включена на вкладке Interfaces

3. Перезагрузите Raspberry Pi.

4. Проверьте, определяется ли камера:

vcgencmd get_camera
Результат команды vcgencmd get_camera
  • detected=1 — камера обнаружена (OV5647, IMX219 или IMX477).
  • detected=0 — камера не обнаружена. Проверьте подключение шлейфа и перезагрузите Raspberry Pi.

Первый запуск с официальным драйвером

1. Предпросмотр в реальном времени

Выполните штатную команду raspistill:

raspistill -t 0
Чтобы выйти из предпросмотра, нажмите Ctrl+C.
Предпросмотр стереокамеры командой raspistill

Выполните штатную команду raspivid:

raspivid -t 0
Предпросмотр стереокамеры командой raspivid

Предпросмотр можно вывести в окно заданного размера:

raspistill -t 0 -p 800,100,1024,768
raspivid -t 0 -p 800,100,1024,768
800,100 — начальная позиция окна (левый верхний угол), 1024,768 — размер изображения после масштабирования.
Предпросмотр в окне заданного размера

2. Сохранение снимка

Сделайте снимок с задержкой 2 секунды (время задаётся в миллисекундах) и сохраните его в файл image.jpg:

raspistill -t 2000 -o image.jpg
Файл снимка в домашней папке pi
Стереоснимок с двух камер IMX477

Снимок заданного размера:

raspistill -t 2000 -o image.jpg -w 1920 -h 1080
Стереоснимок IMX477 заданного размера

3. Запись видео

Запишите 10 секунд видео H.264 (время задаётся в миллисекундах) и сохраните его в файл video.h264:

raspivid -t 10000 -o video.h264 
Команда записи видео со стереокамеры IMX477
Файл video.h264 в домашней папке pi

Дважды щёлкните файл video.h264 — он откроется в медиаплеере VLC.

Воспроизведение стереовидео IMX477 в VLC

4. Расширенное управление

Плата HAT для стереокамеры поддерживает выбор канала и цифровое панорамирование. Для этого нужно записывать регистры ArduChip на плате по шине I2C Raspberry Pi, поэтому сначала включите шину I2C способом, описанным ниже.

Клонируйте репозиторий ArduCAM/MIPI_Camera с GitHub и запустите скрипт ./enable_i2c_vc.sh, затем перезагрузите Raspberry Pi.

Перед любой командой управления сначала запустите предпросмотр или запись видео командой raspistill или raspivid, затем откройте ещё одно окно терминала и выполняйте команды в нём.

4.1 Переключение на CAM0, одиночный режим

Выполните команду i2cset -y 0 0x24 0x24 0x01, чтобы переключиться из стереорежима в одиночный режим с изображением CAM0.

4.2 Переключение на CAM1, одиночный режим

Выполните команду i2cset -y 0 0x24 0x24 0x02, чтобы переключиться из стереорежима в одиночный режим с изображением CAM1.

4.3 Возврат в стереорежим (полное объединение с масштабированием)

Выполните команду i2cset -y 0 0x24 0x24 0x00, чтобы вернуться в стереорежим.

Первый запуск с драйвером MIPI-камеры

1. Загрузка и установка SDK

Скачайте библиотеку SDK:

git clone https://github.com/ArduCAM/MIPI_Camera.git
Загрузка SDK
Загрузка
Загрузка SDK завершена
Загрузка завершена (обычно занимает несколько минут)

Перейдите в каталог SDK:

cd MIPI_Camera/RPI/
Переход в каталог SDK

Установите SDK:

make install
Установка SDK

Включите I2C_0:

chmod +x enable_i2c_vc.sh
./enable_i2c_vc.sh
Включение шины I2C

Нажмите y и Enter, чтобы перезагрузить Raspberry Pi.

2. Сборка демо-программы

Перейдите в каталог:

cd MIPI_Camera/RPI/

Соберите демо-программу:

make clean && make
Сборка демо-программы
1. Если OpenCV сообщит об ошибке, ничего страшного. 2. После любых изменений демо-программу нужно пересобрать.

3. Запуск демо-программы (команда arducamstill)

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

3.1 Справка

Выполните команду ниже, чтобы получить описание параметров команды arducamstill.

Обязательно запускайте её из каталога MIPI_Camera/RPI.
./arducamstill -?
Справка по параметрам arducamstill

3.2 Предпросмотр в реальном времени

Проверьте поддерживаемые режимы:

./list_format

Запускать можно только режимы из полученного списка. Например, здесь можно запустить только mode1 или mode2.

Список режимов стереокамеры IMX477

Запуск mode0:

./arducamstill -t 0 -m 0
Запуск режима mode0
Изображение в режиме mode0

Запуск mode1:

./arducamstill -t 0 -m 1
Запуск режима mode1
Изображение в режиме mode1
По умолчанию изображение выводится в окне с масштабированием. Чтобы изменить размер окна, внесите изменения в демо-программу.

Чем mode0 отличается от mode1:

  1. Разрешение mode0 — 4056 × 3040, mode1 — 8112 × 3040.
  2. Частота кадров в mode0 выше, чем в mode1.
  3. Если растянуть изображение mode0 по горизонтали вдвое, оно будет выглядеть точно так же, как изображение mode1.

3.3 Сохранение снимка

#mode0

Сделайте снимок с задержкой 5 секунд (время задаётся в миллисекундах) и сохраните его в файл image.jpg:

./arducamstill -t 5000 -m 0 -o image.jpg
Сохранение снимка в режиме mode0
ПримечаниеВ этой демо-программе экспозиция и усиление регулируются стрелками на клавиатуре, поэтому программа всё время ждёт команд с клавиатуры.

Чтобы выйти из предпросмотра, нажмите Ctrl+C.

Снимок сохраняется в каталоге /home/pi/MIPI_Camera/RPI.

Файл снимка в каталоге MIPI_Camera/RPI
Сохранённый стереоснимок

#mode1

Сделайте снимок с задержкой 5 секунд (время задаётся в миллисекундах) и сохраните его в файл image.jpg:

./arducamstill -t 5000 -m 1 -o image.jpg
Сохранение снимка в режиме mode1

Что дальше

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

Вопросы и ответы

Можно ли поставить объективы с фокусным расстоянием 20–28 мм вместо стандартного 6 мм?

Да, стандартный объектив CS 6 мм можно заменить своим.

Чем камера из комплекта (B0265R) отличается от стандартной камеры (B0240)?

Камеру из комплекта (B0265R) можно использовать только с платой HAT — напрямую к Raspberry Pi её не подключить. Стандартную камеру (B0240) можно подключать к Raspberry Pi напрямую.

Можно ли (возможно, в будущем) заменить камеру HQ 12 Мп на камеру с более высоким разрешением, например B0164 на AR1820HS 18 Мп?

Arducam учитывает спрос рынка; пока стереокамеру с более высоким разрешением можно получить только под заказ.

Ещё по теме

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

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