読者です 読者をやめる 読者になる 読者になる

Take’s diary

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

Intel Joule はEdisonやPi3 との価格差を超えられるか?

Intel Joule

Intel Jouleを色々試してみて

 先月の段階で、Ubuntu developer potalよりUbuntuインストール方法が紹介されています。本体eMMCに自動的にインストールされるのですが、前回私の書いた記事より格段に簡単で、画面が安定している感じなので、今回紹介します。そしてmraaの実装と少し高度な動作確認。さらにはOpenCLの動作確認まで触れて見たいと思います。

f:id:TAKEsan:20161206144546j:plain

                                                                私の最終構成です。

f:id:TAKEsan:20161206144543j:plain

             OpenCLまで動いちゃいました

本体内部eMMCに、Ubuntu16.04をインストールする

 今月の初め(2016/12)にJouleにUbuntu14.04をインストールして、インストール煩雑さの挙句GPIO群が使えないなんて記事を書きました。その後Intel Edison ユーザー会https://www.facebook.com/groups/625317624253131/の Hirokazu Egashiraさんにヒントをいただいて、いろいろ試したらとても簡単にインストールできたのでご報告。

 まず、Intel Joule | Ubuntu developer portalに、JouleのUbuntuが発表されていました。最初はUbuntu Coreだけだと思っていたのが大間違いで、最後の方に自信なさげにUbuntu desktopインストール方法が書いてあります(Developer setup Install Ubuntu Classic (desktop) on the Intel Joule)。ただ、リンクされたファイル「tuchuck-xenial-desktop-iso-20161006-0.iso」ではインストール用のUSBが作れませんでした。で、諦めかけて以前Ubuntuのインストールで大変参考になった記事Installing Ubuntu on Intel Joule 570x |Intel Communitiesを見ていたら、最後の方にjosephwinstoniiさんがこの件を書いていました(この方は一体誰?)。よく見るとリンク先が違っているようです。本当は、 http://people.canonical.com/~platform/snappy/tuchuck/tuchuck-xenial-desktop-iso-20161006-0.isoだそうです。ダウンロードに、ものすごく時間がかかるのですが、これを使うと簡単にUbuntuインストール用のUSBメモリーが作れます(現在はリンクが治っている可能性がありますが)。あとはUbuntu developer portalの手順に従ってインストールするだけ。注意点はその記事にも書いてありますが、JouleのBIOSBIOS V#131に更新する必要があることです。

 Intelサイトに

software.intel.com

書いてあるんですが、JouleのBIOSをインストールできるのはWindows環境だけです。書き換えにはJouleと付属USB Cをつなぎます(電源は必要なし)が、接続したディバイスは時間が経つと自動的にキレてしまうようなので、最後のスクリプトを実行する前に、Windowsディバイスマネージャーで、接続されていることを確認してから、コマンドプロンプトスクリプトを実行することで上手くいきました。認識していない場合は、USBを刺し直します。これが失敗すると、今回の方法でUbuntuが上手くインストールできないので。確実にクリアすることが必要となります。

 次に自分の母艦環境(WindowsMacLinux)でUbuntuインストール用のUSBメモリを作ってください。あとは、JouleのUSB3.0へキーボード、ディスプレイ、UbuntuインストールUSBメモリを取り付けてBOOTマネージャーからUSBを指定するだけ。

f:id:TAKEsan:20161206151121j:plain

          Jouleを起動させてF2キーを押すと、こんな画面になります。

f:id:TAKEsan:20161206151122j:plain

         Boot Manegierを選択して、EFI USB Deviceを選択します。

 あっという間に本体eMMCにUbuntu16.04がインストールできちゃいます。(あっとといっても20分程度は必要)Reboot後、派手な初期画面が現れた後(2分程度)、途中で言語やキーボード、Wifiの設定を聞かれるので、基本的な環境を入力します。簡単簡単。「前回のは何だったんだろう」みたいな感じでした。ちなみにカーネルは 「4.4.0-1000-joule」で、Joule専用のようです。

 思い切ってOstroとはさよならすることにしました。WindowsLinuxの母艦とクロスコンパイルするならOstoroでも良いとは思いますが、Edison等とは違い、以下の様にSSDUbuntuをインストールすると、ビルドが相当早いので、母艦の必要性を感じなくなります。内部eMMCにインストールしたUbuntuが母艦の代わりとでも言いましょうか。蛇足ですが、容量の少ないJoule内蔵eMMCにインストールしたUbuntuには、apt updateとapt upgradeを実行した後、最小限のアプリのインストールに留めた方がよろしいかと思います。

