WEBマガジン詳細

Webマガジン Vol.29- Jan., 2019

Column: FLIR Lepton で、お手軽?サーマル (3)

初めに

 

Leptonは、小型の安価な遠赤外線(LWIR)カメラモジュールで、80×60画素のLepton1.x/2.xシリーズと、160×120画素のLepton3.xシリーズのラインアップがあります。

本書は、Leptonを使ってお手軽(?)にサーマルイメージを得るPart.3、小型のLinuxボードを用いてLeptonを動かしてみる、最終回になります。

(図1 Leptonシリーズ)
図1 Leptonシリーズ

 

3章 NanoPi NEO上でVideo4Linux

中国本土にあるFRIENDLY ELECというボードメーカーにはなじみが薄かったとしても、NanoPiと聞くと知っている方もおられることと思います。FriendlyARMというブランドで、数多くの中国製Cortex-Aコアを利用したSoCのボードを開発・販売しており、NanoPi NEOは、外形4cm□にAllWinner社のH3 SoCを搭載したボードになっています。FriendlyARM Webは直販サイトにもなっていますが、新しいSoC使ってどんどんボードは開発されてくるし、その価格にも驚かされます。この章では、もはやレガシー?な状態になりつつあるNanoPi NEOと、Video4Linuxを使って、Lepton1.5からサーマル画像を撮り込んでみたいと思います。なお、SPIとI2Cを利用できるようになっていれば、RaspberryPiなどでも同じことは実現できますし、ここで紹介するのは、元々RaspberryPi上で開発されているプロジェクトです。Lepton2.5までは、本章に記載の方法で動作するはずです。

 

NanoPi NEOハードウエア

 1.2GHz動作のCortex-A7を4コア内蔵するSoC、AllWinner社のH3が搭載されている小型のボードで、512MbytesのDDR3が搭載されているバージョンを使いました。

このボードには、I2C、SPI、UART×3、USB2.0HS(TypeA)×1、USB2.0HS(ピンヘッダ)×2、USB OTG(microAB)×1、Ethernetなどがあります。

図6 NanoPi NEO、カバー付き

図 2 NanoPi NEO、カバー付き

電源は+5V単一で、USB OTG端子から供給するか、写真のようにピンヘッダから供給します(緑と白のワイヤ)。2A以上供給必要、となっていますが、この試験開発においては、もうちょっと容量が少ないものでも、USBペリフェラルもなくそれほどガンガンCPUパワー使ってはいないためなのか、トラブルなく動作しています。

次のページ

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を参照ください。

図7 全体像

図 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

図 4 NanoPi NEO + Lepton

前のページ

初めに

次のページ

V4l2loopbackとv4l2leptonによる画像取り込み

起動に問題なければ、ログイン後、modprobe v4l2loopbackします。
V4l2leptonがある(またはpathが通っている)ディレクトリで、
v4l2lepton –v /dev/video0 –d /dev/spidev0.0 &
V4l2leptonはフォアグランドプロセスとなっています。特にメッセージ出力は無いので、バックグランドにしておいて問題ありません。

以上で、VoSPI画像キャプチャが開始され、画像は/dev/video0へと送られています。

もし、ディスプレイを持つプラットホームでお試しの場合、この時点で、お使いのディスプレイに合わせ、vlcやffplay(ffmpeg)といった動画像プレーヤーで表示することができるようになっています。

 

ffmpegによるストリーミング

以前の Bosonの場合 と同様ですので、説明は割愛します。

Nano Pi NEOでストリーミングを行い、Windows PC上のvlcクライアントでキャプチャしたものが右になります。80×60タイプのLeptonですので、このようにキャプチャ画像を貼り付けると、ちょっと粗さが気になるかもしれません。(mjpegであるが故もありそうですが)

このストリーミング実行中で、ffmpegは約150Mbyteのプロセスサイズ、ロードレベルは0.7~0.9という状況ですので、CPUには余裕があります。512Mbytesのメモリに対して、スワップは発生していません。60分程度実行させたままで、CPU温度は42~43℃となっています。(室温27℃)

図9 ストリーミングしたLepton画像(ironblack)

図 5 ストリーミングしたLepton画像(ironblack)

図10 Lepton右手に持って記念撮影

図 6 Lepton右手に持って記念撮影?

Leptonを右手に持って、スマホで記念撮影。PC画面側VLC画像は、見やすいように、だいぶ拡大しています。

ここではLepton1.5を用いましたが、解像度が高いLepton3.xで、マルチタスクOS下で「数分~数時間稼働させると画像が止まる」等のケースに遭遇した場合は、ロジアナを使ってSPIバスの状況確認や、タスクスケジューリングについて確認してみると、良いかもしれません。LeptonをRaspberry PiやNanoPiのような、マルチコアSoCを搭載したボードで使う計画を立てた場合、それほど意識することもなくOSとSoCに任せておけばうまくいくんじゃないかと期待してしまいすが、そう簡単にはいかないこともあるようです。

タスク管理が難しい場合は、PT1/PT2のように、スケジュール管理された独立したMCUのコントロール下にLeptonを置く、というアプローチも必要になるかもしれません。Lepton3.xとPT2の組み合わせでの評価がお勧めされているのは、そのような背景に基づいています。

今後の展開

電源供給や、Leptonを接続するポート、コンソールを接続するポートや、USBポート増設を行うため、ユニバーサル基板でこのようなボードを作ってみました。この写真では、SoC側SPI・I2CにLeptonを搭載してあります。LCDを使う場合はそこに接続します。USBポートはType-A二段のものを搭載してあります。これで、Bosonを使うデモも実現できます。

図12

図7 ユニバーサル基板を使ったキャリアボードに搭載

 

Leptonを利用する際には、①USB-SPI他I/Fデバイスを用い、USBでインターフェースできるようにするケース、②PT1/2に代表される、専用のMCUを用いることでLeptonに合わせた環境を作り上げるケース、③そのほかLinuxベースの組込ボードを利用したケースの3通りをリストアップしてみましたが、そのいずれの手法のご紹介でもできるようなデモシステムを作れれば、と考えている次第です。(道は長そうだ…)

 

最後に

本書では、Leptonの利用方法について、インターネット上で紹介されている様々な手法を含めて紹介させていただきました。事例を掲載されているサイトを個々に紹介させていただいたわけではありませんが、いずれも、一定のキーワードを使うことで到達でき、その内容を知っていただくことができるものと思いますし、多くは日本語で読むことができます。

事例のほとんどは、筆者が実際に実行してみていますが、プログラマではないことを言い訳として、最終的な完成系に至るところまで、すべてのケースで到達しているわけではありません。何かお見せできるものを作成した際には、ご紹介の機会を持ちたいと思います。

前のページ

123
ページトップへ戻る