Camarray: синхронизированный стереокомплект Arducam 12 Мп на IMX477
Введение
Синхронизированный стереокомплект 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 не поддерживает цифровое панорамирование в режиме объединения с половинным разрешением и программное управление скоростью панорамирования.
- Camarray HAT не обрезает кадр наполовину (половина горизонтального разрешения каждой камеры и половина угла обзора), а сжимает его вдвое (половина горизонтального разрешения каждой камеры при неизменном угле обзора), поэтому режим сканирования ей не нужен.
- Стандартные Raspberry Pi и Jetson Nano/Xavier NX физически не поддерживают подключение по 4 линиям: у обеих платформ разъёмы CSI только на 2 линии. Аппаратная поддержка 4 линий есть только у Raspberry Pi Compute Module и у некоторых несущих плат для Jetson от сторонних производителей. Поэтому массовой потребности в таком подключении нет.
- Кроме физического разъёма на 4 линии, нужна дополнительная работа — прежде всего драйверы камеры. А драйверы ограничены возможностями самой платформы. Например, 4 линии не дадут видео 4K на Raspberry Pi: VideoCore его пока не поддерживает. Jetson Nano тоже отчасти ограничен возможностями кодирования. Убедитесь, что 4 линии вам действительно нужны.
Общие характеристики
Сенсор
| Модель сенсора | IMX477 |
|---|---|
| Тип затвора | Скользящий затвор |
| Активная область | 4056 × 3040 |
| Разрешение | 12,3 Мп × 2 |
| Оптический формат | 1/2.3″ |
| Размер пикселя | 1,55 × 1,55 мкм |
| Цветной фильтр | 650 нм |

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

Платы
| Размер платы камеры | 38 × 38 мм |
|---|---|
| Размер платы HAT | 65 × 56 мм |


| № вывода | Название | Тип | Описание |
|---|---|---|---|
| 1 | 3V3 | Питание | Питание 3,3 В |
| 2 | FSIN | Вход | Вход синхронизации кадров |
| 3 | STB | Выход | Выход строба для светодиода |
| 4 | GND | Земля | Земля |
| 5 | 3V3 | Питание | Питание 3,3 В |
| 6 | SDA | Вход/выход | Данные последовательного интерфейса SCCB (вход/выход) |
| 7 | SCL | Вход | Тактовый вход последовательного интерфейса SCCB |
| 8 | GND | Земля | Земля |
Разъём и шлейф
| Интерфейс разъёма | MIPI CSI-2, 15 контактов, 2 линии |
|---|---|
| Длина шлейфа | 150 мм (22 контакта), 80 мм (22 контакта), 73 мм (15–22 контакта) |
| № вывода | Название | Тип | Описание |
|---|---|---|---|
| 1 | GND | Земля | Общий провод питания |
| 2 | CAM_D0_N | Выход | Линия пиксельных данных 0 (−) |
| 3 | CAM_D0_P | Выход | Линия пиксельных данных 0 (+) |
| 4 | GND | Земля | Общий провод питания |
| 5 | CAM_D1_N | Выход | Линия пиксельных данных 1 (−) |
| 6 | CAM_D1_P | Выход | Линия пиксельных данных 1 (+) |
| 7 | GND | Земля | Общий провод питания |
| 8 | CAM_CK_N | Выход | Пиксельный тактовый сигнал с сенсора (−) |
| 9 | CAM_CK_P | Выход | Пиксельный тактовый сигнал с сенсора (+) |
| 10 | GND | Земля | Общий провод питания |
| 11 | CAM_D2_N | Выход | Линия пиксельных данных 2 (−) |
| 12 | CAM_D2_P | Выход | Линия пиксельных данных 2 (+) |
| 13 | GND | Земля | Общий провод питания |
| 14 | CAM_D3_N | Выход | Линия пиксельных данных 3 (−) |
| 15 | CAM_D3_P | Выход | Линия пиксельных данных 3 (+) |
| 16 | GND | Земля | Общий провод питания |
| 17 | POWER-EN | Вход | Включение питания |
| 18 | LED-EN | Вход/выход | Включение светодиода / XCLK |
| 19 | GND | Земля | Общий провод питания |
| 20 | SCL | Вход | Тактовый вход последовательного интерфейса SCCB |
| 21 | SDA | Вход/выход | Данные последовательного интерфейса SCCB (вход/выход) |
| 22 | VCC | Питание | Питание 3,3 В |
Возможности драйвера
| Видеоформат | GREY (8 бит) / Y10P (10 бит) |
|---|---|
| Выходной интерфейс | Последовательный выход MIPI, 2 линии |
| Форматы вывода | RAW, 8/10 бит |
| Частота кадров | 2028 × 1522 при 30 к/с (официальный драйвер Raspberry Pi); 4056 × 2 × 3040 при 6 к/с (драйвер MIPI-камеры от Arducam) |
Быстрый старт
Видеоинструкция по быстрому старту опубликована на YouTube.
Подключение оборудования