Usb3.0に接続したSSDUSBメモリUbuntuをインストールする

 このままでも良いのですが、eMMCはもったいない(IntelはeMMCのを信用していない節があちこちに見受けられる)ことと、絶対容量が不足なので、どうしても外部から起動したくなりますが、USB外部記憶装置にインストールが可能です。

 まず本体eMMCで起動したjouleに外部SDやSSDを接続。さらにインストールUSBを接続します。

f:id:TAKEsan:20161206145100j:plain

今回接続しているSSDSanDisk(128Gで12,000円くらい)、キーボード・マウス兼用の無線アダプタ、インストールSDカードはSONY製を使いました。左上は、OpenCLテスト用に作ったSDカード。BuffaloのSDカードリードライターを使ってます。USBハブは当然3.0用ですよ。お間違えなく。

 次にUbuntuの世界で有名なGpartedをインストール。このソフトでインストールするディスク名称を調べ、一応全領域をext4でフォーマットします。

f:id:TAKEsan:20161206135923j:plain

GpatedでSSD内容を表示させています。すでにUbuntuをインストールしてあるので複数のパーテーションに分かれていますが、最初は全領域ext4でフォーマットします。右上にデイスク名称「sda」が表示されています。

インストールCDの install/predeed.cfg の中身を修正。2箇所(50,90行目付近)修正箇所があります。

f:id:TAKEsan:20161206142708j:plain

  50行目付近の赤線部分を変更。念のため以前の行はコメントをつけています。(元々はmmcblk0)

f:id:TAKEsan:20161206142707j:plain

               90行目付近も同じように修正します。

 この部分をmmcblk0からsda またはその他(環境によってディスク名が変わるのでgpartedで確認したディスク名)に変更して保存。

 修正が完了したらインストールUSBメモリ、外部記憶装置は外さないで、reboot後、F2でブートマネージャーを立ち上げ、Boot Option Menuを選択。今度は下の写真の様にEFI USB DIiviceが2つ出てきます。大雑把な方法ですが、空の方は選択してもブートマネージャに戻ってきますので、もし戻ってきた場合はEFI USB DIivice 1の方を選択すれば、本体eMMCと同じ様に、自動でpredeed.cfgに指定した空のディスクにインストールされます。なんか挙動がおかしかったら、(途中でインストール作業が止まってしまったら)再度リセットスイッチを押して本体eMMCでUbuntuを起動した後、predeed.cfgの中のディスク名称を再度確認してください。インストールできない原因は多分これだけです。正常であれば簡単にインストールできちゃいます。

f:id:TAKEsan:20161206135921j:plain

            Boot Option で EFI eMMC Deviceを選択するだけ。

 現在私はコンパクトSSDを使ってますが、安定して動いてます。早いこと早いこと。もう立派なUbuntuマシンです。Ubuntuディスクトップマシンを持ってるのですが、全く必要無くなってます。

 標準で使うUbuntuを決めたら最初にMraaインストールと動作確認

 JouleでPythonc++からGPIOを制御するには、mraaが最適です。何はともあれ、最初にmraaをインストールします。これが使えなければわざわざJoulを選択する意味がありません。色々な方法で試して見ましたが、最新のソースをダウンロードしてビルドしたものが一番安定している様です。

 ソースはhttps://github.com/intel-iot-devkit/mraaからダウンロード。解凍したフォルダに入ったら、以下を実行。

sudo apt-get install git build-essential swig3.0 python-dev nodejs-dev cmake libjson-c-dev

mkdir build

cd build

cmake ..

make

sudo make install

sudo ldconfig

sudo ldconfig -p | grep mraa

