07 Aug 2014

LabVIEWとDLP LightCrafter(TM)ではまる

DLP LightCrafter(TM)とは

Texas Instruments社が出している小型DLPの開発キットとしてYOUNG Opticsという会社が市販している。 プロジェクターよりもパターニング小回りが利くので研究用途に使っている。 また、DLP自体、液晶タイプのパターニング素子に比べ応答が早いのとテラ帯での吸収を気にしなくていい特徴がある。 今回は、LightCrafterのGUIからLabVIEWでつくった画像を本体に送るときにおこったエラーについて。

小型DLPで扱う画像

LightCrafterでは、サイズが608 (px) x 684 (px)の白黒ビット画像(1bit bitmap形式)を用意すると専用のソフトウェア(LightCrafterGUI)を使って本体に送ることができる。 1bit画像の場合96通りの異なる画像をトリガー(外部トリガー、内部トリガー選択可能)をかけて切り替えることができる。 1bit階調のビットマップデータをLabVIEWから自動的にパラメータを変えて自動生成できれば便利かなというのがやりたかったことだ。

起こった症状

ビットマップ作成

まずはお試しでこのようなプログラムで数字を画像にしたビットマップファイルを保存するプログラムを作った。 ビットマップファイル自体は、96枚普通に作成された。

自動生成したビットマップ

ところがこれをGUIのPattern SequenceでLoad Pattern Imageを行おうとしたときにエラーが発生した。 Pattern Count(何枚送るか)を設定して本体にアップロードしたい画像を複数選択の上、Upload ALLをクリックすると 「command failed」とでて、画像が送られていない。 複数がだめなら1枚ずつではどうかとやってみると「command fails」とでるものの、その1枚は送られているようだ。 (Pattern SequenceをStartさせNextボタンを押すと画像が変わるのがわかる)

ファームウェアのアップデートも試みたが症状は改善されない。 そこでフォーラムを のぞいてみると解像度に問題がある場合にそのようなエラーが起こるとのこと。 しかし、ビットマップは確かに608 (px) x 684 (px)となっている。 念のため、ビットマップファイルをペイントで保存し直してみたところ、なんとエラーは発生しなかった。

原因と対策

これはLabVIEWが怪しい。 LabVIEWで作成したbmpファイルとペイントで保存し直したbmpファイルを見比べるとなぜかファイルサイズが違う。 LabVIEWの方は102kB、ペイントの方は半分の51kB。 608 (px) x 684 (px)=415872 bit =51984 Byte なので、ビットマップファイルのヘッダーがあるにしろ1bit画像では102kBになるはずはないのである。 ますますLabVIEWが怪しい。 「Write BMP file.vi」のブロックダイアグラムを開いていくと「Write BMP Data to Buffer.vi」というのがある。

Write BMP Data to Buffer.vi

この中で、BMPファイルに書き込む前の文字列を生成しているのだがこれをみると謎の「icon mask data」というのがある。 ビットマップファイルにiconマスクってあったっけ?と思いつつここから生成されるバッファのサイズを見るとちょうど元画像のサイズと同じでした。 icon生成時の拡張用の仕様なのかもしれないが、それが常に吐き出されているようだ(上のヘッダーの方はスイッチしているのに…)。 そこで

改良版Write BMP Data to Buffer.vi

このようにicon mask dataに関してもスイッチできるようにしたところ生成されるファイルサイズは51kBになりエラーも起こらなくなりました。

まとめ

お約束