2019.01.22
【Webマガジン Vol.29- Jan., 2019】Column: FLIR Lepton で、お手軽?サーマル (3)
WEBマガジン
Breakout Boardの場合
OSの準備
MicroSDでブートします。記事執筆時点では、Debian Stretchに相当するArmbian Stretchか、Ubuntu 16.04に相当するArmbian Xenialを利用できます。どちらでも本稿は実現できると思いますが、この作業過程ではカーネルモジュールのbuildがあるため、より多く経験しているほうを選んでください。私はStretchを選びました。
OSパッケージをインストール&アップデートしたら、デバイスツリーによってSPIとI2Cを有効にします。NanoPiの場合armbian-configを使って、SPI(spidev)とI2C(i2c0)が有効であることを確認し、/boot/armbianEnv.txtを編集して、spi0が有効になるようにしてください。次の行が必要です。
param_spidev_spi_bus=0
再起動後、spidevが作られたことを確認して下さい。デフォルトカーネルではちゃんとspidevが作られましたが、devモードのカーネル(デフォルトカーネルより少し新しいカーネル)ではspidevが作られず、使うことができませんでした。
root@nanopineo:~# dmesg | grep i2c
[ 4.536851] i2c /dev entries driver
root@nanopineo:~# dmesg | grep spi
[ 10.181788] spidev spi0.0: probing from DT
必要なソフトウエア
Lepton Makerサイトでは、Raspberry Piの場合はGPIO拡張ボードが含まれる、CanaKit社のセット(Pi2 Ultimate Starter Kit?)を利用しているようです。Beagle Bone Blackの場合は、そのままLepton + Breakout boardをブレッドボードを用いてSPIおよびI2Cへと配線していきますが、どちらの場合も、ソフトウエアとしては GitHub LeptonModule にある、それぞれのプラットホーム用に用意されたソフトウエアを使います。今回も、このGitHubにある情報・ソースの一部は利用しますので、Nano Pi上にcloneしておいてください。ここではv4l2leptonを使います。
このv4l2leptonでは、Leptonが出力する画像そのままではなく、いわゆる「サーマル画像」として、見て使うデータへと変換が行われています。Leptonがデフォルトで出力するraw14データの場合、画像をイメージとして表示しようとすると、14bitのモノクロ画像になります。通常のディスプレイはRGB各色8bitで表現されますので、この、raw14のまま表示しようとすると、階調が深い(細かい)分、赤外線放射状況が滑らかに表示されることとなり、結果、画像としてはコントラスト(メリハリ)が低下して見えます。(この辺りは Vol.24 をご覧ください)
このため、v4l2lepton内で8bit階調データへと、変換テーブルを用いて変換しています。デフォルトではironblackという階調(というか色調)が設定されており、このほかには、rainbow、grayscaleを、ソース書き換えで選択できるようになっています。繰り返しますが、これはLeptonが着色しているわけではなく、v4l2leptonが着色していますので、新たなカラーテーブルを自分で定義することも可能です。
Lepton Maker siteでは、Raspberry Pi、BeagleBone Blackともに、ディスプレイ接続を前提として構成された事例を紹介しています。NanoPi NEOでは、SPI等使ってLCDモジュールを接続することは可能ではありますが、標準ではディスプレイは搭載されていません。このため今回は、 WEBマガジンVol.24 と同様に、ネットワークカメラ的な仕立てをまずは考えます。Leptonは、VoSPIにより画像を送ります。つまり、ビデオカメラがSPIに繋がれる、という形になります。そういうデバイスをV4Lでサポートするために、 v4l2loopback を使いますので、同様cloneしてください。これで、VoSPIからキャプチャした画像を、V4L2を介してデバイスファイルへと流し込むことができます。
V4l2loopbackはLepton専用ではなく、他の画像処理プログラムで利用されたことがあるかもしれません。Buildについては、v4l2loopback、v4l2lepton、ともに、同時にダウンロードされるReadmeを参照ください。
図 3 全体像
なお、v4l2loopbackはカーネルモジュールの形態をとりますので、Linuxカーネルのbuild環境が必要です。Armbianの場合は、走行しているカーネル用のヘッダファイルを追加インストールして、buildします。Buildできたらinstallして、depmod –aしておきます。
以上問題なく実行できたらNanoPi NEOを一旦haltして電源を落とし、Breakout boardにLeptonを搭載し、Breakout Board記載の信号線名に合わせ、NanoPi NEOと結線します。右写真にて、右2本はI2C、左6本のうち右2本が電源とグランド、残りがSPIです。
結線後電源投入してarmbianが起動し、先に確認したようにI2C、SPIデバイスがboot時にチェックされ、デバイスファイルが作られていることを確認します。
図 4 NanoPi NEO + Lepton