一応nano .bashrc で 最後に

export PYTHONPATH=$PYTHONPATH:$(dirname $(find /usr/local -name mraa.py))

を追加

 インストールしたら、ダウンロードしたファイルにPython のサンプル(mraa-master/examples/python)が入っているので、blink-io8.py---->内部の x=mraa.Gpio(8)をx=mraa.Gpio(101)に変更。sudo python blink-io8.py でボード上のLEDが点灯するはずです。sudoを付けないとGPIO制御ができないので注意。

f:id:TAKEsan:20161206142706j:plain

                       実行前

f:id:TAKEsan:20161206142705j:plain

どうせならってことでボード上のLEDを全部点滅して見ました(GPIO番号 100〜105)CPUモジュール上のLED 2個も点灯できました。

 ところが、オンボードLEDの点灯確認ができますが、手持ちのLEDをピンコネクタに取り付けたてみたのですが、どんなことをしても点灯できない!!。回路図を見ても全てのピンヘッダは3.3Vに昇圧されているのに.....。試しに予備で取っておいたOstroのSDカードで、Intelご自慢のOstroを起動して試してもダメ。なんてことでしょう。Ostroでも動かないなんて。だから取説のサンプルも基板上のLEDだけなんだと、妙に納得したりして.......。

 あ、そうそう。本体のSDカードフォルダに取り付けたSDカードにもインストールできると思いますが、16G以下に限られることと、転送速度が遅いためUbuntuでは体感スピードはかなり遅く感じます(前回検証)。CPUスピードは変わらないので、外部で使うならアリかもしれません。またOSをインストールしたSDカードを入れっぱなしにしておくとうまく起動できない場合があるので注意。

Joule EXpanson ボードのGPIOがmraaで動かない!!-->動いたぁ。

 肝心のGPIOピンに関して、i2cもPWMもGPIOも全く動く気配がありません。回路図を見るとちゃんと3.3Vレベルシフターが入っているし、宣伝でもピン出力は3.3Vと明記している。でもできない.....。ボード上のLEDは100~105番までちゃんとチカルのに。やっぱりカーネルがおかしいのかななどど考えたのですが、blink-io8.pyを利用してテスターでGPIOを確認すると、一瞬3.3Vになって1.8Vに戻る。OFFだと0V。どうやら内部レベルシフターが正常に働いていない。mraaは真面目に動いてるらしい...。80本のピンを3.3Vに昇圧するために実装している9つのレベルシフターが同時におかしくなるわけがないと思っていた矢先、またしてもHirokazu Egashiraさんからのヒントがありました。何でも非売品を買ったとか。それもJoule Ubuntuにインストールしたmraaで動くとか。ネットで探すと該当商品の説明がありました。

Gravity Expansion Shield for Intel Joule SKU: DFR0465 - Robot Wiki

おまけに回路図も真面目に掲載されています。Gravity Expansion Shield for Intel Joule Schematic

 このボードはExpansion Boardに差し込む形で、GPIOに特化したもの。Expansion Boardにセンサー類を直結すればいいのにと素人は思ってしまうのですが、理由があったんです。よく回路図を見ると全て4.7Kの抵抗が入っている。つまりPull Upが必要カモ。もしやと思いテスター片手に4.7k抵抗を大量に買ってテストして見ると、動きました!!。引っ張る電圧を5Vに変えると最大5Vになりました。これでバンザーイです。

 i2cはちょっと厄介。i2c-0は使えません。ユーザーに解放されているのはi2c-1以降のようです。さらにi2cdetectで12c-0以外はアドレスを確認できませんでしたが、Pull-Upすると動きます。i2c出力用にj12j13 2箇所ずつ同じポートが存在しますが 微妙です。私の場合、内部eMMCにインストールしたUbuntuでは、J13側。SSDではJ12側でしか反応しません。抵抗値が微妙の様ですが、i2cに関して一応4.7k抵抗をつけて動いた方ということで(測定器が欲しくなってきた)我慢。この辺りはIntelが資料を公開すれば、解消すると思われます。

 各GPIO接続方法は以下のとおり。抵抗1本でOKです。外部レベルシフターなど昇圧回路が必要無い点がGoodです。でもなんでこんなことをしなければならないのでしょうか?基盤が小さすぎたのかもしれません。

