えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

RaspberryPi Camera Module 3 をROSで触る

新しいカメラ「RaspberryPi Camera Module」(ラズパイカメラ3)が来ました。

新しいカメラは撮像素子にSONY IMX708を採用しており、以前のバージョンよりも高解像度になっています。主な機能を以下に示します。


特にHDR機能は大きな機能でしょう。

ソニー製のHDR機能搭載カメラでは、Quad Bayer配列を4画素ごとに採用しており、この中の画素は露光時間をピクセルごとに変更することができます。

隣接した撮像素子ごとに露光時間を変更することで二つの明るさの画像を取得し、これをカメラ側で適切に調整することで画像を取得することができます。

この画像合成によってHDR画像の解像度はHDR機能なしの1/4になってしまいますが、増加した画素数でそのデメリットがカバーされています。


左がHDRなしの画像、右がHDRありの画像です。

右の方がより人が見た景色に近い自然な明るさになっていて、懐中電灯のLEDの形もなんとなく見えると思います。


オートフォーカス

このラズパイカメラ3では、オートフォーカスも搭載されています。

オートフォーカスは、自動焦点機能のことで、対象であろうと思った物体に対してピントを合わせにいきます。

以前からありましたが、このラズパイカメラ3では標準で搭載されています。

以下の映像では、10cm付近まで接近してもリアルタイムでピントを合わせてくれます。すごい。


以上が、ラズパイカメラ3の主な機能でした。

これが5000円未満で買えてしまいます…!(恐ろしい)


ROS2で動くようにしてみた

私は、ラズパイカメラ3が発売される以前にrpi-bullseye-ros2(RaspbianでROS2が動くやつ)向けにpicameraをROS2でラップするプログラムを作成していました。

ros2_v4l2_cameraほどの互換ではないですが、似たような感覚で扱えるパッケージです。

github.com

これのオプションがまだHDRに対応していなかったので、対応させることにしました。


libcamera-appsでは対応が終わっていたので、既に開発が終わっていたのか?…と思っていたのですが、まさかのv4l2コントロールAPIを叩いていたみたいです。

github.com

やっていることは非常に単純で、カメラをオープンにする前に /dev/v4l-subdev にアクセスして V4L2_CID_WIDE_DYNAMIC_RANGE というIDに対して1を書き込みます。


RaspbianにおけるYOLOX-ROSの環境構築方法に従ってYOLOX-ROSの環境構築を行っていざ実践!

ちゃんと動きました。

ただし、固定焦点モードになっているようでした。(確かに固定焦点の方が都合はいいのだが…)


まとめ

今回は、ラズパイカメラ3(RaspberryPi Camera Module 3)を触ってみました。5000円でハードウェアなHDRを触れるというのは非常に面白い体験でした。

オートフォーカスは対象が限られていればとても有効に働くと思うので、工作の幅が広がる面白い機能だと思います。


参考

www.raspberrypi.com

Raspberry Pi カメラモジュール V3www.switch-science.com