見出し画像

Raspberry Pi 4にArduCam社製64MP Hawk-eyeカメラをつけたお話

 とある理由でラズパイ4を触る事になり、カメラモジュールを取り付ける事になりました。ラズパイ用のカメラモジュールは本当に沢山発売されていますが、解像度の高さとオートフォーカスが付いているという理由でArduCam社製の64MP Hawk-Eyeカメラを購入しました。今回はこのカメラモジュールを認識させる方法をまとめます。すっごいピンポイントですが(^-^;、カメラモジュールをラズパイで扱う感覚的な所は共通しているのかなと思いますので、つらつらと読んで頂ければ幸いです。

 え?プログラムの話じゃないって?カメラをプログラムから扱う為には、まずハードが動かないと始まらないわけですww

ArduCam 64MP Hawk-eyeカメラモジュール

 64MP Hawk-eyeはラズパイのカメラコネクタに接続できる高解像度のカメラモジュールです。カメラモジュールには12MPとか8MPなど○○MPという数字がよく記載されます。これはメガピクセル(Mega Pixel)、つまり画素数です。12MPだと1200万画素となります。つまりHawk-eyeは6400万画素。具体的には9152 x 6944という凄まじい画素数の高解像度カメラです。もちろんカメラの性能は画素数のみで決まる訳ではありませんが、その桁外れのサイズ感に惚れました。ただし64MPを扱えるのはRaspberry Pi 4BとCM4のみで、Pi 3等の下位モデルでは16MPに制限されてしまいますのでご注意下さい。

カメラモジュールをラズパイに取り付け

 以下からはRaspberry Pi 4Bを対象とします。まずカメラモジュールから伸びる板状の線をRP4のカメラコネクタに取り付けます。

 ハードウェアを扱うので、もしRP4が起動中でしたらシャットダウンして電源(Type-Cケーブル)を抜いて下さい。
 カメラコネクタは基板のHDMI端子の傍にあります。まず黒いストッパーをつまんで上に持ち上げます:

次に板線の端子がコネクタの白い側に来るようにコネクタに挿します:

奥までしっかり挿したら黒いストッパーの両端を下に押し込んで板線を固定すればOKです。挿し込みが浅かったり斜めになっていたりしていないか確認しましょう。

config.txtにdtoverlayを追加

 Hawk-eyeを取り付けたらRP4を起動します。もしRP4にOSを入れていない場合は前もって入れて初期設定し、デスクトップが起動する状態にしておいて下さい。

 以下はArduCam社のホームページにある「Quick Start」を参考にしています:

基本指定された方法通りにやれば良いのですが、2023.3時点でちょっと異なる部分がありますので、それを合わせて手順を紹介します。

 ラズパイのカメラモジュールで特にHawk-eyeのようなサードパーティ製のカメラ(デバイス)を取り付けた場合、デフォルトでは認識してくれません。これを認識させるには幾つかステップを踏む必要があります。

 その第1ステップはboot/config.txtの編集です。boot/config.txtはラズパイが起動した時に読み込まれる各種設定値が書き込まれた設定ファイルです。画面の解像度やHDMIの振る舞い、ラズパイに搭載されているGPIO(汎用入出力端子:General Purpose Input/Output)の設定など色々できるかなり重要なファイルです。この設定ファイルの最下部に以下の記述を追加します:

[all]
dtoverlay=arducam-64mp

 [all]というのはすべてのラズパイバージョンで共通の設定ですよ~という意味です。もしRP4のみ設定する物であれば[pi4]と記載したりします。
 dtoverlayというのは「デバイスツリーオーバーレイ:Device Tree Overlay」と呼ばれる物です。これは基板に搭載されているデバイス(カメラとかLCDディスプレイとか諸々)をOSが認識できるよう、そのデバイス名を指定して教えてあげる方式を言います。どういう記述にするかはデバイス提供メーカーのホームページやリファレンスにありますので、そちらを参照して下さい。

 ArduCam社製のHawk-eyeカメラの場合は上のように記述します。

 で、です。このboot/confing.txtファイルは実は管理者権限が無いと書き込みできません。単にファイルを開いて編集しても保存コマンドを受け付けてくれないんです。なので「管理者権限で追加するように」と言われるのですが…僕のようにラズパイ経験が浅いとそのやり方も分からんのです、はい…(-_-;。ターミナル上で編集とか出来んのです…。という事でより優しいやり方を紹介します。

 色々方法はありますが、僕はラズパイに最初から付属している「Geany」というコードエディタを管理者権限で起動しました。通常これはデスクトップの左上にあるラズベリーのアイコンから[プログラム]→[Geany]で起動しますが、これだと管理者権限にならないので、ターミナル経由で起動します。ターミナルを開いて以下のコマンドを打ちます:

sudo geany

 sudoというのが「管理者権限」を意味します。これでGeanyが管理者権限で開くのでconfig.txtを編集できます。後は[ファイル]→[開く]でboot/config.txtを選んでくれても良いですし、ファイルマネージャー(Windowsで言うエクスプローラ)からbootフォルダにあるconfig.txtをGeanyのウィンドウにドラッグしてもOKです。

 config.txtにdtoverlay=~を追加したら、変更を反映するためラズパイを再起動しましょう。

libcamera-devとlibcamera-appsをインストール

 再起動後、カメラモジュールを実際に扱うためのライブラリを幾つかインストールします。Hawk-eyeの場合、先のQuick Start内にArduCam社が指定する方法がありますのでそれに従います。

インストール用シェルスクリプトをダウンロード

 まず、以下のコマンドをターミナルで実行します:

wget -O install_pivariety_pkgs.sh https://github.com/ArduCAM/Arducam-Pivariety-V4L2-Driver/releases/download/install_script/install_pivariety_pkgs.sh

長いなおい…(^-^;;。
これはですね、ArduCam社が公開しているインストール用のシェルスクリプトをwebサイトからダウンロードしています。

 wgetは引数にあるURLのファイルを直接ダウンロードするコマンドです。とっても良く使います。-Oは「ファイルを上書き保存しなさい」というオプションです。その後ろにある「install_pivariety_pkg.sh」は保存ファイル名で実は何でも良いのですが、基本ダウンロード先サイトと同じファイル名にします。

 最後のURLがWeb上にあるダウンロードしたいファイルで、ここではgithub(ソースコードなどを公開しているサイト)にあるArduCam社の「install_pivariety_pkgs.sh」というシェルスクリプトが指定されています。

ダウンロード先はカレントディレクトリになります。ターミナルを起動するとhome/<user>/になるので、そこでコマンドを叩けばそのフォルダ内にinstall_pivariety_pkg.shが保存されます。どこに保存してもOKです。

 シェルスクリプト(.sh)というのはターミナルで実行したいコマンドが一連で並んでいるスクリプトファイルで、実行するとそれらを自動的に逐次的に実行してくれます。条件分岐やオプション毎に振る舞いを記述できたりする便利な機能もあり、非常に良く利用されます。毎度一連のコマンドを打つのは面倒なので、スクリプトを自分で書いて楽したりも出来ます。

install_pivariety_pkgs.shの実行権限を書き込み可能に変更

 次にダウンロードしたシェルスクリプトファイルに実行権限を付記します:

chmod +x install_pivariety_pkgs.sh

 chmod(チェンジモード:Change mode)は、指定のファイルなどにアクセス権を付記したり外したりする非常に重要なコマンドです。Linuxはファイル一つ一つに細かくアクセス権を設定できます。これはセキュリティーを守るためです。特にインターネット上に公開するようなファイルはchmodを慎重かつ確実に設定しないと非常に危険なので、サーバー構築時などはこのコマンドが必須です。

 権限には書き込み権限、読み込み権限、実行権限があります。ダウンロードしたシェルスクリプトは実行する物なので、実行権限が無いとそもそもに実行できないんですね。「+x」オプション(eXecute)を付ける事でその権限を与えています。

libcamera-devをインストール

 次にこのシェルスクリプトの機能を利用してlibcamera-devライブラリをインストールします:

./install_pivariety_pkgs.sh -p libcamera_dev

 カレントディレクトリにあるシェルスクリプトを実行する場合は「./」とカレントディレクトリを表す区切り文字を先頭に付けます。もちろん相対パス(./installer/arducam/install_pivariety_pkgs.shなど)で指定しても構いません。後ろの引数はこのシェルスクリプトに引き渡すオプションとパラメーターです。

 インストール対象の「libcamera_dev」はRaspberry Pi Foundationが提供しているラズパイ用のカメラモジュールドライバです。カメラを通した撮影や録画を行えるようにしてくれます。このドライバの機能をアプリケーションが利用する事で、カメラを扱う事ができるようになるわけです。

libcamera-appsをインストール

 続いて同様にシェルスクリプトを通してlibcamera-appsライブラリをインストールします:

./install_pivariety_pkgs.sh -p libcamera_apps

 libcamera_appsライブラリはlibcamera_devドライバを通してカメラで撮影や録画を行うアプリケーションのセットです。こちらもRaspberry Pi Foundationが提供しています。例えば「cam」とか「glview」といったアプリケーションが追加され利用できるようになります。この中にある「libcamera-hello」を実際この後動作テストで使います。

Hawk-eye用のカーネルドライバのインストールですが…

 次にQuick Startには「Hawk-eye用のカーネルドライバをインストールする」というステップがあるのですが…、これを実行すると僕のラズパイOSだと次のような赤い警告文が最後に出ました:

「You are using an unsupported kernel version, please install the official SD Card Image」
(サポートされていないカーネルバージョンを使っています。オフィシャルのSDカードのイメージをインストールして下さい)

そう言われましても…オフィシャルなOSイメージを使っているんですが…。という事で、これについてArduCamのサポートに連絡してみました。非常に迅速に丁寧に対応してくれる素晴らしいサポートでした(^-^)。幾つかやり取りをしまして、結論としては「カーネルバージョン6.1.19以降のOSを使用している場合、Hawk-eye用のドライバを入れる必要は無い」という事のようです。config.txtに記載したdtoverlay=arducam-64mpで適切なドライバを適用してくれるんだそうです。

 と言う事で、専用ドライバを入れる以下のステップは飛ばします。もし上のカーネル未満のバージョンをご使用の方は以下のコマンドでドライバを入れて下さい:

./install_pivariety_pkgs.sh -p 64mp_pi_hawk_eye_kernel_driver

 ちなみに、僕は最初上のコマンドを叩いてしまったのですが、実害は無いようです。

 OSのカーネルバージョンを調べるには、

uname -a

というコマンドを入れます:

僕の環境は6.1.19なので専用ドライバのインストールは不要です。

最後に、これら設定を反映させるためラズパイを再起動すれば初期設定は終了です。

カメラ動作の確認

 再起動後にカメラが実際に動くか確認しましょう。一番簡単な方法はターミナルで以下のコマンドを入れます:

libcamera-hello

 ドライバやアプリケーションのインストールが正しく出来ていれば、このコマンドだけでHawk-eyeカメラが起動し、ウィンドウが開いてそこにカメラの画が表示されるはずです!

 libcamera-helloは先にインストールしたlibcamera-appsが提供するアプリケーションの一つです。libcameraという一連のアプリケーション群の中でlibcamera-helloは、libcamera-devドライバを通して単純にカメラを起動して画面に表示する機能を提供してくれます。

 上のようにコマンドのみ指定した場合は10秒間カメラを起動し、その後カメラを自動的に切ります。この時間を変更したい場合は「-t」オプションを付けます。例えば20秒なら、

libcamera-hello -t 20000

このようにミリ秒単位で時間を指定します。

 libcamera-helloにはオプションを沢山指定できるのですが、動作確認としては上記で十分でしょう。

終わりに

 今回はArduCam社の64MP Hawk-eyeカメラモジュールをRaspberry Pi 4に取り付けて認識させる所を説明致しました。他社のカメラもおそらくdtoverlayを指定してlibcamera-devとlibcamera-appsを入れるというプロセスは共通しているんじゃないかなと思います。

 Linux関連の記事は「まず○をして、次に△をして…」と手順のみの記載になっている事がとても多いです。でもそれだと「自分が何をしているのか」さっぱりわかりませんし、トラブった時に対処も出来ません。それが嫌で今回の記事では詳細を泥臭く述べさせて頂きました。文字数が多くて読みづらかったかなと思います。申し訳ありません(-_-;。この記事で皆様の理解が少しでも深まれば幸いです。

ではまた(^-^)/

この記事が気に入ったらサポートをしてみませんか?