f:id:TAKEsan:20161206142709p:plain

こんな感じで、GPIO制御する場合はPull UPが必要みたいです。見た目でも信号を引っ張ってる感じが伝わってきます

f:id:TAKEsan:20161206142702j:plain

GPIO51番に接続したLEDを光らせる準備。Pull UP用に5Vを使用。LEDはLillypad用の抵抗付きLEDを使ってます。

 --->その後テストしてみましたが、SPIとUARTは初期設定時点でエラーになり(カーネル4.4.0-100 joule)ます。まだベータ版なのでしょうがないですね。この辺りForum: Intel® Joule™ |Intel Communitiesを見ると最新情報が確認できますが、やはり現時点では接続できないようです。方法が見つかったら追記します。

JouleのEXpanson ボードのピンヘッダは裏からも刺せる!!

 この頃気づいたのですが、これは初めて見る構造です。裏からも刺せる。L型のピンを使えばいい。ジュールはCPUが熱くなるので、迂闊に上部にCPUを跨ぐ様なボードを刺せません。結構使う側を考えたアイディアだと思います。

f:id:TAKEsan:20161206142701j:plain

ピンコネクタがスルーなのが確認できます。こんな感じで裏からもピンが刺せます!!良くできてますね。

JouleでOpenframeworksが動く!!

 私の実験用にはOpenframeworksは最適なC++フレームワークなので、これがインストールできてなんぼの世界なのですが、あっけなくインストールできました。全てのサンプルがソコソコ快適なスピードで動きます。画像処理中、若干息つきが出ますが、CPUスピードを調整すると格段に良くなることがわかりました。(sudo apt-get install indicator-cpufreq

 とりあえず、といっても2日間みっちり時間が必要でしたが、i2cとGPIOをMacで操作するWeb物を作って見ました。今まで作ってきたものの応用です。前回スイッチサイエンスRapiroボードで、Edison環境+Python flaskで作っていたものの中で、c++環境のスピードが要求されるプログラムをopenframeworksに組み替えました。いつもの非接触式赤外線センサー(OMRON D6T)とLEDとWebCameraを使用してます。

 今までは、ブラウザ上のボタン操作後、若干のタイムラグがあり、ボタンの反応が鈍かったのですが、前々からやりたかったofHTTPを応用した、カメラとセンサーの合成画像とLED点滅操作が、リアルタイムで操作できる様になりました。これが可能となれば、1年以上ブログを書いてきた今までの集大成ということになります。手順は、

  • Openframeworks linux64 Ubuntuインストールをマニュアルに従ってインストール
  • 今回必要Addonをaddonsにコピー(-masterは消すこと)     Openframeworksのディレクトリに入って

       cd addons
       git clone https://github.com/bakercp/ofxIO
       git clone https://github.com/bakercp/ofxMediaType
       git clone https://github.com/bakercp/ofxSSLManager
       git clone https://github.com/bakercp/ofxTaskQueue
       git clone https://github.com/bakercp/ofxNetworkUtils
       git clone https://github.com/bakercp/ofxJSON
       git clone https://github.com/bakercp/ofxHTTP
       git clone https://github.com/bakercp/ofxJSON
                         git clone https://github.com/bakercp/ofxJSONRPC

  • mraaとの連携ですが、新しく作成したプロジェクトディレクトリ内のファイルconfig.make中1箇所を修正。

f:id:TAKEsan:20161206150044j:plain

       config.makeの赤線部分を追加。要するにmraaライブラリを追加します。

 ofxIOのみ最近修正されたようなのですが、これが原因でコンパイルエラーが出ます。以前のofxIOに入れ替えればOKでした。ofxIOと今回作ったソースを一応ダウンロード可能にしときます。ofxIOを作った本人(開発者の一人)が気づくまで.....。今回作成したプログラムは、ofxHTTPとofxJONPRCで利用するサーバーを同一ポートで立ち上げるなどという作者が考えもつかなかった様なことを実験的に実行して見ましたが、ちゃんと動きました。ofxIO旧バージョンと今回作ったプログラムは、ここからダウンロードしてください。

http://d.hatena.ne.jp/TAKEsan/files/Joule-OF.zip

 解凍したファイルは「ofxIO」をaddonsへコピー。joule-jpeg-newはapp/myAppsヘコピー後フォルダに入ってmake -j4でビルド。sudo make runで実行できます。赤外線センサー(D6T)はスイッチサイエンスで手に入れることが可能(専用のケーブルが別売ですが必ず必要)。LEDは各自用意して下さい。D6Tセンサーはi2c-1へ接続、LEDは、+側がピン番号51接続としてます。

f:id:TAKEsan:20161206142703j:plain

     LedとOmton D6Tの接続状況。i2cはJ12側のi2c-1に接続。LEDはGPIO51番

どんなのかは下の動画をどうぞ。

         

左側はJoule直結ディスプレイ。右側はMacのサファリでJouleのip及びポート番号を指定してJouleを操作しているところです。D6T赤外線センサーは、認識画素数が4X4に対してJoule側で最大で200倍以上の補間をしてます。Mac側からLEDのオンオフ、温度分布のオンオフ、カラーマップの切り替え、補間精度の調整をリアルタイムで操作できました(動画ではLEDのオンオフがはっきり確認できませんでした。スンマセン)。カメラ画像は800X600でほぼリアルタイムですが、温度分布の方はD6Tの送信スピードが間に合わずギクシャクしているように感じます。こんなことはEdisonやPi zeroでは感じなかったので結構感激でした。

 何してんのかわかんないって?。センサーに温度を検知させててカメラ画像とシンクロさせてるんです。おまけで最高最低温度と検知した場所を表示させてマス。つまり安上がりのサーモグラフィーもどきってワケ。周囲より温度の高い「手先」に反応して動いてるでしょ。もちろん暗闇でも動きます。もともと16分割の温度しか検知できないなんて信じられます?。スイッチサイエンスさんが、わかりやすく解説していますMEMS温度センサを使おう | スイッチサイエンス マガジンが、これの大幅改良版です。

f:id:TAKEsan:20161206144547j:plain

   Mac側のサファリ画面です。左下にある5つのボタンでJouleをリアルタイムで操作できます。

 Openframeworksの長所でもある簡単に作成できるOSC通信で、WROOM02やらPi zeroやらとのデータ通信が高速にできることを確認しているので、Jouleとの連携が面白そうですが、目下の目標はJouleによるLeptonサーモセンサーの稼働です。先月号のトランジスタ技術にLEPTONの解説が掲載されてましたが、すでにPi zero でもWROOM02でも接続方法が確立している上に、画像配信まで実現しちゃってます(i2cでの温度取得も!!)ので私の方が2歩ぐらい進んじゃってるカモ。詳しくは過去記事をご覧下さい。でも、さすが専門誌だけあって、読み飛ばしていた英文マニュアルの要点を解説しているのでとても役に立ってます。

 Lepton との接続に関してEdisonでは苦い経験があるので、同じIntel系のJouleでうまく繋がるかどうかわかりませんが、トライしてみます。これが可能ならばLeptonを2つ繋げてステレオ・サーモセンサーができちゃったりして.....。階調の幅が相当あるので画素が少なくともなんとかなるような気が........。

 何と言ってもビルドのサクサク感が今後の開発意欲を高めてくれます。

JouleでOpenCLが動く!!

 これが実現できれば、内臓されたGPUIntel HD Graphics)を利用してさらにスピードアップさせたアプリが作れます。まだテスト段階ですが、物によりCPU単独の2倍程度早くなることが確認できました。海外の記事ではインストール失敗例ばかり(と言っても多分1人だけ)なので、今回の記事が最初だと思います。

 今回の記事でインストールしたUbuntuカーネルは、4.4.0-1000 jouleとなっていますが、OpenCLをインストールするには、4.7.0以上にする必要がある様です。危ないので(結果的にGPIO,PMWは使えるが、i2cが使えなくなった)、SDカードにインストールしたUbuntuUSB3.0接続)で試すのがおすすめ。

