2018.06.21
【Webマガジン Vol.24- June, 2018】Column: Beaglebone BlackでFLIR Bosonを動かそう
WEBマガジン
BBBの準備
BBBとは、1GHzで動作するARM社Cortex-A8をコアにしたTI社のSitaraプロセッサを搭載したホビーユースをターゲットとした組み込みボードです。尚、Raspberry Pi3はBBBよりもっと高速なマルチコアSoCを搭載しており、Raspberry Pi2は近い性能を持っています。
このボードを新規に入手した場合でも、プリインストールされているOSが最新版とは限りません。「すでに組み込んだほかのアプリと共用なので」ということがなければ、最新OSへと更新したほうがよさそうです。
BBBは、当初はTi SoCベースの組み込みに強いAngstrom Linuxでサポートされましたが、eMMCが4GBになって以降はDebianが公式となっています。BeagleBone Black Supportに従って更新しておいてください。しかし、クロス開発を行える環境が揃っていない場合、BBB上にソフトのインストール,コンパイルが必要になりますから、最低8GBytes 程度のストレージ(eMMC + 4G microSDや8Gbytes以上のmicroSDをシステム全体として使う等)を確保してください。
このようなボードを、いきなり、何のPC環境もなく使う方はまずおられないだろうと思いますが、ここでは、キーボードやマウス、ディスプレイなどの「ヒューマンインターフェース」は使わずに、ホストとなるPCと、シリアルターミナルあるいは有線・無線ネットワークで接続する前提で使っていきます。スタンドアロンで進めることももちろんできますので、「ラズパイにキーボード、マウス、ディスプレイなどのヒューマンインターフェースは揃えてある」、という環境でも、以下確認可能です。
Bosonハードウエア
Bosonは、カメラモジュール単体ではCMOSイメージセンサ類似の信号線が取り出せるようになっています。それだけでは画像を取り出すために一つのシステムを必要とすることになり、赤外線カメラを利用するアイデアを実現するために大きなコストが必要になってしまいます。そのため、BosonにはUSB VPCという、カメラのサイズに合致したモジュールがあり、その名の通りUSBでホスト装置とインターフェースできるようになっています。
図4 BosonとUSB VPC
たいていのPCにはUSBポートがありますから、それによってBosonの機能の確認や、アプリケーションシステムのリファレンス開発を検討することができるようになっています。すなわち、電源を入れれば(=USBケーブルを使ってホストに繋げば)、即UVCカメラとして動作しますので、特別BosonのAGC制御を切り替えるなど画像調整を必要としなければ、もうそのままで稼働させることができてしまいます。
UVCの他、オプションでアナログビデオ出力を取り出すこともできます。
BosonにはFLIRのボロメータに加えて、今までのFLIR製品にはない画像処理エンジンが組み込まれており、Bosonのアドバンテージを確認することができるWindowsアプリケーションソフトが標準搭載されています。従って、トータルシステムの外観構成が自由であれば、BosonとPCが一台あれば、それだけで遠赤外線を撮影するシステムを構成することができてしまいますが、この記事を読まれる方はたぶんそれでは満足されないであろうと思います。
Bosonソフトウエア
ソフトウエア観点でBosonを使用するときに知っておきたいことは、Bosonからは画像をUVC(VPCを用いない場合はUVCまたはパラレルデータ)で取り出すことができる、ということです。
Windowsの場合はDirectShow、Linuxの場合はVideo4Linux、というマルチメディアフレームワークがありますから、それらを使うことでUVCストリームをキャプチャし、画像として表示することができます。
次は、WindowsにインストールしたVLCを使って、DirectShowを経由してBoson画像をキャプチャした例になります。
Bosonには、既に述べた通りAGCを使ったり、その結果の、疑似カラー着色方法を設定するなどの制御があります。それには、USB CDCを用いて、Bosonに組み込まれている機能を制御します。
なお、Bosonが出力できる16bit生データの画像フォーマットは、Windowsでは直接サポートされていません。Windowsを用いてソフトウエア開発し、且つ16bit生データを必要とする場合はお問い合わせください。
図4 DirectSlowを使いVLCでチャプチャ
購入いただいた方には、Bosonを利用したシステム開発を行えるよう、SDKが配布されます。そのSDKを使うと、Boson Applicationと同等の機能を実装することができます。つまり、画像はUVCで流れる制御はCDC経由でSDKを用いて行なう、ということになります。
まず最初に、SDKを用いて、Boson Applicationが実現している機能のごく一部を実装してみようと思います。
Boson SDK
Boson SDKは、C、C#、Pythonによる開発に対応できるようになっています。どの言語を用いていただいても構いませんが、ここではデバッグが容易なPythonを使ってみたいと思います。 尚、このSDKは、もともとWindowsでの開発に対応している関係で、Linuxでの開発を行うためにはある程度修正が必要です。しかし、それほどOSそのものには依存していませんので、アプリケーションソフト ソースコードを入手して、自分でbuildする経験をお持ちであれば、十分対応できるものと思います。C#を除きパッチは用意していますので、必要であればお問い合わせください。
SDKは、(開発)言語依存部と、それぞれの言語で共通で使用するインターフェースライブラリの2つのブロックで構成されています。
システム構成のプラン
BBBにはUSB2.0 HSのOTGがありますから、そこにBosonを接続して画像を取り込み、Ethernet経由でネットワークに送出することができれば、いわゆるネットワークカメラとして機能させることができそうです。もし、無線LANが必要であれば、BBBのUSBポートにhubを接続することになりそうです。その場合、Bosonのキャプチャへの支障がないか、若干、気になります。
BosonのUVC
今回使っているBosonはQVGA、9fpsでの撮影となっています。FLIRの他製品のご多分に漏れず、AGCを施した画像の場合は、QVGAをVGA(640×512)へと拡大した画像が送られています。また、Bosonのピクセルデータは、AGC前・後を問わず16bitで表現されていますから、1フレーム送るためには約5Mbit(640x512x16bit)必要です。一秒あたり9フレーム(実際には8.6フレーム)ですので、約45Mbit/secondとなり、USB2.0HSであれば、よくある150Mbps対応の11n Wi-Fiでも、帯域的には対応できそうです。
システム構成
以上をまとめると、無線LANで構成した場合で、こんな感じでしょうか(図5)。ここでは、たまたま無線APがなく、開発用のWindows7 PCがあり、且つそれをSoftAPとして稼働させられましたので、この試験では、無線APの代わりにPCがAPを務めることになりました。これで、BBB上でUVCをキャプチャし、それをストリーミングサーバーを通してやれば、ネットワークカメラとして機能してくれそうです。
更に、SDKを通じてBosonを制御するため、BBBにSDKを実装する必要があります。
(図5 ネットワーク配信)
Pythonのインストール
BBBではDebian GNU Linux/stretchが稼働していますから、Pythonは2.7が標準でインストールされています。しかし、システム標準設定で要求される依存関係などを壊す可能性があるやもしれず、ここではpyenvを導入し、この時点で最新の3.6.2をビルドさせました。大体2時間コースだったでしょうか…。が、自動的にこの環境に合わせセットアップされるのは助かります。
ffmpegのインストール
動画像コーデックとしてはよく知られているffpmegを、Debianパッケージを使ってインストールすることにしました。ffmpegの良いところは、エンコーダ, ストリーミングサーバー,デコーダを同一のツールグループで実現でき、ツール間での齟齬が生じづらいこと、且つ、歴史のあるツールですので、トラブルも少ないだろう、との想定です。