Take’s diary

Macとマイコンに関すること--ワクワクの製作日記

W&T Thermal Cam for FLIR LEPTON1 & 3

このページは以下のURLへ移動しました。This page has moved to the following URL.

Thermal Cam3X V7.0以上の場合は、ESP8266ソースの再インストールが必要です。ソースは以下からダウンロードして下さい。 

In case of Thermal Cam3X V7.0 or more, it is necessary to reinstall ESP8266 source. Download the source below.

LEPTON3XYOLO110.ino - Google ドライブ

以下は以前のものです。Below is the old one.

****************************************************************************************

※Thermal Cam3LEPTON3.5に対応しました。

    Arduino  IDE(ESP_LEPTON3.5_1220.ino)の入替だけです。

Thermal Cam と Thermal Cam3 のバージョンアップ準備ができたので、インストール方法を公開します。Thermal Cam(又はThermal Cam3)使用の際はArduino IDEをすべて入れ替える必要があります。

Thermal Cam 3 is compatible with LEPTON 3.5,it is necessary to replace Arduino  IDEESP_LEPTON3.5_1220.ino.See below!!!.

Now we are ready to upgrade for Thermal Cam and Thermal Cam 3,  we will release the installation method. When using Thermal Cam (or Thermal Cam3), it is necessary to replace all Arduino IDE.

    Dan O さんに現在スイッチサイエンスで販売しているボードや、Thermal Cam・Thermal Cam3の比較動画を作っていただきました。2つのアプリの違いやバージョンアップ内容がよく分かると思います。

システム概要

 FLIR LEPTONとiPhoneの動作環境です。

 How to use iPhone application

f:id:TAKEsan:20180221115139p:plain

iPhoneアプリ操作方法

Apple アプリストアからW&Tで検索。アプリ名称は

     LEPTON1使用の場合 Theamal Cam

     LEPTON3及び3.5使用の場合 Theamal Cam3   です。

LEPTONは13かでインストール内容が違いますので注意して下さい。

W&TとはWiwao(ハード担当)とTAKEsan(ソフト担当)の合作という意味です。

f:id:TAKEsan:20170922212805p:plain

f:id:TAKEsan:20170922180732p:plain  

f:id:TAKEsan:20170720011602p:plain サンプル画像はThermal Cam3ですが、Thetmal Camはボタンが赤に変わるだけで操作上の変更点はありません。但しThermal Camはカラーマップの選択数が4色だけになります。

The sample image is Thermal Cam 3, but Thetmal Cam just changes the button to red and there are no operational changes. However, Thermal Cam has only 4 color map selection numbers.

      f:id:TAKEsan:20180221114555p:plain

          Thermal Cam (LEPTON1用アプリ)の画像。ボタンが赤に変わります

Thermal Cam (for LEPTON1 & 3) がバージョンアップしました。Thermal Cam (for LEPTON 1 & 3) has been upgraded.

内容はこの画像をご覧下さい。Thermal CamはVer2.0.0  Thermal Cam3はVer6.5.0です。

 今回はThermal Cam3のみで、バグ修正、スピード向上、WIFIがつながりにくい場所での接続性向上、画像反転機能の追加です。

This time only with Thermal Cam 3, bug fixing, speed improvement, connectivity improvement in places where WIFI is difficult to connect, addition of image inversion function.

Please see this image for the contents. 

                 

内容の詳しい説明は最後の「新機能について」を参照。

For the detailed explanation of the contents of version upgrade, see the last "About new functions".

そもそもLEPTONサーモセンサーってなに? What is LEPTON thermosensor in the first place?

 このセンサーだけで熱を感知して、画像を再現します。真っ暗闇で何の照明を使わずに画像が再現できます。詳しくはメーカーサイトを御覧ください

This sensor alone senses heat and shows thermal image. Thermal Images can be seen in the dark without any lighting. Please see the manufacturer site for details.

FLIR Lepton® | FLIR Systems

LEPTON1とLEPTON3はどう違うのか? What is LEPTON 1 different from LEPTON 3?

 以前発表したLEPTON1アプリは解像度が80x60。 アプリ上は8倍に画像を補間して約320x240の画像を再現しています。LEPTON3アプリケーションは、もともと持っている解像度160x120を4倍に補間して320x240の動画を再現できます。同じじゃないかって?以下の違いを見てください。ジャギーの出方や背景の詳細感の差が分かるでしょうか?。実際に使うとベールが1枚剥がれた感覚です。今までLEPTON1では見逃していた小さな部分の発見につながります。

 有料のThermal Cam3は、解像度が高い分、通信エラーが発生しやすいのですが、アルゴリズムを変えているので、通信が非常に安定しており、結果的にThermal Camより動画スピードが若干上がっています。

The previously announced LEPTON 1 application has a resolution of 80 x 60. The application interpolates the image by 8 times and reproduces the image of about 320x240. The LEPTON 3 application can reproduce 320 x 240 movies by quadruple interpolation of the original 160 x 120 resolution. Is it the same? Please see the difference below. Can you see the difference in detail of  Jaggies and background ? . It is a feeling that a veil has peeled off when actually used. Until now LEPTON 1 will lead to the discovery of small parts that you had missed. Thermal Cam 3  is easy to occur error because communication is high rate as the resolution is high, but because the algorithm is changed, the communication is very stable, resulting in slightly higher video speed than Thermal Cam.

f:id:TAKEsan:20170922191654p:plain                            f:id:TAKEsan:20170922191919p:plain

f:id:TAKEsan:20170922183836p:plain   f:id:TAKEsan:20170922183918p:plain

LEPTON1でも良さそうな気がしますが、遠景がボケる(詳細ではない)ことと。この補間方法は斜めの線にジャギーが目立ちます。(以前の画像を使用しているので、ボタンが変わっています)

LEPTON3の画像。背景の細かなところまではっきり写っていることがわかります。斜めの線も問題なし。全体がシャープになります。

LEPTON 1 seems to be good, but the distant view is blurred (not the details). In this interpolation method, jaggies are conspicuous on oblique lines. (Because the previous image is used, the button has changed)

Image of LEPTON 3. You can see that the details of the background are clearly shown. There is no problem with oblique lines. The whole is sharp.

           背景の丸い物体はこんな形の照明です→f:id:TAKEsan:20170923162315p:plain

なぜ WROOM02 (ESP8266) を使うのか? Why use WROOM 02 (ESP 8266)?

 その消費電力の少なさと価格の安さに尽きます。消費電力はESP32やPi Zero の約半分。基盤を選べば280mAhの極小リポバッテリーでLEPTON3の場合でも1時間以上赤外線動画を発信し続けます。

It consumes less power and lower price. Power consumption is about half of ESP32 and Pi Zero. If a good pcb is chosen, it will continue to transmit infrared video for over 1 hour even in case of LEPTON 3 with 280 mAh mini lipo battery.

f:id:TAKEsan:20170922213505p:plain

                     f:id:TAKEsan:20170920222645j:plain

      新しく開発したドローン向けの比較的大型の基板でも、電池を含めて僅か18gです

 このことは、トイドローン搭載を始め色々な用途で使えることを意味します。ただし以前の記事でも紹介したように問題も山積み。普通であればより性能の高いESP32に走りがちですが、ESP8266にこだわり続けました。ESP8266でLEPTON3の画像を しかも、100m前後離れたところからiPhoneで受信できるなんて誰が信じるでしょう!!。

  上記写真は、Dobby特化したボードで、Wiwaoさんが自力で開発したものです。ESP8266には何も改良を加えていないので当然技適も問題ありません。このボードと今回のソフトの組み合わせで双方100m程度離れている条件で、iPhoneからLEPTON3のほぼノイズがない画像が継続して再現できました。しかも測定した場所はWIFI中継点が20箇所程度と非常に劣悪な環境でした。(下記で実際の動画が確認できます)*1

 残念ながら一般のボードでは最大の動画受信距離は50m程度です。今回のアプリはボードを選びませんが、性能と安定性を望むならWiwaoさんの作ったカスタム基盤が必要になります。ESP8266で正常に動画が配信できれば、他のプロセッサやESP32を使うメリットは何もありません

Thermal Cam(LEPTON1)でも内容はほとんど変わりません

This means that you can use it for various purposes, including toy drone. However, as we introduced in previous articles, there are many problems. Although it tends to run to ESP 32 with higher performance if it is normal, I continued to stick to ESP 8266. Who will believe that you can receive images of LEPTON 3 with ESP 8266 and still be able to receive on iPhone from around 100 m away! ! .

The above picture is a board specialized for zerotech Dobby, which Mr. Wiwao developed by himself. Since there is nothing to improve on ESP 8266 naturally, there is no problem with skill. With this combination of this board and software of this time it was able to reproduce images with almost no noise of LEPTON 3 from iPhone under the condition that both are 100 m away.

Moreover, the place where we measured was a very bad environment with WIFI relay point of about 20 places. (Actual video can be confirmed below) * 1

Unfortunately the maximum video reception distance on a general board is around 50 m. This application does not choose a board, but if you want performance and stability, you need a custom pcb made by Wiwao. If you can successfully distribute movies with ESP 8266, there is nothing to benefit from using other processors or ESP32.

※ The contents are almost the same even with Thermal Cam (LEPTON 1).

LEPTON3+Thermal Cam3をDobbyに取り付けて撮影すると.......。When LEPTON 3 + Thermal Cam 3 is attached to Dobby and shot ........

 次の動画は、Wiwaoさんが小型ドローンDobbyに今回のシステムを取り付けて、実際に太陽電池メンテナンス用にTestフライトを実施したものです。

The following video is Wiwao's installed this system on a small drone zerotech Dobby and actually conducted a Test flight for solar cell maintenance.

 f:id:TAKEsan:20170924153833p:plain

       

 画像には定期的にノイズが入りますが、Dobbyに入っているGPSが悪さをしているようです。現在はiPhoneアプリ側で修正を行い、ほとんどノイズが入らなくなっています。右上の実写画像は、Dobbyの画像データを合成しています。十分実用に耐える解像度なのが、確認できると思います。

Noise enters the image at regular intervals, but the GPS in Dobby seems to be doing bad things. Currently, iPhone application side makes corrections, almost no noise comes in. The actual photographed image on the upper right combines Dobby's image data. I think that it can be confirmed that the resolution enough to withstand practical use.* Thermal Cam (LEPTON 1) can not be good images in detail so far.

Thermal Cam(LEPTON1)では、ここまで詳細に画像を再現できません。

Thermal Cam3はUDP OSC通信をiPhoneデザリングで実現していますが、周りの妨害電波からほとんど影響を受けません。Thermal Cam 3 conducts UDP OSC communication with iPhone tethering, but it is not hardly affected by surrounding jamming waves.

 次の動画はWiFi中継点が20ヶ所程度でパケットに影響の出やすい駅構内で録画していますが、多少フレームレートが落ちる程度で、画像ノイズは全くないことが確認できます。

Although the next movie is recording on the station premises where the WiFi relay point is likely to affect packets at around 20 places, it can be confirmed that there is no image noise at all, as the frame rate goes down slightly.

f:id:TAKEsan:20170922214624p:plain

    

Thermal Cam(LEPTON1)でもノイズはほとんどありません。

 夜なのにこんな画像が録画できます。Even though it is night, you can record such an image.

 人も車も風景も、そして電線も.....。このクオリティー。結構いいかもしれません。

People, cars, landscapes, electric wires ...... This quality. It might be pretty good.

   f:id:TAKEsan:20170926195400p:plain

    youtu.be

Thermal Cam(LEPTON1)ではここまで詳細な画像にはなりません。

※ Thermal Cam (LEPTON 1) does not become a detailed image so far.

100m離れた場所での画像です。It is an image at a place 100 m away.

 WROOM02(ESP8266)側のWIFI中継点は20箇所。iPhone側は7箇所でした。少しパケット紛失(インジケーター黄色点滅)しているようですが、動画のスピードは問題ありませんでした。この画像の撮影ではWiwaoさんの最新ボードを使っています。

There are 20 WIFI relay points on WROOM 02 (ESP 8266) side. There were 7 places on the iPhone side. It seems that a little packet loss (indicator yellow flashing), but the speed of the video was not a problem. For shooting this image, I use his latest board of Wiwao.

 f:id:TAKEsan:20170927212241p:plain

     

LEPTON3が風に揺れています。ほとんど遅れがないことと、画像のノイズが全くないことが確認できました。この場所はすぐ左側が崖になっている住宅地で、パケットのエラー修正がまともにできていないと、満足に画像が再現できない「魔」の場所です。

LEPTON 3 is swaying in the wind. It was confirmed that there was almost no delay and no image noise. This place is a residential area where the left side is a cliff soon and it is a place of "devil" that can not reproduce images satisfactorily if error correction of packet is not done properly.

Thermal Cam(LEPTON1)でも内容はほとんど変わりません

※ The contents are almost the same in Thermal Cam (LEPTON 1)

 アプリ実行前に...。 Before running the application ....

 このアプリは以下の別部品およびソースのインストールが必要です。順番に沿って部品の調達およびソフトのインストールを行ってください。WROOM02のソースコンパイル時はメモリーとCPUスピード設定をそれぞれ80MHz,160MHzに設定が必要です。(Thermal Cam (for LEPTON1)は以前周波数を下げていましたが、V2.0では周波数を上げてコンパイルします)※5.ボード設定は以下の通りとしてください 参照

 まずESP8266開発ボード、LEPTON1又はLEPTON3LEPTONブレイクアウトボードを手に入れてください。

 以下必要部品の入手先とLEPTON画像再現までの手順です。