f:id:TAKEsan:20161206145101j:plain

       OpenCL実行用には、SDカードにインストールしたUbuntuを使いました。

 お試し用のSDカードにインストールしたUbuntuを立ち上げたら、まずカーネルをアップグレードします。

How to Install Linux Kernel 4.7.2 on Ubuntu 16.04 LTS - LinuxBabe.Comを参考に以下を実行。

wget kernel.ubuntu.com/~kernel-ppa/mainline/v4.7.2/linux-headers-4.7.2-040702_4.7.2-040702.201608201334_all.deb

 

wget kernel.ubuntu.com/~kernel-ppa/mainline/v4.7.2/linux-headers-4.7.2-040702-generic_4.7.2-040702.201608201334_amd64.deb

 

wget kernel.ubuntu.com/~kernel-ppa/mainline/v4.7.2/linux-image-4.7.2-040702-generic_4.7.2-040702.201608201334_amd64.deb

 

sudo dpkg -i linux-*4.7.2*.deb

 多少時間が必要ですが簡単にインストール可能。再度reboot。まともに動くかどうか心配でしたが、特に問題無く動きました。uname -a でバージョンを確認して カーネル4.7.2に変わっていればOK。

今度はOpenclをダウンロード。ダウンロード先は、

OpenCL™ Drivers and Runtimes for Intel® Architecture | Intel® Software

