Arducamモノクロデュアルカメラアレイボードをraspberry piに接続してみる


*本記事は2021/5/5時点の情報です

SWITCH SCIENCEで入手したこちらのステレオカメラモジュール(OV9281 1MP x2)をraspberry pi 4に接続して使ってみます。

背景

Raspberry Pi OSがデフォルトでサポートするカメラモジュールはラズパイオフィシャルなカメラモジュール(IMX219なcamera module v2, IMX477なHigh Quality Cameraなど)のみなので、今回のようなカメラモジュールの場合はドライバをインストールする必要があります。

製造元のArduCamからドライバのバイナリがリリースされているのですが、今日現在(2021/5/5)最新のRaspberry Pi OS (Release date: March 4th 2021, kernel version: 5.10.17-v7l+)には対応していないため、ソースコードからビルドする必要がありました。
*公式からバイナリが提供されているかもしれないので、ビルドする前にチェックしてみてください。

幸い、同じくArduCamから提供されているPivarietyドライバのビルド方法がありましたのでこちらを参考にしています。
How to build Raspberry Pi Kernel Driver – Pivariety Camera

ドライバのビルド

準備

kernel moduleのビルドのために、対応するバージョンのlinux kernelのソースコードが必要になりますのでダウンロードします。
gitから直接cloneするなどいくつか方法があると思いますが、今回はこちらのツールを使ってソースを取得します。
https://github.com/RPi-Distro/rpi-source

依存パッケージのインストール

$ sudo apt update
$ sudo apt install -y git bc bison flex libssl-dev libncurses5-dev

ツールをダウンロードして実行

$ sudo wget https://raw.githubusercontent.com/RPi-Distro/rpi-source/master/rpi-source -O rpi-source && sudo chmod +x /usr/local/bin/rpi-source && /usr/local/bin/rpi-source -q --tag-update
$ rpi-source

Build

まずはドライバのソースコードを取得します。

$ git clone https://github.com/ArduCAM/Arducam_OBISP_MIPI_Camera_Module

device treeのビルド

device treeのMakefileにarducamを追加

$ vi /lib/modules/$(uname -r)/build/arch/arm/boot/dts/overlays/Makefile

dtbo-$(CONFIG_ARCH_BCM2835) += \に以下行を追加します。

/lib/modules/5.10.17-v7l+/build/arch/arm/boot/dts/overlays/Makefile
@@ -22,6 +22,7 @@
    anyspi.dtbo \
    apds9960.dtbo \
    applepi-dac.dtbo \
+   arducam.dtbo \
    at86rf233.dtbo \
    audioinjector-addons.dtbo \
    audioinjector-isolated-soundcard.dtbo \

device treeのビルドとインストール

$ cd Arducam_OBISP_MIPI_Camera_Module/sourceCode/5.4.51
$ cp arducam-overlay.dts /lib/modules$(uname -r)/build/arch/arm/boot/dts/overlays/
$ make -C /lib/modules/$(uname -r)/build  dtbs
$ sudo cp /lib/modules/$(uname -r)/build/arch/arm/boot/dts/overlays/arducam.dtbo /boot/overlays/arducam.dtbo

/boot/config.txtの設定

/boot/config.txtに以下2行を追加する。

/boot/config.txt
[all]
#dtoverlay=vc4-fkms-v3d
start_x=1
gpu_mem=128
+dtparam=i2c_vc=on
+dtoverlay=arducam

kernel moduleのビルド

一行だけのMakefileを作成

$ cd Arducam_OBISP_MIPI_Camera_Module/sourceCode/5.4.51
$ vi Makefile
Makefile
obj-m := arducam.o

ビルドする

$ make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
$ sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
$ sudo depmod
$ sudo modprobe arducam

再起動する。

モジュールを接続していた場合、以下のように video0ができてれば成功。

$ ls /dev/vid*
/dev/video0  /dev/video1  /dev/video10  /dev/video11  /dev/video12  /dev/video13  /dev/video14  /dev/video15  /dev/video16
$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
    Type: Video Capture

    [0]: 'GREY' (8-bit Greyscale)
        Size: Discrete 2560x800
            Interval: Discrete 0.000s (4294967294.000 fps)
    [1]: 'Y10P' (10-bit Greyscale (MIPI Packed))
        Size: Discrete 2560x800
            Interval: Discrete 0.000s (4294967294.000 fps)
    [2]: 'Y10 ' (10-bit Greyscale)
        Size: Discrete 2560x800
            Interval: Discrete 0.000s (4294967294.000 fps)

撮影してみる

公式の撮影ツールを使ってみます

$ cd Arducam_OBISP_MIPI_Camera_Module/arducamstill
$ make
$ ./arducamstill -t 1000 -o image.jpg -pixfmt GREY -w 2560 -h 800
Hardare version: c03111
No match to hardware version!
Device /dev/video0) opened.
GREY
Video format set: GREY (59455247) 2560x800
[Framerate]: 01 fps.
Saving image data to image.jpg successfully.

露光設定などはv4l2-ctlからできるようですので、公式マニュアルを参考に設定する必要がありそうです。

おまけ

基板剥き出しだとショートさせそうで怖いのでケースを作ってみました。

参考