This application requires installation of the following separate parts and source. Please procure parts and install software according to the order. When source compiling WROOM 02, it is necessary to set memory and CPU speed setting to 80 MHz and 160 MHz respectively. (Thermal Cam (for LEPTON 1) had lowered the frequency before, but compiled with increasing frequency at V 2.0) * 5. Please refer to the board settings as follows.

 First, get the ESP 8266 development board, LEPTON 1 or LEPTON 3, LEPTON breakout board.

 Below is the procedure from where to obtain the required parts to LEPTON image reproduction.

             f:id:TAKEsan:20170922215134p:plain     f:id:TAKEsan:20170922213121p:plain

1. ESP8266開発ボードを用意してください。 

   f:id:TAKEsan:20170922215847p:plainf:id:TAKEsan:20170921093729j:plain   

   f:id:TAKEsan:20170922220438p:plainf:id:TAKEsan:20170921093744j:plain

LEPTON3はSPIとi2C及び3.3V出力端子が必要です。これらの端子が使用できないボードもありますので、購入時は注意してください。

LEPTON 3 requires SPI and i2C and 3.3 V output terminals. Some boards can not use these terminals, so be careful when purchasing.

そして..。お待たせしました私たちの作ったボードを販売することにしました。

SPIの信号が安定するばかりでなく、WiFiの飛距離が技適範囲内で飛躍的に伸びます!!。汎用にするためにボードの大きさを最適化しました。

And ... Sorry we made you wait. We decided to sell the board we made. In addition to stabilizing the signal of SPI, the distance of WiFi will dramatically increase within the technical range! ! . We optimized board size to make it general purpose.

f:id:TAKEsan:20171129202826p:plain

2. LEPTONを用意してください。 LEPTON3.5はArduinoソースだけを変更します。      

f:id:TAKEsan:20180221122141p:plain

f:id:TAKEsan:20170922191654p:plain                      f:id:TAKEsan:20170922191919p:plain

      f:id:TAKEsan:20180221121803p:plain                 f:id:TAKEsan:20170924112640p:plain

日本ではコーンズテクノロジーかDigi-Keyで手に入ります。LEPTON1はシャッター付きをオススメします。

In Japan, you can get it with Cornes Technology or Digi - Key. LEPTON 1 is recommended with a shutter.

 もし電子機器を多少かじったことがある人であればFLIR ONEを持っていれば、簡単に取り外すことができます。特殊ドライバ(ヘキサドライバーT5H(センター穴付))が必要で、ビスさえ外せば簡単にLEPTON3を取り外せました。と言うことは、簡単に元に戻せます。(2017年10月6日現在Apple ストアで販売されているFLIR ONEに使われているセンサーはLEPTON1(解像度80X60)。LEPTON3が使われている機種はFLIR ONE Proです。)

If you have kicked the electronic device somewhat, you can easily remove it if you have FLIR ONE. A special driver (Hexa driver T5H (with center hole)) is necessary, you can easily remove LEPTON 3 by removing the screws. To say is easy to undo. (The sensor used for FLIR ONE sold at the Apple store as of October 6, 2017 is LEPTON 1 (resolution 80 X 60), and the model in which LEPTON 3 is used is FLIR ONE Pro.)

     f:id:TAKEsan:20170924110121p:plain f:id:TAKEsan:20170719121154j:plain    

  LEPTONセンサー自体は完全防水で、衝撃にもかなり強いため悪条件にびくともしませんが、取り外し可能なシャッター部品は壊れやすい欠点があります。取り扱いには十分に注意してください。LEPTONは定期的にシャッターを閉じて画像のキャリブレーションを行っていますが、シャッターが壊れると残像が残るなど、画像に障害が出て来ます。今の所シャッターの交換部品は販売していない様なので、取り扱いには十分注意が必要です。

The LEPTON sensor itself is completely waterproof, and it is quite strong for impact, so it does not bother with adverse conditions, but detachable shutter parts have a breakable disadvantage. Please handle with care. LEPTON regularly closes the shutter and calibrates the image, but if the shutter breaks, afterimages will remain, such as image failure will come out. Currently it seems that we do not sell replacement parts for the shutter, so careful handling is necessary.

3. BREAKOUT BOARDが必要です。 BREAKOUT BOARD is required.                          

f:id:TAKEsan:20180221122649p:plainf:id:TAKEsan:20170924112934j:plain

      日本ではコーンズテクノロジーかDigi-Keyで手に入ります。

       In Japan, you can get it with Cornes Technology or Digi - Key.

4. Arduino IDEをインストールします(Macの場合) Install Arduino IDE (Mac)

Arduino IDE https://www.arduino.cc/en/main/software  をインストール

IDEを起動させたら、

Arduino-->Preferences..

出てきた環境設定ダイアログの下の方「追加ボードマネージャーのURL:」の中に

http://arduino.esp8266.com/stable/package_esp8266com_index.json

を書き込む。

Install Arduino IDE https://www.arduino.cc/en/main/software  After starting the IDE,

Arduino-->Preferences..

In the lower part of the setting dialog that came out "in the URL of additional board manager:"

http://arduino.esp8266.com/stable/package_esp8266com_index.json

f:id:TAKEsan:20171008224533p:plain

    ツール-->開発ボード-->ボードマネージャー を選択

最後の方にesp8266 by esp8266 Community という項目があります。

       f:id:TAKEsan:20170922223921p:plain

f:id:TAKEsan:20170920210049p:plain

 バージョンは必ず2.2.0 を選択してください。(上図はすでに2.2.0を選択してるので選択画面には出て来ていない)すでに 2.3.0を選択している方は 2.2.0にバージョンを落としてください。2.3.0で今回のソースをインストールするとうまく動作しません

Be sure to select 2.2.0 for the version. (Since the above figure has already selected 2.2.0, it has not appeared on the selection screen.) If you have already selected 2.3.0 please drop the version to 2.2.0. Installing this source in 2.3.0 does not work well.

5. ボード設定は以下の通りとしてください。 The board settings should be as follows.

 シリアルポートはESP8266を接続すれば表示されますが、Bluetoothでない方を選択します。注意点は、Macの場合ESP8266を何回も抜き差しすると、USBを認識しなくなることです。認識しない場合はMac側のUSBコネクタを変更すると、認識するようになります。MacBookのようにUSBコネクタが2つしかなくて両方認識しなくなったら、再起動……。です。       Flash Frequency=80MHzCPU Frequency=160MHzであることに注意してください。    

The serial port will be displayed if you connect the ESP 8266, but choose the one that is not Bluetooth. The caveat is that if you plug or unplug ESP 8266 multiple times on a Mac, it will not recognize USB. If you do not recognize it, you will recognize it when you change the USB connector on the Mac side. If there are only two USB connectors like a MacBook and both do not recognize, restart ....... is. Please note that Flash Frequency = 80 MHz, CPU Frequency = 160 MHz.                 

  f:id:TAKEsan:20170922224216p:plainf:id:TAKEsan:20170920210155p:plain

   f:id:TAKEsan:20170924110748p:plain

6. OSCライブラリをインストールします。 Install the OSC library.

  Arduino IDEの Arduino—>Preferences..  を選択して一番上の スケッチブックの保存場所を確認します。

Select Arduino-> Preferences .. in the Arduino IDE and check the storage location of the top sketchbook.

                 f:id:TAKEsan:20170920210844p:plain

この中に libraries  フォルダがあるかどうか確認します

Make sure there is a libraries folder in this

                f:id:TAKEsan:20170920211146p:plain

無かったらlibrariesフォルダを作成します。以下のURLを開いて

      https://github.com/sandeepmistry/esp8266-OSC

ESP8266のOSCライブラリをダウンロード解凍してlibrariesフォルダに移動させます。

一度Arduino IDEを終了させ、再起動後 スケッチ-->ライブラリをインクルードを選択して 「OSCが入っているかどうか確認。

If you do not have it, create a libraries folder. Open the following URL

      https://github.com/sandeepmistry/esp8266-OSC

Unzip the OSC library of ESP 8266 and move it to the libraries folder.

Exit the Arduino IDE once, after restarting, select Sketch -> Include Library to check if "OSC" is included.

7. iPhoneを設定します。 Configure iPhone.

 iPhone を普通に初期設定するとssidは日本語になります。エラーが起きる可能性がありますので半角英字に修正してください。

 設定-->一般-->情報-->名前-->現在のiPhone名称>を選択 で名称を変更します。名称を変更してもiPhone自体の挙動に影響はありません。

When initializing iPhone as usual, ssid becomes Japanese. Please correct it to half-width alphabetical as it may cause an error.

Choose Settings -> General -> Information -> Name -> Current iPhone Name> to change the name. Changing the name does not affect the behavior of the iPhone itself.

8.  今回製作したESP8266Arduino ソースをダウンロードします。Download the ESP 8266 Arduino source produced this time.

https://drive.google.com/drive/folders/0BzqxnYlVMv6uRUtMb2pRXzdsNlU?usp=sharing

    f:id:TAKEsan:20170922224440p:plainf:id:TAKEsan:20170920214731p:plain

 

  f:id:TAKEsan:20170922191654p:plain      f:id:TAKEsan:20170922191919p:plain

  LEPTON1_TESTFlight0221.ino              LEPTON3_TestFlight_0222.ino   

                                                                        ESP_LEPTON3.5_1220.ino  (最新=New)

       f:id:TAKEsan:20180628123542p:plain

        LEPTON3.5_TestFlight_0628.ino

        ESP_LEPTON3.5_1220.ino  (最新=New)

 お手持ちのLEPTONに合わせてダウンロードしてください。(ファイル名に注意して下さい)Arduino IDEを開いて、今ダウンロードしたファイルをダブルクリック。フォルダの中に入れますか?と聞かれるので、YESを選択。OSCやSPIの安定化、UDPパケット紛失問題の解消、ESP特有のWDTリセットの解決方法をコメントしておきました。ボードを選べば100m以上離れた場所でLEPTONの画像が再現できます。

Please download it according to your LEPTON. (Please note the file name) Open Arduino IDE and double click on the file you downloaded now. Can you put it in the folder? As you are asked, choose YES. We commented on the stabilization of OSC and SPI, the elimination of UDP packet loss problem, and the solution method of WSP reset specific to ESP. If you choose a board, LEPTON images can be reproduced in places more than 100 m away.

9. 今回のiPhoneアプリをダウンロードします。Download this iPhone application.

  f:id:TAKEsan:20170922191654p:plain  f:id:TAKEsan:20170922191919p:plain     

       f:id:TAKEsan:20170720011602p:plain         f:id:TAKEsan:20171019102434p:plain

       Ver 2.0.0                                                  Ver 6.5.0

 W&Tで検索。LEPTONに合わせてThemal Cam又はThemal Cam3(LEPTON3.5はThemal Cam3そのままでOK)を探します。申し訳有りませんが、資金が底をついてきました。数もあまり出ないと思いますので、Themal Cam3に関して高いとは思いますが、1,000円くらい徴収したいと思います。様々なテストをクリアしているのでアプリはとても安定して動作します

Search by W & T. Look for Themal Cam or Themal Cam 3 according to LEPTON. I am sorry but funds have bottomed up. I think that it does not come out so much, so I think that it is high with regard to Themal Cam 3, but I would like to collect about 1,000 yen. Since the various tests are cleared, the application works very stably.

10. 今回のソースを開いて一部を修正します。Open this source and fix some.

 修正が必要な部分は、以下の3箇所です。 

          34,35行目付近   

          #define SSID_X    “ABiPhone   //iPhone

          #define PASS_X    "11111111"   //iPhone

  ABiPhoneiPhoneの名称、11111111 に 設定-->モバイルデータ通信-->Wi-Fiのパスワード を調べて パスワードを入力します。

          47行目付近

          #define LEDpin 16

に自分のボードに合ったLEDのピン番号を入力してください。LEDは特に必要ありませんが、ESP8266の状態がわかるので、点灯すると便利です。サインは以下の通りです。

  • LED 長点滅 初期のWiFi接続中の場合点滅。中間でWDTリセットが入った時やWiFi再接続中の場合点滅。
  • LED 短点滅 iPhone側のアプリが中断した場合点滅。
  • 無点滅   正常にデータを送っている場合。
  • 無点滅中一瞬LEDが光る場合 パケットが紛失して、再度同じパケットを送っている時。ピカッピカッが多いときは、周囲の電波状態が悪く連続してパケット修正をしている状態なので、画像のフレームレートが下がります。

  GPSをONにすると、周期的に一瞬ピカッと光ります。確実にパケットを紛失してるのですが画像にはさほど影響がないことがわかると思います。BlueToothをONにするとさすがにいっぱい光ってフレームレートが落ちます

The parts that need to be modified are the following three places.

Near lines 34 and 35

          #define SSID_X    “ABiPhone   //iPhone

          #define PASS_X    "11111111"   //iPhone

Set the name of iPhone to ABiPhone, set to 11111111 -> Mobile data communication -> Enter the password by checking the Wi - Fi password.

          Line 47 (for LEPTON 1) Near line 53 (for LEPTON 3)

          #define LEDpin 16

Please enter the pin number of LED matching your board. Although LED is not particularly necessary, it is convenient to light up as you can understand the state of ESP 8266. The signature is as follows.

  • LED blinking - when initial WiFi connection is in progress. Blinks when WDT reset is entered in the middle or WiFi reconnection is in progress.
  • LED Flash short blink Blinks - when iPhone side application is interrupted.
  • No flashing - When sending data normally.
  • When the LED glows instantaneously during blinking - When the packet is lost and is sending the same packet again. When there are a lot of shocks, the frame rate of the image decreases because the ambient radio condition is bad and the packet is being corrected continuously.