最初の方に説明しているSDKパッケージのlinux 64bit版をダウンロードして解凍。

 色々試して見ましたが、最終的にダメ元でトライした結果、ダウンロードしたディレクトリに入っているinstall_GUI.sh を実行するだけでOKでした。

 インストーラーはUbuntu14.04が基本で、途中「必要ライブラリが無い」と叱られますが、インストールを中断してメッセージに出たライブラリをapt-getでインストール。それでもエラーが出ますが気にせずに続けると、なんとなくインストールできます。

 GPUを認識していないんじゃ無いかって? この画面を見てください。ちゃんと認識してます!!

f:id:TAKEsan:20161206144543j:plain

   OpenCLを認識してます。Joule HDグラフィックス(GPU)とCPUの諸元が表示されました!!

 確認用に一番手っ取り早いOpenCV2.4.13をインストール。コンパイル中はかなりの頻度でGPUコンパイラが動いているので、一般コマンドも最適化されている可能性があります。インストール方法は以下の通り。

sudo apt-get install qt5-qmake

sudo apt-get install qt5-default

sudo apt-get purge python-pip

wget https://bootstrap.pypa.io/get-pip.py

sudo python get-pip.py

sudo add-apt-repository universe

sudo apt-get update

sudo apt-get install cmake git aptitude screen g++ libboost-all-dev \

libgflags-dev libgoogle-glog-dev protobuf-compiler libprotobuf-dev \

bc libblas-dev libatlas-dev libhdf5-dev libleveldb-dev liblmdb-dev \

libsnappy-dev libatlas-base-dev python-numpy libgflags-dev \

libgoogle-glog-dev python-skimage python-protobuf python-pandas

お好きなOpenCVをダウンロード解凍後(今回は2.4.13)ダウンロードしたフォルダに入って

make build

cd build

cmake  -D WITH_OPENCL=ON -D WITH_QT=ON -D WITH_OPENGL=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_EXAMPLES=ON -D BUILD_opencv_python2=ON -D PYTHON_EXECUTABLE=$(which python) ..

make

