*本記事は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) += \
に以下行を追加します。
@@ -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行を追加する。
[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
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からできるようですので、公式マニュアルを参考に設定する必要がありそうです。
おまけ
基板剥き出しだとショートさせそうで怖いのでケースを作ってみました。
参考
- 公式マニュアル: Camarray – Arducam 1MP*2 Stereo Camera MIPI Module
- Pivarietyのビルド方法: How to build Raspberry Pi Kernel Driver – Pivariety Camera