レビューメディア「ジグソー」

「コラるんです」- インテル(R) Joule(TM) 570x 開発キットに画像処理させちゃおう

インテル(R) Joule(TM) 570x 開発キットを使い、その性能を活かした開発機を作りたいと思います!

 

・目標

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

「どこでもコラージュを作れる小型端末を作る」

 

コラージュというと、画像を切って貼るだけであまりマシンパワーを使わないと思われるかもしれません。

そのまま貼るだけなら確かに簡単ですが、違和感が残ってしまいます。

 

今回はその違和感を無くした合成を行いたいと考え、少し計算が必要な処理を行うので

マシンパワーが必要と成るのでインテル(R) Joule(TM) 570x 開発キットに相応しいかと思い

この目標を掲げて作っていきたいと思います。

 

・基本性能

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

インテル(R) Joule(TM) 570x 開発キットの性能を簡単に

参考URLはこちら

1. 概要pdf (英語)

2. 技術仕様書pdf (英語)

3. データシートpdf (英語)

4. ピンアサイン (英語)

 

まずパソコンとしてのスペックは

・クアッドコア1.7GHz CPU

・内蔵ストレージ 16GB

・メモリ 4GB

・Intel HD Graphics搭載 HDMI出力可

・WiFi 802.11ac 対応

・Bluetooth 4 対応

・USB 3.0

 

ストレージ量とメモリを除けば、最近のラップトップPCと比べても遜色ないスペックを持っていると言えるかと思います。

CPUとストレージ、メモリはこの570xの仕様であり、下位互換の550xでは1.5GHz、8GB、3GBと、少々低くなっています。

前世代にあたるIntel Edisonと比べても、ストレージが4倍、メモリ2倍、画面出力が可能でUSB3.0になっているので十分すぎる性能でしょう。

 

シングルボードコンピュータ(以下SBC)として、外部I/O辺りのスペックは

・MIPI CSI と DSI

・I2S出力

・I2C出力 × 5

・SPI × 2

・UART × 4

・他GPIO多

 

このようになっていますが、実際にこの開発ボードでは

・MIPI DSI

・I2S出力

・I2C出力 × 2

・SPI × 2

・UART × 3

・GPIO × 7

となっているよう見えます。

 

MIPIはRaspberry Piを始め、徐々に見られるようになってきたモバイル機器のカメラやディスプレイの規格ですが、

カメラのCSIがこの開発ボードでは使えないようです。使えたらフルHD以上のMIPI用カメラが使えたので少々残念ですね。

 

他のI/Oが減っているものは、単に他の機能と共有しているピンがあるか、この開発ボードのスイッチ等に使われているのでしょう。

 

最後に電源ですが、DCジャックに12Vで3Aほどが流せる電源をつなぐか、USB type-Cコネクタに給電できる電源を繋ぐことで動作します。

 

・開封

  ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

文字ばかりだとつまらないので、開封していきましょう

 

 

こちらパッケージです。

表はでかでかとJOULEの文字、裏にはのこデベロッパーキットの外見とスペックが乗っています。

 

中身を全て出してみました。

Intel Edisonの時はEdison本体と開発基板が別々でしたが、今回は既に付いています。

またUSB type-C - USB3.0 Aケーブルも付属しているのは良いですね!

まだまだtype-Cは普及しているとは言えないので、持ってる方はあまりいないと思います

(私も持っていませんでした)

また簡単な説明書(左下)とシール(中央下)、スペーサーとネジ(左上)とヒートシンク一式(中央上)が同梱されていました。

 

簡単な説明書には各国での電波法におけるJouleに搭載されている無線モジュールの使用制限がずらっと書いてあり、日本では5GHz帯は室内のみとのこと

JouleでWiFiを飛ばして無線LANルーターにするなどは室内だけにした方が良さそうです。

 

反射してしまって上手く撮れず申し訳ないですが、本体です。

主なI/Oは全て下側にまとめられていて、左から電源、USB type-C、USB3.0 Aメス、USBシリアル、マイクロHDMIです。

 

裏にはRTM(リアルタイムクロック- 内部の時間を保存するもの)の動作用電池ホルダーと、microSDスロットがありました。

microSDスロットには既に16GBのmicroSDが入っていたので、別途用意する必要はなさそうです。