sudo make install

 これで簡単にOpenCVもインストールできます。コンパイルオプションにOPENCLを入れています。

 ダウンロードしたOpenCVの中に入っているOpenCL用のexample(oclディレクトリ内に存在)を実行して見ます。コンパイル方法は、

  g++ 該当ソース.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`

コンパイラが働いている証拠にOpenCLの中間ファイル(拡張子.clb)ができてます。

f:id:TAKEsan:20161206181431p:plain

oclサンプルのcppファイルをコンパイルした後、中間ファイル拡張子clbができていた。OpenCLがまともに動いてる!!

 実行できないのもありますが、次の2つのプログラムで実行内容を確認して見ました。

 まずfacedetect。これは遅い!!。GPUの恩恵は感じられません。認識用のデータは opencv-2.4.13/data/haarcascades_GPU/haarcascade_frontalface_alt2.xml を指定します。このデータ以外は実行できない様です。なんとなくGPUメモリが原因みたいな感じでした。もともとOpenCVの顔認識サンプルは、遅いことがわかっていたのですが、これはダメ。(Openframeworksの顔認識の方がはるかに早い!!)

 次にhog。これは人物を認識するプログラム。ちゃんとCPUの2倍早くなってることが判明。効率を追求すればこの倍は行く様に思われます。ちなみにTX1ではGPU ONで今回の5.3倍程度(CPUのみで1.9fpsなのでCPUスピードはJouleが若干上で、GPU ONだとTX1が遥かに上)のスピードでした。i7 6700K CPUオンリー環境でもJoule のGPU ONの2倍くらいのスピードなので、このサンプル自体OpenCVGPUのテストとしては、相当効率が悪い様です。

f:id:TAKEsan:20161206144544j:plain

Mac上で人物を表示させて、Jouleに接続したカメラで人物を認識させているところ。実際の人間ならもっと認識率が上がるカモ。GPUが4.4fps前後であることが確認できます。

         

GPUとCPUの切り替えをしている動画です。画面に映っているテレビ画面の動きでスピードの感覚が掴めると思います

 てな訳で一応ちゃんと動きました。外付けGPUにはとても叶いませんが、少しでも早いソフトを作りたい方は最適かと思いますが、いかんせんカーネル4.7.2では、i2cが使えません。(/dev にi2cポートが現れない)対処方法はインテルの資料待ちといったところでしょうか。また、内部エラーが時たま出るので、システムが不安定になります。付け加えると、GPUプログラム実行時Jouleモジュール自体、かなり発熱しますので冷却体制は万全に。

 やっと本題

Intel Joule はEdisonやPi3 との価格差を超えられるか?ですが、

  •  CPUスピードは、Edisonの10倍、Pi3の3倍くらいの差が確実に体感できる。
  • GPIO制御に特別の外付け回路が必要ない(抵抗が必要だが)。
  • 本体のみでプログラム開発がサクサク。
  • はるかに拡張性のあるUbuntu環境が簡単に実現できる。
  • Wifiが実用レベルで動く(Pi3やTX1と比較して非常に安定している)。
  • GPGPU(OpenCL)を使ったプログラムが組めるので、さらにスピードアップが期待できる。

 Ubuntuがノートパソコン並みにサクサク実行できて、GPIOが使えれば、価格差なんか糞食らえになっちゃいます。使用感の次元が違うので、この種の趣味を持つ者とすれば天国ですよね。でもEdison(WROOM02やPi zeroも!!)についてはIOT制御面での優位性は確実にありますので、これらを適所で組み合わせることで素晴らしいモノが作れると思います。

 Pi3を色々試してみると、どうしてもSDカードのスピードの壁に突き当たって来ます。Pi3ユーザーの一人として、こうしてJouleを色々実験してみると、私のPi3へのプログラム処理能力の期待度は、結局Jouleだったんだと分かって来ました。過去、私を含めた批判者の多いモジュールでしたが、Jouleについて初期の頃感じていた不満を1つ1つクリヤしていくと、計り知れない底力を秘めていることを感じてしまいます。

 Joule唯一の欠点は、外部へ持ち出した時、電源への配慮が必要なことでしょうか。 Ubuntu環境では、USB C へ3A程度の電源供給ではシステムが初期ダウンしてしまいます。基板上に電源用のパターンが存在しているので、この辺も追求したら楽しそう.....。

 結論になってませんが、そもそも比較する対象が違うっ。という曖昧な答えを出して今回は終了。

 少し長くなりましたが、今年はこれで終わりにします。これから少し家の修理とか、正月の準備とか、庭の手入れとかに精を出したいと思ってます。そのあたりで何か発見があればまた書きたいと思います。

 

                        では、また。あー疲れた。