
Raspberry Pi Camera v2 on KV260(後編)
Raspberry Pi Camera v2 on KV260の後編です。
本ブログで紹介させていただく内容について、できる限り正確な情報提供を心がけておりますが、正確性や安全性を保証するものではありません。
また、リンク先の他サイトで提供される情報・サービスについても、責任を負いかねますのでご了承ください。
目次[非表示]
- 1.bitstreamファイルをbinファイルに変換する
- 2.devicetreeの生成
- 3.Xilinx Ubuntuを使って動かしてみる
- 3.1.yavtaのインストール
- 3.2.ファイルのコピー
- 3.3.devicetreeのロード
- 3.4.カメラ画像を表示する
- 4.おわりに
- 5.関連リンク
bitstreamファイルをbinファイルに変換する
ここからはVitisをインストールしたUbuntu環境上でのコマンドライン操作になります。 Vivadoで生成したFPGAの回路情報であるbitstreamファイルをKV260で立ち上げるLinux環境で扱えるローダブルイメージに変換します。 ここでは pl.bif というローダブルイメージ作成用の設定ファイルを作成し、 bootgen というVitisをインストールすると同時にインストールされているスクリプトを使い、bitファイルをbinファイルに変換します。
変換が完了すると kv260_mipicsi2_simpleISP.bin という名前でbinファイルが生成されます。
devicetreeの生成
次に先ほどVivadoからエクスポートしたxsaファイルを用いてdevicetreeを生成します。 この章で生成するdevicetreeファイルも Raspberry Pi Camera-v2 on KV260 に上げているのでご利用ください。 以下は生成方法の紹介になります。
ここまでで rpi_cam_overlay というディレクトリにdevicetreeファイルが生成されます。 以降で利用するのは pl.dtsi というファイルで保存されているdevicetreeファイルです。 生成されるdevicetreeはそのままではISPを正しく設定できないものになっています。 なので修正した部分との差分を載せておきます。
pl.dtsi はテキストファイルですが、Linuxに読み込ませるためにはバイナリファイルにコンパイルする必要があります。次のコマンドでデバイスツリーをバイナリファイルにコンパイルします。
以降にここで生成される kv260_mipicsi2_simpleISP.dtbo を利用します。
Xilinx Ubuntuを使って動かしてみる
いよいよKV260を立ち上げていきます。
OSは Xilinx公式のUbuntuイメージ が公開されているのでこれを利用します。
Xilinx公式のGetting Started に従い、Kria KV260 Kit用のUbuntuを起動できるSDカードを作成してください。
K26 SOM内部のファームウェアが工場出荷時のバージョンによりUbuntuが立ち上がらないケースがあるようです。 この場合 Xilinx Wikiの手順 に従いファームウェアをアップデートすることにより解消できる可能性があるようです。 ですが、ファームウェアのアップデートは最悪起動できなくなる可能性がございますので、 自己責任の上ご実施頂ければ幸いです。
インターネットへの接続が必要なのでLANケーブルでブロードバンドルーターを接続しておきましょう。 では作成したSDカードを使ってKV260を起動します。 初回起動は少し時間がかかるようですが、10~15分ほどで立ち上がるので、 パスワードなどの初期設定を行いログインできるようになると、 次のようなデスクトップ画面が立ち上がります。
yavtaのインストール
次にISPの設定に必要となるyavtaというソフトウェアをインストールします。 ターミナルを開き以下のコマンドを打っていきます。
ファイルのコピー
bitstreamファイルをbinファイルに変換するで作成した kv260_mipicsi2_simpleISP.bin ファイルを /lib/firmware/ 以下にコピーします。 USBメモリーなどで開発環境から実機にコピーするか、 scp コマンドなどで実機にコピーしましょう。
同時にdevicetreeの生成で作成した kv260_mipicsi2_simpleISP.dtbo もホームディレクトリにコピーしておきましょう
devicetreeのロード
KV260用のUbuntuイメージは既にFPGA上に回路が書き込まれています。 今回はこの元々書き込まれているFPGAの回路は使わないので、 FPGA上の回路をクリアしたのちISPの回路を書き込みます。 FPGAの回路やISP用のドライバーはdevicetreeで管理されています。 今回のように起動後にシステム構成が変わるような設定を行うためにdevicetree overlayという機能が用います。 まずは元々書き込まれている回路とその回路のドライバーに対応したdevicectree overlayをクリアします。
FANのPWM制御をしている配線がなくなるので、FANがうるさくなると思います。 次にISP用のdevicetreeをロードするのですが、 FPGAの回路をロードするドライバが暗号化したbitstreamファイルに対応するモードになっているので、Full Bitstreamモードにしてからdevicetreeをロードします。
devicetreeをロードします。
ISPがLinuxから制御できるか確認しましょう。 以下のコマンドでISPのパイプラインを確認できます。
この際にISP内の各画像処理ブロックがv4l-subdevに割り当てられるのですが、 v_gamma_lut 、 v_proc_ss_csc ブロックが v4l-subdevの何番に割り当てられているのかを 記憶しておいてください。
カメラ画像を表示する
ISPを設定するスクリプトを Raspberry Pi Camera-v2 on KV260 に setup_VGA.sh として置いておくのでこれを実行するのですが、 上記の v_gamma_lut 、 v_proc_ss_csc がスクリプト内の設定と異なる番号に 割り当てられることがあるので、スクリプト内の下記の箇所を対応するsubdev番号に書き換えて実行してください。
- setup_VGA.sh 29行目
setup_VGA.sh 37行目
画像を表示する用のスクリプトも cap_VGA.sh として置いてあるので、実行してみましょう。
以下は同様の手順でHDで動かしてみた時の画像です。
おわりに
いかがでしたか? 筆者も夏休みモードで執筆していたら、気づけば夏休み後半になっていました。夏の怪談ですね。 夏休みの自由研究と言えば8月30日ぐらいに急いでミニトマトかアサガオを急成長させることが常套手段でしたが、この工作は調達さえ何とかなれば1日で出来てしまいます。今回ご紹介させていただいたISPは絵を作るための最低限の機能とスケーリング機能しか入っていないので、より高画質にする機能や、ぼかし機能、エッジ検出機能を作ってみたり、さらに機能を削ってAI画像認識用の回路を入れてみたりといろんな遊び方を考えられるので、ぜひ冬休みにでも遊んでみてください。
終わりにまた手前味噌ですが、東京大学の高前田伸也准教授と NNgen というAI用の高位合成コンパイラをOSSのプロジェクトとして 共同研究開発しています。 NNgenで生成出来るAI用のアクセラレータIPも今回使用したVivadoから呼び出せる回路として生成することができます。 コラボレーション大歓迎ですので、ご興味ありましたらぜひお問い合わせやPull Requestのほうお待ちしております。
関連リンク
Raspberry Pi Camera v2 on KV260(前編)
Ubuntuイメージ(Xilinx公式)
NNgenの紹介
Raspberry Pi Camera-v2 on KV260
免責事項、著作権、商標権
コニカミノルタは画像IoTプラットフォームFORXAIを通じて、お客様やパートナー様との共創を加速させ、技術・ソリューションの提供により人間社会の進化に貢献してまいります。