この記事ではSTマイクロエレクトロニクスの多機能イメージセンサ(5Mピクセル)をラズベリーパイに接続して、画像を出力する方法を解説していきます。
1. 5Mピクセルイメージセンサ
5MP(2560x1940)のイメージセンサは、下表のように4品種が用意されていて、カラーフィルタがないモノクローム版と、RGBとIRが混合されているカラーフィルタがついたRGB-IR版で、それぞれOBGAパッケージ版とベアダイ版が用意されています。
| カラーフィルタ | OBGAパッケージ | ベアダイ |
|---|---|---|
| RGB-IR | VB1943 | VD1943 |
| モノクローム | VB5943 | VD5943 |
1.1 特徴的な機能
STのウェブサイトで5MPの多機能イメージセンサを紹介していますが、主な特徴的な機能は以下のとおりです。
- センサ内部での変換処理による5MPのIRイメージ出力と5MPのRGBベイヤー出力
- オンチップHDR処理
- コンテキスト管理 (フレーム単位での設定切り替え)
このほかにも、マルチ露光設定や明るさ情報の出力などさまざまな機能が搭載されています。
1.2 センサ内部での画像変換処理による5MPイメージの出力
ここからは、VD1943に搭載された2種類のセンサ内部での画像変換処理を試していきます。
1.2.1 5MPのIRイメージ出力
センサ内部での変換処理による5MPのIRイメージ出力での変換を下図で示します。4x4 RGB-IRのパターンをセンサ内部で全面IRに変換して出力します。

1.2.2 5MPのBayerイメージ出力
センサ内部での変換処理による5MPのBayerイメージ出力の変換は下図のようになり、4x4 RGB-IRのパターンをセンサ内部でBayerパターンに変換して出力します。