- Любые операции с оборудованием на плате HAT выполняйте только при выключенном питании.
- Следите, чтобы платы камер не касались выводов 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.
Если у вас система предыдущего поколения (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.

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.

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

3. Перезагрузите Raspberry Pi.
4. Проверьте, определяется ли камера:
vcgencmd get_camera

detected=1— камера обнаружена (OV5647, IMX219 или IMX477).detected=0— камера не обнаружена. Проверьте подключение шлейфа и перезагрузите Raspberry Pi.
Первый запуск с официальным драйвером
1. Предпросмотр в реальном времени
Выполните штатную команду raspistill:
raspistill -t 0
Чтобы выйти из предпросмотра, нажмите Ctrl+C.

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

Предпросмотр можно вывести в окно заданного размера:
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


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

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


Дважды щёлкните файл video.h264 — он откроется в медиаплеере 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:
cd MIPI_Camera/RPI/

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

Включите I2C_0:
chmod +x enable_i2c_vc.sh
./enable_i2c_vc.sh

Нажмите y и Enter, чтобы перезагрузить Raspberry Pi.
2. Сборка демо-программы
Перейдите в каталог:
cd MIPI_Camera/RPI/
Соберите демо-программу:
make clean && make

1. Если OpenCV сообщит об ошибке, ничего страшного. 2. После любых изменений демо-программу нужно пересобрать.
3. Запуск демо-программы (команда arducamstill)
Это многофункциональное приложение: в нём можно смотреть предпросмотр, получать изображения в разных форматах и точно настраивать качество изображения.
3.1 Справка
Выполните команду ниже, чтобы получить описание параметров команды arducamstill.
Обязательно запускайте её из каталога MIPI_Camera/RPI.
./arducamstill -?

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

Запуск mode0:
./arducamstill -t 0 -m 0


Запуск mode1:
./arducamstill -t 0 -m 1


По умолчанию изображение выводится в окне с масштабированием. Чтобы изменить размер окна, внесите изменения в демо-программу.
Чем mode0 отличается от mode1:
- Разрешение
mode0— 4056 × 3040,mode1— 8112 × 3040. - Частота кадров в
mode0выше, чем вmode1. - Если растянуть изображение
mode0по горизонтали вдвое, оно будет выглядеть точно так же, как изображениеmode1.
3.3 Сохранение снимка
#mode0
Сделайте снимок с задержкой 5 секунд (время задаётся в миллисекундах) и сохраните его в файл image.jpg:
./arducamstill -t 5000 -m 0 -o image.jpg

Чтобы выйти из предпросмотра, нажмите Ctrl+C.
Снимок сохраняется в каталоге /home/pi/MIPI_Camera/RPI.


#mode1
Сделайте снимок с задержкой 5 секунд (время задаётся в миллисекундах) и сохраните его в файл image.jpg:
./arducamstill -t 5000 -m 1 -o image.jpg

Что дальше
После быстрого старта изучите указания по применению — например, по работе с драйверами MIPI-камер Arducam пользовательского уровня.
Вопросы и ответы
Можно ли поставить объективы с фокусным расстоянием 20–28 мм вместо стандартного 6 мм?
Да, стандартный объектив CS 6 мм можно заменить своим.
Чем камера из комплекта (B0265R) отличается от стандартной камеры (B0240)?
Камеру из комплекта (B0265R) можно использовать только с платой HAT — напрямую к Raspberry Pi её не подключить. Стандартную камеру (B0240) можно подключать к Raspberry Pi напрямую.
Можно ли (возможно, в будущем) заменить камеру HQ 12 Мп на камеру с более высоким разрешением, например B0164 на AR1820HS 18 Мп?
Arducam учитывает спрос рынка; пока стереокамеру с более высоким разрешением можно получить только под заказ.