When GPS is turned on, it glows shimmerly periodically. I think that you can see that there is not much effect on the picture although it surely loses the packet. When BlueTooth is turned on, it glows a lot and the frame rate drops.

11. ESP8266とLEPTON BREAKOUT BOARD を接続します。Connect ESP 8266 and LEPTON BREAKOUT BOARD.

 スイッチサイエンスESPrの場合、LEPTONブレイクアウトボードとESP8266の結線は以下の通りです

For switch science ESPr, the connection between LEPTON breakout board and ESP 8266 is as follows

                               f:id:TAKEsan:20170923112802p:plain

12. WROOM02(ESP8266)ボードにプログラムを転送します。 Transfer the program to WROOM02 (ESP8266) board.

 以上設定が終わったらコンパイル、転送します。たまにエラーが出る場合がありますが、その場合は再度転送してください。(USBを認識していない場合が多い)

When compilation and transfer are done, it completes. Although occasionally an error may appear, please transfer again in that case. (USB is not recognized in many cases)

13. いよいよサーモグラフィー開始 The thermography finally starts !!

iPhone7、7plus、 SE、iPad mini4 、Xでの動作確認をしています。一般のiPadでも動くと思いますが、両者ともCPUはA9以上が必要です。iPhone8、8Plus、他のiPadに関してはシュミレーターで動作を確認・調整しています。

 インストール作業から1回目の動作確認までは、簡単とは言えませんが、Arduinoに慣れている皆さんにとっては全く問題のない過程です。セキュリティーを保ったまま、2回目以降は3ステップ(LEPTON側スイッチオン-->インターネット共有-->iPhoneアプリ起動)で動いてしまいます。煩わしいWiFi選択やIP、パスワード入力などは全く必要ありません。また、テザリングを使っていても外部とは通信しないので、Thermal Cam3動作に関する通信料金は発生しません。

I am checking the operation with iPhone 7, 7 plus, SE, iPad mini 4, X. I think that it will work on general iPad, but both require A9 or more CPU. For iPhone 8, 8 Plus, and other iPads, the operation is checked and adjusted with a simulator.

It is not easy from installation to first confirmation of operation, but for everyone who is accustomed to Arduino it is a completely problem free process. While keeping security, it moves with 3 steps (LEPTON side switch ON -> Internet share -> iPhone application launch) after the second time. No troublesome WiFi selection, IP, password entry etc are required at all. Also, even if you use tethering, you will not communicate with the outside, so there will be no communication fee for Thermal Cam 3 operation.

 皆さんのアイディアで、用途に合わせた素敵なThermal Camケースを作って見てはいかがでしょうか。私は今回Wiwaoさんが試作したボードを利用してレザーケースを3種類作って見ました。

Why do not you make a nice Thermal Cam case according to the application with your idea. I made three kinds of leather cases using the board which was made by Wiwao this time.

     f:id:TAKEsan:20171021224403j:plain

###########################################################

新機能について About new features

今回のバージョンアップは、ダイナミックレンジの考え方から説明する必要があります。今回は大きく分けて3つの機能が追加されました。また、新たにiPhone8,8Plus,iPhone X、iPad Pro10.5 inchに対応します。

In this version upgrade, we need to explain from the concept of dynamic range. This time, three functions were added in roughly divided. In addition, it corresponds to iPhone 8, 8 Plus, iPhone X, iPad Pro 10.5 inch anew.

ダイナミックレンジについて About dynamic range

LEPTONは測定温度に応じて14bitの数値を出力しますが、白黒データにすると1ピクセルあたり最大8,192階調にもなります。計測範囲は-273 〜 + 300 ℃( 分 解 能 : 0.05℃ )。現状の通常ディスプレイで表現できるグラデーションは256段階。それに色を付けます。ところが表示装置の制限で、測定可能範囲を256階調にすると非常に荒い画像となることになります。さらに測定する温度範囲はその中のごく一部で、濃淡が出ないために画像が表現できません。回避策は画像として表示するため計測範囲をここで256階調に変換することになります。

LEPTON outputs a 14-bit value according to the measured temperature, but if it is monochrome data it will be up to 8,192 tonal levels per pixel. Measurement range is -273 ~ + 300 ℃ (resolution: 0.05 ℃). There are 256 gradations that can be expressed in the current normal display. I add color to it. However, due to limitations of the display device, if the measurable range is set to 256 tones, it will be a very rough image. Furthermore, the temperature range to be measured is only a part of it, and the image can not be expressed because there is no shade. Since the workaround is displayed as an image, the measurement range will be converted to 256 tones here.

  f:id:TAKEsan:20180221104750p:plain

色付けした画像が下図のようになり、Thermal Camの標準画面です。

f:id:TAKEsan:20180221104916p:plain

この方法は問題があって、刻々と変化する温度領域をその都度256等分することになるので、測定場所の移動で、画面毎に色がめまぐるしく変化してしまいます。

Since this method has problems and it will divide the constantly changing temperature range into 256 equal parts each time, as the measurement place moves, the color changes dramatically from screen to screen.

    f:id:TAKEsan:20180221105448p:plain

 室内のように最高最低温度の差があまり無い場合は、気になりませんが、例えば画面に極端な高温部が部分的に存在する場合、温度差が増しただけ解像度が下がることになるので極端な温度幅になり、室内の階調がほとんど無くなることになります。 

If there is not much difference between maximum and minimum temperatures as in the room, you do not mind, for example if the extreme high temperature part is partially present on the screen, since the resolution will decrease as the temperature difference increases It becomes an extreme temperature width, and the gradation of the room almost disappears.   

       f:id:TAKEsan:20180221105344p:plain

   f:id:TAKEsan:20180221105552p:plain

これを防ぐため、この例の場合低温寄りのある範囲で256階調にすれば画像表現できることになります。

 調整する方法として、現状の最高最低温度の低温側及び高温側を全体の比率で調整できるようにしたのがダイナミックレンジです。調整範囲外は白又は黒になります。下図は低温側を調整した場合です。

In order to prevent this, in the case of this example, if it is 256 tones in a certain range close to low temperature, it is possible to express the image.

As a method of adjustment, the dynamic range is made to be able to adjust the low temperature side and the high temperature side of the current maximum and minimum temperature by the whole ratio. Outside adjustment range is white or black. The figure below shows when adjusting the low temperature side.

    f:id:TAKEsan:20180221105809p:plain

  f:id:TAKEsan:20180221105916p:plain

現在の最低最高温度の範囲で、低温側32%を256階調表現している。Max温度はこの場合炎の温度ではなく背景の最高温度となる。高温側を調整した場合はMin温度が変化する。

In the current lowest maximum temperature range, 32% of the low temperature side is expressed in 256 tones. In this case Max temperature is not the temperature of the flame but the maximum temperature of the background. When the high temperature side is adjusted, the Min temperature changes.

 結果的に、ある温度帯でLPTONの分解能の限度まで階調を表現できるようになります。これがThermal Camのダイナミックレンジスライダーです。

As a result, gradation can be represented up to the limit of the resolution of LPTON in a certain temperature range. This is the dynamic range slider of Thermal Cam.

新機能 1  New function 1

 室内のように測定温度範囲が小さい状況で温度画像を再現したい場合、他の方法で背景色の変化をできるだけ無くする方法はないのでしょうか?。-273〜+300 ℃の計測範囲を例えば室内の最低最高温度(24℃〜34℃とか)に変えて、この間に256階調のカラーマップを適用させる方法で解決できます。測定温度に対応する色が固定されるので画像が安定することになります。

If you want to reproduce a temperature image in a situation where the measurement temperature range is small like indoors, is there no way to eliminate background color change as much as possible using other methods? . It can be solved by changing the measuring range of -273 to + 300 ° C to the minimum room temperature (24 ° C to 34 ° C, for example) in the room, and applying 256 gradation color maps during this period. Since the color corresponding to the measurement temperature is fixed, the image will stabilize.

  f:id:TAKEsan:20180221110100p:plain

    f:id:TAKEsan:20180221110234p:plain

 上記のように最低温度、最高温度を設定してスライドスイッチをONにします。カラーレンジをONにして、Thermal Cam を動かすと画像右上にグレーの点と、今設定した温度範囲が表示されます。

Set the minimum temperature and maximum temperature as described above and turn on the slide switch. When the color range is set to ON and the Thermal Cam is moved, gray points and the set temperature range are displayed at the upper right of the image.

   f:id:TAKEsan:20180221111008p:plain

 同時に左下の現状最低最高温度表示部分に青と赤の点が現れます。二つの点の範囲が絶対カラーマップの範囲を示します。現状はその範囲でどのあたりを利用しているのか判別できるようにしました。測定した温度帯が刻々と変化しますので、この2つの点も常に動くことになります。カラーマップONで極端な温度が部分的に発生した場合でも、下図のように(ライターの火が画像に入っている)背景色は変化しなくなります。