後述しますが、ファームウェアの書き換えにはUSB type-Cで直接書き換えるか、一度microSDやUSBに書き込み、そこから内部ROMを書き換えるという2通りの方法があります。

 

・初期設定などなど

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

さっそくいじっていきます!

公式のページに「Get Started」ページがあるので、そこを参考に進めていきます

The Intel(R) Joule(TM) Compute Module  (全て英語です)

まず用意する物は

・12V 3A出力の5.5mm コネクタのDCアダプタ

・マイクロUSB Bケーブル(よくスマートホンとかに使われているもの)

・ホストとなるパソコン

・無線LAN環境

 

有ったほうが良い物としては

・USBハブ(外部電源供給タイプが望ましい)

・USBキーボードやマウス

等です。

 

なお、私はホストPCとして、ThinkPad x220 で OSは ubuntu14.04を使用しています。

 

まずはヒートシンクの取り付けです。

左の黒い枠組みがヒートシンクアダプタで、このように取り付けます。

Joule本体の上下と左に爪で引っかかるようになっています。

次にヒートシンクを枠内に乗せ (ここまでではまだ固定されていません)

左の金属パーツでヒートシンクを押さえつけて固定します。

この手順は公式の述べている順番なのですが、わたしが付ける時は最後の金属パーツをつけるのに苦戦して黒い枠組みが外れることが何度もありました。

最後には諦めて、枠組みと金属パーツを先にはめて、下からヒートシンクを通し、最後にJoule本体にはめるという方法でとりつけました。

つぎにスペーサーを取り付けます。

ここで、驚いたことに、スペーサーに用意されているネジが六芒星状のトルクスネジなのです!

我が家のドライバーキットに丁度合うものがあったので良かったのですが、一般家庭にはまず無いと思うので少し厄介ですね。

スペーサーを4つ固定して、これで本体のセットアップは完了です。

次のソフトのセットアップをしていきます!

先に述べたように、USBシリアルを繋ぎ、シリアルコンソールからアクセスします。

私のPCには既に環境が構築されているので追加インストール等はなかったのですが、まだの方はシリアル通信ができるソフト、Windowsユーザーの方は加えてUSBシリアルのドライバインストールが必要になります。

以下、「$」で始まる行は端末に入力するコマンドです

 

USBシリアルをホストPCに繋ぎ

$ screen /dev/ttyUSB0 115200

と入力します。

すると、最初のこのボードの情報が出て、

次に「F2を押すとBIOSスタート」と5秒間でます。

最後にズラズラと流れてこの様に止まったと思ったら起動してました。エンターを押すと確かに端末の入力待ち状態で、どうやら起動時の処理が終わりきる前に入力待ちコンソールが始まっているために、入力待ち状態になったあとに標準出力に文字が流れ出てるようです。

実用上は問題ないのですが、精神衛生上良くないのでファームウェアのアップデートで修正されることを祈っています。

ここで、