2. 環境
今回はVD1943センサをラズベリーパイ4につなげて画像を出力してみます。
-
Raspberry Pi OS (64-bit)
-
Raspberry Pi 4B ボード (4GB版)
3. ドライバ・インストール
まずは環境をアップグレードしていきます。
$ sudo apt update
$ sudo apt dist-upgrade
$ reboot
次にドライバをインストールしていきます。Linux用のドライバはgithub上の専用ページ、もしくは各製品ページの「Tools & Software」にあるSTSW-VD1943などのページからダウンロードできます。
$ unzip vd1943-linux-driver-0.3.0.zip
$ cd vd1943-linux-driver-0.3.0/
$ cat changelog.md
$ make
$ sudo cp vd1943.ko /lib/modules/$(uname -r)
$ sudo depmod -a
デバイスツリーを更新して、リブートします。
$ cd dts/rpi1_to_4/
$ sudo dtc pcb4444_vd1943.dts -o /boot/firmware/overlays/pcb4444_vd1943.dtbo
$ echo "dtoverlay=pcb4444_vd1943" | sudo tee -a /boot/firmware/config.txt
$ reboot
リブートした後にdmesgコマンドで表示されるカーネルのログに、以下のようにvd1943があれば正しく認識されています。
$ dmesg | grep vd1943
[0.027495] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/vd1943@10
[0.027575] /soc/i2c0mux/i2c@1/vd1943@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[0.028603] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/vd1943@10
[0.044643] /soc/i2c0mux/i2c@1/vd1943@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[1.226173] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/vd1943@10
[1.226263] /soc/i2c0mux/i2c@1/vd1943@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[5.660974] vd1943: loading out-of-tree module taints kernel.
[5.790200] vd1943 10-0010: Successfully probe vd1943 sensor
4. 画像を画面に表示する
まず、ドライバのインストールが終わったので、イメージセンサからの画像を画面に表示していきます。
4.1 mediaでセンサを探す
次に以下のコマンドで、/dev/media0から/dev/media4あたりまで表示していって、"vd1943"が含まれているmediaを探します。
media-ctl -d /dev/media0 -p
表示されたデバイストポロジーに以下のようにvd1943が見つかれば、そのmediaの番号を覚えておきます。私の環境ではmedia0で見つかりました。
Device topology
- entity 1: vd1943 10-0010 (1 pad, 1 link, 0 routes)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev0
pad0: SOURCE
[stream:0 fmt:Y8_1X8/2560x1440 field:none colorspace:raw xfer:none quantization:full-range
crop.bounds:(0,0)/2560x1984
crop:(0,272)/2560x1440]
-> "unicam-image":0 [ENABLED,IMMUTABLE]
以下の--print-dotのオプションを使うとトポロジーを画像化できます。
media-ctl -d /dev/media0 --print-dot > graph.dot
dot -Tpng graph.dot > graph.png
4.2 RGB画像の表示
まずはベイヤー画像出力にするため、以下のコマンドでイメージセンサのシャッターモードを1(Rolling Shutter)に設定しておきます。
v4l2-ctl -d /dev/v4l-subdev0 --set-ctrl=shutter_mode=1
私の場合にはmedia0で見つかったので、以下のコマンドでGBRGの640x480の出力に設定します。ラズパイ4の能力ではVGAくらいで試すのがまずはよいです。
media-ctl -d /dev/media0 --set-v4l2 '"vd1943 10-0010":0[fmt:SGBRG8_1X8/640x480]'
以下のようにffplayで表示してみます。colorchannelmixerで簡易的に色バランスを整えます。
ffplay -f v4l2 -video_size 640x480 -pixel_format bayer_gbrg8 -i /dev/video0 -vf "colorchannelmixer=rr=1.21:bb=1.30,eq=gamma=1/2.2"
また、以下のようなffmpegのコマンドで一枚の画像を保存できます。
ffmpeg -f v4l2 -pixel_format bayer_gbrg8 -video_size 640x480 -i /dev/video0 -vf "colorchannelmixer=rr=1.21:bb=1.30,eq=gamma=1/2.2" -frames:v 1 output%03d.png
4.3 IR画像の表示
次にIR画像出力に切り替えるため、以下のコマンドでイメージセンサのシャッターモードを0(Global Shutter)に設定します。
v4l2-ctl -d /dev/v4l-subdev0 --set-ctrl=shutter_mode=0
さきほどと同じvd1943のあるmediaXで、以下のコマンドでY8の640x480の出力に設定します。今度もVGAの640x480で試します。
media-ctl -d /dev/media0 --set-v4l2 '"vd1943 10-0010":0[fmt:Y8_1X8/640x480]'
以下のようにffplayで表示してみます。
ffplay -f v4l2 -video_size 640x480 -pixel_format gray -i /dev/video0 -vf "eq=gamma=1/2.2"
また、カラーと同じように以下のようなffmpegのコマンドで一枚の画像を保存できます。
ffmpeg -f v4l2 -pixel_format gray -video_size 640x480 -i /dev/video0 -vf "eq=gamma=1/2.2" -frames:v 1 output%03d.png
4.4 その他のコマンド
もし画面が暗くて何も見えない場合には以下のコマンドで露光時間やゲインを調整します。このときはffmpegを一旦終了させる必要があります。IR画像はIRの光源がないと暗く映ります。
v4l2-ctl -d /dev/v4l-subdev0 --set-ctrl=exposure=3000
v4l2-ctl -d /dev/v4l-subdev0 --set-ctrl=analogue_gain=4
調整できる値とその範囲は以下のコマンドで確認できます。上の--set-ctrlのオプションで変更できます。
v4l2-ctl -d /dev/v4l-subdev0 --list-ctrls
5. まとめ
今回は5MPの多機能イメージセンサ「VD1943」をラズパイ4上で動かしてみました。ドライバをインストールした後にカラー画像と赤外画像を1つのセンサで表示することができました。アイデア次第でいろいろな用途に使えると思います。みなさまもぜひ使ってみてください!