At the same time, blue and red dots appear in the lowest highest temperature display area at the bottom left. The range of two points indicates the absolute color map range. The current situation has made it possible to judge which area is used within that range. Since the measured temperature zone changes every moment, these two points will also move at all times. By doing this, even if extreme temperatures are partially generated, the background color will not change as shown below (the lighter's fire is in the image).

    f:id:TAKEsan:20180221111133p:plain

    赤と青の点の範囲と現在のカラーマップがうまく動いていることがわかると思います

         You can see that the range of red and blue points and the current color map are moving well.

この新機能は、現状カラーマップが標準カラーマップのごく一部の範囲となった場合階調が著しく失われますので注意が必要です。

Please note that this new function will cause the gradation to be significantly lost if the current color map becomes a small part of the standard color map.

新機能 2  New function 2

設定でSide View をON。特に確認したい温度領域 Target temp で温度を指定します。

この設定で、画面右側にサブビューが表示され、ターゲット測定温度は緑色で表示されます。

Set Side View on setting. Specify the temperature with the temperature range Target temp you want to check.With this setting, a subview is displayed on the right side of the screen and the target measurement temperature is displayed in green.

f:id:TAKEsan:20180221111400p:plainf:id:TAKEsan:20180221111454p:plain

      f:id:TAKEsan:20180221111642p:plain

 この例のように最高温度最低温度域、設定温度域が即座に確認できます。測定域が現在の最低温度より低いときは、当然ですが緑表示されないのでご注意下さい。

As in this example, the maximum temperature minimum temperature range, set temperature range can be confirmed immediately. Please note that when the measurement area is lower than the current minimum temperature, green display will not be made.

新機能 3  New function 3

 ESP8266はWIFI無線電波帯域が2.4GHzです。それが他のBluetoothやWiFi機器と干渉する場合があります。こうなった場合、ESP8266の電波を切断出来るようにしました。パニックになった場合iPhoneをシェイクするとESP8266のWiFiは約20秒間完全に止まり、電波干渉は無くなります。ドローンなどに取り付ける場合の墜落リスクが減ることになります。

ESP 8266 has a WIFI radio frequency band of 2.4 GHz. It may interfere with other Bluetooth or WiFi devices. In this case, we made it possible to cut off the wifi of ESP 8266.  In this case, shaking the iPhone, the WiFi of ESP 8266 will stop completely for about 20 seconds. Both radio interference disappear during this time. The risk of crashing when attaching to drone etc. will be reduced.

f:id:TAKEsan:20180221111917p:plain f:id:TAKEsan:20180221112052p:plain

設定で Shake をONにします。シェイクすると復旧するまでの秒読みが始まります。

Set Shake to ON by setting. Shaking will start the countdown until it recovers.

LEPTONの温度計測に関する全般的な注意点は、 Overall note on temperature measurement of LEPTON

  • LEPTONは温度計測が安定するまで多少の時間が必要です
  • 作成したアプリは対象熱源の放射率を考慮していません
  • 現在販売しているLEPTON1及びLEPTON3は温度測定の保証はしていません
  • LEPTON needs some time until the temperature measurement stabilizes
  • The created application does not consider the emissivity of the target heat source
  • Temperature measurement is not guaranteed for LEPTON 1 and LEPTON 3 which are currently on sale

以上のことから場面や環境で測定温度に誤差があることをご理解下さい。

Please understand that there is an error in the measured temperature in the scene or environment from the above.

 * 1: There are few noises depending on the distance and the surrounding conditions, but the frame rate drops.

*1:距離、周囲の条件により、ノイズはほとんどありませんがフレームレートは落ちます。

Maker Faire Tokyo 2017 に出ます!!(その3)  LEPTON3の進行状況

f:id:TAKEsan:20170603223845j:plain

私たちはこれを目指してました。

 2月からWROOM02(ESP8266)を使ってLEPTON1画像のWIFI配信高速化と録画の実用に向けてスタートしました。その4倍画素数の多いLEPTON3で、WROOM02を使ってこれほどの動画スピードが達成できるとは思っていませんでした。LEPTON1とLEPTON3の画像の違いは、ネット上でたくさん画像があるので確認して見てください。LEPTON1から3に変わると、霧が晴れた感じとでもいいましょうか...。画素数が4倍だからWROOM02じゃせいぜい2コマ/秒あたりが限度じゃないかと思ってしまいます。前にも書きましたがメモリを19KB以上確保しなければならないので、現状のソースをコンパイルするとArduino IDEから警告が出ます。----メモリが少なくなっていて、動作が不安定----

f:id:TAKEsan:20170720135116p:plain

 こうなると、普通のWROOM02のセオリーでは、WDT(ウォッチドッグタイマー)リセットの連続で使い物にならなくなってしまいます。しかし現実はこの通り。画像スピードが早く、息つきもリセットもちらつきも皆無です!!。ここでは紹介してませんが、操作方法や3D表示についてもLEPTON1版とほぼ同じです。

    www.youtube.com

 この画像は、右手にLEPTON3を持って左手にiPhone。IPhoneで設定を変えながら、そして自分自身回りながら撮影しています。背景がかなり滑らかにぐるぐる回っています。(手放しで喜んでる感じが伝わってくるでしょうか)

 なぜできたか?消費電力の小さいWROOM02の魅力とwiwaoさんの熱意が、全て。としか言いようがありません。 

  ほんの10日程前までは、こんな感じでした。動作は少し鈍いですが安定性はピカイチ。見通しのいいところならこのまま50mはいけます。が、今回は上の画像の様にスピードが加算されました。

    youtu.be

 同じスピード(若干遅かった時の)の画像です。途中車が走って来ますが、LEPTON3なのでかなり細かいディテールまで確認できています。

    youtu.be

 もっと前まではこんな感じ。WROOM02側でWDTリセットが入り、途中2回ほど止まってます。赤外線カメラの本領を発揮する夜の風景ですが、電線や車も細かく写ってます。このころはダイナミックレンジの調整ができなかったので、天空が極端に低い温度のため、家並みのコントラストが悪くなっています。

    

youtu.be

今年の2月時点では、

 LEPTON3センサーは部品として販売されていませんでした。wiwaoさんからの情報でFLIR ONEを分解すればLEPTON3が入ってるとのこと。ブレークアウトボードが必要だが、LEPTON1のもので代用できるとか....。半信半疑でApple Storeから購入。

                                             f:id:TAKEsan:20170719121215p:plain

 FLIR ONEは、簡単に中身を開けることができました。基盤を外すには携帯電話用の特殊ドライバ(ヘキサドライバーT5H(センター穴付)が必要で、ビスさえ外せば簡単にLEPTON3を取り外せました。と言うことは、簡単に元に戻せます。

f:id:TAKEsan:20170719121154j:plain

 FLAIR ONEは新機種に変わっているので現在取り扱いしていません。金額が不当につり上がっているのでご注意を!!。でもLPTON3は、Digi-Keyで単体購入できます。もうすでにFLAIR ONE(2世代目)お持ちの皆さんは、Digi-Keyからブレイクアウトボードを手に入れて、WROOM02があれば実行可能です。ビデオカメラとの合成はできませんが、FLAIR ONEより精細な温度分布画像が「離れたところから」確認できます。うまくいかなかったら前に戻せばいいだけです。ほとんどリスクを伴いません。

LEPTON3から出力されるデータは

 こんな感じになってます。LEPTON1の場合、画素が80X60なので、80個分のデータが60回に分けて出力されて1画面になります。画面間は、delayを設けて次の画面出力って感じ。なのでデータ取り込みは比較的簡単で、どこでデータを取っても画像がつながります。しかしLEPTON3は次のようになってるんです。

 f:id:TAKEsan:20170719113701p:plain

 80x60のデータを4つに分けて出力していて、そいつをつなげて初めて1画面(160X120)といった具合です。おまけに各セグメントのデータは右左交互に配置し直さなければダメ。見ただけでめんどくさそうですが、SPIデータが垂れ流しなので、さらに上の図で言うところのSegment1を見つけ出さなきゃない。最初に読み込んだデータがSegment1とは限らないのですから!!。この段階でESP8266では、スピードとメモリ容量を考えると、絶対無理だろうと思いました。最初はESP32で開発作業を進めたんです。通信方法は今まで通りOSC。初期のデータの合成表示はMacです。

以下苦難の歴史です。

3月初期段階 1画面ようやくそれらしいのが再現されました。ただし1セグメントのみ!!

 f:id:TAKEsan:20170713212655p:plain f:id:TAKEsan:20170713212650p:plain

 

3/5  ESP32にて3画面取れた様子です。セグメントがバラバラでしかも3つのセグメントしか再現できていません。

         f:id:TAKEsan:20170713212454p:plain

3/7 Segmentの順序が不動ですが、明らかに4セグメント再現できました

 f:id:TAKEsan:20170713212449p:plain f:id:TAKEsan:20170713212442p:plain

3/9 4画面取れた様子。でも色が....。これは各セグメントをその都度探してつなぎ合わせたもので、ものすごーく遅かった。

 f:id:TAKEsan:20170713212537p:plain f:id:TAKEsan:20170713212507p:plain

3/12 配列を工夫して色バランスがなんとかなった。

         f:id:TAKEsan:20170713214538p:plain

4/1 この辺りからiPhoneにソフトを移植。ESP32のリセットがあまりに多かった。しかもノイズがひどい。

   youtu.be

iPadでその当時の高速配信。このころは外部でテストしていなかった。iPadではノイズが入らない?。外に行くと途端にダメ 。WIFIが切れたり、ESP32がWTDリセットで頻繁に止まる。

    youtu.be

4/11 あまりにESP32のリセットが多いのでこれ以上不可能と諦め、半信半疑でESP8266に戻った。

  やはりノイズがひどい。GPSとBluetooth(アップルウォッチ)が原因とは....。

   youtu.be

  この時点で、私の腕からアップルウォッチがなくなりました。

これからがリセットとの戦い!!

4/21 ドローン搭載。でもwiwaoさんの方では頻繁にリセット。

   

youtu.be

4/28 パケットを減らしたら、WDTリセットが急激に減少。でもスピードが納得できない!!。

   youtu.be

ここからが進まない...。パケットを減らしてスピードを上げるにはどーすりゃいいんだ....。毎日落ち込んだり喜んだりトライアンドゴーの連続でした。急激に進んだのは7月に入ってからで、現在(最初の動画)につながります。

今使ってる赤外線カメラ側のボードは、

こんな感じです。

f:id:TAKEsan:20170719234858j:plain

 画像ではかなり大きなLIPO電池を使っていますが、最小のものでも動作は確認しています。さらに今、wiwaoさんがWIFIのさらなる改善をすべくWROOM02基盤を改良中です。

そんなわけで

 ソフトそのものと、汎用ボードは完全にできてるのですが、Faireまでの残り時間を考えると、iPhoneアプリストアでの公開や最新ボードが間に合わない様です。最初の動画を見てホントかよ?と思う方は、是非私たちに会いに来てください!!。周りにWiFiの極端な混雑がなければ、実際のデモで確認できます。

      f:id:TAKEsan:20170720000957p:plain iPhoneアプリ用のアイコンです。

                                では、また。

 

 

 

 

 

 

特殊なiOSアプリが6日で承認された!!for Maker Faire Tokyo 2017

何が特殊か?

 どんなアプリかは、すでに前々回の記事で紹介しましたが、このiOSアプリが今日アプリストアからダウンロードできるようになりました。

 このアプリを実行するには、別途自作ボードが必要。LEPTON1とWROOM02をつないでソースをインストールするだけですが、アプリを審査する側では、動かして確認することができません。また、離れた場所にカメラを置いて動作させる点が特徴なので、この辺りもAppleの厳しい規則に抵触する恐れがあります。最後まで半信半疑でした。それ以前に、なんつったってこっちは1度もアプリ申請などしたことがないんですから...。ボクは規則が大嫌いな還暦過ぎたおじ(おじい)ちゃん。まだまだお兄ちゃんたちには負けられない〜〜〜〜〜。

申請の前準備

 とにかくどうすれば動くのか、そして実際アプリが動かなくとも全ての動作内容が、審査員に理解できるようにしなければならないので、動画を作成。

                       改めて見ると、結構内容があると思うんですが。

 そのほかWROOM02側で使用する部品やソースの説明が必要なわけで、そちらの方はこのブログを追加してます。 テストフライトまでのアプリ修正内容やエラー対策の概要もメモしておきました。
 また応用方法や、目標をアピールするために、Maker Faire出展内容を書いたブログを修正--->一番最初の「メーカーフェア東京2017に出ます」参照

申請はオール日本語!!

 申請を日本国内に絞ると、後からグローバルにするには手間がかかるって記事がありますが、基本Maker Faireに的を絞っているので、日本国内に限定することにしました。そして、名前と住所以外全ての項目を日本語で申請しました。iTunes Connect の登録では、説明内容が全て日本語になってるんで、日本語で受け付けないわけがないですよね。審査はアメリカのアップル本社らしいのですが、日本語を理解できる方が存在するようです。

 結局、一番問題になると思われるApp Reviewに関する審査員へのアピール情報の内容は、以下のようにすごく簡単なものになりました。一切英語の説明文なし!!

・このアプリは小型、軽量、低消費電力の赤外線カメラ画像をWIFIテザリング機能を利用してiPhoneまたはiPhoneで表示します。
・iOSディバイス単独では動かないため、実際のすべての操作内容をビデオ記録しました。
https://youtu.be/r3oXfjMgX1Q
・赤外線カメラ側の使用部品、プログラムソースは次のURLの後半をご確認下さい。
    http://takesan.hatenablog.com/entry/2017/06/22/124803
・Maker Faire Tokyo 2017(2017年8月5〜6日)への出展が決まり、今回の赤外線カメラを超小型トイドローンへ取り付け、iPhoneで画像を再現するプロジェクトで使用を予定しています。出展予定内容の説明は次のURLをご確認下さい。
    http://takesan.hatenablog.com/entry/2017/06/04/201856

驚きの機能を少しでも多くの皆さんに楽しんでいただけるように、また多くの研究・産業開発用途への応用を期待して、無償配布にしたいと思っています。

 その他の内容は、詳しく説明しているブログiPhone アプリ開発 | スマホ・アプリの作り方入門がありますのでそちらを参照して下さい。入力は難解な部分がありますが、エラー処理がなかなか優れているので、なんとかなります。今回のプロモーション用テキストや概要(実際にアプリストアで表示される)については、嘘のない内容でごく当たり前に書いています。

 最後に「審査へ提出」ボタンを押したらローカライズエラー!!。UINewsstandIconがどうのこうのと表示されるのでinfo.plistからNewstand Icon部分を削除して再度バージョンナンバーを変えてUPLOAD。この辺りはエラー内容に応じて修正すれば良いだけです。

さーてどうなるんでしょうね。

審査経過

6月25日 20:00:審査へ提出 すぐに

    Your app (iOS) status is Waiting For Reviewのメールが来る

 6月27日 5:40:審査中のメールが来る。

 6月27日 6:37:リジェクトメールが来る。ガッカリ😞

We found that your app records the user but does not have the proper indicators that the app is recording, as required by section 3.3.8 of the Apple Developer Program License Agreement<https://developer.apple.com/terms/>.

Specifically, your app records video but does not have a clear visible visual indicator that the app is recording. The small red dot at the corner of the screen is not sufficient to be in compliance.

Next Steps

Please revise your app to implement the required means of indicating the recording activity to all parties. Please note that the recording indicator cannot be disabled and your app cannot go blank during recording.

  こんな感じで、すごく遠回しな言い方の内容。共同開発者wiwaoさんに手伝っていただいて、だいたい分かったのは、録画ボタンを押した時に点灯するインジケーターランプが、あまりにも小さすぎるってことらしい。だったらiPhone付属の写真アプリ(ビデオ録画ボタン)に合わせれば良いんじゃねーってことで、

  新しく録音中のビデオを作って

        

            星に願いを...がふるってるでしょ!!

こんなコメントを書いて再申請することにしました。これも日本語

●録画ボタンを変更しました、また、録画中も明確に録画していることが分かるように修正しました。録画中及び再生中の動作は以下の画像を確認してください。
   https://youtu.be/zb3TG6tX-Vo

●録画ボタンを変更しましたので、すべてのプレビューとスクリーンショットを変更しました。

6月27日 19:46再申請(バージョン番号を新しくして再コンパイル&UPLOAD)

6月28日 未明:またまた同じような内容のリジェクトメール!!。内容を見てないというより向こうはWIFIの電波状況を示すインジケーターランプを録音中ランプと勘違いしてる。

6月28日13:12 :今度は慎重に日本語と英語で抗議文を提出。さらに、修正した内容を駄目押しでPDF添付。(今度ばかりは英文を添付

今回提出した最新版アプリ(1.20.2)ですが、録画前と録画中を明確にしたつもりです。
画像中に現れるインジケーターは、赤外線カメラとのWIFI電波状況を示すもので、接続していないと赤く点灯します。
どこが不足しているか、具体的に教えてください。
今回のアプリの説明ファイルを添付します。
It is the latest version application (1.20.2) submitted this time, but I intend to clarify before recording and during recording.
The indicator appearing in the image indicates the WIFI radio condition with the infrared camera, and it will be lit in red if not connected.
Please tell me exactly what is missing.
I will attach a description file of this application

    f:id:TAKEsan:20170630144349p:plain

6月29日15:47 :こんな内容の文書が書き込まれる

We apologize for the delay. Your application is still in review but is requiring additional time. We will provide further status as soon as we are able. Thank you for your continued patience.
Best regards,

これも遠回しだけどなんとなく申請が通りそうな雰囲気

 6月30日6:54:突然審査が通ったメールが来る。 すごく嬉しい!!

そして....

 結局致命的なリジェクトは1回で済みました。最初から録画ボタンがこんな感じだったら、3〜4日で通ることになります。みなさん録画ボタンにはくれぐれもご注意を。あーそうそう。今回のアプリはW&Tで一発検索できます。Maker Faire TOKYO 2017でお会いしましょう。

Maker Faire Tokyo 2017では こんな感じで展示します。

f:id:TAKEsan:20170718183603p:plain

WROOM02側アプリは、こちらの記事に書いてあります。

takesan.hatenablog.com

 

                                では、また。

 

Maker Faire Tokyo 2017 に出ます!!(その2)

2018/2/25 Thermal Cam がバージョンアップされました

ESP8266のソースを入れ替える必要があります。(このページの最後に付けたソースでは動かない可能性があります)詳しくは以下のURLをご覧下さい。

takesan.hatenablog.com

 

iPhone側のソースをビルドして動かせる様になるには、

 かなりつまづくことも多いかと思うので、先週からアプリストア登録作業を行うことにしました。メイカーフェア( Maker Faire Tokyo 2017)に展示するので当然無料配布です。

           f:id:TAKEsan:20170613224819j:plain

 と言っても、iPhone単独では画像が再現できないことと、私はまだ1度も登録作業を行ったことがないので、今のところなんとも言えないのですが.......。同じ様なこと「アプリ単独では、実行が確認できないアプリのアプリストア登録??」を考えている方もいると思うので、申請の過程をメモすることにしました。アプリストア登録完了が、Maker Faire Tokyoに間に合わなかったらすいません。ただその場合は、実機テスト用のインストール説明を書くつもりです。

 まず、本申請の前のテストフライトまでの要点を説明します。OpenFrameWorksを使ったアプリの登録紹介記事がほとんどないので、特に引っかかった点などをまとめてみます。

 今回の基本的な登録の方法は、次のブログを参考にさせていただきました。
痒いところに手が届く素晴らしい記事が満載です。テストフライトもこの記事に沿って実行していくとバッチリ!!

OpenFrameWorks(以降OF)上での問題点

標準UIの問題

 OFでiOSのGUIを使うため、基本的には多摩美の田所先生の記事を参考にさせていただきましたが、iOSがバージョンアップしているので、そのままではすんなり実行できません。以下iOS特有のUI環境構築手段です。

 newfile->iOS->Source->Cocoa touch Class->Next->Class名変更、サブクラスはそのまま、Also creat XLB fileにチェック。3つのファイル(この場合EPSView.h,EPSView.m,EPSView.xlb)は自動で作成されます。そしてxxxx.m の拡張子を .mm に変更。

f:id:TAKEsan:20170613221707p:plain

 一番厄介なのは、iOSのUI環境に関して、OFでも、ビジュアルCを使用しなければない点です。(自動作成されるxxxx.h,xxxx.m2つのファイル)他の言語に慣れている者にとっては何もかも勝手が違うので、この部分を極力少なく記述するのが一番無難な手段だと思われました。今回のアプリは、画像上の位置を取得する必要がありますが、通常のiOSでは、UIのタップイベントに焦点を当てているため、画面の座標取得方法がかなり厄介です。なので、UIを最小限にまとめてディバイスに合わせて縦方向に伸び縮みさせる手段を取っています。

f:id:TAKEsan:20170613205419p:plain

 ボタン等のリンク方法は田所先生の記事

iOSのGUIをopenFrameworksのプロジェクトに追加する | yoppa org

を参考にしてください。ただ、setup()内の初期設定は現状少し変更の必要があります。以下の様にします。EPSViewは固有値です。

    gui = [[EPSView alloc] initWithNibName:@"EPSView" bundle:nil];

    [ofxiOSGetGLParentView() addSubview:gui.view];

標準OSCアドオン応用方法の改善

 過去の記事に書いていますが、iPhoneとWROOM02の通信手段はUDPです。これを使ったOSCという通信プロトコルを使って、画像配信を実現しています。たまたまOFと、WROOM02にライブラリが存在していたので、比較的簡単に双方向通信が実現できました。OSCは、音響機器の通信制御用に開発されたものなので、画像通信にはあまり適していません。今回はプログラムの作成が簡単なOSCの文字列送信を使い、LEPTON1の低解像バイナリデータを余計な変換なしで送っています。通常OSCでバイナリデータを送る場合は一旦文字に変更する必要がありますが、それでは単純にデータ量が4倍近くなるため、WROOM02の処理能力では問題が出て来ます。今回の画像データは、256階調のグレースケールであること(ASCIIコード内で収まる)をうまく利用して、一番問題となるデータ上の、ゼロを1に変更することでなんとかなってます。さらにLEPTONのX方向1行分のデータ164ビットを、String処理の限界に近い5行分送ることで、動画スピードを大幅に改善させました。

位置情報の取得

 これはplistへの追加と、OFの標準関数を使えば簡単にデータを読み取ることができました。実現するまで時間がかかりましたが、最終的にはOFのサンプルソースにヒントがありました。----->CoreLocationExample

plistにLocationを追加して(今回は2つ)

f:id:TAKEsan:20170613211615p:plain

ofApp.h

    ofxiOSCoreLocation * coreLocation; を追加。

ofApp.mm

    coreLocation->getLatitude()

    coreLocation->getLongitude() で緯度経度の値を取り出せます。

動画の保存

 今回は、OF唯一のiOS動画保存addonを使用しています。内部的にはFBOを使って動画保存を実現している様です。ただ、iPhoneのフォトライブラリフォルダに保存しないと使い物にならないので、仕方なくビジュアルCでコードを記述しています。とにかくこれ(ofxiOSVideoWriter)を作った方には感謝しか言葉がありません。

GitHub - julapy/ofxiOSVideoWriter: ofxiOSVideoWriter allows to screen record OF applications on iOS. (still very much a work in progress)

 ただし今回はofVbo(3D画像処理に使用)がうまく表示できないため、main.cppglesVersion をES1に指定する必要がありますが、実行時エラーが出るようです。

    [ error ] ofShader: sorry, it looks like you can't run 'ARB_shader_objects'

    [ error ] ofShader: please check the capabilites of your graphics card:       

    他。

アプリが中断することはないので、無視して良いと思います。また、カメラロールに保存させるために

ofxiOSVideoWriter/src/ofxiOSVideoWriter.mm の中のfinishRecording()関数を以下の様に変更する必要があります。

 

void ofxiOSVideoWriter::finishRecording() {

    if((videoWriter == nil) ||

       [videoWriter isWriting] == NO) {

        return;

    }

    [videoWriter finishRecording];

    killTextureCache();

    //****************************by Takesan ******************************************

    //ローカルフォルダに保存してから、カメラロールにセーブする。

    NSString * docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString * docVideoPath = [docPath stringByAppendingPathComponent:@"/video.mov"];

    UISaveVideoAtPathToSavedPhotosAlbum(docVideoPath,nil,nil,nil);

    //********************************************************************************

}

 

さらにplistに2項目追加する必要がありました。

f:id:TAKEsan:20170622123539p:plain

動画の表示方法

 今までは、画像上で各ピクセルに対応した小さな円を書いて画像を表示していたのですが、あまりにも遅く、非力なWROOM02から送られてくる画像データでも、4倍補間と円の描画に手間取り、iPhone側の処理が間に合いませんでした。今回は、LEPTON1の3D画像を実現させた時に使っている図形描画が非常に早いことに目を付け、高さ方向を0にして2D通常画像を表示させています。円描画に比べると詳細感は出ませんが、スピードを優先させました。ピクセル中に黒を背景に入れると全体が引き締まり、にじみが出にくいのですがが、今回使っているVboでピクセルを小さくするとモアレが出る様です。今回はモアレが発生するギリギリの大きさで、各ディバイスの動画表示を調整しています。ただこれだけでは惜しいので特別にロゴを利用したボタンで詳細感を味わえる様にしています。

          f:id:TAKEsan:20170613214228p:plain

各画素を円にして背景を黒にすると、画像が引き締まり詳細感(にじみが出にくい)が出るが、表示が遅くなる。

テザリング中のiPhoneとWROOM02の電波干渉問題

 今回はテザリングを利用して通信していますが、不思議なことに定期的・時間帯によって画像が乱れました。原因が暫く掴めず、この部分でも10日近く調整を行いましたが、結局はiPhone側のBlueTooth(特にApplewatch使用時)とGPS原因だとわかりました。データ配信量の多いLEPTON3の場合は、これが顕著で決定的に乱れた画像になりますが、今回のLEPTON1ではさほど問題となりません。したがって、より綺麗な画像を求めるなら、両方をiPhone側でOFFにすることをお勧めします。今回は位置情報の同時録画が必要になる場面があると考え、位置情報をONにした場合、位置情報を表示させる様にしています。

アプリ名称の変更

 OFではプロジェクト名がアプリの名称になり、このアプリ名称変更について誰しも悩むところですが、1箇所だけの修正でなんとかなりました。

f:id:TAKEsan:20170613215516p:plain

             Plist のBundle display nameを変更する!!

iOSのソースは

 今回のアプリは、アプリストアからダウンロードできる様になりました。W&T で検索。

               f:id:TAKEsan:20170720011602p:plain

ソースが必要な方は、必要であることを下のコメントに書き込んでください。

テストフライトエラー対策

アイコン登録でのエラー

 各ディバイスのアイコンが全て存在しないとエラーになります。

f:id:TAKEsan:20170613220548p:plain

 OFではアイコン表示に特殊な処理をしているので、修正方法がなかなか見つけられませんでしたが、基本は至って簡単でした。参考にさせていただいた記事は、

iOSな日々: iOS7:アイコンサイズの追加対応について

1種類のアイコン画像を作って各サイズに変換。それぞれ大きさの違う画像をMedia.xcassetsに貼り付けるだけでした。

f:id:TAKEsan:20170613220606p:plain

 さらにplistのアイコン名称は全て消す必要があります、ですから一般的にWEBで紹介されているアイコンの追加方法ではうまくいきませんでした

オリエンテーションの修正部分

 傾けるとUIが追従する機能ですが、これも正しく設定しないとエラーになります。General-->Deployment info-->Devise Orientation部分を下図のように全てONにするか、

f:id:TAKEsan:20170613220555p:plain

 下図の様にすることが必要。今回のアプリはiPhoneの傾きに追従すると、ドローンの操作中めまぐるしく画面が回転する可能性があるため、下図のようにUI追従を外しました。

f:id:TAKEsan:20170613221311p:plain

          Devise OrientationはPortaitのみON、Status Bar StyleはRepuires full screenのみON

ディバイス対応方法

 基本的にOFではdraw()内で座標を指定する数値を変更するだけでOKですが、この時、OF標準関数でディバイス名を確認する手段があります。今回はそれを使っています。

            string devtype= ofxiOSGetDeviceRevision();

 今回のアプリは、iPhone6,6s,7  iPhone plus 6,6s,7  iPhone SE   iPad=5th generation以降(mini含む)に対応しています。

 以上の対応で、テストフライトは一応成功しました。共同開発者wiwaoさんに手伝っていただいて、5機種のインストールと表示確認を行い、バグッフィックス終了。いよいよ明日からアプリストア登録作業開始です!!。

WROOM02ソースについて

SPI読み取り部分の改善と単純化

 今回は標準SPIライブラリを使い、少し中途半端なクロック数にしていますが、この設定が最も安定していました。またバイト単位の読み込み関数では、スピードが間に合わないため、LEPTON1データの1行分を全部読み込む処理を行っています。またCS信号のON OFFスピードが決め手となるため、この方のブログ

ESP8266 ( ESP-WROOM-02 ) SPI 通信の高速化に挑戦 | mgo-tec電子工作

を参考にできるだけCS信号の切り替えスピードを速めています。

Yield(),Delay(),などの使い分け

 WROOM02のArduino IDEを使う上で一番厄介な部分です。WIFIやSPIを使う場合これを適度に散りばめないと、yield()やdelay()時間内でWIFI処理を行っている関係上、頻繁にリセットする原因になります。今回は通常考えられないところにyield()やdelay()が入っていますが、各行に入れたり抜いたりして調整した結果がこの位置になっています。今回はLEPTONの上限10FPSが達成し、リセットしないところが最適位置ということになります。色々なブログに対策方法が載っていますが、繰り返し文以外にもどうやらプログラム内容によって確実に必要な場合があり、決定的な決め手がないことにご注意ください。現状での最終的な調整方法は、コンパイルを繰り返し、リセットを起こさない最適値・最適位置を探すだけです。この部分だけでもLEPTON3版開発も含めて、合計1ヶ月間は潰された唯一のアイマイで厄介な所でした。

ダイナミックレンジ変更について。

 LEPTON1には14bit階調のグレースケールデータを出力するモードと、8bit 256階調のカラーデータを出力するモードがあります。カラースケールモードを利用すれば画像を再現する上で最も簡単なのですが、単純にデータ量が3倍になる点とセンサーが感知した温度を計算することが難しいので、今回は不採用。したがって、今回は14bitグレースケール出力を採用しました。ただし、これを採用すると、画像表示上8bitデータに変換する必要があり、確実に階調が落ちます。また、例えば火などが一部に入った画像を確認する時など、温度差がありすぎて背景が消えてしまいます。これらを避けるため測定温度範囲を調整できる様にして256階調表示の欠点を改善しています。 

WROOM側のソース他

 下に提示したソースをWROOM02にインストールし、iPhone側アプリを立ち上げることで、最良のスピードかつ、iPhone側で指定した温度の計測や、先に書いたダイナミックレンジの調整ができる様になります 。今回私たちが作成するボードに頼らなくてもWROOM02市販基盤で実現が可能です。たった300行足らずののソースで、50m以上離れていても動画が鮮明に再現できて、付加価値情報も取得できる点は、驚くべきところだと思います(WROOM02が...です)。

LEPTON1とWROOM02の接続方法

 以下の配線は、スイッチサイエンス版ESPr Developerを使用した場合です。

   f:id:TAKEsan:20170622112807j:plain

             LEPTON基盤   ESPr Developer

            CS----------> IO15

            MOSI-------> IO13

            MISO-------> IO12

            CLK -------> IO14

            GND-------> GND 

            VIN---------> 3V3

            SDA--------> IO4

            SCL--------> IO5

wiwaoさん設計ボードの場合

 今回の最新試作基盤です(共同開発者wiwaoさん設計)。当然ながらLEPTON基盤にダイレクト接続可能。写真ではLEPTON3を接続しています。

    f:id:TAKEsan:20170622113956j:plain

必要部品は、wiwaoさん設計ボード(キットとしてMaker Faireで販売予定)LEPTON1(シャッター付き)、LEPTONブレイクアウトボード、Lipo電池またはUSB電源、USBシリアルアダプタ、スルーホール用テストワイヤー(マルツパーツ)です。

f:id:TAKEsan:20170624231406j:plain

ピンヘッダを取り付けるとドローンなどに載せるとき邪魔になるので、基盤に直接接続できるスルーホール用テストワイヤーを使います。

f:id:TAKEsan:20170624231425j:plain

配線状況です。Arduinoソースをインストールするときは、この状態でスイッチをONにします。インストール完了後ワイヤーを外せばOK。iPhoneから30m以内(見通しの良いところで50~60m)ならどこにでも持ち運び自由かつ画像表示可能です。

f:id:TAKEsan:20170624231348j:plain

Arduino IDE について

 ESP8266 Arduino IDEのバージョンは2.2.0を設定してください。最新版の場合Delay()やYield()、SPIの再調整が必要のようです。

     f:id:TAKEsan:20170623095436p:plain

 ESP8266の設定は以下の通りです。Flash FrepuencyとCPU Frepuencyのスピードを上げたいところですがうまくいきませんでした。また、Upload Speed も115200推奨です。これ以上に設定すると、バイナリコードの転送がうまく行かない場合があります。

      f:id:TAKEsan:20170623095443p:plain

WROOM02ソース

 SSID、パスワード、必要ならポート番号を変更(localPortはoutPort+1として下さい。変更した場合は、iPhone側でも変更が必要です)、基板に合わせてLEDのGPIO番号を最初の方で設定してから、ビルド転送して下さい。変更部分は以下の通り4箇所です。

//#######################################################################
//******1.OSCライブラリを以下よりダウンロードして所定の場所にコピーしてください*******
//     https://github.com/sandeepmistry/esp8266-OSC
//========================================================================
//*************** 2.自分の環境に合わせて以下の設定を変更してください **************
//========================================================================
#define SSID_X "XXXX-iPhone" //iPhone
#define PASS_X "99999999999" //iPhone
#define IP_X 172,20,10,1 //iPhone "なし,仕切り。テザリングはこのアドレス固定

//#define SSID_X "YYY-iPad" //iPad
//#define PASS_X "88888888" //iPad
//#define IP_X 172,20,10,1 //iPad "なし,仕切り。テザリングはこのアドレス固定

//#define SSID_X "router ssid" //WiFiを使用する場合
//#define PASS_X "router pass" //WiFi
//#define IP_X 192,168,XX,XX //WiFi "なし,仕切り
//========================================================================
//***************** 3.ポート番号を設定してください ****************************
//========================================================================
const unsigned int outPort = 8090; // 送信は標準で8090 iPhone側は8091
const unsigned int localPort = 8091; // 受信は標準で8091 iPhone側は8090
//========================================================================
//***************** 4.LEDのGPIOピンを設定してください ************************
#define LEDpin 16
//========================================================================

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <SPI.h>
#include <OSCBundle.h>
#include <OSCData.h>
#include <OSCMatch.h>
#include <OSCMessage.h>
#include <Wire.h>

//iPhoneテザリングLAN設定
char ssid[] = SSID_X; // 無線ランのSSID名称:文字列。
char pass[] = PASS_X; //同上 password
const IPAddress outIp(IP_X); //macの場合

//**************スピード調整******************
//2017/3/14 安定板 スピードは以下に決まり。5行まとめて送信版
#define CLOCK_TAKE 11000000
#define DELAY_READ1 6 //6 1回目の読み取り
//******************************************
OSCErrorCode error;
//************LEPTON コマンド用***************
#define ADDRESS (0x2A)
#define AGC (0x01)
#define SYS (0x02)
#define VID (0x03)
#define OEM (0x08)
#define GET (0x00)
#define SET (0x01)
#define RUN (0x02)
//**************CS信号高速化用*****************
#define PIN_OUT *(volatile uint32_t *)0x60000300
#define PIN_ENABLE *(volatile uint32_t *)0x6000030C
#define PIN_15 *(volatile uint32_t *)0x60000364
//******************************************
WiFiUDP Udp;
char zz[81*5+1]; //5LINE分一挙に送るため Stringの限界450程度
unsigned int min = 65536;
unsigned int max = 0;
float diff;
char ip_ESP[16];
static uint8_t lepton_image1[82*2*60];
int touchX = 39;
int touchY = 29;
//*************OSCアドレス********************
OSCMessage msg1("/minmax");
OSCMessage msg2("/img_8");
float sl_256=0.0f;
//################################# 初期設定 ########################################
void setup()
{
pinMode(LEDpin, OUTPUT);
Wire.begin();
Serial.begin(115200);
pinMode(2, OUTPUT); //使わないピンはOUTPUT

SPI.begin();
SPI.setClockDivider(0); //念のため
delay(1000);
SPI.setFrequency(CLOCK_TAKE); //SPIクロック設定

Serial.println("Wait!! Now SPI set up.........");
PIN_OUT = (1<<15);
PIN_ENABLE = (1<<15);
delay(500);
PIN_15 = 1; //LOW
delay(1000);
Serial.println("setup complete");
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED) {
digitalWrite(LEDpin, HIGH);
delay(50);
digitalWrite(LEDpin, LOW);
delay(50);
Serial.print(".");
}

digitalWrite(LEDpin, HIGH);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
//ローカルipを文字列に変換moziretunihennkann
sprintf(ip_ESP, "%d.%d.%d.%d", WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], WiFi.localIP()[3]);
Serial.println(ip_ESP);
Serial.println("Starting UDP");
Udp.begin(localPort);
Serial.print("Local port: ");
Serial.println(Udp.localPort());
Serial.println("LEPTON START!!");
}
//################################# SPI データ 読み取りコマンド ########################################
void read_lepton_frame(void)
{
int i;
uint16_t data = 0x0f;
delay(DELAY_READ1); //********************************<-----肝心!! 6固定
while ((data & 0x0f) == 0x0f)
{
PIN_15 = 1; //LOW
SPI.transferBytes(0x0000,lepton_image1,164);
PIN_15 = 0; //High
data = (lepton_image1[0]<<8 | lepton_image1[1]);
}
for (int frame_number = 1; frame_number < 60; frame_number++){
PIN_15 = 1; //LOW
SPI.transferBytes(0x0000,&lepton_image1[frame_number*164],164);
PIN_15 = 0; //High
}
}
//#################################メーカーSDK i2C 操作コマンド########################################
void lepton_command(unsigned int moduleID, unsigned int commandID, unsigned int command)
{
byte error;
Wire.beginTransmission(ADDRESS);

// Command Register is a 16-bit register located at Register Address 0x0004
Wire.write(0x00);
Wire.write(0x04);

if (moduleID == 0x08) //OEM module ID
{
Wire.write(0x48);
}
else
{
Wire.write(moduleID & 0x0f);
}
Wire.write( ((commandID << 2 ) & 0xfc) | (command & 0x3));

error = Wire.endTransmission(); // stop transmitting
if (error != 0)
{
Serial.print("error=");
Serial.println(error);
}
}
//######################LEPTON SDK i2C 操作コマンド#############################
void set_reg(unsigned int reg)
{
byte error;
Wire.beginTransmission(ADDRESS); // transmit to device #4
Wire.write(reg >> 8 & 0xff);
Wire.write(reg & 0xff); // sends one byte

error = Wire.endTransmission(); // stop transmitting
if (error != 0)
{
Serial.print("error=");
Serial.println(error);
}
}
//######################LEPTON SDK i2C 操作コマンド#############################
int read_reg(unsigned int reg)
{
int reading = 0;
set_reg(reg);
Wire.requestFrom(ADDRESS, 2);
reading = Wire.read(); // receive high byte (overwrites previous reading)
reading = reading << 8; // shift high byte to be high 8 bits
reading |= Wire.read(); // receive low byte as lower 8 bits
return reading;
}
//######################LEPTON SDK i2C 操作コマンド#############################
int read_data()
{
int i;
int data;
int payload_length;

while (read_reg(0x2) & 0x01)
{
Serial.println("busy");
}
payload_length = read_reg(0x6);
Wire.requestFrom(ADDRESS, payload_length);
//set_reg(0x08);
for (i = 0; i < (payload_length / 2); i++)
{
data = Wire.read() << 8;
data |= Wire.read();
}
return data;
}
//############################# iPhone Touch XY #############################
void touch(OSCMessage &msg) {
float sli=sl_256;
touchX = msg.getInt(0);
touchY = msg.getInt(1);
sl_256 = msg.getFloat(2);
if (sl_256 > 0.95 || sl_256 < -0.95) sl_256=sli;
}
//########################### メインルーチン ###################################
void loop()
{
int p,tempXY1;
int reading = 0;
String debugString;
int col;
float value_min,value_max,tempXY;
//**********Osc Receive**********
OSCBundle bundle;
int size = Udp.parsePacket();
if (size > 0) {
while (size--) {
bundle.fill(Udp.read());
}
if (!bundle.hasError()) {
bundle.dispatch("/tmpXY",touch);
} else Serial.print("error!!");
}
//********** 温度計算 **********
min = 65536;
max = 0;
read_lepton_frame();
yield();
for (int frame_number = 0; frame_number < 60; frame_number++){
for (int i = 2; i < 82; i++)
{
p=(lepton_image1[frame_number*164+2*i] <<8 | lepton_image1[frame_number*164+2*i+1]);
if(frame_number==touchY && i-2==touchX) tempXY1=p; //iPhoneをタッチしたアドレスの温度データ
if(p < min) min = p;
if(p > max) max = p;
}
}
int rrr=(int)(max - min)*(1.0f-abs(sl_256)); //高温側を256等分 iPhoneスライダーに連動 標準は0。最高で0.9
diff = rrr/ 256.0f;
rrr=(float)(max - min)*sl_256; //開始低温度側温度
lepton_command(SYS, 0x14 >> 2 , GET); //ondo : 0x14 = chip 0x10 = aux
float aux=read_data() ;
ESP.wdtFeed(); //大事!!

if(sl_256>0) min=(float)min+rrr; //最低温度表示も開始温度に連動させる
if(sl_256<0) {max=(float)max+rrr;} //最高温度表示も開始温度に連動させる minはそのまま

float fpatemp_f =- 472.22999f + (aux/ 100.0f) * 1.8f - 459.67f;
value_min = (((0.05872 * (float)min + fpatemp_f)) - 32.0f) / 1.8f;
value_max = (((0.05872 * (float)max + fpatemp_f)) - 32.0f) / 1.8f;
tempXY = (((0.05872 * (float)tempXY1 + fpatemp_f)) - 32.0f) / 1.8f;
//*****************Send osc data*****************
msg1.add(value_min).add(value_max).add(tempXY).add(ip_ESP);
if(Udp.beginPacket(outIp, outPort)==1)
{
msg1.send(Udp);
Udp.endPacket();
msg1.empty();
}
yield();
//***********************************************
for (int frame_number = 0; frame_number < 60; frame_number+=5){
for (int ii = 0; ii< 5 ; ii++)
{
for (int i = 2; i < 82; i++)
{
int ax=(frame_number+ii)*164+2*i;
col = (int)((lepton_image1[ax]<<8 | lepton_image1[ax+1]) - min)/ diff; //(int)を入れないと符号無し演算になる!!1; //=0
if(col <= 0) col = 1; //=0
if(col > 255) col = 255;
zz[ii*81+i-1]=col;
yield(); //これがデータ安定の決め手
}
zz[ii*81]=frame_number+ii;
if(frame_number==0) zz[0]=0x3c; //=0 nara 0x3c tosuru.
}
zz[81*5+1]='\0'; //String の最終処理
//*****************Send osc data************
msg2.add(zz );
if( Udp.beginPacket(outIp, outPort)==1)
{
msg2.send(Udp);
Udp.endPacket();
msg2.empty();
}
//******************************************
yield(); //絶対必要!!
}
}

iPhoneアプリはアプリストアからダウンロードできます!!

W&T で検索。 

              f:id:TAKEsan:20170720011602p:plain

使い方は

           www.youtube.com

Maker Faire Tokyo 2017 では

 こんな感じで展示します。

f:id:TAKEsan:20170718183603p:plain

   

                                                  では、また。 

 

 

メイカーフェア東京2017に出ます!!

あー長かった。Maker Faire Tokyo 2017 の承認通知が来ました。

f:id:TAKEsan:20170603223845j:plain

  このブログをきっかけに知り合ったwiwaoさんと2人で、今年のメイカーフェア東京に参加申請することになった経緯は前回書きました。トイドローンに取り付けたLEPTONサーモカメラ画像をiPhoneで確認。LEPTON1動画の大幅なスピードアップだけではなく、その4倍素数の多いLEPTON3でもWROOM02で画像配信を実現させようというプロジェクトです。WROOM02専用ボードとトイドローンへの実装はwiwaoさん。ソフト全般が私です。Jetson TX2はあくまでもディープラーニング応用例に使うだけで、基本はLEPTON+WROOM02+iPhoneがあればテザリングで画像が再現されます

f:id:TAKEsan:20170604131934p:plain

        【今回使うモノ】

  

       【組み合わせると~~~~~~~。】

       実際にLEPTON1+EROOM02をトイドローンに取り付け、今回作ったiPhone側ソフトで

       実際に録画した画像!! 

f:id:TAKEsan:20170604134903p:plain         【iPhoneではこんなことが.....】

      LEPTON1の画素 80X60を317X237(約4倍)に補間。とてもなめらか!!

 

f:id:TAKEsan:20170603214339p:plain       カラーを白黒に変えると、より立体的にリアルに表示される!!f:id:TAKEsan:20170603214333p:plain           3D表示画面。温度差が立体的に表示される!!

         【これが低解像度画像なんだろうか.....】

 去年の2月.....

 もともと赤外線センサーに惹かれるものがあって、OMRON D6TとかMLX90621を使って自分の好きなものを作っていたのですが、LEPTON1を手にした時、確かに衝撃的なセンサーではありました。画素数が6X6とか16X4というレベルではなく、一挙に80x60。この道のプロにとっては、こんなに荒い画像で、何ができるんだ的なものがあるとは思いますが。なにせ当方「4X4を目一杯の補間でなんとか実用的に使おう!!」から始まってるわけですから、それもPiで制御できるなんてワクワクワクでした。ただ熱も治ってから、TX1という魅力的な機器に遭遇。デープラーニングにうつつを抜かしている時、wiwaoさんから過去記事についての問い合わせがあったことで、再度WROOM02とLEPTON1赤外線センサーに目覚めてしまいました。wiwaoさんの提案はトイドローンにこのセットをつけたら面白いんじゃないか?。消費電力も低いし.....。的な。

 wiwaoさんからの情報や私自身の経験から使ってみてわかったのですが、このセンサータフっ。完全防水。振動にもビクともしない。挙げ句の果てボードごと+−を間違っても煙を上げません(こんなこと絶対しないように!!)。これにPIより明らか非力なWROOM02で、Pi並みの動画スピードを達成するってことに二人ともこだわり抜いて、作り直し始めたのが今年の2月ごろでした。MFT2017の出展締め切りまでに、サンプル基板とトイドローンへの実装成功。動画も満足なスピードに達成したので応募することにしました。

 思えばあの頃は....

 まだまだ、画面が乱れたり、画像が遅かったりしていました。

                    

             去年まではこんなに動画スピードが遅かった!!。画像は

             当初Macで再現していました。 

 ここ数ヶ月、WEB上でトイドローンにつけたLETONサーモセンサーからの画像配信プロジェクト記事をたくさん見ました。LEPTON側が小さくても受信側に大袈裟な機器が必要とか、動画スピードが異常に早く明らかに合成画像とか、ドローンに接続できても画像配信は搭載されたCPU任せで、画像受信ができないとか。

 トイドローンに載せるには、Piじゃ無理なんです。あまりにも電池容量が少なすぎる。WROOM02じゃなきゃ!!。低消費電力と軽量化により結果的にあらゆる用途で、赤外線カメラの使用が可能になることになりました。

 3ヶ月間格闘の日々。

 LEPTON1センサーのデータ垂れ流しの使いにくさ、WROOMの遅さ、WiFiの限界、WROOMを改良してもiPhone側の画像処理がこれに間に合わない(なんつったって4倍画像補間してる上に双方向通信してるんですから)、深刻なドローンとWROOM02の電波干渉問題、SPIのノイズ対策。これらを乗り越えてできたのが冒頭の動画です。おそらくWROOM02+LEPTON1では世界最速、多機能!!       

       実際録画機能を利用して作った画像。一瞬で3Dに切り替わったり、カラーを変えたり、

       ダイナミックレンジを調整したりできます。LEPTON1の動画配信スピードは、10FPS

       ですからLEPTON1の最大スピードが出ています。

 屋外でも50m以上このスピードで安定して画像再現します。未だかつてない(っと思っている)サーモカメラの誕生と相成りました。

iPhone側の画像処理は 

 OpenFrameWorksを使ってるんで、Mac、Windows、ANDROID、linux、全てのメジャーOSでWROOM02からのWiFi接続で画像データの応用が可能です。

  夜間監視カメラだろうが、漆黒の闇の中をドローンで操縦しようが、暗闇の対戦型ゲームだろうが、雪山の中の人命救助だろうが、恒温動物の認識だろうが.......。この世の中のありとあらゆるものに応用が可能なんです。80x60の画素の小ささは、大きな改革を実現させる要素を秘めていました。

  赤外線センサーカメラとディスプレイが一体化しているものなら、中央部のみの温度検出で良いかと思いますが、カメラが可動式で、定点観測もあり得るので、トーゼン画面の任意対象物に対する温度計測がiPhone側から確認できます。

 センサーデータは、256階調表示で画面ごとにその温度範囲が変化するため、例えばタバコの火を画面に入れると、突然背景が真っ暗になります。その逆でも同じ。市販のサーモカメラは、自動調整できるのですが、WROOM02では浮動小数点演算を使うと、極端にスピードが落ちます。さらに双方向通信が成り立たないとこの種の調整はできません。今回これも実現できました。f:id:TAKEsan:20170603235730p:plain

      タバコの火が入ると、周囲と温度差がありすぎるため一瞬で背景のコントラストが無くなる。

f:id:TAKEsan:20170603235735p:plain

右端のスライダーでコントラストを調整すると、背景がはっきりと表示されるようになる。カーソルの移動で、その部分の温度が確認できる。186!!

 画像録画機能も付いてます。3Dでも2DでもiPhoneと同じ品質で録画できて、メールで即配信できるんです。

今回は、

 今話題のJetson TX2で、持ち前のディープラーニング環境を最大限利用した人体検出も参考展示します。これはOFとTX1でTensor RTを実現した経験をもとに作成しました。 ディープラーニングですから、少しの工夫で赤外線画像であっても、標準学習済みデータで人体を認識できます。TX2はGPIOを使えるのはご存知の通りですが、SPIを使うにはカーネルの再コンパイルが必要。リスクを伴います。それに比べればOFを利用したOSC通信で画像再現ができるので、比較的簡単に実現できました。       

         WROOM02からWIFIで送られて来たデータを、TX2で再現。ついでに人体認識

          している様子。会場では何人くらい同時に認識できるでしょうか?

 そして.............LEPTON3。

 次なるとても難しい課題。そう、知る人ぞ知るLEPTON3を使った動画配信実現。160x120 の画像処理です。これが実際にできるんでしょうかWROOM02で???。

f:id:TAKEsan:20170604001835j:plain

                                                   超難関だったLEPTON3 

  PI3の1/10のメモリ。Pi Zeroと比較しても10倍以上スピードの劣るWROOM02で安定した動画配信と呼べる処理が可能?。何よりもシングルタスクだし....。今回は、これにも挑戦しています。ホントはほとんどできてるんですけど現在は最終調整段階なので、進行状況は次回の記事をお楽しみに。

 

iPhoneアプリは

 アプリストアからダウンロードできます!! W&T で検索。

               f:id:TAKEsan:20170720011602p:plainこんなアイコンが目印です。

 

ESP8266(WROOM02)のアプリはここからどーぞ。


 Maker Faire Tokyo 2017では

   こんな感じで展示します。

f:id:TAKEsan:20170718183603p:plain

なんか全体的にハデハデで、表現がイジョウで少し反省してる.....。TAKEsanより。 

                                では、また。

 

 

 

 

 

 

 

 

Jetson TX2 ってどうなんだろ?

TX1の記事をたくさん書いてきたので、

 メーカーが2倍早くなったというTX2がどうなったのか、アメリカからすぐに取り寄せて試してみたかったのですが、日本国内発売を待つまでは、技適に通ってるかどうか判断できないので、ガマンしてました。

 正式に国内で販売開始されていたので、間髪入れず手配。すぐに自宅に届きました。現在は再入荷待ちのようです。

f:id:TAKEsan:20170508122623j:plain

 電源を入れればlinuxが起動されますが、このままでは何も入ってません。Jetpacをフルスペックで再インストールする必要ありです。再インストール方法は、去年の私の記事を参考にすればとりたてて問題ありませんでした。 

 技適は?....。

外箱に明記されてました。

f:id:TAKEsan:20170508122615j:plain

TX2の目玉は

 2スレッドのCPUが追加されて、2種類のCPUが合計6スレッドとして動くという、日本人が食いつきそうなフォルクスワーゲンTSIツインターボみたいなシステム!!。その他では内部SSDやSRAMの拡張などが目玉です。

f:id:TAKEsan:20170508123413p:plain

          システムモニターを確認すると、CPUが6つもある!!

 でも、使って見てOSがまだ不安定気味。外付けSSDにはOSをインストールしないで(途方も無いインストールの時間的リスクが伴うので)単純にOSが安定するまで持っているSSDを外部記憶装置として使うことにしました。内部SSDが拡張されたことで、ある程度のライブラリをインストールしても、特に容量的な問題が起きません。頻繁に読み書きする必要のある開発環境等は外付けSSDで作業すれば、当面内部SSDの基本寿命にはほとんど影響がないと思います。

 ディープラーニングにおいてGPUのメモリはかなり重要な要素で、TX1では実行できない場面が数多くあったのですが、今回の基本メモリ8Gは大きな進歩です。(TX1、TX2とも基本メモリをCPUと共用しているのでこれが倍になったということは、よほど大きな画像やデータを使わない限りTX2で消化できる様になることを意味します)GTX1080でもGPUメモリは8Gなんですから。ただしGPUに関してはメモリ以外ハードにスペック上の進化がないので、基本性能の差は感じません。Pascal世代の最適化されたライブラリがまだ存在しないようです。これはメーカーの動向待ちです。

 今までTX1やUbuntuメインマシンで、様々なディープラーニングフレームワークの上っ面だけ試して見ましたが、それぞれ応用するには、かなりの学習時間が必要だと自分的には結論づけました。

 TX2でアマチュアがデープラーニングを応用するには、TensorRTと開発環境の一つであるOF(Openframeworks)が実現できて、メインマシンで学習環境(DIGITS)が実行可能なら、現時点ではほとんど問題ない様に思えます。OFでTensorRTが動けば、画像描画ソフトを作る上で、スピードの遅いPyCaffeをわざわざ使う場面が思い当たりません。

私が必要なTX2の環境構築は今までの作業経験から以下に絞られます。

  • OpenFrameWorksのインストール
  • TenterRT(jetson-infarens)のインストール
  • ZED ステレオカメラSDKのインストール
  • 念のため標準Caffeのインストール
  • OpenCVは新たにインストールしない。(プレインストールされるOpenCVTegra利用)

 これが実現できて、TX1より実行スピードが少しでも上がれば、現段階では必要十分なのですが、全て実現できました。

 CPUのスピードアップを実感するためには、TX1と同じようにhomeからsudo ./Jetson_clocks.shを実行します。

6個全てのCPUクロックが2.38GHzになりGPUクロックも最大になります。簡単なPythonのCPUテストを行うと。

      Intel Joule  12秒

      TX1     11.5秒(JETSON_CLOCKS実行)   

      TX2     8.3秒  (        〃     )

      iMac    4.7秒  (Intel Core  i7    3.4Mhz )

f:id:TAKEsan:20170508122614p:plain

上記の簡単なPYthonプログラムを使ってスピードテスト。あくまでも簡易的なテストですが、経験上1コアでのCPUスピードの目安がわかります。

となりました。TX1よりクロックスピードの差分くらいは確実に早いようですが、まだまだホストマシンからは差があるようです。ただしOFをインストールしてサンプルを実行するとホストマシンとほぼ遜色なくなります。これはGPUを含めたトータル性能で、iMacクラスと肩を並べるレベルになっていると見て良いかとは思います。ただメーカーの言っているTX1の2倍早くなったとは、どこを指してスピードが2倍なのかとてもでした。でも早くなったのでウレシイ....。メモリー関連なら2倍なのは理解できるんですが。

TensorRTライブラリサンプルは、

 JETPAC 3.0ではTensorRTはV1.0のままなので Jetson-inferenceサンプルをを実行させても、USB WEB Cameraを使う限り、各アプリのフレームレイトの改善はほとんど(1フレームくらいは上がる)ありません。ということはCPUのスピード向上分も改善されてません。メーカーは何を考えてるんでしょうね?売り込みの目玉部分のアピールができてませんでした。

 外付けWebCAMERAのビデオ番号が、

 またまた使いにくいvideo1になってしまいました。拡張ボードに付属するカメラがVideo0です。今までOpenCV等を利用してvideo0で動いていたソースはそのままだと画面が真っ暗になります。したがってプログラムソース上の設定を全て変更する必要があります。Linuxの上級者で、Video0と1をOS上で変更できる方は別ですが、リスクを伴うので、ソース側を変更するのが一番無難。ちなみにOFでは setup() の中に 

   vidGrabber.setDeviceID(1); を追加するだけです。

  (vidGrabbeはofVideoGrabberで変数宣言がしてあるものとする)

 拡張ボード付属のビデオカメラについては、大きな基盤の片隅に付いていて、移動が困難なので、実用性はゼロに近いと思ってるのは私だけでしょうか?あくまでもテスト用です。TX2のフォーラムでもこのカメラに固執する方がいますが、意味のないことだと思います。

 ZEDステレオカメラに関しては、

 TX2に対応できる様になってました。今まで外付けGPUのついたWINDOWSでしか実現しなかったZEDfuが現実的なスピードで動作できます。GPUやクロックアップされたハードを使い切っているZEDのソフト開発者がすばらしいんでしょうね。この辺りにもメーカー側と真面目なサードパーティの温度差を感じます。ただ、TX2版のZEDfuはリアルタイムテクスチャー貼り付けは出来ていない様です。

f:id:TAKEsan:20170508122611p:plain

  ZEDはZEDfu(3Dモデル作成アプリ)が実行可能になった!!。上記写真はそれを実行させているところ。CPUは6コア全てを使用している。

 OpenFrameWorksのインストールは、

 Openframeworksは、前回インストールが成功したTX1版を利用してgruw3の再コンパイルだけで動いちゃいました。ソースをつけます。TX2でビルドしたアプリの安定感とスピードは、さすがにCPUのスピードが上がっただけのことはあり、文句のつけようがありません。

 前回の記事通りにインストールできます。一応TX1で動作確認済みのOFとTX2用にコンパイル済みglfwフォルダをダウンロード可能にしておきました。

of_v0.9.8.zip ------->TX1用のOpenframeworks

glfw.zip         ------->of_v0.9.8/libs の中のglfwを解凍したフォルダで入れ替え

(5/11  glfw.zipの中に余計なファイルが入ってました。glfw.zzzzフォルダは消してから入れ替えてください8/23 glfwは、再コンパイルが必要のようです。次のリンクのTX1と同じ方法でglfwをコンパイルしてください)

詳しいインストール方法は、以下のページの下の方を確認してください。

takesan.hatenablog.com

インストールできない場合は、コメントに書き込んでください。

TensorRTの応用は、

 jetson-infarensはここからダウンロードしてインストールします。

GitHub - dusty-nv/jetson-inference: Guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and Jetson TX1/TX2.

問題なく動きました。説明も機能もかなり拡張された様です。

 jetson-infarensはTensorRT(16ビット浮動小数点に特化したJetsonに関するディープラーニング用のライブラリ)が実行できるNVIDIAが公開のデープラーニングの唯一の例題とライブラリ群です。これをOFで動かすことで手軽にディープラーニングが実現できます。以前TX1用に書いたOF上でTenter RTが動くソースが全て実行できましたので、興味のある方は以前の記事を確認してください。スピードは最大で30%程度上がっていました。これは単純にCPUスピードの差だけだと思われます。依然としてメーカー側で提示しているサンプルアプリと同じ動作ソースを実行すると、私の作ったものの方が表示スピード性能が良い様です。

f:id:TAKEsan:20170508122608p:plain

OFで以前作ったObject Detectを使って人体認識するソースを動かしているところ。TX2では11.2FPS出ている。(TX1では7.8FPSくらい)

 標準Caffeのインストールは

 JETSON-HACKSのスクリプトが一番簡単です。たった3行のコマンドとrun testだけで済んでしまいます。

www.jetsonhacks.com

内部的にTegraOpenCVを使っているので、事前にOpenCVのインストールが必要ありません。その他この記事の中に書いてありますが、

  • sudo nvpmodel -m 1 (Max-Q)
  • sudo nvpmodel -m 2 (Max-P)
  • sudo nvpmodel -m 0 (Max-N)

で、3種類のCPUクロックと消費電力が指定できるようで、 -m 0が最大になるようですが、このコマンドだけではjetson_clock.shとは異なりファンが回らないので、CPUの温度上昇には注意する必要があります。(8/23  sudo nvpmodel -m 0 を実行しないと6CPU全部動きません。何もしないとJetson_clocks.shを実行してもTX1と同じ4CPUのままです。拡張ボードで動かす限りFANは自動で回ります。つまりJetson_clocks.shはCPUとGPUクロック数を上げるだけです。)

 最後に、

 今はJetPac3.2になって安定して動いてます。どんな感じで使うかは自分の能力と資金力に大きく依存するってことで今回はおしまい。

 今(2018/10時点)この頃は理解できませんでしたが、私自身も進歩してTX2が素晴らしい能力を持っていることがわかって来ました。これができるとはこの記事を書いているときは当然思っていない訳で....。
takesan.hatenablog.com

 

 

 

 

 

ESP32 + LEPTONサーモカメラで'3Dサーモグラフィー'を作る!!

なんでこんなことを思いついたんでしょう。

 最近、ZEDステレオカメラのソフトをかじっていて、画像の遠近をポイントクラウドで表現する参考プログラムを見ていたからなんです。

f:id:TAKEsan:20170221134238p:plain

ZEDステレオカメラのサンプルアプリ。右側がポイントクラウド。カメラからの距離が3Dで確認できる。

 温度分布をポイントクラウドで表現すれば、平面的な色で表現するよりぐっと認識しやすくなります。つまり一目で温度差が確認できるんじゃないか。ムフフフ。方針さえ決まれば、ワクワクの時間です。ZEDステレオカメラは、あくまでも詳細な距離測定が目玉ですから、コンピュータが表現しなくとも人間は物体の遠近を認識できるので、3Dにする意味をあまり感じませんが、これがLEPTONサーモカメラで測定した温度となるとどうか。

                                

こうなります。Z軸方向が測定した温度に対応しています。一応キーボード入力で、カラーマップの選択、ワイヤーフレームの有無、ポイント自体の大きさ変更が可能。サーモカメラで取り込んだデータの動きはどうでしょうか?。ポイントクラウドの操作はサクサクです。

f:id:TAKEsan:20170221143007j:plain

今回はESP32をLEPTONサーモカメラ(画像上部赤い袴をはいたPIカメラみたいなやつ)データ送信専用として使い、後ろのiMacでデータを受信。OpenFrameworksで加工して表示させました。

f:id:TAKEsan:20170221135555p:plain f:id:TAKEsan:20170221135610p:plain

       メガネ部分は温度が低くなるので。目の部分がえぐれてます。キモチ悪り〜

f:id:TAKEsan:20170221135608p:plain f:id:TAKEsan:20170221135604p:plain

 数年前Kinectで再現していたポイントクラウドとは別の意味で結構衝撃なのですが。私だけかな。

f:id:TAKEsan:20170221135601p:plain

当然ながら温度の高いところは山が高くなるわけで。うちのワンコを写してみたら目が飛び出てしまいました。それを見た本人(本犬)がキャンキャン騒ぐので掲載中止。

 この画像を見て、ESP32が鍵を握ってるなんて信じられます?。(複雑な処理は全てiMacですけど。)取得した画像の温度差がそのまま高低差で表現されます。

 実行させるには動画のフレームレートと解像度をできるだけ上げることが必須。

 元々は、WROOM02に表示機器をダイレクトに取り付けても、画像表示は実用レベルじゃないんじゃないか?という仮定のもと、LEPTONで読み取ったサーモグラフィー画像をWIFIとOSCを組み合わせて、iMaciPhoneに表示させてしまおうという発想でした。色々な条件が一致して、なんとかサーモグラフィーになりましたが、画像の荒さはしょうがないとして、スピードがいまいち。WROOM02の能力以外にも、私のソフト作成能力にも問題があるような....。

 そこで、今回は巷で噂の WROOM02の2倍は早いんじゃないかというESP32を使って、とりあえず今の私の実力でどんだけ早く画像が再現できるかも追求。

大まかな処理の流れは、

  1. LEPTON赤外線カメラから、SPIの垂れ流し信号をESP32で読み取る。
  2. 80x60の14bitグレースケール画像を256色すなわち8bitグレースケールに変更。ついでにセンサー温度、最高最低温度を摂氏に変換。
  3. 80個のグレースケールデータを1行ずつStringにして60回に分けてOSC送信
  4. ついでに読み取った温度もOSC送信。ここまではESP32で実行。
  5. MAC側OSCでデータを受け取り、グレースケールデータ60x80から317x237 に補間-->カラー化-->VBOで3D変換。
  6. VBO表示は自由に拡大縮小、回転できるが触ってるうちに場所がわからなくなるので、念のため読み取り画像の小さな表示もつけて....。

って感じです。今回はiPhoneでの画像再現ではなく、作成の簡単なiMacで動かしてみます。テストなのでOSC通信は、一方通行ESP32-->iMac だけにしました。

ESP32側

 以前WROOM02を使ったLEPTONの赤外線画像送信を試みました。今回は以前のカクカクスピードを改善する目的でESP32を採用。WROOM02のOSC送信プログラムがそのまま使えれば苦労しないのですが、そんな訳ありませんよね。

LEPTON+ESP32でのOSC通信を実現するには、以下の過程が必要です。

ESP32の入手

www.ebay.com

技適付き。ESP8266環境向上委員会 辻直弘さん情報 送料込み3,000円前後。7日で届きました。

色々情報がありますが、iMac上で以下のコマンドを入力するだけ。

mkdir -p ~/Documents/Arduino/hardware/espressif && \
cd ~/Documents/Arduino/hardware/espressif && \
git clone https://github.com/espressif/arduino-esp32.git esp32 && \
cd esp32/tools/ && \
python get.py

 参考:MacでESP32のLチカ(Arduino IDE版) - Qiita

  • ESP8266 OSC 通信ライブラリダウンロード及び修正

OSCライブラリは以下から、お礼を言いながらダウンロード。ARDUINOのliblalyフォルダに入れる。ESP32の場合、このままではエラーになるので、以下の2点を修正。(やはりすんなり実行できない)

 https://github.com/CNMAT/OSC

  • OSCData.h 94行目以下のようにコメントを入れる。 
 #endif
  //OSCData (int32_t);
  #ifndef ESP8266
OSCData (int);
  oscData.c 
  • OSCData.c 30行付近 6行についてコメントを入れるか、消す。
  /*

  OSCData::OSCData(int32_t i){
  error = OSC_OK;
  type = 'i';
  bytes = 4;
  data.i = i;
  }

  */

 

  • SPI他

 SPIは 以前のWROOM02専用の特殊ライブラリではなく、ESP32 ARDUINO IDEの標準ライブラリを使用。以前とコマンド内容が違うので、やはりLEPTONから出力される信号の同期を取るのが、最大の難関でしたが、いつもの様にトライアンドゴー。コンパイルを100回以上繰り返してやっと繋げることができました。結果は、WIFIで信号を流している割には速度が良好。スピード的に理想に近いRaspberry PI環境でのLEPTON再生動画と、あまり変わらないものになりました。LEPTONの画像データはせいぜい9FPS程度とのこと(トランジスタ技術12月号)前回WROOM02+iPhoneでは2FPSくらいなので、大幅にスピードアップしました。これはソース上で、各所に存在していたdelay待ち時間を最小にしても動いたことが大きな理由です。

 LEPTONサーモカメラは、温度計算やチップ制御を実行するために、さらにi2Cの接続が必要というめんどくさいセンサーなのですが、こちらの方は問題なく接続できました。

  • ピンの接続
             LEPTON           ESP32
CS -------------->D5
MOSI------------->D23
MISO------------->D19
CLK ------------->D18
GND ------------->GND
VIN ------------->3V3
SDA ------------->D21
SCL ------------->D22 
  • 今回のESP32側ソースは以下からダウンロードしてください。

                           id:TAKEsan の LEPTON-WROOM32TEST.ino

 たまにシステムダウンすることがありますが、このままの設定で1時間以上動くので許容範囲としました。頻繁にESP32がダウンする場合は、read_lepton_flame の最初の方に入れているdeleyの数値を調節する必要があります。

Mac 側Openframeworks

 前回までは画面のチラツキがあり、かなり不満でした。原因はESP32から送られる画像データが1行ずつなので、1行送られるたびに画像表示していたから。今回は60行分送られた時点で画像表示するよう改良したので、チラツキが全くなくなりました。

 チラツキさえなくなれば、VBOを使って画像を3D化(ポイントクラウド)できます。ただし、以前は2倍に補間して画像を比較的滑らかに表示してましたが、3D化する場合は画素数が不足します。今回は4倍に補間したデータを使いました。実験なので単純な平均値です。ofxCVを利用してバイキュービック補間すればベターですが、そこまでしなくても結果は見ての通りGoodでした。

今回作ったOpenFrameworksソースは以下からダウンロードしてください。 

 oscReceive-LEPTON.zip

VBOについてはOFの大御所。多摩美術大学「田所先生」の例題を応用させていただきました。

openFrameworks 3Dグラフィクス、OpenGL | yoppa org

当然ながら

 OFをインストールしたTX1でも動くわけで、ZEDステレオカメラと組み合わせたら距離と対象物の温度が同時に...。デープラーニングなんか使わなくとも人間と動物くらい簡単に認識できちゃうかも。 

f:id:TAKEsan:20170221132555p:plain

Jetson TX1で以前作ったZEDアプリと今回の3Dサーモグラフィーアプリを同時に実行しているところ。多分OFで組み合わせた場合マルチスレッド化可能。両者のフォーカスを合わせればどんなことができるんでしょうか?ワクワクしてきました。

                               では また。