$ cat /etc/*-release

と入力するとOSのバージョンが見られるようです。

既に1度、ファームウェアを書きなおしているので、初期インストールのものとはバージョンが違うと思いますが、この様になります。

OS は公式の表記では「Reference Linux* OS for IoT」とありますが、Ostro Linuxという名前のプロジェクトで、IoT用のLinuxOSだそうです。

一応、Intel Edisonで使われていたYocto Linuxと同様な方式で作られているようです。

Windows10 for IoTも使えるようですが、それには書き込むためにWindows10が必要なようで、今回は使用しません。

 

次にWiFiに繋ぎましょう。

無線技術関係にはconnmanctlというコマンドを使い設定します。

$ connmanctl technologies

と入力すると以下の様に出力されます。

 

WiFiとBluetoothがデフォルトではオフになっているようです。

またconnmanctlは、何も引数を与えないと対話モードで動きます。

以下は対話モードで実行

$ connmanctl> enable wifi

$ connmanctl> scan wifi

$ connmanctl> services

$ connmanctl> agent on

$ connmanctl> connect wifi_a0c589045b05_*****************

(各ご家庭のネットワークにより異なります。)

$ connmanctl> exit

 

一番上が我が家のネットワークです。

connectするとパスフレーズを求められるので、あとは入力するだけです。

 

少し待てば

$ connmanctl technologies

で WiFiがConnected = True になるはずです。

$ ping 8.8.8.8

を実行してみると……通らない……

$ ifconfig

でIPアドレスを確認すると、明らかに我が家のWiFiルーターが与えたIPではなく、デフォルトでは固定IPで設定されるようですね。

 

色々ググると、connmanctlでipv4の設定をdhcpにすることで解決しました。

$ connmanctl

connmanctl > config wifi_a0c589045b05_***************** --ipv4 dhcp

connmanctl > disable wifi

connmanctl > enable wifi

connmanctl > exit

 

やっとWiFiに繋げて、pingも通りました。

connmanctlよりも、EdisonのYocto Linuxに用意されていたconfigure_edisonコマンドの方がこの辺りは簡単だった気がしますね。

 

何にせよ、とりあえずネットワークに繋げました!!

 

・その他諸々

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ふと、ライブラリの追加等はどうしたらいいのだろうと思いました。

ぐぐってもそれらしい情報はヒットせず、仕方なく$PATHにある実行ファイル名を全て確認し、何かパッケージマネージャーはないかと探してみました。

(パッケージマネージャーとは、debian系でいうaptitudeやapt-get、CentOSでいうyumなどです)

 

ひと通り見てみて……見つからない

何かライブラリを入れる必要が出た時はソースファイルをダウンロードしてきてビルドしろというスタンスなのでしょうか。

とりあえず、使う予定であるOpenCVは元から入っているようです。

バージョンを確認した所、OpenCV 3.1.0でした。

 

初回はここまでで、次回はもしもの時の為に、ファームウェアの書き直しとHDMIからの画像出力をしてみたいと思います!

 

(11/30)

・microSDHCからファームウェア書き換え

  ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

Jouleのファームウェアを買い直したいと思います。

公式トップページからDownloadsに進み、Setupツールをダウンロードします。

Linux用をダウンロードし展開し、./install_GUI.shを実行すると、以下のようにGUIベースで書き込み用microSDが作れます。

 

ただこのソフトウェアは少々甘い所がある様で、我が家のネットワークが悪い可能性もありますがダウンロードに失敗したり、書き込みが遅々として進まなかったりと厄介なところがあります。

とりあえずostro-xt-image-swupd-intel-corei7-64-2016-08-13_13-03-59-build-170.dsk.xzがダウンロードでき、書き込みができました。

あとはUSBキーボードを繋ぎ、ブート時にF2を押していればブートマネージャーが起動し、Linuxのインストール時と同様にブート順をuSDを優先することで書き込めます。

 

ちなみに、どうやら1度書き込んだブートSDだと「既に書き込んであるのでインストールをスキップします」というメッセジーと共にインストールされません。

わざわざ作りなおさないといけないので、この機能は余計かと思いますが……

 

・HDMI出力

  ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

とりあえず、現在の状況です。

 

$ startxfce4

と入力すると、このようなデスクトップ環境が使えます。

 

モバイルバッテリーとディスプレイはそれぞれこちらを使用しました。

ディスプレイを3mmのアクリルで挟み込む形で固定し、裏に基板が付いております。

これにBluetoothのマウスとキーボードを使うことで、とりあえず持ち運べるようになりました。

 

 

HDMI出力ですが、HDMI to VGA変換を使用してVGAディスプレイを使用した所、X環境を使うと画面がしばらくすると映らなくなりました。

Raspberry Piでも変換アダプタが使えない(不安定な)場合があったので、こういったSBCでは変換せずに使用した方がいいのかもしれませんね。

 

 

(2017/1/8)

・救いの手が差し伸べられた??

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


 明けていますがおめでとうございます。
前回はHDMIディスプレイといい具合にJouleを一体化でき、あとはプログラムを書くだけ〜〜〜となっていました。

その予定でした。


HDMI出力が横向きに使用できない問題にぶち当たり、なかなか思うように行きませんでした。
詳しく述べると、秋月ディスプレイはポートレート使用(縦向き)がデフォルトであり、繋いだだけだと縦型ディスプレイと認識されます。

一般的なOSでは、環境設定から画面の向きを回転することができ、もちろんOstro Linuxにも選択肢はありました。
しかしながら、いざ回転してみると何も映らなくなり、シリアルコンソールには「画面サイズがミスマッチだ!!」とのエラー文……コマンドで「xrandr」という画面出力を弄れるものがあるのですが、それでも解決せず……手詰まりかと思い、プログラムを先に書いていました。

 

 


先日、「そろそろ何かしらアップデートあるやろ」と公式のDownloadsから試しにInstallerをダウンロードしてみると、「Intel_Joule_Setup_Lin_2016.4.008.tar.gz」と新しくなっていました!

 

Download for Intel(R) Joule(TM)


(前のは「Intel_Joule_Setup_Lin_2016.3.004.tar.gz」かと)
ワクワクしながら起動しました。

 

 


ちょっとデザインが変わり、次の画面にいくと

 



今までは非公式であったJouleへのUbuntuインストールですが、いつの間にか公式がサポートしていました。
普段使っているUbuntuではディスプレイの横向き使用も確認済みで環境依存なども無いので非常に喜ばしいので早速入れてみようかと。

 

………………………………


そして再び壁にぶつかりました。

 

  Intel Joule | Developer

 

手順はこちらの一番下の方に有るように
ubuntuのブートメディアを作りBIOSでブート選択しインストールと、通常のPCにインストールする手順と同じです。
しかしながら、Joule初期のBIOSはubuntuをブートできないようで、アップデートする必要があります。
そして公式のドキュメントによると「BIOSの書き換えにはWin8以上が必要!!」と

……我が家にはWin7までしかない!

 


諦めてWinをアップデートしようかと思いましたが、調べるとLinuxからBIOSを書き換えられるスクリプトをGitHubに見つけました。

 

  intel-joule-bios-flash-linux

(どうやら、BIOSの書き込みに必要なDnX USB DriverがWinにしか対応してないと思いきや、

配布された中にLinuxで使えるパッケージも有るやん!!!と気づいた方が作ってくれたようです)

 

もともとLinuxにも対応する予定だったんかわ分かりませんが、お陰で環境を弄らずに済みました。

無事、JouleにUbuntu Desktop 16.04をインストールできました。

 


というわけで、OSSに非常に助けられてやっとやりたいことができそうです

 

 

(2017/2/24)

・ソフトウェア、完成です!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

気づいたら2ヶ月近く空いてしまいましたが、ちゃんと少しずつ進捗は出てましたよ!

 

はい、唐突ですが、ソフトウェアは完成しました。

ここでは簡単に動作を説明します。

ちょろっとgithubの方に上げてあるので、詳細が気になる方はそちらご覧ください。

 

PIE_on_Joule

 

そもそも、ポアソン画像合成とは???という方がほとんどだと思います。

ざっくり説明しますと、

 

 

「切り取った画像を他に貼り付けると違和感が残るが、これは貼り付けた画像と元画像の境界がシームレスじゃない(情報世界において段差があるイメージ)」

            

「じゃあその段差がなくなるように、貼り付ける領域に馴染むように計算しよう!

 元画像を再現するならエッジ(線)の情報が同じなら同じような画像でしょ!!」

 

という感じらしいです。

この理論は2003年に発表されたのですが、英語論文でありまた数学的な語彙を多く含んだため、

ざっくりとイメージだけの説明としました。

論文から引用して、合成画像をいくつか示しておきます。

 

 

Poisson Image Editing(英語論文pdf)

 

検索するといくつか参考になるサイトが出てきますが、こちらのサイトにはデモ用のWebアプリがあるので分かりやすいかと思います。

 

Poisson Image Editingでいい感じの画像合成ができるやつを作る on Web

 

C++とOpenCVを使ったサンプルもありますが、流石にFHD画像を全部走査して計算を行うのは計算回数が多すぎるので、

オリジナル要素として計算に必要な最低限の領域を矩形に切り出して計算しています。

 

全体のプログラムの流れはこのような感じに

 

 

実際にJoule上のubuntuで動かした動画です。

合成結果の画像はこのように

確かに貼り付けただけよりは違和感が少ない合成になっているかと思います。

 

↑貼り付けただけ 

↓ポアソン画像合成

さて、あとはポータブル化するだけなのですが、ここで問題がッ!!

 

以前購入したモバイルバッテリーで、Jouleの駆動ができなくなりました。

というのも、「ubuntuが起動した直後ブラックアウト && ブートが始めから」という状況で、

恐らく出力電流が足りてません。

 

モバイルバッテリーが5V/3Aに対して、Jouleは最大4A消費するようでして、完全にリサーチ不足でした。

USB-typeCだから12Vの急速充電とか対応してた方がいいのかなぁ〜と思ってたのですが、完全に早合点でした

 

Reference LinuxのときはGUIを動かしても動いたので大丈夫だろうと高を括ってたのですが、

どうやらUbuntuになり消費電力が増えたために間に合わなくなったようです。

 

現在18650のリチウムイオンバッテリーで試そうとしています。

 

完成予定は2月末日であり締め切り間近!!

ちょっとハッカソンっぽくて、楽しくなってまいりました。

 

 

 

(2017/2/28)

・完成ということで!!


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

さて、先日電源を見直す必要にぶち当たり、

そもそもJouleの必要な電圧はどれなんだ??と思いデータシートを見返してました。

 

こちらデータシートからキャプチャした画像です。

Jouleに電源を供給する方法はDCジャックから(+VDC_IN)か、USB-typeCから(+VBUS)かです。

VSYSというのはGPIOにもピンがあるのですが、+VDC_INまたは+VBUSから電源を供給しないと、ブートしない設計のようです。

 

回路図からVSYSがどのように生成されるか探ってみました。

 

+VDC_INと+VBUSはFPF3042というICで片方が選択され、+VIN_CHRGとなります。

そして、VIN_CHRGからVSYSが生成されます。

 

Joule本体は1.8Vや3.3V、5.0Vを必要としますが、全てがVSYSからそれぞれICを通して作られていました。

再び、データシートに戻り、入出力電圧/電流の定格一覧を見てみます。

どうやらVSYSは最大4A消費しますが、+VDC_INと+VBUSはあまり消費されず、

入力された電源はほぼVSYSに変換されているようです。

 

結局電源はどれくらいを用意すれば良いのかが書いていないため推定しますが、

IC2つを介してVSYSを作りますが、悪くても変換効率80%程度はあるかと思います。

そのため、電源の消費電力は20W程度見ておけば良いかと思います。

モバイルバッテリーの出力が15Wだったので、確かに足りてませんでした。

 

ここで気づいたのですが、VDC_INが12Vも必要なく、最低4Vと書いてあるではありませんか!

12Vだと「最悪、鉛蓄電池積むかぁ〜〜」と思っていましたが、7.2Vとかで動くならラジコンバッテリーで十分カバーできます。

 

そこで、こんなケーブルを作ってみました。

タミヤコネクタのラジコンバッテリーをDCジャックに変換します。

これで試してみたところ、安定して動きました!!

 

残念ながらディスプレイは5Vが必要な為、別途モバイルバッテリーで動かしています。

しかしながらポータブル動作に成功しました。

 

実際に近所で撮影してみましょう。

あいにくの空模様だったため若干白飛びしてますが、貼り付けただけのものと比較すると、

確かに違和感が少ない合成ができています。

(青空でやればもっと違和感が少ない合成になっていたかと)

 

・まとめ


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ギリギリとなってしまいましたが、無事システムが完成して安堵しています。

 

Intel Jouleを使ってみた感想としては、

・パワフル

・無線機能完備

・USB3.0が使える

・強力な画面出力

・ubuntuが動く!!

という5点がとても大きな魅力だと思います。

しかしながら、

・消費電力が20W程度(推定)

・価格がRaspberry Piの約4倍

と、小型機器に組み込むという用途では難しいSBCかも知れません。

電源に悩まず、強力な処理能力を使い、かつ周辺回路とダイレクトに通信が行えるような用途に最適かと思います。

 

確実にIntel Edisonよりは使いやすくパワフルであるので、今後よりソフトハードが充実し、コミュニティが発展することを楽しみにしています!

 

 

29人がこのレビューをCOOLしました!

コメント (0)

ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。

YouTube の動画を挿入

YouTube の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ニコニコ動画の動画を挿入

ニコニコ動画の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ZIGSOWリンク挿入

検索対象とキーワードを入力してください

    外部リンクを挿入

    リンク先の URL とタイトルを入力してください

    URL を正しく入力してください。

    画像を挿入(最大サイズ6MB)

    画像を選択してください

    ファイルサイズが6MBを超えています

    別の画像を追加

    ZIGSOW にログイン

    ZIGSOW会員登録(無料)はこちらから